1. 初始化 GitHub 仓库 Github上新建一个名为iwyang.github.io
的仓库。
2. 配置ACTIONS_DEPLOY_KEY
2.1. 生成公钥 Windows 上安装 Git for Windows 之后在开始菜单里打开 Git Bash 输入:
1 2 git config --global user.name "你的用户名" git config --global user.email "你的电子邮箱"
1 2 3 4 cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa
在系统当前用户文件夹下生成了私钥 id_rsa
和公钥 id_rsa.pub
。
2.2. 上传id_rsa.pub 点击博客仓库的Settings->Deploy keys->add deploy key,Title填写ACTIONS_DEPLOY_KEY
,Key填写id_rsa.pub
文件的内容。
2.3. 上传id_rsa 点击博客仓库的Settings->Secrets->Add a new secret,Name填写ACTIONS_DEPLOY_KEY
,Value填写id_rsa
文件的内容。
3. 配置 Github actions 在博客根目录新建.github/workflows/gh_pages.yml
文件。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 name: GitHub Page Deploy on: push: branches: - develop jobs: build-deploy: runs-on: ubuntu-latest steps: - name: Checkout master uses: actions/checkout@v1 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: 'latest' extended: true - name: Build Hugo run: | hugo - name: Deploy Hugo to gh-pages uses: peaceiris/actions-gh-pages@v2 env: ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} PUBLISH_BRANCH: master PUBLISH_DIR: ./public
如果使用的是loveit主题
并且使用algolia搜索,则还要配置自动更新索引,需在gh_pages.yml
里作相应修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 name: GitHub Page Deploy on: push: branches: - develop jobs: build-deploy: runs-on: ubuntu-latest steps: - name: Checkout master uses: actions/checkout@v1 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: 'latest' extended: true - name: Build Hugo run: | hugo && npm install atomic-algolia --save && npm run algolia - name: Deploy Hugo to gh-pages uses: peaceiris/actions-gh-pages@v2 env: ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} PUBLISH_BRANCH: master PUBLISH_DIR: ./public
4. 推送到远端 4.1. 修改主题文件夹 将主题文件夹里的.git
、gitignore
、.github
等文件夹都删除。
4.2. 修改根目录.gitignore
文件
4.3. 提交源码 初始化git,新建并切换到develop
分支,将源码提交到develop
分支。稍等片刻,github action会自动部署blog到master
分支。
1 2 3 4 5 6 git init git checkout -b develop git remote add origin git@github.com:iwyang/iwyang.github.io.git git add . git commit -m "备份源码" git push --force origin develop
5. 服务器操作 5.1. 克隆仓库 1 2 rm -rf /var/www/hexo git clone git@github.com:iwyang/iwyang.github.io.git /var/www/hexo
5.2. 设置crontab定时任务: 1 2 crontab -e */5 * * * * git -C /var/www/hexo pull
这样只要提交源码给github,github action
就会帮你部署博客到github page
,服务器通过git pull
定时拉取更新。换台电脑不用再搭建环境,直接在gtihub新建或者修改文章,剩下的工作就交给github action
。注意回本地电脑先git pull
拉取更新,再提交源码,最终部署脚本如下:
1 2 3 4 5 6 7 #!/bin/bash echo -e "\033[0;32mDeploying updates to gitee...\033[0m" git pull git config --global core.autocrlf false git add . git commit -m "site backup" git push origin develop --force
注意:好像先要从源码仓库clone一份源码到本地,才能利用git pull
拉取github已有的更新。只有先拉取github已有的更新,再在本地提交源码,github上的更新才不会被删除
6. 总结 整个部署过程可能比本地部署还要花时间,不过这种方法方便异地更新部署。对我来说目前还是本地部署吧。
7. 使用 GitHub Actions 实现文件自动化部署 下面记下使用 GitHub Actions 实现文件自动化部署
。(未测试)
7.1. 准备工作 安装rsync
:
7.2. 建立SSH密钥对 为了方便,在服务器上生成SSH密钥对:
1 2 mkdir -p ~/.ssh && cd ~/.ssh ssh-keygen -t rsa -f mysite
这里一路回车就行,执行完成后,会在~/.ssh
下生成两个文件:mysite
(私钥)和mysite.pub
(公钥)。其中私钥是你的个人登录凭证,不可以分享给他人 ,如果别人得到了你的私钥,就能登录到你的服务器。公钥则需要放到登录的目标服务器上。
7.3. 把 public key 加入到 authorized_keys 里面 将公钥mysite.pub
的内容贴到目标服务器的~/.ssh/authorized_keys
中,如果上一步你直接是在服务器中执行,则只要:
1 cat mysite.pub >> authorized_keys
否则,手动复制公钥的内容,粘贴到~/.ssh/authorized_keys
后面即可,若文件或目录不存在,可以自己创建。这一步的目的,是告诉目标服务器:「我以后用这个私钥登录,你需要允许哈」。
7.4. 修改 ssh folder 权限 确保服务器~/.ssh
文件夹的权限低于711,我这里直接用600(仅本用户可读写)
7.5. 设置 ssh 配置文件,打开密钥登录功能
1 2 3 + PermitRootLogin yes - #PubkeyAuthentication yes + PubkeyAuthentication yes
7.6. 重启 ssh 服务
7.7. 复制 private key 到 GitHub 将private key
复制到 GitHub repo -> setttings -> secrets
里,并且命名为DEPLOY_KEY
。顺便在secrets
里设置一下SSH_HOST
和SSH_USERNAME
。
1 2 SSH_HOST:服务器IP SSH_USERNAME:root
7.8. 编写工作流文件 repo 的根目录创建 .github/workflows/develop.yml 文件,以后每次 master branch 有新的 commit,这个 action 就会执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 name: Deploy Site on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout Repo uses: actions/checkout@v2 - name: Deploy to Server uses: AEnterprise/rsync-deploy@v1.0 env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} ARGS: -avz --delete SERVER_PORT: "22" FOLDER: ./ SERVER_IP: ${{ secrets.SSH_HOST }} USERNAME: ${{ secrets.SSH_USERNAME }} SERVER_DESTINATION: /var/www/xxx/
另外一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 name: Deploy site files on: push: branches: - master paths-ignore: - README.md - LICENSE jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Deploy to Server uses: AEnterprise/rsync-deploy@v1.0 env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} ARGS: -avz --delete --exclude='*.pyc' SERVER_PORT: '22' FOLDER: ./ SERVER_IP: ${{ secrets.SSH_HOST }} USERNAME: ${{ secrets.SSH_USERNAME }} SERVER_DESTINATION: /home/fming/mysite/ - name: Restart server uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.DEPLOY_KEY }} script: | cd /home/fming/mysite/ python manage.py migrate supervisorctl restart web
有了GitHub Actions这个利器,除了自动部署,还可以做自动备份……只要你想,你甚至能提交代码自动触发房间开灯。当然,这些都必须围绕一个GitHub代码仓库来做。推荐大家把自己用到的代码都放到Git上管理,一是可以备份方便重建,二是可以利用这些周边的生态,来让你的生活更简单。不要再用百度网盘存代码、用FTP客户端传文件了。
8. 参考链接