n5321 | 2024年12月3日 17:35

Tags:


1. 项目概述

简要介绍您的 Django 项目,包括项目的目标、功能以及需要部署的主要模块。

例如:

  • 项目名称:Django 博客系统

  • 目标:一个用于发布文章、评论、用户管理等的博客系统。


2. 部署环境准备

2.1 云服务器准备

列出需要使用的云服务提供商(例如:阿里云、腾讯云、AWS、Azure 等),并说明如何租用一台云服务器。 说明需要准备的服务器配置:

  • 操作系统:Ubuntu 20.04 / CentOS 7 等

  • 服务器规格:1核 2GB 内存(根据项目需求调整)

2.2 SSH 连接设置

简要介绍如何通过 SSH 连接到云服务器,确保已经准备好服务器的 IP 地址和 SSH 密钥。


3. 安装依赖

3.1 操作系统基础配置

列出部署服务器所需的操作系统配置步骤:

  • 更新系统:sudo apt update && sudo apt upgrade

  • 安装常见工具:sudo apt install build-essential python3-dev

3.2 安装 Python 环境

  • 安装 Python(通常会安装 Python 3.x):sudo apt install python3 python3-pip python3-venv

  • 确保安装了正确版本的 pipvirtualenv

3.3 安装数据库(如果使用 PostgreSQL 或 MySQL)

  • 安装 PostgreSQL:sudo apt install postgresql postgresql-contrib

  • 配置数据库用户和数据库

  • 创建一个数据库:CREATE DATABASE myproject;


4. 项目上传与配置

4.1 上传项目代码

  • 使用 SCP 或 Git 将本地代码上传到云服务器:

    • 使用 Git:git clone https://github.com/your-repo/project.git

    • 使用 SCP:scp -r /path/to/project user@server:/path/to/destination

4.2 配置虚拟环境

  • 创建虚拟环境:python3 -m venv myenv

  • 激活虚拟环境:source myenv/bin/activate

  • 安装依赖:pip install -r requirements.txt


5. 配置 Web 服务器与数据库

5.1 配置数据库

确保在 settings.py 文件中配置了正确的数据库连接信息:

python复制代码DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.postgresql',
      'NAME': 'myproject',
      'USER': 'myuser',
      'PASSWORD': 'mypassword',
      'HOST': 'localhost',
      'PORT': '5432',
  }
}

5.2 迁移数据库

运行数据库迁移命令,将 Django 项目的数据库表结构创建出来:

bash


复制代码
python manage.py migrate

5.3 配置静态文件和媒体文件

  • settings.py 中设置静态文件和媒体文件路径:

    python复制代码STATIC_URL = '/static/'
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  • 收集静态文件:python manage.py collectstatic


6. 配置 Web 服务器

6.1 安装 Nginx

安装并配置 Nginx 作为反向代理:

bash


复制代码
sudo apt install nginx

在 Nginx 配置文件中设置反向代理,将请求转发到 Gunicorn:

nginx复制代码server {
  listen 80;
  server_name your_domain.com;

  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;
  }
}

6.2 安装 Gunicorn

安装并配置 Gunicorn 作为 WSGI 服务器:

bash


复制代码
pip install gunicorn

启动 Gunicorn 服务:

bash


复制代码
gunicorn --workers 3 myproject.wsgi:application

7. 配置自动化服务(可选)

7.1 使用 Supervisor 管理 Gunicorn

安装 Supervisor 来管理 Gunicorn 服务的自动重启:

bash


复制代码
sudo apt install supervisor

配置 Gunicorn 的 Supervisor 文件:

ini复制代码[program:myproject]
command=/path/to/venv/bin/gunicorn --workers 3 myproject.wsgi:application
directory=/path/to/project
autostart=true
autorestart=true
stderr_logfile=/var/log/myproject.err.log
stdout_logfile=/var/log/myproject.out.log

启动 Supervisor:

bash复制代码sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myproject

7.2 使用 Systemd 管理服务(可选)

您可以使用 Systemd 来管理 Gunicorn 服务,确保它在系统启动时自动运行。

创建一个 gunicorn.service 文件:

ini复制代码[Unit]
Description=gunicorn daemon for myproject
After=network.target

[Service]
User=your_user
Group=your_group
WorkingDirectory=/path/to/project
ExecStart=/path/to/venv/bin/gunicorn --workers 3 myproject.wsgi:application

[Install]
WantedBy=multi-user.target

启动并启用服务:

bash复制代码sudo systemctl start gunicorn
sudo systemctl enable gunicorn

8. 配置 HTTPS(可选)

8.1 获取 SSL 证书

使用 Let's Encrypt 获取免费的 SSL 证书,配置 Nginx 使用 HTTPS。

安装 Certbot:

bash


复制代码
sudo apt install certbot python3-certbot-nginx

生成证书:

bash


复制代码
sudo certbot --nginx -d your_domain.com

9. 测试与验证

9.1 访问项目

在浏览器中访问您的服务器域名或 IP 地址,确保 Django 项目正常运行。

9.2 检查日志

如果有任何问题,检查 Gunicorn、Nginx 或 Django 的日志文件:

  • Gunicorn 日志:/var/log/myproject.out.log

  • Nginx 错误日志:/var/log/nginx/error.log

  • Django 错误日志:python manage.py runserver --settings=myproject.settings.production


10. 维护与更新

10.1 更新代码

每次更新代码后,您可以通过 Git 拉取更新,然后重启 Gunicorn:

bash复制代码git pull origin main
sudo supervisorctl restart myproject

10.2 数据库迁移

如果添加了新的模型或更改了数据库结构,运行数据库迁移命令:

bash


复制代码
python manage.py migrate

附录

常见问题及解决方法

  • 数据库连接失败:检查数据库配置是否正确,是否已创建数据库和用户。

  • 404 错误:确认 Nginx 配置是否正确,Gunicorn 是否在正确的端口上运行。

  • 静态文件未加载:检查 collectstatic 是否成功执行,静态文件路径是否配置正确。