吃灰的云主机不要忘,部署个人博客,隔壁开发都馋哭了(下)

本文涉及的产品
.cn 域名,1个 12个月
简介: 笔者置办个人博客的技术选型: 简洁:界面简洁,排版合理,不需要花里花哨; 简单:上手简单,开箱即用,输出文章即可,无需过于关注实现细节; 快:加载快,性能高效,移动端适配(地铁上也可以康康);

③ 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生成的静态网站部署到云服务器上的全过程实录


相关文章
|
程序员 开发工具 开发者
以为是使用电脑的老手,没想到吃了没备份数据的亏。
以为是使用电脑的老手,没想到吃了没备份数据的亏。
|
开发工具 Python
嗖嗖的,再也不怕被嘲笑了!!!
嗖嗖的,再也不怕被嘲笑了!!!
|
Kubernetes Ubuntu 关系型数据库
这不是愚人节玩笑,我们回来了:Typecho 1.2.0 发布!
这不是愚人节玩笑,我们回来了:Typecho 1.2.0 发布!
302 0
这不是愚人节玩笑,我们回来了:Typecho 1.2.0 发布!
|
前端开发 JavaScript 应用服务中间件
吃灰的云主机不要忘,部署个人博客,隔壁开发都馋哭了(中)
笔者置办个人博客的技术选型: 简洁:界面简洁,排版合理,不需要花里花哨; 简单:上手简单,开箱即用,输出文章即可,无需过于关注实现细节; 快:加载快,性能高效,移动端适配(地铁上也可以康康);
196 0
|
域名解析 缓存 JavaScript
吃灰的云主机不要忘,部署个人博客,隔壁开发都馋哭了(上)
笔者置办个人博客的技术选型: 简洁:界面简洁,排版合理,不需要花里花哨; 简单:上手简单,开箱即用,输出文章即可,无需过于关注实现细节; 快:加载快,性能高效,移动端适配(地铁上也可以康康);
198 0
|
小程序 前端开发 JavaScript
🎑提前祝大家中秋快乐,教你做一个【中秋花灯许愿】💖的网站
为了参加掘金社区的中秋征文活动专门策划了这么一个小站。但是物尽其用,我最近自研了一套Web网站基于扫小程序码登录的机制,正好借这个小站测试一下。
260 0
🎑提前祝大家中秋快乐,教你做一个【中秋花灯许愿】💖的网站
|
数据安全/隐私保护 索引 Python
这下女友总算满意了!
上次跟女友介绍了正则表达式的基本语法,以及在 Python 中如何使用。结果她还不满意,说传说中的正则表达式就这么简单?当然不是,今天就来跟大家一起介绍下正则表达式更多的使用技巧。
166 0