VPS正如虚拟机类似,可以用来搭建代理,服务器等,本文介绍支持markdown的jekyll静态博客站点的搭建。
搭建静态博客
使用nginx来作为静态文件服务器,使用jekyll来处理markdown并生成静态博客目录。
安装ruby
yum install ruby
yum install ruby-devel
jekyll && markdown
- 博客的代码一般托管在github等,方便跟踪每次的更新
 - 本地更新好,可以通过 jekyll serve 在localhost上建立静态博客,方便调试更改
 - vps上通过 jekyll build 编译好博客目录,然后通过nginx配置静态服务器
 
安装git
yum install git
安装jekyll
gem install jekyll --no-rdoc --no-ri
gem install jekyll-paginate
gem install pygments.rb
更改时区
jekyll会使用本地时间,对于文件时间戳是未来还没有到的时间,jekyll会忽略生成,而北京时间比美国时间早。
timedatectl set-timezone Asia/Shanghai
nginx安装
yum install nginx
控制命令:
- 启动:service nginx start
 - 停止:service nginx stop
 - 重启:service nginx restart
 
配置http静态博客
- 因为是root权限,把/etc/nginx/nginx.conf中 user www-data 改成 user root
 - 在 
/etc/nginx/conf.d/下添加blog.conf文件 - 如果有自己的域名,在DNS解析中配置好相应的A标记
 
blog.conf的server配置例子:
server {
    listen 80;
    server_name www.suninf.net;
    root /root/suninf/_site;
    location / {
            index index.html index.htm;
    }
    # pic
    location ~.*\.(jpg|png|jpeg|ico|gif)$  
    {   
        expires 30d;  
    }
    #js css
    location ~.*\.(js|css)?$  
    {   
        expires 24h;  
    } 
    error_page  404  /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}
# 不带www的301跳转
server {
       listen 80;
       server_name suninf.net;
       rewrite ^/(.*) http://www.suninf.net/$1 permanent;
}
配置博客使用https
https可以防止网页内容被广告拦截和篡改,同时https的访问速度也比较快,另外证书和服务器对https的支持都非常简单,个人博客比较适合使用Let’s Encrypt来支持https证书。
安装certbot
letsencrypt目前推荐使用certbot来自动配置和管理证书
yum install certbot
certbot-auto
如果certbot安装或启动失败,可以直接使用certbot-auto工具,安装好后,支持命令参数与certbot一致
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help
参考:https://certbot.eff.org/docs/install.html#certbot-auto
certbot申请letsencrypt证书
先停止nginx,然后申请证书(选择cert临时服务)
certbot certonly --agree-to -d www.suninf.net
生成证书路径:/etc/letsencrypt/live/www.suninf.net
通配域名证书申请
certbot certonly --manual --agree-to -d '*.suninf.net'
自动续期
letsencrypt证书有效期只有90天,可以使用crontab进行自动续期:
crontab -e 里加上如下规则:
0 0 1 * * service nginx stop && certbot renew --force-renewal && service nginx restart
这样每个月就会执行一次续期操作。
https的nginx配置
server {
  listen 443 ssl;
  # Make site accessible from http://localhost/
  server_name www.suninf.net;
  
  ssl_certificate /etc/letsencrypt/live/www.suninf.net/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.suninf.net/privkey.pem;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m; 
  root /root/suninf/suninf.net/_site;
  location / {
          index index.html index.htm;
    }
  # pic
  location ~.*\.(jpg|png|jpeg|ico|gif)$  
  {   
    expires 30d;  
  }
  #js css
  location ~.*\.(js|css)?$  
  {   
    expires 24h;  
      } 
    error_page  404  /404.html;
  # redirect server error pages to the static page /50x.html
  #
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root /usr/share/nginx/html;
  }
}
server {
       listen 80;
       server_name www.suninf.net;
       rewrite ^/(.*) https://www.suninf.net/$1 permanent;
}
server {
       listen 80;
       server_name suninf.net;
       rewrite ^/(.*) https://www.suninf.net/$1 permanent;
}
参考
- https://coolshell.cn/articles/18094.html
 - https://letsencrypt.org/getting-started/
 - https://certbot.eff.org
 - http://www.vpser.net/manage/crontab.html
 - https://vexxhost.com/resources/tutorials/how-to-use-cron-jobs-for-automation-on-ubuntu-14-04/
 - http://jekyllrb.com/
 - http://michaelchelen.net/81fa/install-jekyll-2-ubuntu-14-04/