Python Web框架在Ubuntu上如何部署
导读:在 Ubuntu 上部署 Python Web 框架的标准流程 面向 Flask、Django 等主流框架,生产环境通常采用 WSGI 服务器(Gunicorn 或 uWSGI)+ Nginx 反向代理,并通过 systemd 守护进程保证...
在 Ubuntu 上部署 Python Web 框架的标准流程
面向 Flask、Django 等主流框架,生产环境通常采用 WSGI 服务器(Gunicorn 或 uWSGI)+ Nginx 反向代理,并通过 systemd 守护进程保证常驻运行。若使用 ASGI 框架(如 FastAPI、Starlette),应改用 Uvicorn/Hypercorn 作为 ASGI 服务器,Nginx 配置思路一致。该组合可提供静态资源高效服务、并发处理与进程守护能力。
一、准备与部署通用步骤
- 系统更新与基础工具
- 执行:
sudo apt update & & sudo apt install -y python3 python3-pip python3-venv git build-essential libssl-dev libffi-dev
- 执行:
- 上传或克隆代码
- Git:
git clone < repo> & & cd < project> - SCP:
scp -r < 本地目录> < user> @< ip> :/path/to/app
- Git:
- 创建虚拟环境与依赖
python3 -m venv venv & & source venv/bin/activatepip install -r requirements.txt
- 开放防火墙与端口
- UFW:
sudo ufw allow 'Nginx Full'(同时保证 22 端口用于 SSH)
- UFW:
- 注意
- 生产环境不要使用框架自带的开发服务器(如 Flask 的
app.run())。
- 生产环境不要使用框架自带的开发服务器(如 Flask 的
二、以 Gunicorn + Nginx 部署(Flask 示例)
- 安装与试运行
pip install gunicorn- 假设入口为 app.py,应用对象为 app:
gunicorn -w 4 app:app(先在本地或内网验证)
- 配置 systemd 守护进程
- 新建:
sudo nano /etc/systemd/system/myflaskapp.service - 示例:
[Unit] Description=My Flask Application After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/path/to/your/flask/app Environment="PATH=/path/to/your/flask/app/venv/bin" ExecStart=/path/to/your/flask/app/venv/bin/gunicorn -w 4 app:app [Install] WantedBy=multi-user.target - 启动与开机自启:
sudo systemctl daemon-reload & & sudo systemctl start myflaskapp & & sudo systemctl enable myflaskapp
- 新建:
- 配置 Nginx 反向代理
- 安装:
sudo apt install nginx - 编辑:
sudo nano /etc/nginx/sites-available/default - 示例:
server { listen 80; server_name your_domain_or_ip; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 校验与生效:
sudo nginx -t & & sudo systemctl reload nginx
- 安装:
- 访问验证
- 浏览器访问 http://your_domain_or_ip,应看到应用页面。
三、以 uWSGI + Nginx 部署(Django 示例)
- 安装与准备
pip install uwsgi- 收集静态文件(Django):
python manage.py collectstatic --noinput
- 配置 uWSGI(INI 示例)
- 新建:
nano myapp_uwsgi.ini - 示例:
[uwsgi] module = myproject.wsgi:application master = true processes = 4 socket = /run/gunicorn.sock chmod-socket = 660 vacuum = true die-on-term = true
- 新建:
- 配置 systemd 守护 uWSGI
- 新建:
sudo nano /etc/systemd/system/myuwsgi.service - 示例:
[Unit] Description=uWSGI instance to serve myproject After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/path/to/myproject Environment="PATH=/path/to/myproject/venv/bin" ExecStart=/path/to/myproject/venv/bin/uwsgi --ini myapp_uwsgi.ini [Install] WantedBy=multi-user.target - 启动:
sudo systemctl daemon-reload & & sudo systemctl start myuwsgi & & sudo systemctl enable myuwsgi
- 新建:
- 配置 Nginx
- 示例:
server { listen 80; server_name myproject.example.com; location / { include uwsgi_params; uwsgi_pass unix:/run/gunicorn.sock; } location /static { alias /path/to/myproject/static; } } - 启用与生效:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ & & sudo nginx -t & & sudo systemctl reload nginx
- 示例:
- 访问验证
- 浏览器访问 http://myproject.example.com,静态资源由 Nginx 直接服务,动态请求由 uWSGI 处理。
四、可选优化与安全加固
- 启用 HTTPS(Let’s Encrypt)
- 安装:
sudo apt install certbot python3-certbot-nginx -y - 申请并自动配置:
sudo certbot --nginx -d yourdomain.com
- 安装:
- 进程管理替代方案
- 亦可使用 Supervisor 管理 Gunicorn/uWSGI 进程,步骤包括安装 Supervisor、编写 program 配置、启动与设置开机自启。
- 日志与排错
- 查看服务日志:
sudo journalctl -u myflaskapp -f、sudo journalctl -u myuwsgi -f - Nginx 日志:
/var/log/nginx/access.log、/var/log/nginx/error.log
- 查看服务日志:
- 静态文件与媒体文件
- Django 将 STATIC_ROOT 收集后由 Nginx 的
location /static提供服务;用户上传的 MEDIA_ROOT 亦建议由 Nginx 直接托管并设置合适的访问权限。
- Django 将 STATIC_ROOT 收集后由 Nginx 的
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Python Web框架在Ubuntu上如何部署
本文地址: https://pptw.com/jishu/764263.html
