因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式

环境:

centos7

python3.5.4

django2.1.4

uwsgi2.0.18

nginx1.1.10

具体步骤及注意事项:

1、在centos中兼容安装py3.5.4

首先安装依赖包

yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

建立一个空文件夹,然后根据自己需求下载不同版本的Python3,我下载的是Python3.5.4

mkdir /usr/local/python3

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

如果速度不够快,可以直接去官网下载,利用WinSCP等软件传到服务器上指定位置,我的存放目录是/usr/local/python3,使用命令:

然后解压压缩包,进入该目录,安装Python3

tar -xvJf  Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install

最后创建软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

在命令行中输入python3测试

2、在centos中安装py3的虚拟环境

pip install virtualenv

3、在虚拟环境下还原系统第三方包(利用requirement.txt)

pip install –r requirement.txt

4、在虚拟关键下安装uwsgi(也可以在第3节统一安装)

pip install uwsgi

测试uwsgi:

创建脚本test.py

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]

此代码为py3版本测试代码

进入到该文件目录:

uwsgi --http :8001 --wsgi-file test.py

打开浏览器访问:127.0.0.1:8001 返回指定字符串即通过测试

注意,如果是用虚拟机别忘了开端口号

5、安装及配置nginx

(1)安装make、安装g++:

yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++

(2)选定安装文件目录

cd /usr/local/src

(3)安装PCRE库

wget    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.34
./configure
make && make install

(4)安装zlib库

# 进入目录中
cd /usr/local/src
# 下载安装文件
wget http://zlib.net/zlib-1.2.11.tar.gz
# 解压文件
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
Make && make install

(5)安装openssl(某些vps默认没装ssl)

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
tar -zxvf openssl-1.0.1t.tar.gz

(6)安装nginx

cd /usr/local/src
wget http://nginx.org/download/nginx-1.1.10.tar.gz
tar -zxvf nginx-1.1.10.tar.gz
cd nginx-1.1.10
./configure
Make && make install

注:这里可能会出现报错

yum -y install openssl openssl-devel

(7)配置nginx (niginx目录下的nginx.conf)

几个注意点:

server {
listen 8089; # nginx对外暴露的端口
server_name 127.0.0.1; # 暴露外部ip,也可以用访问域名代替ip: www.xxx.com
     #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {  #uwsgi配置
            include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;  # 与uwsgi配置相对应
uwsgi_read_timeout 2;
} location /static {
alias /usr/local/py3workspace/pro/dboxStandard/staticfile/;  # nginx 访问django系统的静态文件地址
break;
}

(8)启动nginx

到nginx的安装目录的/sbin中:   ./nginx

(9)重启

在nginx安装目录的sbin/中 nginx –s reload 可以重启nginx

也可以:

查询uwsgi和nginx端口对应的进程号杀掉

netstat –nap |grep 80

Kill -9 进程号

再重启uwsi和nginxs

6、注意事项

(1)项目根目录须有requestment.txt用来还原python虚拟环境的第三方包

生成requirement.txt:

pip freeze > requirement.txt

还原第三方库:

pip install –r requirement.txt

(2)项目根目录建立uwsgi.ini 配置文件

# uwsgi.ini
[uwsgi] # When using nginx connection
socket = 127.0.0.1:8000
# When doing web server directly
# http=127.0.0.1:8000 # the base directory (full path)
chdir = /usr/local/py3workspace/pro/dboxStandard # Django s wsgi file
module = dboxStandard.wsgi # existence master
master = true # clear environment on exit
vacuum = true # Save the file that started the main process PID
pidfile = /usr/local/py3workspace/pro/dboxStandard/uwsgi.pid # As daemon output, save log information to uwsgi.log. log and run in the background
daemonize = /usr/local/py3workspace/pro/dboxStandard/uwsgi.log # maximum number of worker processes
processes = 4 # Specify a virtual environment
virtualenv = /usr/localpy3workspace/env/dbox_matching_env

socket:   uwsgi对外地址(nginx配置文件需要与之对应)

chdir:     Django 项目根目录

master:  是否存在主进程

vacuum: 退出时清空

module: 项目名称.wsgi;

daemonize:  是uwsgi日志所在

processes:    最大进程数目

virtualen:      python虚拟环境目录

(3)Django系统的setting.Py 配置文件中末尾需要添加:

STATIC_ROOT = os.path.join(BASE_DIR, "staticfile") 配合6.7节访使得nginx能够找到django的静态文件(否则没有前台样式渲染)

Staticfile是项目静态文件存放真实目录

(4)Django系统中不同app或包之间的相互调用在windows中需要在虚拟环境中添加.pth目录文件,Linux系统部署同样需要,存在目录

(5)访问系统时可能会因为防火墙限制访问,需要开放端口

(6)亲测一个小坑,如果不用nginx 直接用uwsgi 挂载dajngo,本地地址不要写成http=127.0.0.1:8000 要用http=0.0.0.0:8000, 访问可以是127.0.0.1

如果,配合nginx 则要写成socket=127.0.0.1:8000

7、访问django系统

