添加 SSL 和自动部署

添加 SSL 和自动部署

绑定域名后学习了如何添加ssl证书,通过 https://letsencrypt.org/ 免费获取证书,根据官方文档里的步骤来搞还是挺简单。

本来设想的方案是 nginx 做反向代理把请求转给 hugo 服务,每次将文章通过 ssh 上传到 hugo 服务器,再重启服务。但是我问了 chatGPT 有没有更好的方案,它说通过 Github 进行 CI/CD 自动化部署会更方便。看了一下确实好像更方便,我只需要将本地博客更新后提交到 Github,由 github 自动部署到服务器中。步骤:

1. 配置 Git 仓库 #

  1. 初始化博客仓库
  2. 提交本地代码到远程仓库:

2. 配置 CI/CD 工具 #

使用 GitHub Actions 进行


3. 创建 GitHub Actions 配置文件 #

  1. 在博客项目的根目录下,创建 .github/workflows/deploy.yml 文件。(路径和目录名一个字都不能错)

  2. 编写工作流脚本:

      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 仓库中,配置用于部署的敏感信息:

  1. 进入仓库设置页面,选择 Secrets and variables -> Actions
  2. 添加以下 Secrets:
    • SERVER_HOST:远程服务器的 IP 地址或域名。
    • SERVER_USER:SSH 用户名。
    • SERVER_PASS:SSH 密码。

5. 在服务器配置 Hugo 服务 #

  1. 确保服务器安装了 Hugo,并配置好静态文件存储目录。
  2. 如果需要长期运行 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 的文件夹去掉。总之终于搞好了,重启写博客的人生?