文章
django 项目部署
1、开发、测试、生产环境配置
pip install python-dotenv新建配置文件:
开发
.env.dev
测试
.env.test
生产
.env.prod基本格式
# 开发环境配置
DEBUG=True
SECRET_KEY=django-insecure-xxx
ALLOWED_HOSTS=localhost,127.0.0.1
DJANGO_VITE_DEV_MODE=true# 生产环境配置
DEBUG=False
SECRET_KEY=django-insecure-xxx
ALLOWED_HOSTS=localhost,127.0.0.1
DJANGO_VITE_DEV_MODE=false注意:参数获取的值都是字符串类型
2、settings.py改造:
import os
from pathlib import Path
from dotenv import load_dotenv
# 1. 加载环境变量文件
# 优先读取环境变量 ENV_FILE(例如 "ENV_FILE=.env.prod"),否则默认 .env.dev
env_file = os.getenv('ENV_FILE', '.env.dev')
load_dotenv(env_file)
BASE_DIR = Path(__file__).resolve().parent.parent
# 读取 DJANGO_VITE_DEV_MODE,默认为 True(开发时方便)
DJANGO_VITE_DEV_MODE = os.getenv('DJANGO_VITE_DEV_MODE', 'true') == 'true'
# 2. 从环境变量读取敏感配置
SECRET_KEY = os.getenv('SECRET_KEY', 'django-insecure-fallback-key')
DEBUG = os.getenv('DEBUG', 'False') == 'True'
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', 'localhost,127.0.0.1').split(',')
# 3. 数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.getenv('DB_NAME', 'bigdata_center'),
'USER': os.getenv('DB_USER', 'bigdata_center'),
'PASSWORD': os.getenv('DB_PASSWORD', ''),
'HOST': os.getenv('DB_HOST', 'localhost'),
'PORT': os.getenv('DB_PORT', '3306'),
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4',
}
}
}
DJANGO_VITE = {
'default': {
'dev_mode': DJANGO_VITE_DEV_MODE,
}
}
django-vite 及静态文件配置
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/6.0/howto/static-files/
STATIC_URL = 'static/'
# 这里制定vite编译路径 在执行 collectstatic 命令是会统一汇集到STATIC_ROOT指定路径
STATICFILES_DIRS = [
BASE_DIR / 'assets',
]
STATIC_ROOT = BASE_DIR / 'staticfiles'日志配置:
LOG_DIR = BASE_DIR / 'logs'
LOG_DIR.mkdir(exist_ok=True)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{asctime} | {levelname:8} | {pathname}:{lineno} | {threadName} | {message}',
'style': '{',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
'simple': {
'format': '[{levelname:.1s}] {asctime} {filename}:{lineno} - {message}',
'style': '{',
'datefmt': '%H:%M:%S',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'INFO',
'formatter': 'simple',
},
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': str(LOG_DIR / 'application.log'),
'maxBytes': 10 * 1024 * 1024,
'backupCount': 5,
'encoding': 'utf-8',
'level': 'DEBUG',
'formatter': 'verbose',
},
},
'root': {
'handlers': ['console', 'file'],
'level': 'DEBUG',
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': False,
},
'datasource': {
'handlers': ['console', 'file'],
'level': 'DEBUG',
'propagate': False,
},
# 其他自定义 app
},
}3、使用静态资源服务(不使用nginx)
pip install whitenoise配置中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
# 可选:开启压缩和缓存(提升性能)
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'确保静态文件已收集
python manage.py collectstatic --no-input以上配置后启动django即可拥有静态资源访问服务
4、服务部署
安装gunicorn
pip install gunicorn启动命令
# 使用 gunicorn(推荐)或 runserver
export ENV_FILE=.env.prod
gunicorn bigdata_center.wsgi:application --workers 2 --bind 0.0.0.0:8000