线上生产环境部署Djngao+Nginx+Uwsgi

是否曾想过把django项目从windows移植到Linux上运行,Linux性能众所周知,作为Django运行的服务器再合适不过啦,今天分享一下如何在线上云机器的Linux环境运行Django项目。

客户端访问服务端的流程
1.首先客户端请求服务资源,
2.nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包分析。
3.如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,否则会根据django配置文件设置的static目录去找资源。
4.如果是动态的请求,nginx就通过配置文件,将请求传递给uwsgi;
5.uwsgi 将接收到的包进行处理,并转发给wsgi, wsgi根据请求调用django工程的某个文件或函数,处理完后,django将返回值交给wsgi, wsgi将返回值进行打包,转发给uwsgi,
6.uwsgi接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。

补充一点知识:
1.wsgi是web服务器与web程序之间的一种低级别的接口
2.uwsgi是一个基于uwsgi协议、wsgi协议和Http协议的WEB接口,简单说就是web通过uwsgi访问到django文件

一、环境准备

  1. Linux服务器一台
  2. Nginx软件包
  3. MySQL软件包
  4. Django项目

二、环境部署
1.在Linux安装python,根据自己项目需要安装python版本

1.1安装相关依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

1.2编译安装

cd /usr/local/
tar xf Python-3.5.1.tgz
cd Python-3.5.1/
./configure --enable-optimizations
cd Python-3.5.1/
make && make install

1.3修改Python文件

mv /usr/bin/python /usr/bin/python2.7.5
ln -s /usr/local/bin/python3.5 /usr/bin/python
python -V   #这里输出是你编译版本就OK啦
Python 3.5.1

1.4修改yum配置文件,因为修改了python文件,yum是无法使用

vim /usr/bin/yum
#!/usr/bin/python2.7.5   修改为之前移动的python文件

还有一些因为Yum安装报错可以根据上面修改即可

2.安装模块

2.1 安装uwsgi模块
pip3 install uwsgi
2.2 安装pymysql模块
pip3 install pymysql
2.3 安装django
pip3 install django==2.0

3.修改django配置文件
3.1在项目中的init文件写入下面代码,如果不填会连接不了数据库哈

import pymysql
pymysql.install_as_MySQLdb()

3.2修改setting.py配置文件

DEBUG = False    #这里需要改为False,不然程序报错,会在WEB页面显示出来
ALLOWED_HOSTS = [‘IP‘]      #这里设置你允许哪些IP访问
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,  #这是指连接数据库的驱动
        ‘NAME‘: ‘xxxxx‘,                      #你的项目数据库名
        ‘USER‘: ‘xxxxx‘,                       #连接数据库用户
        ‘PASSWORD‘: xxxxxxxxx‘,      #数据库密码
        ‘HOST‘: "xxxxxxxx",                 #主机
        ‘PORT‘: ‘3306‘,                         #端口
    }
}
TIME_ZONE = ‘Asia/Shanghai‘               #修改为中国区域
USE_TZ = False                                      #关闭
STATIC_ROOT= "/data/autoops/static"    #设置为你的静态目录

4.编译安装niginx
5.二进制安装mysql
6.上传django项目代码到Linux服务器,根据你的需求放到指定目录

7.编写uwsgi文件,我的文件在/data/autoops/script/uwsgi.ini (重点)

[uwsgi]
# 项目目录
chdir=/data/autoops/
# 指定项目的application
module=autoops.wsgi:application
# 进程个数
workers=8
pidfile=/data/autoops/script/uwsgi.pid
# 指定IP端口
#http=192.168.10.155:8003    ##可以不启用,利用socket文件,如果只是测试,需要启用
# 指定静态文件目录
static-map=/static=/data/autoops/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/data/autoops/script/uwsgi.log
# 指定sock的文件路径
socket=/data/autoops/script/uwsgi.sock
die-on-term=true 

8.uwsgi命令

uwsgi --reload uwsgi.pid  重启
uwsgi --stop uwsgi.pid 关闭
uwsgi --ini uwsgi.ini 启动

9.在启动之前,需要注意的,如果你setting的DEBUG是关闭状态的,需要在django项目中执行python manage.py collectstatic,作用是收集Django项目中所有涉及到的静态资源,统计放到 STATIC_ROOT 管理访问,如果你不执行,你会发现,django项目无法加载CSS样式,JS脚本。
如图下方

10.初始化django项目的ORM

   1. python manage.py makemigrations 把models.py里面的改动记录下来,记录到migrations文件夹下面
   2. python manage.py migrate   把改动翻译成SQL语句去数据库执行

11.配置Nginx文件并且检查语法启动

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       你的端口号;
        server_name  公网IP;
        location / {
                include uwsgi_params;
                uwsgi_connect_timeout 30;
                uwsgi_pass unix:/data/autoops/script/uwsgi.sock;    #你的uwsgi.sock文件位置
        }
    }
}

