速卖通素材
奋斗

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

服务器

在 Ubuntu 服务器上配置 Python + Django 网站环境,通常采用 Nginx + Gunicorn + Python (Virtualenv) 的经典组合。这种架构稳定、高效,是生产环境的最佳实践。

以下是完整的配置步骤,假设你使用的是 Ubuntu 20.04/22.04(命令通用),并拥有 sudo 权限。


第一步:更新系统并安装基础依赖

首先更新软件源,并安装 Python 3、Pip、虚拟环境工具以及编译依赖。

sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-venv python3-dev build-essential libpq-dev nginx -y

注意:如果你使用 PostgreSQL 数据库,请同时安装 libpq-dev;如果使用 MySQL,则需安装 default-libmysqlclient-dev


第二步:创建项目目录与虚拟环境

为了隔离项目依赖,避免污染系统 Python,强烈建议使用虚拟环境(venv)。

  1. 创建项目文件夹

    sudo mkdir -p /var/www/myproject
    cd /var/www/myproject
  2. 初始化虚拟环境

    python3 -m venv venv
    source venv/bin/activate

    激活后,命令行提示符前会出现 (venv) 字样。

  3. 升级 Pip 并安装 Django 及运行服务器

    pip install --upgrade pip
    pip install django gunicorn

第三步:创建 Django 项目

在虚拟环境中创建一个新的 Django 项目(假设项目名为 myproject):

django-admin startproject myproject .

(注意末尾的点 . 表示在当前目录创建项目)

此时你会看到 manage.pymyproject 文件夹。


第四步:配置数据库与静态文件

1. 配置数据库 (以 PostgreSQL 为例)

编辑 myproject/settings.py,找到 DATABASES 部分:

# settings.py

import os

# ... 其他配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql', # 或 mysql
        'NAME': 'your_db_name',
        'USER': 'your_db_user',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

如果是 SQLite,保持默认即可,但生产环境推荐 PostgreSQL。

2. 配置静态文件 (Static Files)

确保 settings.py 中包含以下配置(Django 新建时通常已有):

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

3. 迁移数据库并创建管理员

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

4. 收集静态文件

python manage.py collectstatic

第五步:配置 Nginx 作为反向X_X

Nginx 将负责处理静态文件并转发动态请求给 Gunicorn。

  1. 创建 Nginx 配置文件

    sudo nano /etc/nginx/sites-available/myproject
  2. 写入以下内容(请根据实际情况修改域名和路径):

    server {
       listen 80;
       server_name your_domain_or_IP; # 替换为你的域名或 IP
    
       location /static/ {
           alias /var/www/myproject/staticfiles/;
       }
    
       location / {
           proxy_pass http://127.0.0.1:8000;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
       }
    }
  3. 启用站点并重启 Nginx

    sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
    sudo nginx -t  # 测试配置语法
    sudo systemctl restart nginx

第六步:启动 Gunicorn 服务

我们需要让 Gunicorn 作为一个后台服务运行。

  1. 创建 Systemd 服务文件

    sudo nano /etc/systemd/system/gunicorn.service
  2. 写入内容(注意路径需与你实际创建的项目路径一致):

    [Unit]
    Description=gunicorn daemon for myproject
    After=network.target
    
    [Service]
    User=www-data
    Group=www-data
    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
  3. 设置权限并启动服务

    # 确保 Nginx 用户有权限读取 socket
    sudo chown -R www-data:www-data /var/www/myproject
    
    # 启动并设置开机自启
    sudo systemctl start gunicorn
    sudo systemctl enable gunicorn
  4. 修改 Nginx 配置以匹配 Socket(关键步骤):
    回到之前的 Nginx 配置 /etc/nginx/sites-available/myproject,将 proxy_pass 改为指向 socket 文件:

    location / {
       proxy_pass http://unix:/var/www/myproject/gunicorn.sock;
       # ... 其他 header 配置保持不变
    }

    然后重启 Nginx:sudo systemctl restart nginx


第七步:安全加固 (可选但推荐)

1. 开启 HTTPS (Let’s Encrypt)

生产环境必须使用 HTTPS。推荐使用 Certbot:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain

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

2. 限制 DEBUG 模式

确保 settings.py 中关闭调试模式,否则泄露敏感信息:

DEBUG = False
ALLOWED_HOSTS = ['your_domain.com', 'your_ip']

验证结果

  1. 访问 http://your_domainhttp://your_ip
  2. 如果看到 Django 的欢迎页面或你的网站内容,说明配置成功。
  3. 检查服务状态:
    sudo systemctl status gunicorn
    sudo systemctl status nginx

常见问题排查

  • 404 Not Found: 检查 collectstatic 是否执行,以及 Nginx 的 alias 路径是否正确。
  • Permission Denied: 确保 /var/www/myproject 目录权限属于 www-data 用户,或者至少对 Nginx 可读。
  • Gunicorn 无法启动: 查看日志 journalctl -u gunicorn -f 获取详细报错。

至此,一个标准的 Ubuntu + Python + Django 生产环境已搭建完成。

未经允许不得转载:轻量云Cloud » ubuntu服务器配置python+django网站环境?