Hexo博客:在VPS上搭建远程部署环境
原理
将Hexo编译后形成的博客文件($root_path/public/*
),通过Git
或者rsync
传输到VPS,利用Caddy做Web服务器,展示博客内容
- 使用Git,博客的版本控制也很方便
- Caddy可以配置反向代理,配合v2ray,轻松搭梯子
- Caddy自动申请ssl证书,强制HTTPS
传输博客文件到VPS
无论使用哪种工具,最终目的都是将hexo编译后的博客文件传输到VPS
共性:增量同步
Git
:可以做到版本控制
rsync
:更专业
先ssh登录服务器,确认所需环境
1 | git --version |
创建git用户
root用户登录VPS端
用户名字随意,只用以git传输
1 | adduser git |
编辑sudo
权限
1 | vim /etc/sudoers |
在root ALL=(ALL:ALL) ALL
下增加一行git用户的
1 | root ALL=(ALL:ALL) ALL |
关闭git用户的shell登录权限
1 | vim /etc/passwd |
将git所在行的/bin/bash
修改为/usr/bin/git-shell
ps: 也可以通过这种方式修改任何用户默认的登录shell
例如修改为zsh
初始化Git仓库
切换到git用户主目录cd /home/git
初始化一个Git仓库
1 | mkdir blog.git |
添加--bare
参数,创建的仓库是不包含工作区的
配置SSH免密登录
将本地的ssh公钥复制到VPS上去
在本地机器上
1 | cd ~/.ssh # 默认 |
远程VPS上
1 | root用户 |
直接复制到authorized_keys
就行
创建post-receive 文件
root用户登录vps
先创建博客的root目录,这里用的是mkdir /var/www/blog
之后要创建多个网站时,都放在/var/www/
文件夹下
创建post-receive
1 | cd /home/git/blog.git/hooks |
复制以下内容
1 | !/bin/bash |
其中GIT_REPO
为博客文件所在仓库的路径,PUBLIC_WWW
为博客网站文件的root目录
确认有可执行权限
1 | chmod a+x post-receive |
管理用户组
确保之前创建的
/home/git/blog.git
/home/git/.ssh
/var/www/blog
/home/git/blog.git/hooks/post-receive
用户组权限为git:git
1 | chown -R git:git /home/git/blog.git/ |
使用ls -alh
命令加以确认
本地插件
在本地使用hexo-deployer-git@3.0.0
插件,简化部署
1 | npm install hexo-deployer-git --save |
具体配置参考博客部署
后话
执行hexo d
即可将/public
文件下的博客网站文件上传到vps的/home/git/blog.git
仓库
然后会借用一个临时文件夹,自动将文件复制到网站root目录下
为什么不直接克隆到网站root目录?
在执行 命令的时候,
.git
作为隐藏目录不会被拷贝到 Web 根目录下,也就避免了将整个仓库历史暴露在 Web 服务中。
rsync
使用参考:
准备
服务器和本地都需要至少安装rsync
如果选用远程shell实现拷贝,是无需运行守护程序的
macOS 12.4 21F79 arm64
自带
或者通过brew
1 | brew install rsync |
1 | sudo apt install rsync |
本地部署-插件配置
可以使用 hexo-deployer-rsync@1.0.0
插件
1 | npm install hexo-deployer-rsync --save |
在博客根目录的_config.yml
中增加配置项:
1 | deploy: |
- host: VPS的公网IP
- user: 用来登录shell的用户,可以选择root,也可以创建一个专门的用户用于免密登录
- root: 同步的文件夹路径,博客网站根目录,Ex:
/var/www/blog
- port: ssh端口号
- delete: true,使得远程路径为源路径的镜像,即目的文件夹内不存在源路径没有的文件
- args: Rsync arguments
- rsh: 选择远程shell,默认ssh
- verbose: 显示传输信息
- ignore_errors: 忽视错误信息,默认关闭
关于免密登录,创建新用户,配置ssh公钥等不再赘述,可以参考创建git用户、配置ssh免密登录
Caddy配置
Caddy可以自动申请SSL证书,强制HTTPS,且配置简单,很适合小型站点,例如个人博客
Caddy下载
我的VPS是Debian 11的系统,其他系统请参考官网文档
1 | sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https |
Caddy配置
Caddy的配置通过Caddyfile完成,查找Caddyfile的位置
1 | find / -name Caddyfile |
Caddy v1. 和v2. 的配置文件有较大差异,很多语法有变动,强烈建议查看官网文档来编写Caddyfile!
以下是我的Caddyfile,基于Caddy v2.5.1
仅包含配置Web服务器部分
ps: 这里是使用
Let's Encrypt
的免费SSL证书示意若使用自行购买的SSL证书,则依次填入证书和私钥文件的位置
例如:
tls /var/cert/floatu.top/$CERT_FILE /var/cert/floatu.top/$KEY_FILE
1 | floatu.top |
重启一下Caddy
1 | systemctl restart caddy |
访问[https://floatu.top]就可以浏览博客了
参考链接
📔博文图谱
提及本博文的链接