django应用部署清单

1.准备工作

1.settings模块拆分
settings模块所在目录创建settings包文件
settings:base.py,production.py,development.py
2.创建secret_key.txt 文件,加密SECRET_KEY后存储在这里

2.production.py

1.关闭DEBUG模式
2.设置ALLOWED_HOSTS = [hosts] #一般为设备IP
3.修改数据库dict为服务器配置,并设置数据库连接最大存活时间CONN_MAX_AGE
4.配置缓存,这里为redis
5.配置错误日志记录和错误邮件发送
6.配置STATIC_ROOT,MEDIR_ROOT
7.安全中间件设置和HTTP安全设置

3.production必要配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
SECRET_KEY 通过环境变量或者加密模块进行加密
DEBUG = False
ALLOWED_HOSTS = [hosts] #一般为设备IP
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "xx",
'USER': "user",
'PASSWORD': "123456",
'HOST': "设备IP",
"PORT": 3306
'CONN_MAX_AGE':60 # 单位为s

}
}

CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
# redis服务器的ip地址及端口号,及数据库序号,redis一共有15个数据库 0~15
"LOCATION": "redis://127.0.0.1:6379/6",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
# 邮件发送模块
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = ""
EMAIL_PORT = 25

EMAIL_HOST_USER = ""
encodestr = ''
EMAIL_HOST_PASSWORD = str(base64.b64decode(encodestr), 'utf-8')
EMAIL_FROM = ""
EMAIL_USE_TLS = False
SERVER_EMAIL = EMAIL_FROM
EMAIL_SUBJECT_PREFIX = '[xx]'

# the logging setting of project
# 生产环境的配置是这样,定义一个生产环境的过滤器,用户访问发生的500系列的错误会发送给管理员
ADMINS = (
('admin', "xx"), # 管理员邮箱设置
)

SEND_BROKEN_LINK_EMAILS = True
MANAGERS = ADMINS

LOGGING = {
'version': 1,
'disable_existing_loggers': True, # 表示停用django第三方工具包的日志
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}
# 日志格式
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
}, # 日志过滤器,DebugFalse表示Debug关闭后才会生效
'handlers': { # 处理器
'null': {
'level': 'DEBUG',
'class': 'logging.NullHandler',
},
'mail_admins': { # 邮件通知管理员
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
'include_html': True, # 发送邮件携带出错页面
},
'debug': { # 记录到日志文件(需要创建相应的目录)
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'log', 'debug.log'), # 日志输出文件
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份份数
'formatter': 'standard', # 使用哪种formatters日志格式
},
'error': { # 记录到日志文件(需要创建相应的目录)
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'log', 'error.log'), # 日志输出文件
'maxBytes': 1024 * 1024 * 5, # 文件大小
'backupCount': 5, # 备份份数
'formatter': 'standard', # 使用哪种formatters日志格式
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard', # 使用哪种formatters日志格式
},

},
'loggers': { # logging管理器
'django': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True
},
'django.request': {
'handlers': ['mail_admins', 'error'],
'level': 'ERROR',
'propagate': False
},
'django.security.DisallowedHost': {
'handlers': ['null'],
'propagate': False
}
}
}

# 下面的可选

# Whether the session cookie should be secure (https:// only).
# 使用安全 cookie
# SESSION_COOKIE_SECURE = True
# CSRF_COOKIE_SECURE = True

#######################
# SECURITY MIDDLEWARE #
#######################
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
# 使用 HTTP 严格传输安全协议(HSTS)
SECURE_HSTS_PRELOAD = True
# 设置SECURE_HSTS_SECONDS会不可逆转地破坏您的网站
"""
HTTP严格传输安全性允许网站通知浏览器它永远不应使用HTTP加载站点,并应自动转换所有使用HTTP到HTTPS请求访问站点的尝试。
它包含一个HTTP头,Strict-Transport-Security,由服务器用资源发回。

换句话说,如果您将值设置SECURE_HSTS_SECONDS为例如518400(6天),
您的网络服务器将在他第一次访问您的网站时通知您的客户的浏览器https,以便将来专门访问您的网站。
这适用于整个定义的时期。如果由于任何原因您不再通过https浏览器访问您的网站,则无法再访问您的服务。

因此,您应该首先将此变量设置为类似60s的低值,并确保一切都按预期工作,否则您可能会阻止自己和您的客户访问您的网站。

"""
# SECURE_HSTS_SECONDS = 60
# 全部采用 HTTPS连接
# 这个要先去申请SSL证书并进行一定的设置
# SECURE_SSL = True
# SECURE_SSL_REDIRECT = True

# Default X-Frame-Options header value
X_FRAME_OPTIONS = 'DENY'
坚持原创技术分享,您的支持将鼓励我继续创作!