Ubuntu Python Web 应用部署实战
一 准备与基础环境
二 部署方案总览
| 方案 | 适用场景 | 核心组件 | 优点 | 要点 |
|---|---|---|---|---|
| Nginx + Gunicorn | Flask/Django/FastAPI 通用 | Nginx + Gunicorn | 配置简洁、生态成熟、易水平扩展 | Gunicorn 作为 WSGI/ASGI 服务器,Nginx 处理静态资源与反向代理 |
| Nginx + uWSGI | 传统/高性能场景 | Nginx + uWSGI | 性能与可控性强 | uWSGI 配置灵活,支持多种协议与进程模型 |
| Apache + mod_wsgi | 已有 Apache 栈 | Apache + mod_wsgi | 与 Apache 深度集成 | 配置简单,适合小规模或迁移场景 |
三 方案一 Nginx Gunicorn 部署步骤
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
Environment="PATH=/home/ubuntu/myproject/venv/bin"
ExecStart=/home/ubuntu/myproject/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/myproject.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
server {
listen 80;
server_name your_domain_or_ip;
location / {
include proxy_params;
proxy_pass http://unix:/run/myproject.sock;
}
location /static/ {
alias /home/ubuntu/myproject/static/;
}
location /media/ {
alias /home/ubuntu/myproject/media/;
}
}
四 方案二 Nginx uWSGI 部署步骤
from myproject import app
if __name__ == "__main__":
app.run()
[uwsgi]
module = wsgi:app
master = true
processes = 4
socket = /run/myapp.sock
chmod-socket = 660
vacuum = true
die-on-term = true
[Unit]
Description=uWSGI instance to serve myapp
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myapp
Environment="PATH=/home/ubuntu/myapp/venv/bin"
ExecStart=/home/ubuntu/myapp/venv/bin/uwsgi --ini myapp_uwsgi.ini
[Install]
WantedBy=multi-user.target
五 方案三 Apache mod_wsgi 部署步骤
def application(environ, start_response):
status = '200 OK'
output = b'Hello from Apache + mod_wsgi'
response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
<VirtualHost *:80>
ServerName myapp.local
WSGIDaemonProcess myapp threads=5 python-home=/var/www/myapp/venv python-path=/var/www/myapp
WSGIProcessGroup myapp
WSGIScriptAlias / /var/www/myapp/myapp.py
<Directory /var/www/myapp>
Require all granted
</Directory>
Alias /static /var/www/myapp/static
<Directory /var/www/myapp/static/>
Require all granted
</Directory>
</VirtualHost>
六 上线收尾与安全加固