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 项目部署相关推荐

  1. 如何将本地python项目部署到服务器上_如何将本地的Django项目部署到云服务器

    如何将本地的Django项目部署到云服务器 开发环境 开发语言: Python 后台框架:Django 前端框架:bootstrap web服务器:nginx wsgi服务器:uwsgi 查看本地项目 ...

  2. Django项目部署在Centos7

    把Django项目部署在Centos7下 先有一个Django项目 一个员工管理系统(ems) 员工管理系统 使用VMware创建一个虚拟的Linux系统 Centos7下安装MySql5.7 详细安 ...

  3. Django项目部署(nginx1.18+uwgsi)

    Django项目部署: 9.1uwsgi 遵循wsgi协议的web服务器 9.1.1uwsgi的安装 pip install uwsgi 9.1.2uwsgi的配置 项目部署时,需要把settings ...

  4. 将Django项目部署到服务器

    将Django项目部署到服务器 效果 准备云服务器 服务器链接xshell 安装宝塔 进入宝塔 添加站点 打包本地django文件上传 宝塔面板安装python管理器 django配置文件 配置数据库 ...

  5. pipenv 虚拟环境 Django项目部署

    pipenv 虚拟环境 Django项目部署 1. 创建服务器 创建root 配置ssh 安装python3.7 pip3 ubuntu参考 https://blog.csdn.net/u014775 ...

  6. Django项目部署到阿里云服务器及后台常驻

    本文将记述如何简单的将自己的Django项目部署到阿里云服务器上. 准备条件: 阿里云服务器:centos 7.5 Nginx(反向代理) Python 3.7.3 Django 2.2+注意:cen ...

  7. Ubuntu 16.04 + Nginx + Django 项目部署

    搭建服务器虚拟环境 在本机进入虚拟环境,执行命令导出当前需要的所有包. pip freeze > requirements.txt 通过ftp或者scp等软件将项目代码和requirements ...

  8. Django项目部署:使用uwsgi和nginx的方式

    一.背景 前两天制作的个人博客网站基本完工,大致功能具备.但是在部署环节却也处处碰壁,这里也来总结以下,以备将来不时查看以及完善. 二.前提 2.1 需要的知识 django Django是一个基于p ...

  9. 阿里云运行python项目_荐个人博客开发-06:Nginx + uWSGI + Django项目部署到阿里云服务器运行...

    版本:Python-3.8.1 + Django-2.2 + 阿里云服务器 Ubuntu-16.04 在正式部署前,需要确认几点: 服务器上已经安装相应的 Python MySQL Nginx uWS ...

  10. Django项目部署

    文章目录 在开发机上的准备工作 在服务器上的准备工作 配置国内yum源 编译安装Python3 安装virtualenv 安装MySQL5.7 安装redis 安装memcached 生产环境下Dja ...

最新文章

  1. -变量,进制,数据类型,标识符
  2. halcon算子盘点:Chapter 18:元组Tuple
  3. fuse java_java中的Fuse文件系统 - JVM错误双重免费或损坏
  4. Unity3D重要知识点
  5. java反射头文件_编程基础知识——C++能不能支持Java和ObjC的反射?
  6. mysql、oracle知识点总结
  7. Keras入门实战(1):MNIST手写数字分类
  8. B. Code For 1 一个类似于线段树的东西
  9. 15947884 oracle_Oracle Patch Bundle Update
  10. angularJs为什么在近几年风头一时无二?
  11. GIT在WINDOWS/LINUX下载的源码,回车换行有差异
  12. android提醒设置,如何在Android中设置提醒?
  13. Google搜索 - 世界各国Google网址大全
  14. 详细安装WIN 10纯净版(虚拟机安装、真机笔记本安装)
  15. 基于centos7制作安装好环境的iso镜像文件
  16. SPSS数据分析-交叉表分析
  17. 如何禁用win10的水果输入法
  18. 是兰大文科楼的辉煌灯火让我找到了自己
  19. 禅与摩托车维修艺术,又名万里任禅游
  20. Unique Snowflakes 详细题解

热门文章

  1. 视频教程-【企业定制课】AI软件illustratorCC应用与平面印刷视频教程-UI
  2. rtmp协议官方规范
  3. javacv教程文档手册开发指南汇总篇
  4. 专科程序员,学历可能会成为发展障碍
  5. 升级版DC/DC转换器有什么优点?
  6. Selenium下载页面上的图片
  7. 身份证前6位匹配户籍地址对应的数据地区sql脚本(里面包含json版本的)
  8. 学前端的记录帖html+css b站千峰19版
  9. iir 滤波器 结构介绍
  10. 互亿无线短信平台接口java实现