在 Ubuntu 22.04 上部署 Python + Django + MySQL 的 Web 服务器,通常采用 Nginx (反向X_X) + Gunicorn (WSGI 服务器) + MySQL (数据库) 的经典架构。这种组合性能稳定且易于维护。
以下是完整的部署步骤指南:
第一阶段:系统更新与基础环境安装
首先更新软件源并安装必要的依赖工具。
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv nginx mysql-server mysql-client git curl -y
注意:Ubuntu 22.04 默认使用
python3,无需单独安装 Python 2。
第二阶段:配置 MySQL 数据库
-
启动并安全初始化 MySQL
sudo systemctl start mysql sudo systemctl enable mysql # 运行安全脚本(设置 root 密码等) sudo mysql_secure_installation -
创建数据库和用户
登录 MySQL 控制台:sudo mysql -u root -p执行以下 SQL 语句(请替换为你的实际密码和数据库名):
CREATE DATABASE myproject_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'myproject_user'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON myproject_db.* TO 'myproject_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
第三阶段:部署 Django 项目
假设你的项目文件位于 /var/www/myproject。
-
创建目录并克隆/上传代码
sudo mkdir -p /var/www/myproject cd /var/www/myproject # 如果是本地开发,将代码复制过来;如果是 Git 仓库,则 clone # sudo git clone https://github.com/your-repo/myproject.git . -
创建 Python 虚拟环境
sudo python3 -m venv /var/www/myproject/venv source /var/www/myproject/venv/bin/activate -
安装依赖包
确保你的项目根目录下有requirements.txt。如果没有,你需要手动安装django,mysqlclient,gunicorn等。pip install --upgrade pip pip install django gunicorn mysqlclient # 如果有 requirements.txt: # pip install -r requirements.txt -
配置 Django Settings
编辑settings.py,配置数据库连接:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject_db', 'USER': 'myproject_user', 'PASSWORD': 'StrongPassword123!', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': {'charset': 'utf8mb4'}, } }注意:生产环境请务必将
DEBUG设置为False,并配置ALLOWED_HOSTS。 -
迁移数据库并创建超级用户
python manage.py migrate python manage.py createsuperuser python manage.py collectstatic
第四阶段:配置 Gunicorn (WSGI 服务器)
Gunicorn 负责将 Django 应用转换为 WSGI 服务供 Nginx 调用。
-
创建 systemd 服务文件
sudo nano /etc/systemd/system/gunicorn.service填入以下内容(路径需根据实际修改):
[Unit] Description=gunicorn daemon for myproject After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/myproject Environment="PATH=/var/www/myproject/venv/bin" ExecStart=/var/www/myproject/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/var/www/myproject/gunicorn.sock myproject.wsgi:application [Install] WantedBy=multi-user.target提示:
myproject.wsgi中的myproject是你的项目名称(即包含wsgi.py的文件夹名)。 -
设置权限并启动服务
sudo chown -R www-data:www-data /var/www/myproject sudo systemctl daemon-reload sudo systemctl start gunicorn sudo systemctl enable gunicorn
第五阶段:配置 Nginx (反向X_X)
-
创建 Nginx 配置文件
sudo nano /etc/nginx/sites-available/myproject填入以下内容:
server { listen 80; server_name your_domain_or_IP; # 替换为你的域名或 IP location /static/ { alias /var/www/myproject/static/; } location / { include proxy_params; proxy_pass http://unix:/var/www/myproject/gunicorn.sock; } } -
启用站点并测试配置
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx
第六阶段:防火墙与 SSL (可选但推荐)
-
配置 UFW 防火墙
sudo ufw allow 'Nginx Full' sudo ufw allow OpenSSH sudo ufw enable -
配置 HTTPS (Let’s Encrypt)
如果需要使用域名访问,建议安装 Certbot 获取免费 SSL 证书:sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your_domain按提示操作即可自动配置 HTTPS 并重定向 HTTP 流量。
常见问题排查
- MySQL 连接失败:检查
settings.py中的密码是否正确,以及mysqlclient是否安装成功(有时需要安装libmysqlclient-dev)。 - 404 Not Found:检查
collectstatic是否执行,以及 Nginx 的alias路径是否正确。 - Permission Denied:确保
/var/www/myproject目录属于www-data用户,或者 Gunicorn 以正确的用户运行。 - Django 静态文件不生效:确认
STATIC_URL和STATIC_ROOT配置正确,且 Nginx 配置了location /static/。
至此,你的 Django + MySQL 生产环境已部署完成。可以通过浏览器访问 http://your_ip 或 https://your_domain 查看效果。
云知道CLOUD