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

在 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 数据库

  1. 启动并安全初始化 MySQL

    sudo systemctl start mysql
    sudo systemctl enable mysql
    # 运行安全脚本(设置 root 密码等)
    sudo mysql_secure_installation
  2. 创建数据库和用户
    登录 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

  1. 创建目录并克隆/上传代码

    sudo mkdir -p /var/www/myproject
    cd /var/www/myproject
    # 如果是本地开发,将代码复制过来;如果是 Git 仓库,则 clone
    # sudo git clone https://github.com/your-repo/myproject.git . 
  2. 创建 Python 虚拟环境

    sudo python3 -m venv /var/www/myproject/venv
    source /var/www/myproject/venv/bin/activate
  3. 安装依赖包
    确保你的项目根目录下有 requirements.txt。如果没有,你需要手动安装 django, mysqlclient, gunicorn 等。

    pip install --upgrade pip
    pip install django gunicorn mysqlclient
    # 如果有 requirements.txt:
    # pip install -r requirements.txt
  4. 配置 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

  5. 迁移数据库并创建超级用户

    python manage.py migrate
    python manage.py createsuperuser
    python manage.py collectstatic

第四阶段:配置 Gunicorn (WSGI 服务器)

Gunicorn 负责将 Django 应用转换为 WSGI 服务供 Nginx 调用。

  1. 创建 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 的文件夹名)。

  2. 设置权限并启动服务

    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)

  1. 创建 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;
       }
    }
  2. 启用站点并测试配置

    sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl restart nginx

第六阶段:防火墙与 SSL (可选但推荐)

  1. 配置 UFW 防火墙

    sudo ufw allow 'Nginx Full'
    sudo ufw allow OpenSSH
    sudo ufw enable
  2. 配置 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_URLSTATIC_ROOT 配置正确,且 Nginx 配置了 location /static/

至此,你的 Django + MySQL 生产环境已部署完成。可以通过浏览器访问 http://your_iphttps://your_domain 查看效果。

未经允许不得转载:云知道CLOUD » ubuntu 22.04系统部署web服务器python + Django+mysql?