③ Nginx 配置
接着把我们本地build生成的文件通过ftp工具上传到云服务器上,因为使用相对路径, build之前要修改下config.js文件,添加 base
属性:
build一波,然后上传一波,传哪里自己看自己喜好,笔者上传到下述路径中:
然后配置下nginx,来到 /etc/nginx/
目录下,配置文件一般是 nginx.conf
,不过考虑到 后续可能还要导几个项目,此处分一层,把配置写到单独一个文件中,放到 /conf.d
文件夹下。
文件内容如下:
server { listen 80; server_name xxx.xxx.xxx.xxx; // 主机IP location /{ root /home/project/blog; index index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } }
然后 /conf.d
文件的http层级,添加:
include /etc/nginx/conf.d/*.conf;
最后 nginx -s reload
重载下配置文件,此时在浏览器打开主机的公网IP:
啧啧啧,可以外网访问自己的博客了,接着弄自动化部署~
0x3、Vuepress 自动部署
码云Gitee 新建个仓库,把本地代码Push上去,基本常识不讲,不懂善用搜索引擎~ 开头说过,这个自动化部署的流程:
- 1、提供一个接口,功能:自动拉取最新代码 → build生成文件 → 覆盖博客目录
- 2、当我们Push代码,Gitee WebHook调用这个接口即可
① 编写脚本文件
我们把自动化操作写到一个脚本文件中,调用接口时执行这个sh脚本即可:
# 拉取远程分支 git pull origin master # 生成静态文件 npm run build # 把生成的静态文件 复制到 静态网站的目录下,存在则覆盖 \cp -rf docs/.vuepress/dist/. /home/project/blog
SSH终端 bash xxx.sh
运行一波,看下是否有覆盖成功即可~
② 编写接口
脚本写完,写个接口来执行这个脚本,后台语言Java,Python、Go、PHP等都可以,会啥用啥。
笔者用的是Python Flask,相关API及详细用法可参见之前写的:
《偷个懒,公号抠腚早报80%自动化——3.Flask速成大法》, 此处仅做演示,故只是简单的写个接口~
CentOS 8 自带Python 3.6.8,就不用另外安装Python了,命令行:
cd /home/project mkdir Api cd Api python3 -m venv venv source venv/bin/activate pip install flask pip install flask-script vim app.py
输入下述内容:
from flask_script import Manager from flask import Flask import os app = Flask(__name__) @app.route("/api/refresh_blog") def refresh_blog(): os.system("cd ../blog/;bash auto.sh") return "博客刷新成功!" if __name__ == '__main__': app.run()
按ESC,输入 :wq
,保存即可,然后输入下述命令启动项目:
python app.py runserver -p 12345
再接着新开一个ssh终端链接云服务器,用curl命令看下接口能否正常调用:
curl http://127.0.0.1:12345/refresh_blog
如果正常调用,终端可以看到vuepress打包的过程,最后输出:
③ 安装uwsgi
yum install uwsgi # 如果安装报错:Command "/usr/bin/python3.6 -u -c "import setuptools, tokenize; # 先安装一波python-devel,这里是python3.6版本,要用python36-devel # 搜索python36-devel版本 yum search python36-devel # 根据输出结果,如:python36-devel.x86_64 : Libraries and header files ..。 # 安装对应版本的python36-devel yum install python36-devel.x86_64 # 此时再安装uwsgi就可以了~
④ 编写uwsgi配置文件
在项目目录下创建一个配置文件
vim config.ini
配置内容如下:
[uwsgi] # 指明要启动的模块,前者为项目启动文件名去掉.py,后者为变量app,Flask的实例 module = app:app # 处理器数 processes = 1 # 指向网站目录 chdir = /home/project/Api # uwsgi 启动时所使用的地址与端口 socket = 127.0.0.1:8005 # 日志输出目录 logto = /home/project/Api/history.log # 状态检测地址 stats = 127.0.0.1:12345
然后命令行启用即可:
uwsgi config.ini
⑤ Nginx 配置
上面Vuepress部署时配过Nginx,没太大必要用两个域名,直接在原先基础上配置一个location即可,配置后的blog.conf
server { listen 80; server_name xx.xx.xx.xx; location /{ root /home/project/blog; index index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } location /api/ { include uwsgi_params; uwsgi_pass 127.0.0.1:8005; } }
保存后 nginx -s reload
,重载下nginx,接着浏览器访问:主机IP/api/refresh_blog,没有出现404,静待片刻后,出现如下界面即可:
⑥ 域名解析
这个就很简单了,自己买个域名备案,然后打开域名管理页面,找到刚买的域名,点击 解析:
点击 添加记录,出现如图所示对话框,记录值那里填写你的云服务器公网ip即可。
过10分钟左右就可以用你的域名访问我们的个人博客了~
⑦ Gitee配置WebHooks
点击项目 Settings
→ 找到点击 WebHooks
→ 点击 Add
我丢,竟然还要POST
请求的,另外码云这里街口响应时间超过10s就会超时, 执行构建命令比较耗时,使用线程池来异步执行,修改后的代码如下:
import os from concurrent.futures.thread import ThreadPoolExecutor from flask import Flask app = Flask(__name__) executor = ThreadPoolExecutor(max_workers=2) def auto_build(): os.system("cd ../blog/;bash auto.sh") @app.route("/api/refresh_blog", methods=['POST']) def refresh_blog(): executor.submit(auto_build) return "博客刷新成功!" if __name__ == '__main__': app.run()
然后Gitee上点击Test,可以看到接口响应结果:
最后打开blog项目,改点东西,然后Push一下,打开域名康到蕾姆酱:
大功告成~~~
结语
以上就是如何把Vuepress生成的静态网站部署到云服务器上的全过程实录