走啊走
奋斗

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

服务器价格表

在 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

填入以下内容(请根据实际路径修改 WorkingDirectoryUser):

[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。


验证结果

  1. 访问 http://your_domain.com,应看到 Django 默认页面或你的网站首页。
  2. 检查日志:
    sudo journalctl -u gunicorn -f
    sudo tail -f /var/log/nginx/error.log

至此,一个标准的 Ubuntu + Python + Django 生产环境已搭建完成。后续只需将代码推送到服务器(如通过 Git),并执行 git pullpython manage.py collectstatic 即可部署新版本。