ubuntu服务器配置python+django网站环境?

在 Ubuntu 服务器上配置 Python + Django 网站环境,通常采用 Nginx + Gunicorn + Systemd 的生产级架构。这种组合性能稳定、易于维护且安全性高。

以下是详细的操作步骤(以 Ubuntu 22.04/24.04 为例):

1. 系统更新与基础依赖安装

首先更新软件源并安装必要的工具包。

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv nginx curl git -y

2. 创建项目目录与虚拟环境

为了避免污染系统全局 Python 环境,建议为每个项目创建独立的虚拟环境。

# 创建项目目录
sudo mkdir -p /var/www/myproject
cd /var/www/myproject

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 升级 pip 并安装 Django (假设版本为 5.x)
pip install --upgrade pip
pip install django gunicorn psycopg2-binary  # 如果数据库是 PostgreSQL,需安装 psycopg2;MySQL 则用 mysqlclient

注意psycopg2-binary 仅用于开发或快速部署,生产环境建议使用 psycopg2 配合系统库编译。

3. 初始化 Django 项目

在虚拟环境中创建 Django 项目。

django-admin startproject myproject .
# 注意最后的点 "." 表示在当前目录创建项目,而不是在子目录

配置 settings.py

编辑 myproject/settings.py 文件 (nano settings.py):

  1. 允许跨域域名:将你的服务器 IP 或域名添加到 ALLOWED_HOSTS

    ALLOWED_HOSTS = ['your_domain.com', 'www.your_domain.com', 'YOUR_SERVER_IP']
  2. 数据库配置:根据你的数据库类型配置 DATABASES

  3. 静态文件配置:确保 STATIC_ROOT 指向一个绝对路径。

    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    
    # 如果是生产环境,建议关闭调试模式
    DEBUG = False
  4. 收集静态文件

    python manage.py collectstatic
  5. 迁移数据库并创建超级用户

    python manage.py migrate
    python manage.py createsuperuser

4. 启动 Gunicorn 测试服务

在正式配置 Nginx 之前,先手动启动 Gunicorn 验证配置是否正确。

gunicorn myproject.wsgi:application --bind 127.0.0.1:8000
  • --bind 127.0.0.1:8000 表示监听本地端口 8000(Nginx 将通过此端口转发请求)。
  • 如果看到 Starting gunicorn... 且无报错,说明配置成功。按 Ctrl+C 停止它。

5. 配置 Systemd 服务

为了让 Gunicorn 在后台运行并在开机时自动启动,需要创建一个 systemd 服务文件。

sudo nano /etc/systemd/system/gunicorn.service

写入以下内容(请根据实际情况修改路径和用户名):

[Unit]
Description=gunicorn daemon for myproject
After=network.target

[Service]
User=ubuntu          # 替换为你的服务器登录用户名
Group=www-data       # 替换为 www-data 或 root
WorkingDirectory=/var/www/myproject
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

保存后,启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn

6. 配置 Nginx 反向X_X

Nginx 负责接收外部 HTTP 请求并将其转发给 Gunicorn。

sudo nano /etc/nginx/sites-available/myproject

写入以下配置:

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    # 处理静态文件 (可选,Gunicorn 不处理 static,由 Nginx 直接提供)
    location /static/ {
        alias /var/www/myproject/staticfiles/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/myproject/gunicorn.sock;
    }
}

启用站点并重启 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. 配置防火墙与 SSL (HTTPS)

Ubuntu 默认可能未开启防火墙,且生产环境强烈建议使用 HTTPS。

开放防火墙

sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable

申请 SSL 证书 (Let’s Encrypt)

安装 Certbot:

sudo apt install certbot python3-certbot-nginx -y

申请证书(替换域名):

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot 会自动修改 Nginx 配置并设置自动续期。

8. 常见问题排查

  • 权限问题:如果 Nginx 无法读取静态文件或日志,检查 /var/www/myproject 的属主是否为当前用户。
    sudo chown -R ubuntu:www-data /var/www/myproject
    sudo chmod -R 755 /var/www/myproject
  • 数据库连接失败:确保 settings.py 中的数据库密码正确,且数据库服务(如 PostgreSQL/MySQL)已启动并允许远程或本地 socket 连接。
  • 查看日志
    • Gunicorn 日志:通常在 /var/log/gunicorn.log 或通过 journalctl -u gunicorn 查看。
    • Nginx 错误日志:/var/log/nginx/error.log

完成以上步骤后,访问 https://your_domain.com 即可看到你的 Django 网站。

未经允许不得转载:CLOUD技术博 » ubuntu服务器配置python+django网站环境?