ubuntu启动flask后端服务
0 前言
我用python写了一个后端服务,用来处理前端计算短波通信选频的请求。本地测试很简单,不要考虑并发的问题,报错也直接终止就行了。但部署到服务器时,就需要考虑代码的稳定性了。
1 后端服务
- 安装Flask库
sudo apt install python3-flask
- 使用python中的Flask库实现后端监听功能,创建一个
app.py
文件,写入如下代码
from flask import Flask, request, jsonify
# 初始化 Flask 应用
app = Flask(__name__)
# 处理 POST 请求(JSON 数据)
@app.route('/json', methods=['POST'])
def handle_json_post():
# 获取 JSON 数据(需客户端设置 Content-Type: application/json)
json_data = request.get_json() # 自动解析 JSON
if not json_data:
return jsonify({"error": "无效的 JSON 数据"}), 400
print("收到 POST 请求(JSON 数据)")
print("JSON 数据:", json_data)
return jsonify({"message": "已接收 JSON 数据", "json_data": json_data})
# 运行应用(监听 8000 端口)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8000, debug=True)
-
这段代码的含义是当地址
http://127.0.0.1:8000/json
接收到post
请求时,会打印接收的请求数据并返回给前端 -
为了防止跨域的问题,可以使用
nginx
对127.0.0.1:8000
进行反向代理,具体操作可查阅其他博客 -
本地测试时,使用如下代码启动后端服务即可
python3 app.py
- 启动服务后,可在终端中运行如下代码测试后端服务是否启动成功
curl -X POST -H "Content-Type: application/json" -d '{"title":"Test","content":"Hello Flask"}' http://127.0.0.1:8000/json
- 正常启动会打印发送的Json数据
2 ubuntu启动后端服务
- 使用Gunicorn作为WSGI服务器,安装Gunicorn
sudo apt install gunicorn
- 启动测试
gunicorn -w 4 -b 127.0.0.1:8000 --access-logfile - --error-logfile - app:app
-w 4
:4个worker进程(推荐为CPU核心数×2+1)。-b 127.0.0.1:8000
:绑定本地8000端口(避免直接暴露公网)。--access-logfile -
:访问日志输出到标准输出。--error-logfile -
:错误日志输出到标准输出。app:app
:指向Flask应用实例(app.py
中的app
对象)。
- 通过Systemd创建服务单元,实现开机启动、自动重启等功能。首先创建服务文件
sudo vim /etc/systemd/system/yourproj.service
- 写入服务配置
[Unit]
Description=HFCom Frequency Calculation Service
After=network.target
[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/xxx/proj
ExecStart=gunicorn -w 4 -b 127.0.0.1:8000 --access-logfile - --error-logfile - app:app
Restart=always
[Install]
WantedBy=multi-user.target
User
替换为实际用户名Group
同理WorkingDirectory
后端服务文件所在目录Restart
崩溃后自动重启
- 重新加载systemd配置
sudo systemctl daemon-reload
- 启动服务
sudo systemctl start yourproj
- 开机自启
sudo systemctl enable yourproj
- 查看实时状态
sudo systemctl status yourproj
后记
最开始在本地使用了uwsgi
作为的WSGI服务器,但python自从3.11版本之后,无法使用pip
直接安装库到系统环境,只能使用apt
进行安装。但apt
安装的uwsgi
版本较低,很多命令存在不一致的问题。倘若重新创建一个python环境,又会涉及到文件访问权限的问题,即使我给目录下所有文件都增加了755权限,依然无法解决。最终不得不更换为如今的方案,实际使用后发现更加的方便简单。
版权属于:Washy
发表时间:2025-06-17 17:38:00
评论区