跳到主要内容

Django 生产环境检查清单

介绍

在开发Django应用时,本地环境通常配置简单,调试方便。然而,当应用准备上线时,生产环境的配置和管理变得至关重要。生产环境不仅需要更高的性能,还需要确保安全性、稳定性和可扩展性。本文将为你提供一份详细的Django生产环境检查清单,帮助你顺利将应用部署到生产环境中。

1. 确保DEBUG模式关闭

在生产环境中,DEBUG模式必须关闭。DEBUG=True会暴露敏感信息,如数据库配置、密钥等,给攻击者提供可乘之机。

python
# settings.py
DEBUG = False
注意

确保在部署前将DEBUG设置为False,否则可能会泄露敏感信息。

2. 配置ALLOWED_HOSTS

ALLOWED_HOSTS是一个安全设置,用于限制Django应用可以处理的主机头。在生产环境中,必须明确指定允许的主机名或IP地址。

python
# settings.py
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
提示

如果你使用通配符*,请确保你了解潜在的安全风险。

3. 使用安全的数据库配置

在生产环境中,数据库配置需要更加严格。确保使用强密码,并限制数据库访问权限。

python
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
警告

避免在代码中硬编码数据库密码,考虑使用环境变量来管理敏感信息。

4. 配置静态文件和媒体文件

在生产环境中,静态文件和媒体文件通常由Web服务器(如Nginx或Apache)处理,而不是Django本身。确保正确配置STATIC_ROOTMEDIA_ROOT

python
# settings.py
STATIC_ROOT = '/var/www/yourdomain.com/static/'
MEDIA_ROOT = '/var/www/yourdomain.com/media/'
备注

在生产环境中,使用collectstatic命令收集静态文件。

5. 使用HTTPS

在生产环境中,必须使用HTTPS来加密客户端与服务器之间的通信。你可以使用Let's Encrypt等免费工具获取SSL证书。

nginx
# Nginx配置示例
server {
listen 443 ssl;
server_name yourdomain.com;

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

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

使用django.middleware.security.SecurityMiddleware来强制HTTPS重定向。

6. 配置日志记录

在生产环境中,日志记录是必不可少的。它可以帮助你监控应用的运行状态,并在出现问题时进行调试。

python
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/var/log/django/debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
警告

确保日志文件有适当的权限,避免敏感信息泄露。

7. 使用缓存

缓存可以显著提高应用的性能。Django支持多种缓存后端,如Memcached和Redis。

python
# settings.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
提示

根据应用的需求选择合适的缓存策略,如页面缓存、数据库查询缓存等。

8. 配置CSRF和CORS

跨站请求伪造(CSRF)和跨域资源共享(CORS)是Web应用安全的重要组成部分。确保正确配置这些设置。

python
# settings.py
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_HTTPONLY = True

CORS_ALLOWED_ORIGINS = [
"https://yourdomain.com",
"https://api.yourdomain.com",
]
注意

在生产环境中,确保CSRF_COOKIE_SECURECSRF_COOKIE_HTTPONLY设置为True

9. 使用Gunicorn和Nginx

Gunicorn是一个Python WSGI HTTP服务器,通常与Nginx一起使用来部署Django应用。

bash
# 启动Gunicorn
gunicorn --workers 3 myproject.wsgi:application
nginx
# Nginx配置示例
server {
listen 80;
server_name yourdomain.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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
备注

使用supervisordsystemd来管理Gunicorn进程。

10. 定期备份和监控

定期备份数据库和文件,并设置监控系统来跟踪应用的性能和健康状况。

bash
# 数据库备份示例
pg_dump mydatabase > mydatabase_backup.sql
提示

使用工具如PrometheusGrafana来监控应用性能。

总结

将Django应用部署到生产环境需要仔细的规划和配置。通过遵循这份检查清单,你可以确保应用在生产环境中安全、高效地运行。记住,生产环境的配置是一个持续的过程,需要定期审查和更新。

附加资源

练习

  1. 将你的Django应用部署到生产环境,并确保所有配置项都符合本文的检查清单。
  2. 使用Let's Encrypt为你的应用配置HTTPS。
  3. 设置日志记录,并监控应用的运行状态。