05月06, 2017

Firekylin配置记录

我新买了个主机,准备新建一个博客,用来记录平常遇到的各种BUG、BUG产生的原因以及解决方法。 被安利了Firekylin博客系统好几次,看起来确实也不错,也比较省心,所以就选择它了。下面记录下完整的配置过程。

主机

我买的是VIRMACH的256M的VPS,6刀一年。这个配置的VPS在官网中不显示,必须通过链接才能进入。比较便宜,而且这个配置已经足够支撑我的需求。测试发现水牛城的VPS延迟比较低,其他更低的要么断货要么要花钱。

系统果断选择了Ubuntu 14.04 Server,用起来最省心。为了省空间,选了minimum版,不过这样很多软件就都要自己装。

服务器基本配置

  • /etc/ssh/sshd_config中修改SSH端口,然后service ssh restart
  • apt-get update
  • apt-get install htop python w3m等等
  • export PS1='[\u@\h: $PWD]\$ '加入/etc/profile以修改命令行格式。
  • 同上,TZ='Asia/Shanghai'; export TZ以修改时区为CST。

安装事项

我的node和firekylin以及SSL证书都是安装在/opt目录下的,这是为了方便,以及防止发生权限的问题。

首先,/opt目录的权限必须是755,其次,firekylin文件夹及其子文件的用户名和用户组最好是Nginx的www-data,防止产生权限问题导致的CSS无法加载等问题。

安装node

Node.js官网上下载最新的Linux x64二进制包。二进制安装的好处是,你不需要安装进行编译的库。我的minimum版本的系统连gcc和make都没有。

例如wget --no-check-certificate https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz,执行xz -d node-v6.10.3-linux-x64.tar.xz进行xz解压,再执行tar xvf node-v6.10.3-linux-x64.tar对tar解包。

接着,将node目录下的bin文件夹加入PATH,例如:修改/etc/profile文件,增加一行export PATH=$PATH:/opt/node-v6.10.3-linux-x64/bin。之后执行该脚本或者重启终端。

安装服务器软件

  • 安装Nginx:apt-get install nginx
  • 安装MySQL:apt-get install mysql-server。安装MySQL的过程中可能会报错debconf: unable to initialize frontend: Dialog,只需执行apt-get --reinstall install bsdutils更新一下bsdutils即可。如果还是不行就再apt-get install dialog一下。中间要设置MySQL的root密码,自己记住。

安装Firekylin

可参考官方文档。下面简单介绍一下,以安装到/opt/firekylin/为例。

下载最新版本,解压。进入目录后执行npm install安装node库依赖。但由于我的VPS内存只有256M,不够执行这个操作,会报错Killed ....] - extract:xml2js: sill doParallel extract 286。关键是OpenVZ的VPS也不能通过建立swap文件来设置虚拟内存。因此,我是在我的Ubuntu 14.04里安装好后,直接复制node_modules文件夹过来的,这样也不麻烦。

执行npm install -g pm2安装pm2管理器。cp pm2_default.json pm2.json后修改pm2.json中的cwd为当前路径。

执行pm2 start pm2.json启动firekylin。

执行pm2 startup upstart以实现开机启动。

配置Nginx

cp nginx_default.conf nginx.conf后,修改server_nameroot。上半部分是http的配置,如果你是要用https的,可以把上半部分注释掉,下面部分取消注释,只修改下半部分即可。以本博客为例,我的nginx.conf配置如下

#server {
#    listen 80;
#    server_name debug.fanzheng.org;
#    root /opt/firekylin/www;
#    set $node_port 8360;
#
#    index index.js index.html index.htm;
#
#    location ^~ /.well-known/acme-challenge/ {
#      alias /opt/ssl/challenges/;
#      try_files $uri = 404;
#    }
#
#    location / {
#        proxy_http_version 1.1;
#        proxy_set_header X-Real-IP $remote_addr;
#        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#        proxy_set_header Host $http_host;
#        proxy_set_header X-NginX-Proxy true;
#        proxy_set_header Upgrade $http_upgrade;
#        proxy_set_header Connection "upgrade";
#        proxy_pass http://127.0.0.1:$node_port$request_uri;
#        proxy_redirect off;
#    }
#
#    location = /development.js {
#        deny all;
#    }
#    location = /testing.js {
#        deny all;
#    }
#
#    location = /production.js {
#        deny all;
#    }
#
#
#    location ~ /static/ {
#        etag         on;
#        expires      max;
#    }
#}


#https nginx conf

server{
    listen 443;
    server_name debug.fanzheng.org;
    root /opt/firekylin/www;
    set $node_port 8360;

    ssl on;
    ssl_certificate  /opt/ssl/chained.pem;
    ssl_certificate_key /opt/ssl/domain.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
    ssl_session_cache shared:SSL:50m;
    ssl_dhparam /opt/ssl/dhparams.pem;
    ssl_prefer_server_ciphers on;


    index index.js index.html index.htm;

    location ^~ /.well-known/acme-challenge/ {
      alias /opt/ssl/challenges/;
      try_files $uri = 404;
    }

   location / {
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:$node_port$request_uri;
        proxy_redirect off;
    }

    location = /development.js {
        deny all;
    }

    location = /testing.js {
        deny all;
    }

    location = /production.js {
        deny all;
   }


   location ~ /static/ {
      etag         on;
      expires      max;
   }
}
server {
    listen 80;
    server_name debug.fanzheng.org;
    rewrite ^(.*) https://debug.fanzheng.org$1 permanent;
}

然后将firekylin目录下的nginx.conf文件软链接到真正的nginx目录下:ln -s /opt/firekylin/nginx.conf /etc/nginx/conf.d/debug.fanzheng.org.conf

执行nginx -s reload让nginx配置生效。

配置网站

打开网站,会进入安装页面。正确输入MySQL用户名和密码后,它会自动创建数据库。

访问/admin即可进入后台。评论系统和统计系统都比较容易在后台里修改。这里我用的是网易云跟帖和Google Analytics。

顺便再修改一下Logo和Favicon。

开启https支持

按照我的这篇文章里说的方法,进行一遍就可以了。

不过我那里用的是Apache,而这里是Nginx,因此会有点细微的差别。

主要是/.well-known/acme-challenge/路径要手动改一下,nginx.conf文件里已经设置了alias,按照路径对应一下就可以了。

接下来生成证书。具体来说,执行这些就可以:

mkdir ssl
mkdir ssl/challenges
cd ssl
openssl genrsa 4096 > account.key
openssl genrsa 4096 > domain.key
openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:debug.fanzheng.org")) > domain.csr #这里要修改一下域名
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py
openssl dhparam -out dhparams.pem 4096 #这个时间比较长,要耐心等待一下

然后把下面的代码存成脚本,执行一次就可以更新证书了。

cd /opt/ssl/
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /opt/ssl/challenges/ > ./signed.crt
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
service nginx restart

备份

使用Navicat登录到服务器的MySQL上可以很轻松地进行数据库的备份。

文件也可以通过打包下载的方式进行备份。一旦服务器挂了,也不要紧,nginx配置文件、npm库等都在网站目录下。基本上只要进行一些基本的软件安装就可以了。

本文链接:https://debug.fanzheng.org/post/install-firekylin.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。