之前试了一下用Netlify托管我的Hexo博客,但用着感觉不太顺心。所以就试着直接用HexoAdmin来管理文章。虽说Netlify有可视化的编辑器,手机也可以打开,但是因为那个编辑器并没有自适应页面大小,手机访问直接给你怼个大页面,找个按钮都要比划半天……
所以用手机操作那就非常蛋疼了。虽然PC端体验还行,但是我手边又不是经常有电脑,于是乎就直接将HexoAdmin部署到服务器上了,毕竟HexoAdmin有自适应的页面,手机也可以愉快玩耍。用了几天感觉海星。
cd 到hexo的根目录,然后安装hexo-admin
npm i hexo-admin --save
安装pm2
npm i -g pm2
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 start ./run.js --name HexoBlog
pm2 save
curl https://getcaddy.com | bash -s personal tls.dns.cloudflare
我在这里强烈建议在这个服务器上套一个Cloudflare CDN。所以安装的Caddy会附带一个cloudflare插件。
嘛,如果不想要这个插件的话,可以将tls.dns.cloudflare
删掉。
创建并编辑/etc/caddy.conf
examples.com
{
proxy / localhost:4000
tls {
dns cloudflare
}
basicauth username password {
realm "xxx's documents"
/admin
}
}
examples.com
改为你自己的域名
basicauth
那里的username
和password
分别改为你想要设置的页面访问用户名和密码
如果你不喜欢web server的basicauth的话,可以将上面的basicauth
去掉,直接用Hexo-admin自带的Authentification。
realm
后面的是登陆对话框的提示内容,这里随意修改。
如果你不打算套Cloudflare CDN的话,可以将下面部分去掉。
tls {
dns cloudflare
}
创建/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。
sudo systemctl enable caddy.service
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 4000 -j ACCEPT
如果用的是GCP,并且套了Cloudflare的CDN,那么还可以直接用GCP的防火墙规则。
参考[GCP 防火墙只允许CDN IP访问 保护原站](https://blog.arn0.org/post/GCP 防火墙只允许CDN IP访问 保护源站/)
创建hexo-deploy.sh
文件
#!/usr/bin/env sh
make up
在hexo根木录下的_config.yml添加
admin:
deployCommand: './hexo-deploy.sh'
HexoAdmin的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所有文件到哪个分支,具体要根据你的需要做些修改。
Debian/Ubuntu:
apt install make
CentOS/Redhat:
yum install make
systemctl start caddy
访问你的域名/admin就会直接弹窗要求登陆
点击deploy就会自动部署Hexo
PS: 在这里我是将Github仓库当作备份快照了,没有用到Github的Pages服务。还有我并没有将Hexo-admin的服务部署在这个博客的Web服务器上,而是另外开了台VPS来作为后端服务器,为的就是减轻这个Web服务器的负担,~~虽然这个破站根本就没有人访问。~~同时为了避免在自己电脑上写完文章后无法同步到后端服务器,在部署完Hexo-admin后我还设置了一下WebHooks,用来同步所有文件改动,设置WebHooks的方法可以看[我之前的文章](https://blog.arn0.org/post/Hexo 部署到自己的服务器/)。