基于阿里云平台负载均衡的 Django 部署(CentOS 7)
Django 配置
(可选)配置信息读取方式尽量使用从配置文件中读取而非从环境变量中读取,本文认为示例配置文件为 config.example.ini
正式配置文件为 config.ini
打开 Django 的获取转发信息的配置项
1 | USE_X_FORWARDED_HOST = True |
配置好数据库(数据库应该是位于独立服务器上的数据库或类似于 RDS 的云数据库)
配置好 Cache (同上)
配置好 Session Engine(建议使用 Cache)
1 | SESSION_ENGINE = "django.contrib.sessions.backends.cache" |
将相关域名放入 ALLOWED_HOSTS
配置中
收集静态文件
1 | ./manage.py collectstatic |
阿里云负载均衡配置
这里官方文档写的比较详细了,需要注意的是一定在「附加HTTP头字段」里面选中「通过X-Forwarded-For头字段获取客户端真实 IP」和「通过X-Forwarded-Proto头字段获取SLB的监听协议」
在「后端服务器」设置中配置好后端端口即可,本文以「23301」为例
健康检查如果开启,需要注意 Host 写一个位于「ALLOWED_HOSTS」中的 Host,或者将负载均衡的 IP 地址加入配置文件
配置建议
为了安全,建议只设定好 HTTPS 转发并选择只支持 TLS1.2 以上,然后将 HTTP 流量通过负载均衡直接重定向到 HTTPS
安装 nginx
1 | yum install nginx |
安装 Python、pip、virtualenv
这里以 Python3.6 的安装为例,实际安装版本请与开发环境保持一致
1 | yum install epel-release |
使用以下命令测试安装情况并检查版本
1 | python3 --version |
网站配置
假设网站域名为 test.site
,所有文件均存在于 /www/test.site
中
进入此目录,执行下面的命令来配置环境并安装依赖
1 | virtualenv --python=python3.6 venv |
安装依赖
1 | pip install -r requirements.txt |
配置 gunicorn
在 /etc/systemd/system
文件夹中新建 test-site.service
文件,内容如下
1 | [Unit] |
配置 nginx
在 /etc/nginx/conf.d
文件夹中新建文件 test.site.conf
,内容如下
1 | server { |
需要注意 proxy_pass
中的 unix:/var/run/test.site.socket
应与上面 service 文件中 ExecStart
中 --bind
后参数保持一致
检查配置文件是否正常
1 | nginx -t |
重启 nginx 服务器
1 | nginx -s reload |