Arn0's Blog

Live your life with passion.
With 三倍Ice Cream !!!

  1. 1. 前言
    1. 1.1. 安装hexo-admin
    2. 1.2. 部署
      1. 1.2.1. 创建run.js
      2. 1.2.2. 创建pm2任务
    3. 1.3. 配置WebServer反向代理
      1. 1.3.1. 安装Caddy
      2. 1.3.2. 创建Caddy File
        1. 1.3.2.1. 注意
      3. 1.3.3. 创建Systemd服务
        1. 1.3.3.1. 注意
      4. 1.3.4. 激活Systemd service
    4. 1.4. 禁止从外网直接访问hexo-admin(可选)
    5. 1.5. 配置deploy
      1. 1.5.0.1. 注意
    6. 1.5.1. 安装make
  2. 1.6. 最后启动Caddy服务
  3. 1.7. 大功告成

前言

之前试了一下用netlify托管我的Hexo博客,但用着感觉不太顺心。所以就试着直接用hexo-admin来管理文章,但是我手边又不是经常有电脑。(

于是乎就直接将hexo部署到服务器上了。用了几天感觉海星 )。

安装hexo-admin

cd 到hexo的根目录,然后安装hexo-admin

npm i hexo-admin --save

部署

安装pm2

npm i -g pm2

创建run.js

const { exec } = require('child_process')
exec('hexo server -p 4000 -d & ',(error, stdout, stderr) => {
    if(error){
                console.log('exec error: ${error}')
                return
        }
        console.log('stdout: ${stdout}');
        console.log('stderr: ${stderr}');
})

创建pm2任务

pm2 start ./run.js --name HexoBlog
pm2 save

配置WebServer反向代理

安装Caddy

curl https://getcaddy.com | bash -s personal tls.dns.cloudflare

我在这里强烈建议在这个服务器上套一个Cloudflare CDN。所以安装的Caddy会附带一个cloudflare插件。

嘛,如果不想要这个插件的话,可以将tls.dns.cloudflare删掉。

创建Caddy File

创建并编辑/etc/caddy.conf

examples.com
{
        proxy / localhost:4000
        tls {
            dns cloudflare
        }

        basicauth username password {
                realm "xxx's documents"
                /admin
        }
}

注意

examples.com改为你自己的域名
basicauth那里的usernamepassword分别改为你想要设置的页面访问用户名和密码
如果你不喜欢web server的basicauth的话,可以将上面的basicauth去掉,直接用Hexo-admin自带的Authentification
realm后面的是登陆对话框的提示内容,这里随意修改。

如果你不打算套Cloudflare CDN的话,可以将下面部分去掉。

tls {
    dns cloudflare
}

创建Systemd服务

创建/etc/systemd/system/caddy.service
添加下面的内容

[Unit]
Description=Caddy HTTP/2 web server
After=syslog.target
After=network.target

[Service]
User=root
Group=root
LimitNOFILE=64000
Environment=CLOUDFLARE_EMAIL=你注册Cloudflre的邮箱
Environment=CLOUDFLARE_API_KEY=你的Cloudflare Global API Key
ExecStart=/usr/local/bin/caddy --conf=/etc/caddy.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target

注意

两行Environment需要根据实际情况更改。如果你不打算套Cloudflare CDN的话,可以将这两行去掉.

这里将用户名指定成root主要是为了方便使用80和443端口。如果觉得不安全,可以参考Use a user, not root, to run caddy #106,但是要用到Docker。

激活Systemd service

sudo systemctl enable caddy.service

禁止从外网直接访问hexo-admin(可选)

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 4000 -j ACCEPT

如果用的是GCP,并且套了Cloudflare的CDN,那么还可以直接用GCP的防火墙规则。
参考GCP 防火墙只允许CDN IP访问 保护原站

配置deploy

创建hexo-deploy.sh文件

#!/usr/bin/env sh
make up

在hexo根木录下的_config.yml添加

admin:
    deployCommand: './hexo-deploy.sh'

hexo-admin的deploy功能需要依赖hexo-deployer-git,这里安装一下

npm install hexo-deployer-git --save

接下来创建Makefile,添加下面内容

up:
                hexo d -g
                git add *
                git commit -m "update blog"
                git push origin hexo-source
sync:
                npm i
                sudo npm install -g hexo-cli --ignore-scripts

注意

up部分第4行决定了Git推送Hexo所有文件到哪个分支,具体要根据你的需要做些修改。

安装make

Debian/Ubuntu:

apt install make

CentOS/Redhat:

yum install make

最后启动Caddy服务

systemctl start caddy

大功告成

访问你的域名/admin就会直接弹窗要求登陆

点击deploy就会自动部署Hexo

PS: 在这里我是将Github仓库当作备份快照了,没有用到Github的Pages服务。还有我并没有将Hexo-admin的服务部署在这个博客的Web服务器上,而是另外开了台VPS来作为后端服务器,为的就是减轻这个Web服务器的负担,虽然这个破站根本就没有人访问。同时为了避免在自己电脑上写完文章后无法同步到后端服务器,在部署完Hexo-admin后我还设置了一下WebHooks,用来同步所有文件改动,设置WebHooks的方法可以看我之前的文章


参考链接

Hexo-admin服务器部署

一种在服务器上部署Hexo博客的思路

给你的 Hexo 博客添加 CMS

This article was last updated on days ago, and the information described in the article may have changed.