Flask + Vue 项目部署到腾讯云 + 宝塔 流程
Flask + Vue 项目部署到腾讯云 + 宝塔 流程
第一次部署一个前后端分离的项目到云服务器,感觉很麻烦遂记录一下
1. 总体架构
1 | Vue 前端 |
2. 目录结构
服务器上的结构:
1 | /www/wwwroot/3dsmax.redjinx.me/ |
3. Flask 后端启动方式
进入后端目录:
1 | cd /backend |
启动 Gunicorn:
1 | nohup gunicorn -w 4 -b 127.0.0.1:5004 app:app > gunicorn.log 2>&1 & |
参数说明:
-w 4:4 个 worker-b 127.0.0.1:5004:只监听本机 5004app:app:前一个 app = app.py,后一个 app = Flask 实例变量名
4. 如何判断 Flask 是否真的跑起来
本机测试接口:
1 | curl http://127.0.0.1:5004/api/students |
判断标准:
| 返回结果 | 含义 |
|---|---|
| 返回 JSON 数据 | 后端正常 |
| 返回 JSON 错误 | 后端已跑起来,但业务逻辑/数据库有问题 |
| connection refused | Gunicorn 没启动 |
| 404 Not Found | Gunicorn 跑了,但访问的接口路径不对 |
这次你最后看到数据库报错和接口数据,说明后端链路已经通了。
5. 数据库配置排查的核心思路
这次遇到的典型问题是:
1.flask已经改了用户和 密码但还是没访问到
原因:.env文件中信息并没有被更新
2.数据库表格上传的时候报版本错误
云端数据库版本 utf8mb4 utf8mb4 unicode_ci
本地数据库也要与这个版本一致
6. 只重启当前项目的 Gunicorn
因为服务器上还有别的项目,不能直接:
1 | pkill -f gunicorn |
正确方式是只杀当前端口:
1 | lsof -i:5004 |
或者:
1 | pkill -f "5004" |
然后重新启动:
1 | cd backend |
7. Nginx 配置方法
先用配置静态网页的方式,在宝塔里配置静态网页,将域名和本地文件对应起来
- root 指向 Vue 的 dist
- / 走前端静态页面
由于我在宝塔没找到改主文件配置的方法,于是把宝塔中关于这个新项目的nginx配置全关闭和删除了
,而是去服务器中,找宝塔给的nginx配置文件,具体位置:
1
cat /www/server/panel/vhost/nginx/项目名.conf
接下来在这个文件夹中修改具体的nginx配置
1 | cat /www/server/panel/vhost/nginx/项目名.conf |
8. nginx配置
1 | server |
关键点:
root指向 Vue 的 disttry_files ... /index.html;用于支持 Vue 路由刷新/api/转给 Flask
9. 启动nginx方式
检查配置:
1 | nginx -tt |
成功后重启:
1 | /etc/init.d/nginx restart |
10. 前端请求接口的正确写法
前端不要写死成:
1 | // 错误 |
正确写法是:
1 | // 正确 - 相对路径 |
请求流程:
- 浏览器访问
https://3dsmax.redjinx.me/api/students - Nginx 转发到
127.0.0.1:5004/api/students - Gunicorn 接收请求
- Flask 处理接口
- 返回 JSON 给前端
11. 以后部署同类项目的最短流程
以后可以直接按这个顺序:
后端
1 | cd backend |
前端
- 本地
npm run build - 上传 dist 到服务器站点目录
Nginx
root指向 dist/→try_files/api/→ 反代 Flask
检查
1 | nginx -tt |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 盈虚手记!
评论