12.启动uwsgi和nginx

[[email protected]:56:29/data/autoops]# uwsgi --ini script/uwsgi.ini
[uWSGI] getting INI configuration from script/uwsgi.ini
[uwsgi-static] added mapping for /static => /data/autoops/static

三、测试访问nginx

总结:部署不难,需要注意一下,文章有些地方没详细说的,自己可以思考哈,下次再分享

原文地址:https://blog.51cto.com/beckoning/2422101

时间: 2024-10-12 17:25:27

线上生产环境部署Djngao+Nginx+Uwsgi的相关文章

Django 生产环境部署-记录 nginx+uwsgi+Django

这几天一直研究django生产环境的部署,看了很多文章,都写的很好,有些时候只是环境不太一样,配置过程中出现了很多的问题,例如: uwsgi  ---module   一直运行不起来,,加--file参数才可以... ----亲测可以运行----- 1.安装DJANGO,创建工程项目,确保python manage.py runserver 0.0.0.0:8080 能够正常启动 2.安装uwsgi , 在你的机器上写一个test.py # test.pydef application(env,

配置开发环境测试环境线上生产环境

1.正确打包 项目有三种环境: 1.本地开发环境(local) 2.开发测试环境(dev) 3.线上生产环境(product) 不同的环境有不同的配置,比如数据库连接什么的....maven打包时默认去resources文件夹下打包这些配置文件,放在WEB-INF/classes下,然后再打成war包,就能用了...现在通过修改pom.xml文件,增加三种配置,让maven打包时选择打包不同文件夹下的配置文件到WEB-INF/classes下,这样就省事儿了.... 如图所示,resources

TFS线上生成环境发布历程

继前文 TFS在项目中Devops落地进程(上) TFS在项目中DevOps落地进程(下) 自从之前将开发环境使用TFS进行了自动化之后,就享受在此成果中,其他后续进度就停顿了好一段时间. 毕竟在我们这对于开发而言,做出代码交出发布包事情就结束了,而我们的TFS已经完美的将这个流程给自动化掉了. 本文将聚焦在TFS发布到线上生产环境中所做的一些工作和实践,如果只是纠结于如何使用TFS可以参考上面的2个链接. 之前的线上发布流程 说下我们大概的背景,我们的程序上线流程目前还是相对传统一些,大体是:

Django + Uwsgi + Nginx 的生产环境部署

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了.比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署 准备条件: 1.确保有一个能够用runserver正常启动的django项目 2.项目已上传到linux 3.linux上已部署好python环境,且已安装好项目所需的模块 安装uwsgi uwsgi是python的一个模块,安装u

php+mysql+nginx在linux上的环境部署

一直在linux上鼓捣,还没有完整在linux下配置过nginx服务器环境部署呢,这几天没什么事就部署了一下,遇到的问题也很多,现在把我的环境部署文档发出了,有什么问题大家可以一起讨论一下,希望大家采用后遇到问题多多沟通. || 安装所需各种依赖包 sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2

奉上SCCM生产环境部署Error Logs

奉上SCCM生产环境部署Error Logs SCCM生产环境部署报错日志,供大家查看,如有此类问题,可共同探讨,附件为日志查看器及相关日志.

【原创】大数据基础之Airflow(2)生产环境部署airflow研究

一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在scheduler的dags目录变动dag文件来提交流程 官方分布式部署方案 多个webserver 多个worker CeleryExecutor(依赖redis或rabbitmq) MesosExecutor(依赖mesos) 第三方开源方案ASFC 针对scheduler单点问题,有第三方方案:ht

生产环境部署squid服务

网络拓扑 该实验使用虚拟机模拟搭建,准备开启2台虚拟机,客户端用本记代替. 1.Squid服务器使用2块网卡.如下图显示: 2.Web服务器与squid服务器配置在同一个网段即可.如下图显示: 3.客户端IP与squid服务器网卡1是在同一网段上即可.如下图显示: 4.查看squid服务器上的eth0和eth1网卡ip地址 5.查看web服务器的ip地址 6.先测试客户端能否ping通squid服务器的网卡1. 7.测试客户端能否ping通web服务器,ping不通正常. 8.安装squid软件

生产环境部署容器的五大挑战及应对之策

Docker容器使应用程序开发变得更容易,但在生产中部署容器可能会很难. 环境复杂性.生态系统易变性.跨不同分布式基础架构的部署...... 本文将为你解析生产环境部署容器的五大挑战及应对之策. 软件开发人员通常只关注在特定基础架构上运行的单个应用程序.应用程序堆栈或工作负载.然而,在生产环境中,一组不同的应用程序常需在各种技术(例如Java,LAMP等)上运行,而这些技术又需在本地.云上或二者结合的异构基础设施上部署.这给生产环境中容器化应用程序的运行带来了一些挑战: 控制高度密集.快速变化的