绑定域名后学习了如何添加ssl证书,通过 https://letsencrypt.org/ 免费获取证书,根据官方文档里的步骤来搞还是挺简单。
本来设想的方案是 nginx 做反向代理把请求转给 hugo 服务,每次将文章通过 ssh 上传到 hugo 服务器,再重启服务。但是我问了 chatGPT 有没有更好的方案,它说通过 Github 进行 CI/CD 自动化部署会更方便。看了一下确实好像更方便,我只需要将本地博客更新后提交到 Github,由 github 自动部署到服务器中。步骤:
1. 配置 Git 仓库 #
- 初始化博客仓库
- 提交本地代码到远程仓库:
2. 配置 CI/CD 工具 #
使用 GitHub Actions 进行
3. 创建 GitHub Actions 配置文件 #
-
在博客项目的根目录下,创建
.github/workflows/deploy.yml
文件。(路径和目录名一个字都不能错) -
编写工作流脚本:
build-and-deploy: runs-on: ubuntu-latest steps: # Step 1: - name: Checkout code uses: actions/checkout@v3 # Step 2: 部署到服务器 - name: Deploy to server uses: appleboy/scp-action@v0.1.1 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} password: ${{ secrets.SERVER_PASS }} port: 22 source: ./public/* # Hugo 生成的静态文件目录 target: /blog/directory strip_components: 1 - name: Restart Hugo service uses: appleboy/ssh-action@v0.1.7 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} password: ${{ secrets.SERVER_PASS }} port: 22 script: | sudo systemctl restart hugo.service
4. 配置 GitHub Secrets #
在 GitHub 仓库中,配置用于部署的敏感信息:
- 进入仓库设置页面,选择 Secrets and variables -> Actions。
- 添加以下 Secrets:
SERVER_HOST
:远程服务器的 IP 地址或域名。SERVER_USER
:SSH 用户名。SERVER_PASS
:SSH 密码。
5. 在服务器配置 Hugo 服务 #
- 确保服务器安装了 Hugo,并配置好静态文件存储目录。
- 如果需要长期运行 Hugo 服务,推荐使用 systemd 配置服务。
-
创建 systemd 服务文件:
sudo vim /etc/systemd/system/hugo.service
-
文件内容:
[Unit] Description=Hugo Server After=network.target [Service] Type=simple User=username ExecStart=/usr/local/bin/hugo server -s /path/to/server/blog Restart=always [Install] WantedBy=multi-user.target
-
启动并启用服务:
sudo systemctl enable hugo.service sudo systemctl start hugo.service
-
过程不算复杂,但是由于是第一次使用 github action,有些地方还是踩坑了,稍微花了点时间。比如 depoly 文件路径和名字一定要按照要求,以及其中文件命令要使用 strip_components 把 source 的文件夹去掉。总之终于搞好了,重启写博客的人生?