在 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)。
-
创建项目文件夹:
sudo mkdir -p /var/www/myproject cd /var/www/myproject -
初始化虚拟环境:
python3 -m venv venv source venv/bin/activate激活后,命令行提示符前会出现
(venv)字样。 -
升级 Pip 并安装 Django 及运行服务器:
pip install --upgrade pip pip install django gunicorn
第三步:创建 Django 项目
在虚拟环境中创建一个新的 Django 项目(假设项目名为 myproject):
django-admin startproject myproject .
(注意末尾的点 . 表示在当前目录创建项目)
此时你会看到 manage.py 和 myproject 文件夹。
第四步:配置数据库与静态文件
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。
-
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/myproject -
写入以下内容(请根据实际情况修改域名和路径):
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; } } -
启用站点并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ sudo nginx -t # 测试配置语法 sudo systemctl restart nginx
第六步:启动 Gunicorn 服务
我们需要让 Gunicorn 作为一个后台服务运行。
-
创建 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 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 -
设置权限并启动服务:
# 确保 Nginx 用户有权限读取 socket sudo chown -R www-data:www-data /var/www/myproject # 启动并设置开机自启 sudo systemctl start gunicorn sudo systemctl enable gunicorn -
修改 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']
验证结果
- 访问
http://your_domain或http://your_ip。 - 如果看到 Django 的欢迎页面或你的网站内容,说明配置成功。
- 检查服务状态:
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