使用环境:Ubuntu 18.04 x86_64

目标:在Ubuntu服务器上搭建Jekyll,使用Nginx代理并开启https,保持与GitPage同步更新

准备工作:

新建一个非root用户adduser username

赋予管理员权限vim /etc/sudoers,找到如下位置并添加一行

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
username   ALL=(ALL)       ALL

完成后切换到该用户进行下列操作

su username

安装Jekyll

安装依赖

sudo apt-get install ruby-full build-essential zlib1g-dev

设置环境变量

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

安装Jekyll和Bundler

gem install jekyll bundler

测试

新建一个站点测试是否可用,--host=0.0.0.0用于指定监听IP,默认只监听localhost

jekyll new my-awesome-site
cd my-awesome-site
<!--bundle exec jekyll serve-->
bundle exec jekyll serve --host=0.0.0.0

访问http://IP:4000,访问到初始页面即完成初始设置

GitHub选取想要的博客主题进行修改

我这里选择黄玄的主题进行修改。

首先fork到自己的GitHub仓库,主要修改注意的地方如下:

  1. 将说明的链接换成自己的,Readme文件按自己喜好进行修改。因为我将博客部署到我自己的服务器上,所以不使用将域名直接解析到GitHub Pages的形式,删除掉仓库中的CNAME文件。

  2. 根据文档内容将标题等信息修改为你自己的;下方的微博、知乎等信息为你个人空间的域名后缀;侧栏仿着模版替换即可,同时换掉头像和图标favicon.ico

  3. 注册多说Duoshuo或者Disqus,正确设置评论系统。按需设置百度统计和Google Analytics。

  4. 我fork的版本里在底部增加了建站时间,联系方式里新增了bilibili

  5. _includes/about下面修改自己版本的about me。在index.html中修改自己的副标题,添加自己的主页配图

  6. 修改pwa目录下的json文件和图标为自己的;修改sw.js里引用的图像为你自己想用的

  7. _posts/下存放markdown格式的文章即可在博客中显示,注意文件名必须是形如2020-02-05-君の名は的形式,最后的文章路径会是xxx.io/2020/02/05/君の名は的形势,这里的时间其实是以下面yaml的时间为准,文章名字用英文的话可以链接的书写,也可以是其他字符。

yaml 头文件格式如下

---
layout:     post
title:      "Hello 2015"
subtitle:   "Hello World, Hello Blog"
date:       2015-01-29 12:00:00
author:     "Hux"
header-style: text
header-img: "img/post-bg-2015.jpg"
hidden: false
tags:
    - Tag1
    - Tag2
---

完成后push到GitHub上继续在服务器上进行操作。

服务器上部署博客

首先使用前面创建的用户执行git clone博客到你打算运行的目录,然后进入该目录,执行bundle exec jekyll serve --host=0.0.0.0

按提示执行gem install jekyll-paginate后再次运行上面的命令
访问http://IP:4000查看效果

接着安装好Nginx、申请好SSL证书开始部署https访问

这里我使用lnmp完成,目标域名为blog.39hope.com,创建好vhost后修改配置文件,使所有访问使用https访问并转发到4000短款,配置文件如下

server {
  listen         80;
  server_name    blog.39hope.com;
  rewrite        ^   https://$server_name$request_uri? permanent;
}
server {  
  listen                 443 ssl http2;
  server_name            blog.39hope.com;
  ssl                    on;
  ssl_certificate        /usr/local/nginx/****/fullchain.cer;
  ssl_certificate_key    /usr/local/nginx/****/blog.39hope.com.key;
  location / {
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   Host             $http_host;
      proxy_set_header   X-Frame-Options  DENY;
      proxy_pass         http://127.0.0.1:4000;
  }
}

完成后回到博客所在目录执行screen -S blog

然后执行bundle exec jekyll serve

最后使用域名访问,可以正常访问则配置成功。退出ssh使jekyll保持在后台运行

使用webhook自动更新

然后配置自动更新,再新建一个vhost,用于访问webhook的url,这里以webhook.php举例,首先编辑php.ini,搜索disable_functions删掉shell_exec。编辑php-fpm.conf,将user和group修改为前面准备的用户。完成后执行service php-fpm restart重启php。lnmp的安装目录位为/usr/local/php/etc

编写一个脚本用于更新制定目录,我的脚本如下

<!--webhook.php-->
<?php
/**
* 记得在此处追加webhook验证,可不敢裸奔啊
*
*/

//执行shell命令并把返回信息写进日志
shell_exec("cd /home/wwwroot/blog.39hope.com  && date >> log.txt  &&  /home/wwwroot/blog.39hope.com/update.sh");
?>

#!/bin/bash
cd astralhope.github.io/
git pull >> /home/wwwroot/blog.39hope.com/log.txt
#bundle exec jekyll serve &

完成后每次更新git push到GitHub后服务器上就会自动更新

存在的问题

  1. 系统重启后需要手动执行screen -S blogbundle exec jekyll serve启动服务
  2. 公式、流程图的支持还在探索阶段,支持情况可以查看Markdown语法中哪些已可正常显示验证。

解决办法参考:

  1. ubuntu开机以指定用户身份执行脚本

  2. jekyll-mermaid

作者 Assaultcore

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注