阿里云上部署Django项目

✅ 一、服务器环境假设
系统:Ubuntu 22.04+

项目根目录:/var/www/material_management

Python 虚拟环境目录:/var/www/material_management/venv

数据库:MariaDB(已安装并配置)

域名:leica-microsystems-materials.com

邮箱发送任务:使用 Celery + Redis + Django 邮件系统

服务管理:systemd

✅二、项目结构
/var/www/material_management/
├── manage.py
├── material_management/ # 项目主目录
├── materials/ # 应用目录
├── static/ # 收集的静态文件目录
├── templates/
├── uwsgi.ini
├── requirements.txt
└── venv/

✅ 三、配置与依赖

  1. 安装依赖
sudo apt update
sudo apt install -y python3 python3-venv python3-dev build-essential mariadb-server libmariadb-dev \
                    nginx supervisor redis uwsgi uwsgi-plugin-python3
  1. 数据库创建
CREATE DATABASE material_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'django_user'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON material_db.* TO 'django_user'@'localhost';
FLUSH PRIVILEGES;
  1. 拉取项目到目标目录
sudo mkdir -p /var/www/
cd /var/www/
sudo git clone https://your_repo_url.git material_management
cd material_management
  1. 创建虚拟环境并安装依赖
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip

# 安装依赖
pip install -r requirements.txt

# 若无 requirements.txt,可手动安装示例
pip install django mariadb django-celery-beat celery redis uwsgi gunicorn

5.Django 配置

ALLOWED_HOSTS = ['*']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'material_db',
        'USER': 'material_user',
        'PASSWORD': 'your_strong_password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

# Celery 配置
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

6.数据库迁移与静态文件

python manage.py makemigrations

python manage.py migrate --fake-initial  # 如果之前部署过,则直接执行fake-initial,否则跳过此步
python manage.py migrate
python manage.py collectstatic --noinput
  1. 创建 uwsgi.ini 文件
cd /var/www/material_management/

然后nano uwsgi.ini,将下面的内容拷贝到文件内并保存:

[uwsgi]
chdir = /var/www/material_management
module = material_management.wsgi:application
home = /var/www/material_management/venv

master = true
processes = 4
socket = /run/uwsgi/materials.sock
chmod-socket = 660
uid = www-data
gid = www-data
vacuum = true
die-on-term = true

8.创建 systemd 服务 /etc/systemd/system/uwsgi.service

[Unit]
Description=uWSGI Django Service
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/var/www/material_management

# 由 systemd 自动在 /run/uwsgi 建立目录
RuntimeDirectory=uwsgi
RuntimeDirectoryMode=0755

ExecStart=/var/www/material_management/venv/bin/uwsgi --ini /var/www/material_management/uwsgi.ini
Restart=always

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

9.启动 uWSGI 服务

sudo systemctl daemon-reexec
#启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable uwsgi
sudo systemctl start uwsgi

10.创建配置文件 /etc/nginx/sites-available/materials

# HTTP跳转到HTTPS
server {
    listen 80;
    server_name leica-microsystems-materials.com 8.153.193.21; #IP 和域名都可以访问
    return 301 https://$host$request_uri;
}

# HTTPS server
server {
    listen 443 ssl;
    server_name leica-microsystems-materials.com 8.153.193.21;

    ssl_certificate     /etc/ssl/certs/leica-microsystems-materials.com.pem;
    ssl_certificate_key /etc/ssl/private/leica-microsystems-materials.com.key;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    access_log  /var/log/nginx/materials.access.log;
    error_log   /var/log/nginx/materials.error.log;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/run/uwsgi/materials.sock;
    }

    # 静态文件(修改 alias 路径)
    location /static/ {
        alias /var/www/material_management/static/;
    }

    # 媒体文件(可选)
    location /media/ {
        alias /var/www/material_management/media/;
    }
}

11.启用站点并重启

sudo ln -s /etc/nginx/sites-available/materials /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

四、自动部署脚本
路径:/var/www/material_management/deploy.sh
chmod +x /var/www/material_management/deploy.sh 给予文件执行权限。

#!/bin/bash

PROJECT_DIR="/var/www/material_management"
VENV_DIR="$PROJECT_DIR/venv"
BRANCH="main"

echo "🕘 [$(date)] 自动部署开始..."

cd $PROJECT_DIR || exit 1
git fetch origin $BRANCH
git reset --hard origin/$BRANCH

source $VENV_DIR/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --noinput

sudo systemctl restart uwsgi

echo "✅ [$(date)] 自动部署完成"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容