将 Hexo 博客部署到阿里云服务器(自动部署)
本文最后更新于 2024年11月5日 晚上
1. 使用 阿里云 云效 自动部署
- 因为我的服务器是阿里云的 ecs 所以使用的是阿里云的 DevOps 服务
- 总体思路:创建自动构建流水线
- 这是我第一次使用 云效 如有更佳的方法欢迎探讨
1.1. 代码源
- 【初始化】使用 token 从 Github 同步到 云效 代码仓库
- 云效中添加 git ssh 公钥
- 本地新增 云效代码仓库 远程地址
- 添加 Webhook 当 指定的云效内的代码仓库变更时 自动触发流程
之后更新代码的时候,分别 push 到 GitHub 和 云效 即可。
- 因为 云效 直接获取 GitHub 仓库,需要授予 OAuth 权限,并且获取的权限相当多,所以没有授予。
1.2. 构建
添加步骤 Node.js 构建
选择 Node.js 版本
添加 构建语句
1
2
3
4# cnpm 使用的是淘宝镜像源
# 使用 npm 总是报 404,但 cnpm 能用,那就不执著于 npm 了
cnpm install
cnpm run build添加步骤 构建物上传
选择上传方式以及制品名称(我在这儿全部保持默认)
1.3. 部署
选择主机部署模板
勾选部署时下载制品
填写「构建」时制品的名称
新建主机组(根据提示创建即可)
配置下载路径(这是我的路径,仅供参考
/home/hexo/package.tgz
)执行用户,我使用的是默认的
root
部署脚本,如下(仅供参考)
1
2
3
4
5mkdir -p /home/hexo/tmp/
tar zxvf /home/hexo/package.tgz -C /home/hexo/tmp/
rm -rf /home/hexo/blog_zeo/*
mv /home/hexo/tmp/public/* /home/hexo/blog_zeo/
rm -rf /home/hexo/tmp/其余选项保持默认
2. 配置域名解析
- 因为域名解析配置完成,距离生效需要一定的时间,所以提到前边来
- 具体可以参考域名服务商的开发文档,以下提供基础思路
- 添加 A 记录,值填写 IPv4 地址(创建了两条 A 记录,主机名分别为
空
和www
) - 添加 AAAA 记录,值填写 IPv6 地址(创建了两条记录,主机名分别为
空
和www
)
3. 配置 nginx
下载并安装 nginx
1
sudo dnf install nginx
查看 nginx 位置信息
1
whereis nginx
配置 nginx
此处不需要配置 443 端口,后边会自动化配置
1
2# 具体路径参考上一步骤
sudo vim /etc/nginx/nginx.conf配置文件参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 修改为刚刚创建的 hexo 用户
user hexo;
# ... 省略
server {
listen 80;
listen [::]:80;
server_name cc01cc.cn; # 此处修改为自己的域名
# 此处修改为自己存放博客的地址
root /home/hexo/blog_zeo;
location / {
index index.html index.htm;
}
# ... 省略
}配置
/home/hexo/blog_zeo
权限为所有用户可读取1
sudo chmod -R a+r /home/hexo/blog_zeo
重新加载 nginx
1
nginx -s reload
测试配置是否正确
1
wget http://127.0.0.1
4. 开放防火墙端口
添加端口规则
1
2sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent重新加载防火墙
1
sudo firewall-cmd --reload
查看 firewall 状态
1
systemctl status firewalld
查看端口开放状态(以 443/tcp 为例)
1
firewall-cmd --zone=public --query-port=443/tcp
5. 开放服务器安全组端口
不同的服务器厂商的操作不一致,以下为大致思路
入站规则添加端口 80
, 443
允许的 ip 设置为 0.0.0.0
, ::0
6. 测试 http 访问
使用 http 通过域名访问,如果可以加载主页,说明配置成功,否则根据实际情况排查问题。
- 仅加载主页(index.html)即可,部分关联资源,可能使用了 https 所以无法加载
7. 开启 ssl 加密(https)
总体思路使用 certbot(nginx)
本样例使用并推荐 pip 方式,其他方式大多通过 snap,但是 snap 没有镜像站,境内下载较慢
安装 Python 等依赖
1
sudo dnf install python3 augeas-libs
清理旧环境
1
2
3sudo dnf remove certbot
sudo yum remove certbot
sudo apt-get remove certbot配置 python 虚拟环境
之后配置失败的话,直接把环境(目录)删除后重复操作即可
1
2sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip安装 Certbot
1
sudo /opt/certbot/bin/pip install certbot certbot-nginx
添加 Cerbot 链接
配置链接后,就可以直接使用
cerbot
命令了运行 Certbot 自动化配置
1
2# 根据提示操作即可
sudo certbot --nginx当运行失败的时候,尝试检查(供参考):
- nginx.conf 的 server.name 是否和 域名一致
- 域名解析地址是否正确(可以使用 ping 检查一下域名解析)
配置自动更新
1
echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
验证配置
使用 https 通过域名访问,如果访问成功则配置无误
【每月】更新 cerbot
1
sudo /opt/certbot/bin/pip install --upgrade certbot certbot-nginx
Certbot Instructions | Certbot: https://certbot.eff.org/instructions?ws=nginx&os=centosrhel8