个人站『 2017-1-10 记录 』

个人站『 2017-1-10 记录 』

10 January 2017

记得,每过几个月,QQMail 都会收到 VPS 的扣费邮件。然后,都是因为特别忙的缘故或者懒得管了(。>﹏<。) 。如果看到余额不到 1000 日元的话,都会直接冲 3000 日元。小强迫症,真的是没有点没办法,我的小 VPS,是最最最便宜的那种,没有比 900 日元更便宜的价格了。毕竟当时,也只是买来玩的,没想到足足开了一年。而且有 7 个月左右,什么都没动。也就跑了 Ghost、Supervisord 和 Nginx。


personal_website_2017_1_10_record_1


personal_website_2017_1_10_record_2


16年1月的时候,Linux Node 最高才 4.2.6。但是如今,Mac Node 都已经 7.4 了,Linux Node 也有 6.9 了。不仅感叹,前端技术以及工具发展如此之快。




Update Ghost


更新博客系统这种事情,想想就觉得非常麻烦。

事实上也是如此的。开始,觉得 Node 我得更新到 6.9,Ghost 得更新到 0.11.3。主要是 Node 6.9 跑不了 Ghost 0.8,Ghost 0.11.3 必须得拿 6.9 的去编译。要么就是,保持之前的 Node 和 Ghost 版本不变,继续跑。这种想法不适合我这种一看到 Android Studio 更 beta 版本就去下载的人,同时想到 Ghost 0.11.3 对 Ghost 0.8 进行了很多性能上、功能上、界面上的优化,就 exciting (。>﹏<。) 。


查阅了 Ghost 的官网的更新说明,有一种办法就是,替换除了 content 文件夹以外的数据。于是,下载了 Linux 6.9 和 Ghost 0.11.3,用 Linux Node 6.9 在 Mac 上编译了一下 Ghost 0.11.3。然后,从 VPS 端拷贝正在运行的 Ghost 0.8 的 content 数据。在运行 Ghost 之前,将 content 文件夹覆盖了。运行后,意外得在 content/data 自动生成了一份 ???.ghost.2017-01-10.json 文件。打开后,发现都是文章的数据( 应该是做了数据库升级的兼容吧。当然,我猜的,233 )。然后输入之前 VPS 端 Ghost 的账号密码,就可以在本地打开一份和 VPS 端一样的博客了。


经过以上的 Mac 端本地测试后,在 VPS 端下载好 Linux 6.9 和 Ghost 0.11.3 后,就按照上面的 Mac 端流程,用 Linux Node 6.9 将 Ghost 0.11.3 编译一遍,切换 content,完成了 Node + Ghost 的更新。




Update Supervisord


之前在 VPS 端用过的 Ghost 版本有 0.7.5、0.8 和现在的 0.11.3。根据个人习惯,每个版本的 Ghost 都会新建一个 Supervisord 任务。


