python web 项目 部署成 Linux 服务
python web 项目 部署成 Linux 服务
生产级推荐配置,包含:
- 使用普通用户(非 root)
- 项目放在
/opt/mock_server - 使用 Gunicorn 作为 WSGI 服务器(比 Flask 内置服务器更稳定、支持并发)
- systemd 服务文件完整配置
✅ 第一步:创建专用用户和目录
# 创建系统用户(无登录 shell,仅用于运行服务)
sudo useradd -r -s /bin/false mockuser# 创建项目目录
sudo mkdir -p /opt/mock_server# 设置所有权
sudo chown mockuser:mockuser /opt/mock_server
✅ 第二步:部署 Flask 应用
切换到项目目录(以 mockuser 身份操作):
sudo -u mockuser bash
cd /opt/mock_server
1. 创建虚拟环境并安装依赖
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple
pip install flask gunicorn -i https://mirrors.aliyun.com/pypi/simple
2. 创建 Flask 应用:app.py
# /opt/mock_server/app.py
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return "✅ Hello from Production Mock Server!\n"if __name__ == "__main__":app.run()
注意:这里不需要
app.run(host=...),因为 Gunicorn 会接管。
✅ 第三步:测试 Gunicorn 手动启动(可选)
# 激活环境后
gunicorn --bind 0.0.0.0:5000 --workers 2 app:app
访问 http://<your-ip>:5000 看是否返回内容。
成功后按 Ctrl+C 停止。
✅ 第四步:创建 systemd 服务文件(生产级)
退出 mockuser shell:
exit
创建服务文件:
sudo vim /etc/systemd/system/mock_server.service
写入以下内容:
[Unit]
Description=Mock Server (Flask + Gunicorn)
After=network.target[Service]
User=mockuser
Group=mockuser
WorkingDirectory=/opt/mock_server
Environment="PATH=/opt/mock_server/.venv/bin"
ExecStart=/opt/mock_server/.venv/bin/gunicorn --bind 0.0.0.0:5000 --workers 3 --timeout 60 app:app
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=mock_server[Install]
WantedBy=multi-user.target
🔹 参数说明:
--workers 3:根据 CPU 核心数设置(通常2 * cores + 1)--timeout 60:防止请求卡死app:app:从app.py中加载名为app的 Flask 实例
✅ 第五步:启用并启动服务
# 重载 systemd
sudo systemctl daemon-reload# 启动服务
sudo systemctl start mock_server# 开机自启
sudo systemctl enable mock_server# 查看状态
sudo systemctl status mock_server
✅ 第六步:查看日志 & 验证
# 实时日志
sudo journalctl -u mock_server -f# 测试访问
curl http://127.0.0.1:5000
你应该看到:
✅ Hello from Production Mock Server!
🛡️ 安全与扩展建议(生产环境)
| 项目 | 建议 |
|---|---|
| 反向代理 | 用 Nginx 或 Apache 做前端代理,处理静态文件、SSL、限流等 |
| HTTPS | 通过 Nginx + Let’s Encrypt 配置 HTTPS |
| 日志轮转 | 配置 journald 或将 Gunicorn 日志输出到文件并用 logrotate 管理 |
| 监控 | 加入 Prometheus + Grafana 或 systemd notify |
📁 最终目录结构
/opt/mock_server/
├── app.py
├── .venv/
│ └── bin/
│ ├── python3
│ └── gunicorn
└── ...
所有者:mockuser:mockuser
权限:安全隔离,无 root 权限
