Ubuntu Python Web开发如何部署
导读:Ubuntu Python Web 应用部署实战 一 准备与基础环境 系统建议:Ubuntu 20.04/22.04 LTS,具备 SSH 访问权限。 安装基础工具与编译依赖: sudo apt update && su...
Ubuntu Python Web 应用部署实战
一 准备与基础环境
- 系统建议:Ubuntu 20.04/22.04 LTS,具备 SSH 访问权限。
- 安装基础工具与编译依赖:
- sudo apt update & & sudo apt install -y python3 python3-pip python3-venv git build-essential libssl-dev libffi-dev
- 验证版本:
- python3 --version、pip3 --version
- 可选数据库(如 MySQL):
- sudo apt install -y mysql-server
- sudo systemctl start mysql & & sudo systemctl enable mysql
- 安全初始化并按需设置 root 密码与远程策略。
二 部署方案总览
| 方案 | 适用场景 | 核心组件 | 优点 | 要点 |
|---|---|---|---|---|
| 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 部署步骤
- 上传代码与依赖
- 方式一:git clone ;方式二:scp -r 本地目录 用户@服务器:目标目录
- 进入项目目录,创建并激活虚拟环境:python3 -m venv venv & & source venv/bin/activate
- 安装依赖:pip install -r requirements.txt
- 启动 Gunicorn(先本机验证)
- Flask 示例:gunicorn --bind 0.0.0.0:8000 app:app
- Django 示例:gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application
- 配置 Systemd 守护进程
- 新建服务:sudo nano /etc/systemd/system/gunicorn.service
- 示例内容(按需修改路径与用户):
[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 - 启动与开机自启:
- sudo systemctl daemon-reload
- sudo systemctl start gunicorn & & sudo systemctl enable gunicorn
- sudo systemctl status gunicorn
- 配置 Nginx 反向代理
- 安装:sudo apt install -y nginx
- 站点配置:sudo nano /etc/nginx/sites-available/myproject
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/; } } - 启用站点与生效:
- sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
- sudo nginx -t & & sudo systemctl reload nginx
- 防火墙与端口
- UFW:sudo ufw allow ‘Nginx Full’
- 云厂商安全组:放行 80/443
四 方案二 Nginx uWSGI 部署步骤
- 安装 uWSGI
- pip install uwsgi
- 准备 WSGI 入口
- Flask 常见:创建 wsgi.py
from myproject import app if __name__ == "__main__": app.run()
- Flask 常见:创建 wsgi.py
- 配置 uWSGI(myapp_uwsgi.ini)
[uwsgi] module = wsgi:app master = true processes = 4 socket = /run/myapp.sock chmod-socket = 660 vacuum = true die-on-term = true - Systemd 管理 uWSGI
- /etc/systemd/system/myapp.service
[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 - 启动:sudo systemctl daemon-reload & & sudo systemctl start myapp & & sudo systemctl enable myapp
- /etc/systemd/system/myapp.service
- Nginx 配置(与上节类似,仅修改反向代理目标)
- proxy_pass http://unix:/run/myapp.sock; (或使用 uWSGI 协议:include uwsgi_params; uwsgi_pass unix:/run/myapp.sock; )
五 方案三 Apache mod_wsgi 部署步骤
- 安装组件
- sudo apt install -y apache2 libapache2-mod-wsgi-py3
- 准备应用与权限
- 示例 WSGI 应用(/var/www/myapp/myapp.py):
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] - 权限:sudo chown -R www-data:www-data /var/www/myapp
- 示例 WSGI 应用(/var/www/myapp/myapp.py):
- 配置虚拟主机
- /etc/apache2/sites-available/myapp.conf
< 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> - 启用站点与模块:
- sudo a2ensite myapp & & sudo a2dissite 000-default
- sudo a2enmod wsgi
- sudo systemctl restart apache2
- /etc/apache2/sites-available/myapp.conf
六 上线收尾与安全加固
- HTTPS 与证书
- 安装 Certbot:sudo apt install -y certbot python3-certbot-nginx
- 申请并自动配置:sudo certbot --nginx -d your_domain.com
- 静态与媒体文件
- Nginx 中配置 /static/、/media/ 的 alias,由 Nginx 直接服务,减轻应用负载
- 进程与资源
- Gunicorn 建议 2–4 个 worker/CPU 核,结合 –timeout 与 –keep-alive 调优
- uWSGI 根据内存与并发调整 processes/threads,并合理设置 socket 权限与所属组
- 日志与监控
- 应用日志:应用内配置日志文件或使用 systemd 的 StandardOutput/StandardError
- Nginx 日志:/var/log/nginx/access.log、error.log
- 常用命令:sudo journalctl -u gunicorn -f、sudo tail -f /var/log/nginx/error.log
- 防火墙与云安全组
- 仅开放 80/443 与必要管理端口,禁用不必要暴露端口
- 数据库与密钥
- 生产环境禁用数据库 root 远程登录,使用最小权限专用账户
- SECRET_KEY、数据库密码等使用环境变量或密钥管理服务,避免硬编码
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Python Web开发如何部署
本文地址: https://pptw.com/jishu/773251.html
