在 Ubuntu 服务器上配置 Python + Django 网站环境,通常采用 Nginx + Gunicorn + Systemd 的生产级架构。这种组合比直接使用 python manage.py runserver 更安全、性能更好且易于管理。
以下是完整的配置步骤:
1. 更新系统并安装基础依赖
首先登录服务器,更新软件包列表并安装必要的工具(Git, Python3, PIP, Nginx 等)。
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv nginx git -y
2. 创建项目目录与虚拟环境
为了避免污染系统全局 Python 环境,建议使用虚拟环境。
# 创建项目文件夹
mkdir -p /var/www/myproject
cd /var/www/myproject
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装 Django 和其他依赖 (假设你已有 requirements.txt)
pip install django gunicorn psycopg2-binary
# 如果是开发测试,也可以直接安装: pip install django gunicorn
3. 初始化 Django 项目
注意:如果你已经有一个现成的 Django 项目代码,请跳过此步,直接将代码上传到 /var/www/myproject 目录。
django-admin startproject mysite .
# 上面的点 "." 表示在当前目录创建项目
关键配置修改:
编辑 mysite/settings.py,允许本地 IP 访问(生产环境建议限制具体域名):
# settings.py
ALLOWED_HOSTS = ['your_server_ip', 'localhost', 'your_domain.com']
STATIC_ROOT = '/var/www/myproject/static/'
MEDIA_ROOT = '/var/www/myproject/media/'
4. 收集静态文件
Django 在生产环境下需要将所有静态文件(CSS, JS, 图片)收集到一个统一目录,由 Nginx 负责分发。
python manage.py collectstatic --noinput
5. 配置 Gunicorn 服务
Gunicorn 是一个 WSGI HTTP 服务器,用于运行 Django 应用。我们需要创建一个 Systemd 服务文件来管理它。
创建服务文件:
sudo nano /etc/systemd/system/gunicorn.service
填入以下内容(请根据实际路径修改 WorkingDirectory 和 User):
[Unit]
Description=gunicorn daemon for mysite
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
mysite.wsgi:application
[Install]
WantedBy=multi-user.target
注意:
my site.wsgi:application中的mysite需替换为你实际的 Django 项目名称。
启动并设置开机自启:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
6. 配置 Nginx 反向X_X
Nginx 将作为前端服务器,处理静态文件并将动态请求转发给 Gunicorn。
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/myproject
填入以下配置(替换 your_domain.com 为你的域名或 IP):
server {
listen 80;
server_name your_domain.com your_server_ip;
location = /favicon.ico { access_log off; log_not_found off; }
# 静态文件
location /static/ {
root /var/www/myproject;
}
# 媒体文件
location /media/ {
root /var/www/myproject;
}
# 转发给 Gunicorn
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 nginx -t
sudo systemctl restart nginx
7. 配置数据库 (可选但推荐)
如果需要使用 PostgreSQL(生产环境推荐),需安装并配置:
sudo apt install postgresql postgresql-contrib libpq-dev python3-dev -y
sudo -u postgres psql
在 SQL 提示符中:
CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
q
然后在 settings.py 中配置 DATABASES,并在 .env 文件中存储敏感信息,最后运行迁移:
python manage.py migrate
python manage.py createsuperuser
8. 安全加固 (防火墙与 SSL)
开启防火墙:
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
配置 HTTPS (SSL):
使用 Certbot 免费申请证书:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com
Certbot 会自动修改 Nginx 配置并重定向 HTTP 到 HTTPS。
验证结果
- 访问
http://your_domain.com,应看到 Django 默认页面或你的网站首页。 - 检查日志:
sudo journalctl -u gunicorn -f sudo tail -f /var/log/nginx/error.log
至此,一个标准的 Ubuntu + Python + Django 生产环境已搭建完成。后续只需将代码推送到服务器(如通过 Git),并执行 git pull 和 python manage.py collectstatic 即可部署新版本。
CLOUD云计算