nginx配置的对外地址:ip/域名:端口/系统路径

如:127.0.0.1:8089/index

附上目录结构

以上就是我在部署django系统过程的全部过程,其中涉及的数据库和消息队列等没有提及,其中会涉及django配合数据库安装版本

如果是用到celery 在启动系统前,需要先启动它

celery -A Celery_pro worker -l info -P eventlet

看见一个还不错的留着备用:https://blog.csdn.net/pysense/article/details/100063015

nginx + uwsgi 部署django项目的更多相关文章

  1. 使用Nginx+uWSGI部署Django项目

    1.linux安装python3环境 参考链接:https://www.cnblogs.com/zzqit/p/10087680.html 2.安装uwsgi pip3 install uwsgi l ...

  2. nginx+uwsgi部署Django项目到Ubuntu服务器全过程,以及那些坑!!!

    前言:自己在windows上用PyCharm编写的Django项目,编写完后在windows上运行一点问题都没有,但是部署到服务器上时却Bug百出.百度,CSDN,sf,各种搜索寻求解决方案在历时3天 ...

  3. nginx+uwsgi部署django项目

    1.django项目部署前需要生成admin的静态资源文件 (1)生成admin的静态资源文件 # 关闭debug模型 DEBUG = False # 允许所有域名访问 ALLOWED_HOSTS = ...

  4. Nginx + uWSGI 部署Django 项目,并实现负载均衡

    一.uWSGI服务器 uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换. 要注意 WSGI ...

  5. CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

    写在前面的话 最近总是见到有新学 Django 的朋友在部署自己的项目到 Linux 上面的时候运行不起来,所以就动手写了这篇博客. 对于不会搭建 Python 3 环境的朋友可以参考前面的博客[CE ...

  6. Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统

    Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...

  7. nginx + uwsgi 部署 Django+Vue项目

    nginx + uwsgi 部署 Django+Vue项目 windows 本地 DNS 解析 文件路径 C:\Windows\System32\drivers\etc 单机本地测试运行方式,调用dj ...

  8. 填坑!!!virtualenv 中 nginx + uwsgi 部署 django

    一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...

  9. linux上使用nginx、uwsgi部署django项目

    参考:CentOS7下部署Django项目详细操作步骤 注意事项: 在虚拟环境中操作,虚拟环境中安装nginx.uwsgi,虚拟环境外需安装uwsgi -- 临时关闭防火墙:systemctl sto ...

随机推荐

  1. ORACLE表名与列名小写转成大写

    批量将表名变为大写 begin for c in (select table_name tn from user_tables where table_name <> upper(tabl ...

  2. 消息中间件RabbitMQ的使用

    原理场景 MQ在所有项目里面都很常见, 1.减少非紧急性任务对整个业务流程造成的延时: 2.减少高并发对系统所造成的性能上的影响: 举例几个场景: 1.给注册完成的用户派发优惠券.加积分.发消息等(派 ...

  3. Linux设备驱动程序 之 重要数据结构

    文件对象 文件对象是进程已经打开文件描述符的内存中的表示,单个文件可能有多个表示打开文件描述符的file结构: struct file { union { struct llist_node fu_l ...

  4. Flutter制作Toast会自己关闭的消息提示框

    项目中需要用到类似安卓的Toast提示框,因为flutter中又没有相关组件,然后在网上看到个不错的,地址https://www.jianshu.com/p/cf7877c9bdeb,然后拿过来修改了 ...

  5. 自动化测试 | 好用的自动化测试工具Top 10

    欲善其事必先利其器,本文从软件测试人员痛点出发,介绍如何先从工具选择上取得优势,在有限的时间内完成工作.经常有人在公众号留言或是后台咨询,做自动化测试用哪个工具好,或是学哪门编程语言好呢? 这个时候总 ...

  6. openstack基于卷快照恢复卷

    openstack基于卷快照恢复卷 基于P版本,对卷基于快照进行恢复的源码分析 1.特性描述 在pike版本中,openstack官网增加了一个新特性,Cinder volume revert to ...

  7. Nodejs源码系列

    一直想着看Nodej源码,断断续续的折腾了一下,但总串不起来,太久不看又忘记.决心每天看一点,特地记录在这里,作为逼迫自己的动力. 2019/09/22 一.源码编译 之前在电脑上了下源码,源码目录截 ...

  8. RabbitMQ学习之:(六)Direct Exchange (转贴+我的评论)

    From: http://lostechies.com/derekgreer/2012/04/02/rabbitmq-for-windows-direct-exchanges/ RabbitMQ fo ...

  9. 008-centos6.5搭建web服务【nginx-tomcat8-jre8】

    一.机器配置 yum install vim 1.1.Linux最大进程以及打开文件数 ulimit -n和-u可以查看linux的最大进程数和最大文件打开数. ulimit -a 展示所有 临时方法 ...

  10. iOS模型输出和打印

    在调试时,我们经常用到输出model,查看数据是否正确,还会在控制台"po 模型"操作,一般输出都是这样的格式的: person is <Person: 0x60800003 ...