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

在 Ubuntu 服务器上部署 Python + Django 网站环境,通常采用 Nginx + Gunicorn + Supervisor 的组合方案。这是目前生产环境中最稳定、性能最好的标准架构。

以下是完整的部署步骤指南:

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

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

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

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

为了避免污染系统 Python,我们创建一个独立的虚拟环境(Virtualenv)。

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

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 升级 pip 并安装 Django (以及其他依赖)
pip install --upgrade pip
pip install django gunicorn

提示:如果你已有代码仓库,此时可以使用 git clone 将代码拉取到 /var/www/myproject 目录下。

3. 配置 Django 项目

假设你已经初始化了 Django 项目(运行过 django-admin startproject mysite .),需要修改 settings.py 以适配生产环境。

编辑 mysite/settings.py

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# 允许所有域名访问 (生产环境建议改为你的具体域名)
ALLOWED_HOSTS = ['your_domain.com', 'www.your_domain.com', 'localhost', '127.0.0.1']

# 开启静态文件收集
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'

# 关闭调试模式 (必须设为 False)
DEBUG = False

# 数据库配置 (示例使用 SQLite,生产环境推荐 PostgreSQL)
# DATABASES = { ... } 

收集静态文件
Django 在生产环境下不会自动提供静态文件,需要手动收集。

python manage.py collectstatic --noinput

4. 配置 Nginx (反向X_X服务器)

Nginx 负责接收用户请求,并将其转发给 Gunicorn 处理,同时直接提供静态文件。

创建 Nginx 配置文件:

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

粘贴以下配置(请替换 your_domain.com 为你的实际域名):

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

    # 静态文件目录
    location /static/ {
        alias /var/www/myproject/staticfiles/;
    }

    # 动态请求转发给 Gunicorn
    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;

        # WebSocket 支持 (如果需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

启用站点并重启 Nginx:

# 链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/

# 测试配置是否正确
sudo nginx -t

# 如果测试通过,重启 Nginx
sudo systemctl restart nginx

5. 配置 Gunicorn (WSGI 应用服务器)

Gunicorn 负责运行 Django 应用。我们需要创建一个 systemd 服务来管理它。

创建服务文件:

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

内容如下(注意路径需根据你的实际情况调整):

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

[Service]
User=ubuntu          # 或者你的服务器用户名
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

注:mysite.wsgi:application 中的 mysite 是你的 Django 项目名称,wsgi 是默认模块名。

启动并设置开机自启:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn

6. 配置 UFW 防火墙 (可选但推荐)

确保只开放必要的端口(80 HTTP, 443 HTTPS)。

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

7. 进阶:配置 SSL (HTTPS)

为了安全,强烈建议使用 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 配置并添加重定向规则。

总结验证

完成上述步骤后,你可以进行以下检查:

  1. 查看日志
    sudo tail -f /var/log/nginx/error.log
    sudo journalctl -u gunicorn -f
  2. 访问网站:在浏览器输入 http://your_domain.com,应该能看到 Django 的欢迎页面或你的网站首页。
  3. 测试静态文件:确保你在 /static/ 下放置的图片或 CSS 能正常加载。

常见问题排查

  • Permission Denied:如果是 gunicorn 无法写入 socket 文件或读取静态文件,通常是权限问题。确保 /var/www/myproject 目录的所有者是当前运行服务的用户(如 ubuntu 用户)。
    sudo chown -R ubuntu:www-data /var/www/myproject
    sudo chmod -R 755 /var/www/myproject
  • Database Error:确保 settings.py 中的数据库连接信息正确,且数据库服务(如 PostgreSQL)已启动。

按照这个流程,你将拥有一个高可用、易维护的 Django 生产环境。

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