Skip to content
On this page

使用Vuepress配合GitHub的Actions搭建自动化构建部署博客

准备内容

Vuepressv2 : https://v2.vuepress.vuejs.org/zh/

GitHub 仓库(私有、公有皆可):https://github.com/

GitHub Actions 自动构建配置文件(用来自动化部署网站):https://docs.github.com/cn/actions

GitHub Actions ssh-deployhttps://github.com/easingthemes/ssh-deploy

腾讯云服务器(其他服务商皆可):https://cloud.tencent.com/

整体流程

  1. 使用 Vuepressv2 构建网站
  2. 把构建的网站内容推送到仓库
  3. 推送操作触发 Actions 自动化构建把编译后的网站静态文件通过 ssh 传输到指定服务器的网站目录
  4. 网站正常访问

搭建流程

创建目录 demo-docs 并进入该目录

sh
mkdir demo-docscd demo-docs```  
  
初始化 `demo-docs` 目录  
  
```sh  
git initnpm init```  
  
将 `Vuepressv2 ` 添加到本地依赖  
  
```sh  
npm install -D vuepress@next```  
  
在 `package.json` 添加一下脚本代码  
  
```json  
{  
"scripts": {  
"docs:dev": "vuepress dev docs",  
"docs:build": "vuepress build docs"  
}  
}  

完整的 package.json 文件内容如下

json
{  
"name": "mk-teach-docs",  
"version": "1.0.0",  
"description": "",  
"main": "index.js",  
"scripts": {  
"docs:dev": "vuepress dev docs",  
"docs:build": "vuepress build docs"  
},  
"author": "",  
"devDependencies": {  
"vuepress": "^2.0.0-beta.30"  
}  
}  
  

将默认的临时目录和缓存目录添加到 .gitignore 文件中

sh
echo 'node_modules' >> .gitignoreecho '.temp' >> .gitignoreecho '.cache' >> .gitignore```  
  
创建第一篇文档  
  
```sh  
mkdir docsecho '# Hello VuePress' > docs/README.md```  
  
在本地启动服务器来开发你的文档网站  
  
```sh  
npm run docs:dev```  
  
VuePress 会在 [http://localhost:8080在新窗口打开](http://localhost:8080/) 启动一个热重载的开发服务器。当你修改你的 Markdown 文件时,浏览器中的内容也会自动更新。  
  
![](https://images.mankvis.com/article/2023/06/28/20230628133213.png)

  
本地网站顺利现实成功,接下来把网站部署到服务器上,在根目录创建 `.github` 文件夹,接着在 `.github` 目录里面创建 `workflows` 文件夹  
  
```sh  
mkdir .githubcd .githubmkdir workflows```  
  
创建 `Actions  配置文件`  
  
```sh  
touch deploy.yml```  
  
` deploy.yml` 内容如下  
  
```yaml  
# 这是一个基本的工作流程,可帮助您开始使用 Actions  
name: build  
  
# 控制操作何时运行  
on:  
# 在推送或拉取请求事件上触发工作流,但仅针对主分支  
push:  
branches: [ main ]  
  
# 允许您从“操作”选项卡手动运行此工作流  
workflow_dispatch:  
  
# 工作流运行由一个或多个可以顺序或并行运行的作业组成  
jobs:  
# 此工作流包含一个名为“构建和部署”的作业  
build-and-deploy:  
# 作业将在其上运行的系统类型  
runs-on: ubuntu-latest  
  
# 步骤表示将作为作业的一部分执行的一系列任务  
steps:  
# 在 $GITHUB_WORKSPACE 下签出您的存储库,以便您的工作可以访问它  
- name: Checkout  
uses: actions/checkout@v2  
# 安装 node 环境  
- name: Setup Node.js Environment  
uses: actions/setup-node@master  
# 构建项目  
- name: Buld Project  
run: |  
npm install  
npm run docs:build  
# 发布内容到服务器,这里直接使用现成的轮子 easingthemes/ssh-deploy@@main- name: Deploy to Server  
uses: easingthemes/ssh-deploy@main  
env:  
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}  
ARGS: "-rltgoDzvO --delete"  
SOURCE: "docs/.vuepress/dist/"  
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}  
REMOTE_USER: ${{ secrets.REMOTE_USER }}  
TARGET: ${{ secrets.REMOTE_TARGET }}  
EXCLUDE: "/dist/, /node_modules/"  

以上关于 secrets 变量的设置方式如下:

打开 GitHub 仓库 ,选择 Settings ,点击按钮 New repository secret 分别添加各个参数,具体详细看文档https://github.com/easingthemes/ssh-deploy

把代码推送到 GitHub main 分支

sh
git add .git commit -m "init"git push origin main

打开 GitHub 仓库 页面,点击 Actions 可以看到已经在执行自动化构建部署了

自动构建部署成功,登录到服务器看到编译的 静态资源文件 已经被传输到指定文件夹,接下来即可访问网站。

踩坑

  1. SERVER_SSH_KEY 注意是 ssh私钥 ,还要把 公钥 放到 authorized_keys
  2. 如果按照 1 操作无误还是提示无权限,就注意报错日志中是否有 .user.ini 文件(宝塔用户注意),删除掉 .user.ini 即可。删除命令如下
sh
chattr -i .user.inirm .user.ini

Released under the MIT License.