CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

时间:2022-09-08 10:11:32

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

写在前面的话

最近总是见到有新学 Django 的朋友在部署自己的项目到 Linux 上面的时候运行不起来,所以就动手写了这篇博客。

对于不会搭建 Python 3 环境的朋友可以参考前面的博客【CENTOS 7 升级安装 Python 3.5】,有附带一键安装脚本。

至于为什么选择 CENTOS 7,原因很简单,运维这几年多年,这么多家公司全是 CENTOS 系列,绝非偶然。

部署环境
软件 版本
Python 3.5.2
Django 2.0.6
Nginx 1.10.2
下载地址

链接:https://pan.baidu.com/s/1wdNOvbtQilBCBqth1CDp9Q 密码:batg

基础环境安装

【1】解压 NGINX,将解压后的安装包上传到 /usr/local/src/ 已经安装的可以忽略(这里我编译安装了一些自己常用的一些模块,如果你用不到可以不安装):

cd /usr/local/src/

# 解压
tar -zxf nginx-1.10.2.tar.gz
tar -zxf ngx_cache_purge-2.3.tar.gz
tar -zxf pcre-8.39.tar.gz
tar -zxf openssl-1.1.0c.tar.gz
tar -zxf zlib-1.2.8.tar.gz
unzip nginx-upload-module-2.2.zip
unzip nginx-upstream-fair-master.zip
unzip ngx-fancyindex-master.zip

如图:

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【2】编译安装 NGINX(大约需要几分钟):

yum -y install gcc gcc-c++ make cmake openssl gd gd-devel glibc

cd nginx-1.10.2

./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_stub_status_module  --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-http_mp4_module --with-stream --with-http_realip_module --with-pcre=/usr/local/src/pcre-8.39 --with-openssl=/usr/local/src/openssl-1.1.0c --with-zlib=/usr/local/src/zlib-1.2.8 --with-http_v2_module --with-ipv6 --with-http_image_filter_module --add-module=/usr/local/src/nginx-upload-module-2.2 --add-module=/usr/local/src/nginx-upstream-fair-master --add-module=/usr/local/src/ngx_cache_purge-2.3 --add-module=/usr/local/src/ngx-fancyindex-master

make && make install 

【3】安装完成后查看:

cd /usr/local/nginx/

如图:

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【4】启动访问测试:

/usr/local/nginx/sbin/nginx

浏览器访问如图:

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【5】 安装 virtualenv 虚拟环境并进入(这里我们的项目部署路径为 /website ):

# 创建部署目录
mkdir /website
cd /website/ # 创建虚拟环境
pip install virtualenv
virtualenv python3_env
cd python3_env/bin/ # 进入虚拟环境
source activate

效果如图:(可以看到命令行提示符已经变了)

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【6】安装配置 uwsgi 和 django:

pip install uwsgi -i https://pypi.douban.com/simple
pip install django==2.0.6 -i https://pypi.douban.com/simple

【7】 添加库链接,这一步为了避免 uwsgi 启动的时候缺省库依赖报错:

ln -s /usr/local/lib/libpcre.so.1 /lib64

【8】基础环境安装到这里结束,接下来开始配置!

项目修改配置

说明:

我这里用自己的一个项目做演示,项目结构如下(一个 APP,一个 static 目录,一个 templates 目录):

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【1】将项目上传到 /website/ 目录下 ,并创建相关日志目录,配置 settings.py

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

注意:配置静态文件这里极其重要,STATIC_ROOT 和 STATICFILES_DIRS 只能留一个,推荐 STATIC_ROOT,否则有静态文件的问题!

添加日志和 PID 目录:

mkdir /website/logs

此时目录结构如图:

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【2】安装项目所需要的依赖(这一步就不具体写了,就是 pip 安装的过程):

值得注意的是,如果你使用的是 pymysql 连接的 Mysql ,需要在 settings.py 的开头加入如下代码,避免连接报错:

import pymysql
pymysql.install_as_MySQLdb()

【3】进入项目中收集 django 后台的静态文件(之后会在 static 目录下面生成 admin 目录极其后台的静态文件):

cd /website/nav_project
python manage.py collectstatic

如图(注意 yes 确认):

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【4】项目配置完成,数据库部门就自己同步就行,接下来运行环境配置 !

配置运行环境

【1】添加 uwsgi 配置文件:

cd /website
vim website_uwsgi.ini # 内容如下
[uwsgi]
//运行端口号
socket = 127.0.0.1:8000
//主进程
master = true
//多站模式
vhost = true
//多站模式时不设置入口模块和文件
no-stie = true
//子进程数
workers = 2
reload-mercy = 10
//退出、重启时清理文件
vacuum = true
max-requests = 1000
limit-as = 512
buffer-sizi = 30000
//pid文件,用于下面的脚本启动、停止该进程
pidfile = /website/logs/website_uwsgi.pid
daemonize = /website/logs/website_uwsgi.log

备注:指定运行的端口和日志 PID 文件保存的位置!此时便可以直接使用如下命令启动,但是为了便于管理,我们不这么做