cat /etc/supervisord.conf 查看到子配置文件为 files = /etc/supervisord.d/*.conf

vi /etc/supervisord.d/ghost-0.11.3.conf:

[program:ghost-0.11.3]   
command = /root/data/soft/node-v6.9.4-linux-x64/bin/node /var/www/ghost-0.11.3/index.js  
directory = /var/www/ghost  
user = root  
autostart = true  
autorestart = true  
stdout_logfile = /var/log/supervisor/ghost.log  
stderr_logfile = /var/log/supervisor/ghost_err.log  
environment = NODE_ENV=“production"  

由于我的 Node 环境配置采用的是 ln 的方式配置的。所以,需要配置全路径。


接下来就是 supervisorctl -c /etc/supervisord.conf 进入到 Supervisorctl 的 shell 界面。

Supervisorctl 命令如下:

status # 查看程序状态
stop ??? # 关闭 ??? 程序
start ??? # 启动 ??? 程序
restart ??? # 重启 ??? 程序
reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序

执行 update 后,可以看到新增的 ghost-0.11.3 任务。直接 start ghost-0.11.3。这样就可以在 VPS 端一直跑着 Ghost 了( 当时也考虑了 Docker,后来觉得 Supervisord 比较简单就一直没变了 )。




Add SSL


我决定更新 Nginx!。直接 yum remove nginx,然后 yum install nginx


whereis nginx 可以找到 Nginx 的配置文件在 /etc/nginx

vi /etc/nginx/nginx.confserver添加 如下内容:

server {  
    # For lets-encrypt   
    listen       443 ssl;   

    # For lets-encrypt   
    server_name camnter.com www.camnter.com gf404.com www.gf404.com;  
    charset utf-8;   
    access_log  /var/log/nginx/$host.access.log;   
    root   /var/www/;   
    index  index.html index.htm index.php;   

    # For lets-encrypt   
    ssl_certificate /etc/nginx/lets-encrypt/camnter.chained.crt;
    ssl_certificate_key /etc/nginx/lets-encrypt/camnter.com.key;

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;   
    if ($ssl_protocol = "") {   
      return 301 https://$http_host$request_uri;   
    }   

    # For lets-encrypt   
    location ~ /.well-known {   
      root /var/www/camnter.com;   
      allow all;   
    }   
}


然后就是更新自动化 https 的脚本,vi /etc/nginx/lets-encrypt/letsencrypt.sh 最后一行加上 service nginx reload

接着,service nginx startservice nginx start


最后添加 crontab 定时任务,crontab -e 进入编译定时任务模式:

0 0 11,26 * * /etc/nginx/lets-encrypt/letsencrypt.sh /etc/nginx/lets-encrypt/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1  

在每个月的11号和26号的0点0分都会自动执行脚本,签证书,加上重启 nginx,达到更新 ssl 的效果。




Add sub_filter


由于我主题需要的一些 css 是国外的资源,国内网访问时,很多时候都会很慢或者访问不到。比如 cdn.materialdesignicons.comcdnjs.cloudflare.com。所以,我选择了用 nginx 的 subs_filtersubs_filter_types 功能,其实可以下载到 VPS 端的。但是,我就是想试试 nginx 的这个功能 (。>﹏<。)。


其实经过了测试后,发现我的 Nginx 根本没有 subsfiltertypes 功能。我需要重新手动编译一个 Nginx,简直是,瞬间爆炸,233。


将原来的 nginx.conf 备份后,yum remove nginx

以下是 宇酱 给我的命令:


安装环境和下载源码

yum -y groupinstall 'Development Tools'  
yum -y install wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel pcre-devel lua-devel pam-devel expat-devel

useradd builder  
groupadd builder

rpm -ivh http://nginx.org/packages/mainline/centos/6/SRPMS/nginx-1.11.3-1.el6.ngx.src.rpm  
mkdir -p /root/source  
cd /root/source/  
git clone https://github.com/openresty/headers-more-nginx-module.git  
git clone https://github.com/stogh/ngx_http_auth_pam_module.git nginx-auth-pam  
git clone https://github.com/FRiCKLE/ngx_cache_purge nginx-cache-purge  
git clone https://github.com/arut/nginx-dav-ext-module.git nginx-dav-ext-module  
git clone https://github.com/simpl/ngx_devel_kit.git nginx-development-kit  
git clone https://github.com/openresty/echo-nginx-module.git nginx-echo  
git clone https://github.com/aperezdc/ngx-fancyindex.git ngx-fancyindex  
git clone https://github.com/wandenberg/nginx-push-stream-module.git nginx-http-push  
git clone https://github.com/openresty/lua-nginx-module.git nginx-lua  
git clone https://github.com/masterzen/nginx-upload-progress-module.git nginx-upload-progress  
git clone https://github.com/gnosek/nginx-upstream-fair.git nginx-upstream-fair  
git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git ngx_http_substitutions_filter_module  
git clone https://github.com/arut/nginx-rtmp-module nginx-rtmp-module  


修改 /root/rpmbuild/SPECS/nginx.spec 文件, %{?withhttp2:--with-httpv2_module}") 前一行添加:


        --add-module=/root/source/headers-more-nginx-module \
        --add-module=/root/source/nginx-auth-pam \
        --add-module=/root/source/nginx-cache-purge \
        --add-module=/root/source/nginx-dav-ext-module \
        --add-module=/root/source/nginx-development-kit \
        --add-module=/root/source/nginx-echo \
        --add-module=/root/source/ngx-fancyindex \
        --add-module=/root/source/nginx-http-push \
        --add-module=/root/source/nginx-lua \
        --add-module=/root/source/nginx-upload-progress \
        --add-module=/root/source/nginx-upstream-fair \
        --add-module=/root/source/ngx_http_substitutions_filter_module \
        --add-module=/root/source/nginx-rtmp-module \


编译:rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec

安装:rpm -ivh /root/rpmbuild/RPMS/x8664/nginx-1.11.3-1.el6.ngx.x8664.rpm


接着,找到 nginx.conf 修改 location // 的内容:

location / {  
    proxy_pass  http://localhost:2368;
    proxy_set_header Accept-Encoding "";
    root   html;
    index  index.html index.htm;

    # For CDN
    subs_filter_types text/css text/xml application/javascript;
    subs_filter //ojntl7ueg.qnssl.com/qiniu.materialdesignicons.min.css '//ojntl7ueg.qnssl.com/qiniu.materialdesignicons.min.css';
    subs_filter //cdn.css.net '//cdn.css.net';
}


personal_website_2017_1_10_record_3


以上是这样的,我在所有 css、xml、js 文件内只要出现 //ojntl7ueg.qnssl.com/qiniu.materialdesignicons.min.css 就会替换为 //ojntl7ueg.qnssl.com/qiniu.materialdesignicons.min.css;出现 //cdn.css.net 就会替换为 //cdn.css.net

materialdesignicons.com 目前我没在国内找到镜像,所以用了自己的七牛 CDN,并且需要是 Https 的。cloudflare.com 的话,我从 会长 那里拿到 cdn.css.net 的镜像。


最后重启 nginx,看看效果:


personal_website_2017_1_10_record_4


personal_website_2017_1_10_record_5