开始使用 CI 部署本博客
背景
因为对 腾讯云 有隐私和安全方面的担忧,就把 X-UI 的服务器迁移到了一个使用 CN2 GIA 线路的香港 VPS 供应商那里。目前感受还不错,因为每月使用成本有提高,就想着能不能物尽其用一下。于是就考虑把我的 blog 从 vecel 那里搬过来。因为三脚猫,搭建整个过程花了我两个晚上的时间。
主要过程
- 在 VPS 上安装 Docker 服务并设置自动启动。之所以用 docker 来跑 nginx,主要是因为主机上已经在运行了 X-UI 的相关 web 访问服务,直接装会和 nginx 冲突。
- 下载 nginx 镜像,设置映射并运行容器
- 配置 nginx 的 https 访问,申请 SSL 证书
- 用 coding 的 CI pipeline 来将 Hexo 的 public 文件夹部署到 VPS 对应路径
设置映射并运行容器
这次没有用 docker compose,也没有 protainer,直接用命令行部署的 container。
docker run --rm -d -p 443:443 -p 80:80 --name nginx-web -v /usr/html:/usr/share/nginx/html -v /home/nginx/conf/conf.d:/etc/nginx/conf.d nginx
解释(踩坑):
- 443 和 80 端口都要映射
- 我映射了 2 个目录,一个是 html 一个是 nginx 配置文件 (我直接用了 default.conf),而且把域名证书文件也放在这个目录下
- 需要进入 container 的命令的话,用到了
docker exec -it container_id /bin/bash
- 需要 复制 container 里的文件,用
docker cp container_id:container_file_with_path destination_path
配置 nginx https 访问
用 acme.sh 的 CF 相关脚本申请的证书,然后放在了容器的映射目录下。配置文件里用的是 rewrite 命令强制将 http 请求改写为 https 请求
rewrite ^(.*) `[https://$server\_name$1](https://$server_name$1)` permanent;
Coding 里的坑
- 详见我的 pipeline 把,构建环境也是比较麻烦的
- 构建环境里 node.js 要升级 12.13.0 版本的
- 最终用了 hexo 的 deploy 命令来进行静态文件的上传,用到一个 sftp 的插件
hexo-deployer-sftp
,这个插件还需要我把 rsa 的 key 部署到 hexo 的库里。 - coding 在 github 的 webhook 要在一个很隐蔽的地方更新,更新完后才能在每次提交后顺利的 trigger 自动构建流程
- 在为 sftp 插件生成rsa private key 过程中要注意使用 rsa 加密,不是 openssh 加密方式