走啊走
加油

ubuntu 22.04系统部署web服务器python + Django+mysql?

服务器价格表

在 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 首页或你配置的页面。


常见问题排查

  1. 权限错误 (Permission denied)

    • 如果 Gunicorn 无法写入日志或读取文件,检查 myproject.service 中的 UserGroup 是否正确,并确保目录权限正确:
      sudo chown -R ubuntu:www-data /home/ubuntu/myproject
      sudo chmod -R 755 /home/ubuntu/myproject
  2. MySQL 连接失败

    • 确认 settings.py 中的密码是否正确。
    • 确认 libmysqlclient-dev 已安装。
    • 如果是 Docker 环境,注意 HOST 可能需要改为容器名而非 localhost。
  3. HTTPS (SSL)

    • 生产环境强烈建议配置 HTTPS。可以使用 Certbot 免费获取 Let's Encrypt 证书:
      sudo apt install certbot python3-certbot-nginx
      sudo certbot --nginx -d your_domain

通过以上步骤,你已经在 Ubuntu 22.04 上成功搭建了一个高性能、可扩展的 Django + MySQL 生产环境。