在 Ubuntu 22.04 上部署 Python + Django + MySQL 的 Web 服务器,最稳定且生产环境推荐的架构是:Nginx (反向X_X) + Gunicorn (应用服务器) + MySQL (数据库)。
以下是完整的从零部署指南:
1. 系统更新与基础依赖安装
首先更新软件源并安装必要的工具(Python, Git, 编译工具等)。
sudo apt update && sudo apt upgrade -y
# 安装 Python3, pip, git, 以及构建 MySQL 客户端所需的开发库
sudo apt install python3-pip python3-venv git build-essential libmysqlclient-dev -y
2. 安装并配置 MySQL 数据库
Ubuntu 22.04 默认仓库中包含 MariaDB,但为了兼容性,我们通常安装官方的 MySQL Server。
# 添加 MySQL APT 仓库
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
# 在安装向导中选择 "MySQL Server" (不要选 MariaDB),版本选 8.0
sudo apt update
sudo apt install mysql-server -y
# 安全初始化
sudo mysql_secure_installation
# 按提示操作:设置 root 密码,移除匿名用户,禁止远程 root 登录等。
创建 Django 专用的数据库和用户:
sudo mysql -u root -p
# 进入 MySQL 后执行以下 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;
3. 创建 Django 项目虚拟环境
为了避免污染系统 Python,建议使用 venv。
# 创建目录并进入
mkdir ~/myproject
cd ~/myproject
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 升级 pip 并安装核心依赖
pip install --upgrade pip
pip install django gunicorn mysqlclient pillow
# 注意:mysqlclient 需要上面安装的 libmysqlclient-dev,如果安装报错请确保已安装
4. 编写 Django 代码
这里以快速创建一个示例项目为例(如果你已有代码,可跳过此步直接配置 settings):
django-admin startproject myproject .
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
修改 myproject/settings.py:
找到 DATABASES 部分,将其修改为连接刚才创建的 MySQL 数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject_db',
'USER': 'myproject_user',
'PASSWORD': 'StrongPassword123!',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
}
测试运行:暂时使用 Django 内置服务器测试数据库连接是否正常。
python manage.py runserver 0.0.0.0:8000 # 访问 http://<你的IP>:8000 看是否报错测试完后按
Ctrl+C停止。
5. 配置 Gunicorn (WSGI 服务器)
Gunicorn 将 Django 应用转化为 WSGI 服务,供 Nginx 转发。
创建 systemd 服务文件:
sudo nano /etc/systemd/system/myproject.service
粘贴以下内容(请根据实际路径和用户名修改):
[Unit]
Description=myproject daemon
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
ExecStart=/home/ubuntu/myproject/venv/bin/gunicorn
--access-logfile -
--workers 3
--bind unix:/home/ubuntu/myproject/myproject.sock
myproject.wsgi:application
Restart=always
[Install]
WantedBy=multi-user.target
注意:myproject.wsgi:application 中的 myproject 是你项目名称,需确保与 settings.py 同级目录一致。
启动服务:
sudo systemctl daemon-reload
sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject
6. 配置 Nginx (反向X_X)
Nginx 负责处理静态文件、SSL 加密(可选)并将请求转发给 Gunicorn 的 socket。
安装 Nginx:
sudo apt install nginx -y
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/myproject
粘贴以下配置:
server {
listen 80;
server_name your_domain_or_ip; # 替换为你的域名或 IP
# 静态文件 (假设你在 settings.py 中设置了 STATIC_ROOT)
location /static/ {
alias /home/ubuntu/myproject/staticfiles/;
}
# 媒体文件 (如果有 MEDIA_ROOT)
location /media/ {
alias /home/ubuntu/myproject/media/;
}
# 转发到 Gunicorn Socket
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;
# 优化 WebSocket 支持 (如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启用站点并重启 Nginx:
# 创建软链接
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
# 删除默认的默认站点(防止端口冲突)
sudo rm /etc/nginx/sites-enabled/default
# 测试配置
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
7. 收集静态文件
Django 在生产环境中不能由 Gunicorn 直接读取分散的静态文件,必须预先收集。
# 确保在虚拟环境中
source venv/bin/activate
# 收集静态文件到 staticfiles 目录
python manage.py collectstatic --noinput
注意:确保 /home/ubuntu/myproject/staticfiles/ 目录对 www-data 用户有读取权限。
8. 防火墙与安全加固
开放端口:
sudo ufw allow 'Nginx Full'
sudo ufw allow 'OpenSSH'
sudo ufw enable
检查状态:
此时访问 http://<你的服务器IP> 应该能看到 Django 首页或你配置的页面。
常见问题排查
-
权限错误 (Permission denied):
- 如果 Gunicorn 无法写入日志或读取文件,检查
myproject.service中的User和Group是否正确,并确保目录权限正确:sudo chown -R ubuntu:www-data /home/ubuntu/myproject sudo chmod -R 755 /home/ubuntu/myproject
- 如果 Gunicorn 无法写入日志或读取文件,检查
-
MySQL 连接失败:
- 确认
settings.py中的密码是否正确。 - 确认
libmysqlclient-dev已安装。 - 如果是 Docker 环境,注意
HOST可能需要改为容器名而非 localhost。
- 确认
-
HTTPS (SSL):
- 生产环境强烈建议配置 HTTPS。可以使用 Certbot 免费获取 Let's Encrypt 证书:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your_domain
- 生产环境强烈建议配置 HTTPS。可以使用 Certbot 免费获取 Let's Encrypt 证书:
通过以上步骤,你已经在 Ubuntu 22.04 上成功搭建了一个高性能、可扩展的 Django + MySQL 生产环境。
CLOUD云计算