在 Ubuntu 上进行 Python Web 开发的标准流程
一 环境准备
- 更新软件源并安装基础工具:sudo apt update && sudo apt install -y python3 python3-pip python3-venv python3-dev build-essential git。完成后用 python3 --version 与 pip3 --version 验证安装。建议始终在虚拟环境中开发,避免依赖冲突。创建与激活虚拟环境:python3 -m venv venv && source venv/bin/activate。为便于复用依赖,生成 requirements.txt:pip freeze > requirements.txt;他人或部署时安装:pip install -r requirements.txt。
二 选择框架与最小示例
- Flask 最小示例
- 安装:pip install Flask
- 代码:创建 app.py
from flask import Flask
app = Flask(name)
@app.route(‘/’)
def hello():
return ‘Hello, World!’
if name == ‘main’:
app.run(debug=True)
- 运行:python3 app.py,浏览器访问:http://127.0.0.1:5000
- Django 最小示例
- 安装:pip install Django
- 创建项目与应用:django-admin startproject myproject && cd myproject && python3 manage.py startapp myapp
- 注册应用:在 myproject/settings.py 的 INSTALLED_APPS 中加入 ‘myapp’
- 运行开发服务器:python3 manage.py runserver,访问:http://127.0.0.1:8000
- 小贴士
- 需要局域网访问时,Flask 可改为 app.run(host=‘0.0.0.0’, port=5000);Django 默认仅本地访问,生产部署请使用 WSGI/ASGI 服务器。
三 数据库与开发工具
- 数据库
- 安装与基础使用:sudo apt install mysql-server 或 sudo apt install postgresql postgresql-contrib;Django 可用 python3 manage.py migrate 初始化内置模型;Flask 常配合 SQLAlchemy 与 psycopg2 操作 PostgreSQL/MySQL/SQLite。
- 开发工具
- IDE/编辑器:安装 PyCharm 或 Visual Studio Code 提升编码与调试效率;结合虚拟环境运行与调试,保持依赖隔离。
四 本地调试与常用命令
- 依赖管理
- 导出:pip freeze > requirements.txt;安装:pip install -r requirements.txt
- Flask 便捷运行
- 设置环境变量:export FLASK_APP=app.py;export FLASK_RUN_PORT=5000
- 启动:flask run --host=0.0.0.0(如需局域网访问)
- Django 常用
- 迁移与运行:python3 manage.py migrate && python3 manage.py runserver
- 版本控制
- 初始化与提交:git init;git add .;git commit -m “init project”。
五 生产部署方案
- 方案 A Nginx + Gunicorn(推荐)
- 安装:pip install gunicorn
- 启动示例:gunicorn -w 4 -b 127.0.0.1:8000 app:app(Flask);Django 通常为 gunicorn myproject.wsgi:application
- Nginx 反向代理示例(/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
- 方案 B Nginx + uWSGI(WSGI)
- 安装:pip install uwsgi
- uWSGI 配置示例(myapp_uwsgi.ini):
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = myapp.sock
chmod-socket = 660
vacuum = true
die-on-term = true
- systemd 服务(/etc/systemd/system/myapp.service):
[Unit]
Description=uWSGI instance to serve myapp
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/path/to/your/app
ExecStart=/path/to/your/app/venv/bin/uwsgi --ini myapp_uwsgi.ini
[Install]
WantedBy=multi-user.target
- 启动与开机自启:sudo systemctl daemon-reload && sudo systemctl enable --now myapp
- Nginx 配置(/etc/nginx/sites-available/default):
server {
listen 80;
server_name your_domain_or_ip;
location / {
include uwsgi_params;
uwsgi_pass unix:/path/to/your/app/myapp.sock;
}
}
- 生效:sudo nginx -t && sudo systemctl reload nginx
- 方案 C Apache + mod_wsgi(备选)
- 安装:sudo apt install libapache2-mod-wsgi-py3
- 配置示例(在 Apache 虚拟主机中):
WSGIScriptAlias / /path/to/your/app/wsgi.py
WSGIDaemonProcess yourapp python-path=/path/to/your/app python-home=/path/to/your/venv
WSGIProcessGroup yourapp
- 生效:sudo systemctl restart apache2
- 安全与运维提示
- 仅在内网开放调试端口;生产环境关闭调试模式;使用 HTTPS(如 Let’s Encrypt);为进程设置非 root 运行用户;用 systemd 或进程管理工具保证高可用。