记录一下本博客部署的全过程,方便后续重装和迁移 (PS: 国内访问Vultr是真的慢🤯)

环境

  • Vultr: Ctenos7.*
  • Local: macOS

    设置开放端口

    80/443/7723
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=443/tcp --permanent
    firewall-cmd --zone=public --add-port=7723/tcp --permanent
    firewall-cmd --reload 
    7723用来响应Webhooks的调用

    设置Node.js

curl --silent --location https://rpm.nodesource.com/setup_12.x | sudo bash -
yum install nodejs -y

设置HEXO

npm install hexo -g

设置Nginx

创建文件 /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1 
yum install nginx -y

删除/etc/nginx/conf.d/下的配置文件并创建nginx.conf

server {
    listen          80;
    server_name     laxse.cn;
    location / {
        root        /root/laxse.cn/public;
        index       index.html;
    }
}

修改nginx配置文件启动用户

vim /etc/nginx/nginx.conf 中第一行 user nginx; 改成 user root;

Webhooks

配置服务器到github的ssh认证

ssh-keygen -t rsa -b 4096 -C "Laxse" 

将~/.ssh/id_rsa.pub 的文本复制到github – settings – SSH and GPG keys 中

将project clone到/opt下

git clone git@github.com:Laxse/🥺.git
cd /opt/🥺/
npm install

使用node.js创建一个监听7723端口的服务

脚本内容

npm install -g github-webhook-handler
vim /opt/deploy/webhook.js
npm init
npm install
var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/webhooks', secret: '苟利国家生死以' })

function run_cmd(cmd, args, callback) {
  var spawn = require('child_process').spawn;
  var child = spawn(cmd, args);
  var resp = "";

  child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
  child.stdout.on('end', function() { callback (resp) });
}

http.createServer(function (req, res) {
  handler(req, res, function (err) {
    res.statusCode = 404
    res.end('no such location')
  })
}).listen(7723)

handler.on('error', function (err) {
  console.error('Error:', err.message)
})

handler.on('push', function (event) {
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
    run_cmd('sh', ['./deploy.sh'], function(text){ console.log(text) });
})

同目录下再创建执行脚本
vim /opt/deploy/deploy.sh

cd /opt/🥺/
hexo clean
git pull origin master
hexo g

通过pm2 管理Node服务

npm install pm2 --global
pm2 start Webhooks.js 

在项目的 设置界面 - weebhooks 配置服务

通过校验即可正常使用🌈


只要有树叶飞舞的地方,火就会燃烧。