自动摘要正在生成中……
如果将 vuepress build 之后的静态网站部署在自己的服务器上,这里有一个自动化方案,思路如下:
- 在 linux 服务器上安装 node、yarn、git、nginx 软件
- 编写一个脚本:用于更新 git 仓库项目,然后 build,再复制到 nginx 配置访问的文件位置
- 使用 nginx 来作为静态网站的容器
- 使用 nginx lua 模块提供一个调用脚本的入口
- 在 github 上填写 webhook 地址为,调用脚本的入口地址
- 达到:上传到 github 后,触发 webhook 事件,服务器自动构建并发布新笔记内容的功能
(opens new window)
请按该文章完成安装后,并完成 hello world lua 的测试,再继续下面的步骤
(opens new window)
要在 nginx 下执行 shell 脚本,主要使用以下两个软件:
- lua-resty-shell 模块
- sockproc
lua-resty-shell 通过 sockproc 去执行 shell 命令,并返回执行结果
#安装 sockproc
随意把 sockproc 安装在哪里,按你自己的习惯,只要能运行上就行
/tmp/shell.sock 的套接口有没有数据到来。
#安装 lua-resty-shell 模块
它是一个很小的库,配合 openresty 使用,目的是提供类似于 os.execute 或 io.popen 的功能, 唯一区别它是非阻塞的,也就是说即使需要耗时很久的命令,你也可以使用它
#测试执行 shell 脚本
创建一个 lua 脚本文件
修改 nginx 配置
重新加载 nginx 配置文件后,访问 9300 端口,就可以看到 ls 命令执行后输出的内容了
我们的这里的思路简单一点:
- 提供一个访问地址,接受 webhook 请求,请求的时候需要携带一个 token 参数
- 在 lua 脚本中获取这个 token 参数,并校验是否自己设置的,如果不是,则直接丢弃这个请求
- 执行笔记构建部署脚本
/xx/build.sh 内容经过测试有如下的特性
命令会正常执行,但是只会输出 echo 打印的信息给调用处。
lua 执行 sh 脚本,下面就开始真正实现自动构建
步骤如下:
- (opens new window)
- (opens new window):用于克隆一个项目到本地,进行拉取最新的笔记内容
- 编写构建脚本
- 配置 nginx 访问构建好的静态网站
- 在 Github 对应项目配置 webhook 地址到我们提供的 lua 入口
#clone 项目
/usr/servers/notework/ 目录下展开
#编写构建脚本
这是一个公共的构建脚本,在调用该脚本的时候,需要把项目名传递进来
/usr/servers/notework/build.sh
配置 nginx 访问构建好的静态网站
docs/.vuepress/config.js 中 bash 的设置,由于要部署到 githubio,这里使用了一个前缀路径。
http://你的主机 IP/linux-tutorial/ 访问到这个项目了。
#编写 lua 脚本自动构建逻辑
前面写了一部分,这里做一点修改
/usr/servers/nginx/conf/noteBuild.lua
/usr/servers/nginx/conf/noteBuild.conf
同样需要在 nginx.conf 中引用这个 noteBuild.conf 文件
注意: 这里的 conf 中的监听端口不能与前面配置访问静态文件的端口一致,一致的话,前面的配置将被覆盖,同样可以将调用脚本的这代码与前面访问静态文件的配置在同一个 server 中,就不会出现这种问题了
http://你的 ip/lua?token=123456xxx¬eName=linux-tutorial,比如这个 linux-tutorial 整个构建响应信息如下
#配置 github webhook 地址
关于上图中的 URL,换成你自己的 IP 和开放的端口,还有各种参数。
之后就可以测试下,往 gitHub 上 push 一个文档的修改,看是否能触发自动构建。
本人的 DNS 在万网,完全的网址重定向,只能在万网的机器才可以,所以只能使用转发到一个 IP 上,所以笔记访问端口就只能是 80 端口了,其他的端口不支持配置。
下面是修改后的配置
/usr/servers/nginx/conf/nginx.conf
关于上面的配置,按照你自己的需求来组织是否给二级域名,还是一个域名就全部搞定