Django 项目部署
Django 项目部署
1. 概述
将开发完成的 Django 项目部署到指定的服务器上,而服务器的系统基本都是 linux。
Django 项目当前最主要的部署方式是:Python+Django+Nginx+uWSGI
- python:是 python 程序运行的环境
- Django:是项目开发的主要框架,也特指我们开发的 django 项目
- Nginx:反向代理服务器,用于实现对用户请求的转发,转发给 uWSGI,主要实现 3 个功能:
- 反向代理
- 动静分离
- 负载均衡
- uWSGI:python 的 web 服务器,使用 WSGI 协议和 django 项目交互,使用 uwsgi 协议和 nginx 进行通信
2.Django 项目处理
前提是已经开发完毕的项目
在 settings.py 修改
# 修改通用配置
DEBUG = FalseALLOWED_HOSTS = ['*']DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'deploy_study','USER': 'root','PASSWORD': '123456','HOST': '192.168.134.1','PORT': '3306',}
}
# 静态文件处理
# url中访问静态文件的url起始path
STATIC_URL = '/static/'# 合并后的静态文件目录的绝对路径,需要在根目录添加 static 目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')# 以下不是必须的, 扩展的静态文件地址,需要添加 common_static 目录
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'common_static'),
)
说明:
- 修改 DEBUG 为 False,同时必须配置 ALLOWED_HOSTS ,内容是允许访问的域名列表,使用 * 表示通配符
- 修改数据库连接为 生产环境 下使用的
- 主要需要添加 STATIC_ROOT 配置,用于部署后,合并各个子应用下的静态文件
- 部署后,别忘记使用
python manage.py collectstatic
命令,合并各个子应用下的静态文件,然后在 处理静态文件的服务器中(如 nginx)配置到该路径
python 环境处理
在 django 项目的根目录,生成一个 requirements.txt
# 如果使用的第三方库比较少,那么可以手写一个 requirements.txt
# 如果使用的第三方库较多,那么就使用以下命令:
pip freeze > requirements.txt# 拷贝上述的文件到服务器中,并且执行以下命令安装环境
pip3 install -r requirements.txt
复制项目文件到服务器
将项目拷贝 linux 系统中(譬如 FTP),然后移动到 /var/www/ 目录下
mv /ftp/childrenshop /var/www/
PS:拷贝完成后,记得执行合并 static 的命令python manage.py collectstatic
安装和使用 uWSGI
1、 uwsgi 官方文档
2、 在生产环境中,使用虚拟环境,一般我们的 linux 中,会有 2 套 python,一个是系统自带的 python2,一个是我们的项目环境所需的 python3
# 使用以下命令查看
python2 -V
python3 -V
3、 在环境中安装项目所需第三方库,假定当前 djang 项目(项目名:childrenshop)已经拷贝到 /var/www 目录下,并且目录中已经有 requirements.txt 文件
# 切换到 项目路径
cd /var/www/children# 安装环境
pip3 install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
4、 使用 pip 安装 uwsgi
pip3 install uwsgi==2.0.18 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
- -i : 指定镜像源的网址,这里使用的豆瓣
- –trusted-host : 信任 -i 指定的网站,不进行信任的话,会出现 SSL 错误
5、测试 uwsgi
编写一个测试的 py 文件
vi test.py
文件内容如下:
#!/usr/bin/env python3
# coding:utf-8import sysdef application(env,start_response):start_response('200 OK',[('Content-Type','text/html')])return 'Welcome to use uwsgi!!!'.encode()
运行:
/usr/local/python36/bin/uwsgi --http 0.0.0.0:8997 --wsgi-f /var/www/childrenshop/test.py
注意:
由于我们需要从本机访问 linux 的 8997 端口,因此需要设置 linux 的防火墙:
# 开放8997端口
firewall-cmd --zone=public --add-port=8997/tcp --permanent# 删除端口
firewall-cmd --zone=public --remove-port=8997/tcp# 重启防火墙
firewall-cmd --reload# 查看防火墙状态
firewall-cmd --list-all
在浏览器中,访问: http://192.168.134.101:8997 ,注意修改对应的 ip 地址
即可查看到类似如下页面中显示:
Welcome to use uwsgi!!!
6、 使用 uwsgi 启动 django:
使用 ini 格式配置文件,文件名 uwsgi.ini :
vi uwsgi.ini
文件内容:
[uwsgi]
# 虚拟主机模式
vhost = false
# ip端口
socket = 0.0.0.0:8997
# 是否主服务器
master = true
# 是否多线程
enable-threads = true
# 工作进程数
workers = 5
# wsgi文件的位置
wsgi-file = /var/www/childrenshop/childrenshop/wsgi.py
# 项目的根目录
chdir = /var/www/childrenshop/# 设置 pid 记录文件
pidfile = /var/run/uwsgi.pid
# 后台运行uwsgi, 如果想实时查看日志内容,可以使用 tail -f uwsgi.log
daemonize = /var/www/childrenshop/logs/uwsgi.log
说明:
- daemonize 指定 log 输出, 需要创建对应的 目录
- 如果是想要通过浏览器访问的话,需要将配置中的 socket = 修改为 http = ,否则会报以下错误:
invalid request block size: 21573 (max 4096)...skip
同时需要在防火墙中开放 8997 端口,如果上面已经开放过了,就不需要再额外处理
启动 uwsgi:
/usr/local/python36/bin/uwsgi --ini /var/www/childrenshop/uwsgi.ini
也可以先创建链接,再运行:
ln /usr/local/python36/bin/uwsgi /usr/bin/uwsgiuwsgi --ini /var/www/childrenshop/uwsgi.ini
如果不以后台模式启动,会得到如下界面:
备注:
如果需要使用 killall 命令关闭所有的 uwsgi 进程的话,需要安装库:
yum install -y psmisc
安装完毕后,可以使用以下命令关闭 uwsgi 进程
killall -9 uwsgi
7、设置启动脚本,service 方式
在/etc/init.d/ 目录下建立 3 个脚本:
uwsgi-start.sh
#!/bin/bash -eexport LD_LIBRARY_PATH="/usr/local/lib"/usr/local/python36/bin/uwsgi --ini /var/www/childrenshop/uwsgi.ini
说明: export LD_LIBRARY_PATH=“/usr/local/lib” 这一行是为了防止 出现 sqlite 版本错误
uwsgi-stop.sh
#!/bin/bash -e/usr/local/python36/bin/uwsgi --stop /var/run/uwsgi.pid
说明:/var/run/uwsgi.pid 是在 uwsgi.ini 中配置的
uwsgi-restart.sh
#!/bin/bash -e/usr/local/python36/bin/uwsgi --reload /var/run/uwsgi.pid
脚本赋予权限:
chmod 755 uwsgi-start.sh
chmod 755 uwsgi-stop.sh
chmod 755 uwsgi-restart.sh
编写 service 脚本:
vi /usr/lib/systemd/system/uwsgi.service
填入以下内容:
[Unit]
Description=uwsgi
After=network.target[Service]
Type=forking
PIDFile=/var/run/uwsgi.pid
ExecStart=/etc/init.d/uwsgi-start.sh
ExecReload=/etc/init.d/uwsgi-restart.sh
ExecStop=/etc/init.d/uwsgi-stop.sh
PrivateTmp=true[Install]
WantedBy=multi-user.target
说明:
- 以上出现的路径必须是绝对路径
- ExecStart、ExecReload、ExecStop 3 个分别对应 启动、重新启动、停止
- PIDFile 对应启动后的 pid 保存文件
设置自启动
systemctl enable uwsgi.service
说明: .service 可以省略
# 启动
systemctl start uwsgi# 停止
systemctl stop uwsgi# 重启
systemctl restart uwsgi
[Install]
WantedBy=multi-user.target
说明:
- 以上出现的路径必须是绝对路径
- ExecStart、ExecReload、ExecStop 3 个分别对应 启动、重新启动、停止
- PIDFile 对应启动后的 pid 保存文件
设置自启动
systemctl enable uwsgi.service
说明: .service 可以省略
# 启动
systemctl start uwsgi# 停止
systemctl stop uwsgi# 重启
systemctl restart uwsgi
Django 项目部署相关推荐
- 如何将本地python项目部署到服务器上_如何将本地的Django项目部署到云服务器
如何将本地的Django项目部署到云服务器 开发环境 开发语言: Python 后台框架:Django 前端框架:bootstrap web服务器:nginx wsgi服务器:uwsgi 查看本地项目 ...
- Django项目部署在Centos7
把Django项目部署在Centos7下 先有一个Django项目 一个员工管理系统(ems) 员工管理系统 使用VMware创建一个虚拟的Linux系统 Centos7下安装MySql5.7 详细安 ...
- Django项目部署(nginx1.18+uwgsi)
Django项目部署: 9.1uwsgi 遵循wsgi协议的web服务器 9.1.1uwsgi的安装 pip install uwsgi 9.1.2uwsgi的配置 项目部署时,需要把settings ...
- 将Django项目部署到服务器
将Django项目部署到服务器 效果 准备云服务器 服务器链接xshell 安装宝塔 进入宝塔 添加站点 打包本地django文件上传 宝塔面板安装python管理器 django配置文件 配置数据库 ...
- pipenv 虚拟环境 Django项目部署
pipenv 虚拟环境 Django项目部署 1. 创建服务器 创建root 配置ssh 安装python3.7 pip3 ubuntu参考 https://blog.csdn.net/u014775 ...
- Django项目部署到阿里云服务器及后台常驻
本文将记述如何简单的将自己的Django项目部署到阿里云服务器上. 准备条件: 阿里云服务器:centos 7.5 Nginx(反向代理) Python 3.7.3 Django 2.2+注意:cen ...
- Ubuntu 16.04 + Nginx + Django 项目部署
搭建服务器虚拟环境 在本机进入虚拟环境,执行命令导出当前需要的所有包. pip freeze > requirements.txt 通过ftp或者scp等软件将项目代码和requirements ...
- Django项目部署:使用uwsgi和nginx的方式
一.背景 前两天制作的个人博客网站基本完工,大致功能具备.但是在部署环节却也处处碰壁,这里也来总结以下,以备将来不时查看以及完善. 二.前提 2.1 需要的知识 django Django是一个基于p ...
- 阿里云运行python项目_荐个人博客开发-06:Nginx + uWSGI + Django项目部署到阿里云服务器运行...
版本:Python-3.8.1 + Django-2.2 + 阿里云服务器 Ubuntu-16.04 在正式部署前,需要确认几点: 服务器上已经安装相应的 Python MySQL Nginx uWS ...
- Django项目部署
文章目录 在开发机上的准备工作 在服务器上的准备工作 配置国内yum源 编译安装Python3 安装virtualenv 安装MySQL5.7 安装redis 安装memcached 生产环境下Dja ...
最新文章
- -变量,进制,数据类型,标识符
- halcon算子盘点:Chapter 18:元组Tuple
- fuse java_java中的Fuse文件系统 - JVM错误双重免费或损坏
- Unity3D重要知识点
- java反射头文件_编程基础知识——C++能不能支持Java和ObjC的反射?
- mysql、oracle知识点总结
- Keras入门实战(1):MNIST手写数字分类
- B. Code For 1 一个类似于线段树的东西
- 15947884 oracle_Oracle Patch Bundle Update
- angularJs为什么在近几年风头一时无二?
- GIT在WINDOWS/LINUX下载的源码,回车换行有差异
- android提醒设置,如何在Android中设置提醒?
- Google搜索 - 世界各国Google网址大全
- 详细安装WIN 10纯净版(虚拟机安装、真机笔记本安装)
- 基于centos7制作安装好环境的iso镜像文件
- SPSS数据分析-交叉表分析
- 如何禁用win10的水果输入法
- 是兰大文科楼的辉煌灯火让我找到了自己
- 禅与摩托车维修艺术,又名万里任禅游
- Unique Snowflakes 详细题解