Django – 在CentOS 7上部署Django项目

在部署之前,要确保CentOS 7系统已经安装了MySQL 5.x数据库、Python 3.6.x和Nginx。

部署

准备

在CentOS 7的根目录 / 下创建一个project 目录,该目录用于存放所有要部署的项目。在project 下在创建conf (用户存放所有的配置文件)、 env (用户存放所有的虚拟环境)、 src (用于存放所有项目的源码)、 logs(用于存放所有的日志文件)。

同步数据

使用navicat 将Windows上的数据库同步到CentOS上。首先要确保CentOS上的MySQL可以支持远程连接。

安装虚拟环境

1
2
3
4
5
6
7
8
9
10
# 切换目录
cd /project/env
# 安装虚拟环境 参数:指定虚拟环境中Python的版本(-p 本地Python3的安装目录)
virtualenv --no-site-packages -p /usr/local/python3.6 axfvenv
# 进入虚拟环境目录
cd venv
# 激活虚拟环境
source bin/activate
# 安装环境所需要的包 其中re_install.txt文件中记录的是需要安装包的名称以及对应的版本
pip3 install -r re_install.txt

Django的项目中,在工程目录下settings.py文件中有一个DEBUG=True参数,如果DEBUG=False则会出现js,css,img无法加载的情况出现。

原因如下:

Django框架仅在开发模式下提供静态文件服务。当开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。

部署在测试环境中

在测试环境中一般都直接使用python manage.py runserver的方式去运行项目。其中就涉及到DEBUG=False的修改,静态目录的修改等,具体修改如下:

1
修改settings.py配置文件中的DEBUG=False模式,修改ALLOEWD_HOST=['*']

修改项目目录下的urls.py

1
2
3
4
5
6
7
8
9
# 引入包
from django.views.static import serve

urlpatterns = [
...,

# 增加以下的url路由
url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATICFILES_DIRS[0]}),
]

进入项目目录,使用python manage.py runserver 运行项目。

部署在正式环境中

使用 uwsgi + Nginx + MySQL 来部署项目。

配置nginx.conf文件

1
cd /project/conf

先编写自己项目的nginx.conf文件如下:

每一个项目对应有一个自己定义的nginx的配置文件,比如爱鲜蜂项目,定义为axf_nginx.conf 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80; # 端口
server_name xx.xx.xx.xx localhost; # 公网ip、域名

access_log /project/logs/axf_access.log; # 连接成功日志文件
error_log /project/logs/axf_error.log; # 错误日志

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8090; # 和uwsgi通信的端口
}

location /static/ {
alias /project/src/axf/static/; # 静态文件
expires 30d;
}
}

再修改总的nginx的配置文件,让总的nginx文件包含我们自定义的项目的axf_nginx.conf 文件。

总的nginx配置文件在:/etc/nginx/nginx.conf 中

django_centos_nginx1
django_centos_nginx1

以上步骤操作完成以后,需要重启nginx:

1
2
3
systemctl restart nginx

systemctl status nginx

如果自定义的axf_nginx.conf文件没有错误的话,查看nginx的运行状态会有如下的结果:

django_centos_nginx2
django_centos_nginx2

配置uwsgi文件

先安装uwsgi

1
pip3 install uwsgi

然后进行环境变量的配置, 建立软连接

1
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi

在 /project/conf 文件夹下除了包含自定义的axf_nginx.conf文件,还有我们自定义的axf_uwsgi.ini 配置文件。

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
[uwsgi]
projectname = axf
base = /project/src

# 守护进程
master = true

# 进程个数
processes = 4

# 虚拟环境
pythonhome = /project/env/axfvenv

# 项目地址
chdir = %(base)/%(projectname)

# 指定python版本
pythonpath = /usr/local/python3/bin/python3

# 指定uwsgi文件
module = %(projectname).wsgi

# 和nginx通信地址:端口
socket = 127.0.0.1:8090

# 日志文件地址
logto = /project/logs/axf_uwsgi.log

运行项目:

1
2
3
cd /project/conf

uwsgi --ini axf_uwsgi.ini