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/