uwsgi /website/website_uwsgi.ini

【2】添加快捷启动脚本(红色部分为需要注意的,需要安装自己怎么安装的来修改):

vi /etc/init.d/website_uwsgi

# 内容如下
#!/bin/bash NAME='website_uwsgi'
DAEMON='uwsgi'
CONFIGFILE="/website/$NAME.ini"
PIDFILE="/website/logs/$NAME.pid"
SCRIPTNAME="/etc/init.d/$NAME" do_start() {
$DAEMON $CONFIGFILE || echo -n "uwsgi running"
} do_stop() {
$DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
rm -f $PIDFILE
echo "$DAEMON STOPED."
} do_reload() {
$DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
} do_status() {
ps aux|grep $DAEMON
} case "$1" in
status)
echo -en "Status $NAME: \n"
do_status
;;
start)
echo -en "Starting $NAME: \n"
do_start
;;
stop)
echo -en "Stopping $NAME: \n"
do_stop
;;
reload|graceful)
echo -en "Reloading $NAME: \n"
do_reload
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
exit 3
;;
esac
exit 0

给脚本授权:

chmod 755 /etc/init.d/website_uwsgi

此时,我们便可以使用脚本启动关闭服务了:

/etc/init.d/website_uwsgi start

如图:

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【3】添加 NGINX 配置文件(在 NGINX nginx.conf 配置文件的最后一个 } 前面添加如下内容 ):

server {
# 设置网站运行端口
listen ;
server_name localhost; location / {
include uwsgi_params;
# 必须和uwsgi中的设置一致
uwsgi_pass 127.0.0.1:8000;
# 入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一 层目录
uwsgi_param UWSGI_SCRIPT nav_project.wsgi;
# 项目根目录
uwsgi_param UWSGI_CHDIR /website/nav_project;
index index.html index.htm;
client_max_body_size 35m;
} # 静态文件目录
location /static/ {
alias /website/nav_project/static/;
index index.html index.htm;
}
}

说明:红色部分根据自己配置和需求来设置,蓝色部分则是你的项目名字和所在目录

【4】重启访问:

/usr/local/nginx/sbin/nginx -s reload

访问如图:

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目

【5】到此,整个项目就配置完成!

小结

1. 选用 virtualenv 的目录在于如果需要部署多个项目的时候环境不至于冲突。

2. 整个配置需要注意一些小细节,否则会报错。

CENTOS7 使用 Nginx + Uwsgi 部署 Django 项目的更多相关文章

  1. nginx + uwsgi 部署django项目

    因项目需求,需要部署django项目,这里是基础的nginx配合uwsgi部署django,后续会采用docker部署的方式 环境: centos7 python3.5.4 django2.1.4 u ...

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

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

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

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

  4. nginx+uwsgi部署django项目

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

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

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

  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. 使用uWSGI部署django项目

    先说说什么是uWSGI吧,他是实现了WSGI协议.uwsgi.http等协议的一个web服务器,那什么是WSGI呢? WSGI是一种Web服务器网关接口.它是一个Web服务器(如nginx)与应用服务 ...

随机推荐

  1. candence 知识积累3

    1. PCB板型: 1.新建PCB:PCB design ,新建的类型为board ,输入名称和保存位置,设置图纸参数.网格参数. 2.建立PCB板外框:菜单Add下选择相应的工具.在Option选项 ...

  2. sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。

    用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...

  3. [转]mysql 的日志的启动与查看

    mysql有以下几种日志:错误日志:  -log-err查询日志:  -log慢查询日志: -log-slow-queries更新日志:    -log-update二进制日志:-log-bin 日志 ...

  4. Unity非运行模式下实现动画播放/回退工具

    实现效果 核心功能 支持选定模型(带Animator)在非运行模式下,播放/暂停/停止动作. 支持动作单帧前进,单帧回退(帧时间默认0.05f,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...

  5. 20165321实验一 Java开发环境的熟悉

    一.idea调试: 二.实验内容: 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况). 运行截图: 代码: public class Student { Stri ...

  6. 【20171101】the first day in a new company

    英文差的要命还飙英文,擦嘞!!! 就是想记录下 点滴 如下配图: | | | V 手动配图这是图!!!

  7. HPU 第三次积分赛:阶乘之和(水题)

    阶乘之和 描述 对于整数pp,给出以下定义 p=x_{1}!+x_{2}!+x_{3}!+...+x_{q}!(x_{i}<x_{j}for\ all\ i<j )p=x1​!+x2​!+ ...

  8. discuz回贴通知插件实现-配置邮件服务器

    添加smtp服务器,填写相应的smtp服务器,发信人地址,用户名和密码.   填写发件人地址和收件人地址来测试邮件是否发送成功.

  9. D3 API总览

    D3图形库API参考 https://github.com/d3/d3/wiki/API--%E4%B8%AD%E6%96%87%E6%89%8B%E5%86%8C d3 官网 API https:/ ...

  10. async函数结合promise的小案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...