用django开发项目的时候,都是用debug=True模式运行,所以静态文件都是django去处理。在实际项目中,还是需要多线程以及专门处理静态文件的服务来配合,才能提升整个系统的性能。因此,可以选用nginx+uwsgi+django的架构进行部署。
前期准备
一、安装virtualenv
建议大家都使用virtualenv,方便不同项目不同的包版本不同导致冲突。不了解的同学可以先去了解下
pip3 install virtualenv
添加到环境变量并建立软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
二、项目代码部署到服务器
进入到服务器项目部署目录
cd /www/deploy/
git 拉取代码
# 这是我的项目 你的要换成你的
git clone git@gitee.com:kingofzihua/django.git django/master
# ps: 项目代码的路径为 /www/deploy/django/master 个人习惯,你可以用你自己喜欢的方式
项目目录结构分析
每个项目的目录结构可能不一样,我的项目是自定义的,我在这里稍微说下,不然可能会犯晕
cd /www/deploy/django/master # 进入项目根路径
tree -L 2 # tree命令找不到的话 就 yum install tree -y 安装下 -L 参数是显示几级目录
.
├── app #项目的目录
│ ├── comm
│ ├── index # index 模块
│ ├── __init__.py
├── bootstrap # 这个就是 django创建的那个很重要的目录
│ ├── __init__.py
│ ├── settings.py # 设置文件
│ ├── urls.py # url文件
│ └── wsgi.py #wsgi文件
├── config # 配置文件
│ ├── mysql.conf.example #mysql的配置文件 我是用 文件包含的方式,并没有在 settings中配置
│ └── uwsgi.xml.example #wsgi的配置文件 内容在下面
├── data # 导出的模块数据存放的目录 `python manage.py dumpdata`
│ └── models.json
├── manage.py
├── requirements.txt # 项目依赖
├── static # 静态文件存放路径
│ ├── js
│ ├── css
├── storage # 一些其他资源文件存放目录
│ └── logs # 日志目录
├── templates # 模版文件
│ ├── inclusion_tag
│ ├── index
三、创建并启动虚拟环境
创建指定版本的虚拟环境
cd /www/deploy/django/master # 进入项目根路径
virtualenv --python=/usr/bin/python3 venv
启动虚拟环境
cd /www/deploy/django/master # 进入项目根路径
source venv/bin/activate #
# 这个时候你的命令行应该是这个样子的
# (venv) [root@localhost master] # 前面多了一个 (venv)
四、部署项目
安装项目依赖
pip install -r requirements.txt
安装uwcgi
pip install uwcgi
修改数据库配置文件并进行数据填充
修改数据库配置文件:
根据你的配置文件 修改成正确的就行
数据填充:
python manage.py migrate
修改项目文件
bootstrap/settings.py
:
DEBUG = False # 关闭DEBUG模式
ALLOWED_HOSTS = ['*'] # 表示此Django站点可以投放的主机/域名的字符串列表
创建uwcgi的配置文件
创建文件/www/deploy/django/master/config/uwsgi.xml
写入一下内容:
<uwsgi>
<socket>127.0.0.1:8080</socket> <!-- 内部端口,自定义 -->
<chdir>/www/deploy/django/master/</chdir> <!-- 项目路径 -->
<module>bootstrap.wsgi</module> <!-- bootstrap为wsgi.py所在目录名-->
<processes>4</processes> <!-- 进程数 -->
<daemonize>storage/logs/uwsgi.log</daemonize> <!-- 日志文件 -->
</uwsgi>
创建nginx的配置文件
创建文件/etc/nginx/conf.d/django.conf
并写入一下内容:
server {
listen 80;
server_name blog.kingofzihua.top; # 你的域名 或者ip
charset utf-8;
#access_log /var/log/nginx/host.access.log main;
location / {
include uwsgi_params; # 引入uwsgi模块的文件
uwsgi_pass 127.0.0.1:8080; # 端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT bootstrap.wsgi; # wsgi.py所在的目录名+.wsgi 注意看我的目录结构
uwsgi_param UWSGI_CHDIR /www/deploy/django/master; # #项目路径
}
location /static/ {
alias /www/deploy/django/master/static; # 静态资源访问路径
}
}
查看配置文件是否正确:
nginx -tc /etc/nginx/nginx.conf
检查如果输出下面这样就说明配置文件没有语法错误
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
启动 uwcgi并重启 nginx
cd /www/deploy/django/master
uwsgi -x config.uwcgi.xml # 启动uwcgi
nginx -s reload # 重启nginx 使得 配置文件生效
访问你的域名
浏览器打开你的域名查看项目部署情况
几个关键的文件配置
django database
bootstrap/settings.py
:
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': os.path.join(BASE_DIR, 'config/mysql.conf'),
# 设定sql_mode
# https://docs.djangoproject.com/en/2.1/ref/databases/#mysql-sql-mode
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
},
}
}
config/mysql.conf
:
[client]
host = 127.0.0.1
port = 3306
database = platform
user = root
password = root
default-character-set = utf8mb4
uwcgi 配置
config/uwsgi.xml
:
<uwsgi>
<socket>127.0.0.1:8001</socket> <!-- 内部端口,自定义 -->
<chdir>/you/path/django/</chdir> <!-- 项目路径 -->
<module>bootstrap.wsgi</module> <!-- bootstrap为wsgi.py所在目录名-->
<processes>4</processes> <!-- 进程数 -->
<daemonize>storage/logs/uwsgi.log</daemonize> <!-- 日志文件储存位置 -->
</uwsgi>