Nginx+Uwsgi+Django服务器部署

uwsgi nginx Django
发布日期:2019-04-27
修改时间:2019-05-12

前言

以这个Blog项目为例,服务器部署Django,也是第一次在服务器部署Django。


环境选择

Python 3.7.2

Django==2.1.5

Ngnix(无要求,最新便可)

Uwsgi(无要求,最新便可)

Centos 7.x

这次没有把项目运行在虚拟机( virtualenv )或其他进程管理工具,主要是服务配置太低,以及也就放自己的Blog,不会放其他的项目。


安装Python3

centos7默认自带python2,所以先安装一下python3

先安装依赖

yum y upgrade //update software package
yum y install gcc g++
yum y groupinstall "Development tools"
yum y install zlibdevel bzip2devel openssldevel ncursesdevel sqlitedevel readlinedevel tkdevel gdbmdevel db4devel libpcapdevel xzdevel

新建一个安装python3的文件夹并进入

mkdir /usr/local/python3
cd /usr/local/python3

下载python3.7.2,解压,编译,安装

 wget https://www.python.org/ftp/python/3.7.2/Python3.7.2.tar.xz //download
tar xf  Python3.7.2.tar.xz  //decompress
cd Python3.7.2  //Entry directory
./configure prefix=/usr/local/python3
make && make install

重要一步,创建软链接,不创建用不了python3以及pip3这两个命令

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

上面执行完,就可以使用python3和pip3了


安装Django

直接使用命令安装Django,注意版本

pip3 install Django==2.1.5      //Django version of blog project

安装Blog所需的模块

pip3 install Djangotaggit   //tags
pip3 install Djangomdeditor //editor
pip3 install Markdown   //markdown Render

安装Uwsgi

pip3 install uwsgi

建立软链接

ln s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

回到根目录建立一个项目存放地址,顺便给予目录读写权限,方便管理。

mkdir p /Blog/wwwroot/
sudo chmod 777 /Blog/wwwroot/
cd /Blog/wwwroot/

安装git,从远程仓库克隆代码到本地

yum y install git
git clone https://github.com/Playwi0/Blog.git

进入目录,测试django项目是否能运行

cd Blog/blog/       #current directory /Blog/wwwroot/
python3 manage.py runserver

出现下面代码则证明正常运行

确认没问题,ctrl+c停止项目,修改settings.py

cd blog         #parent directory /Blog/wwwroot/Blog/blog/
vi settings.py

修改两处

DEBUG = False       #close debug 
ALLOWED_HOSTS = ['*']   #allow all ip to access

保存退出


安装nginx

幸运的话,执行下面命令就可以安装

yum install y nginx

运气不好就先执行以下命令,安装nginx源

rpm ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginxreleasecentos70.el7.ngx.noarch.rpm
yum install y nginx     //install nginx

到这,已经安装项目所需的全部环境


关闭系统干扰

如果是新生最好先暂时关闭防火墙,避免以下不必要的错误

sudo systemctl stop firewalld   #close firewall temporarily
sudo firewallcmd zone=public addport=80/tcp permanent    #pen the required ports 
sudo firewallcmd reload         # reload firewall

将 SELinux 设置为宽容模式。

sudo setenforce 0

配置文件

进入到项目目录下面,创建uwsgi的ini文件,也就是和manage.py同一目录,

cd /Blog/wwwroot/Blog/blog/
vi blog.ini     #create blog.ini

在里面写入配置信息

[uwsgi]
socket = 127.0.0.1:8090     #nginx 
#http = 127.0.0.1:8090      #uwsgi
chdir = /Blog/wwwroot/Blog/blog/        #Project root directory
wsgifile = wsgi.py      #
module = blog.wsgi

processes = 2
threads = 4

master =True
pidfile = uwsgi.pid
daemonize=uwsgi.log

uwsgi本身就封装http协议,可以直接设置http访问。如果是nginx就要设置socket,注释http,记得在项目目录创建uwsgi.pid,uwsgi.log,不创就删了最后两行

运行ini文件

uwsgi ini blog.ini

出现以下代码说明运行正常

如果不想使用ini配置,uwsgi也支持xml,在这不赘述。

配置nginx文件,不知道文件在哪可以用以下命令查看

whereis nginx

我的是在 /etc/nginx目录下

vi /etc/nginx/nginx.conf

修改server部分

server {
    listen       80;        #listening port
        server_name  _;         #your domain name or nothing

    # Load configuration files for the default server block.
    #include /etc/nginx/default.d/*.conf;

    location / {
    uwsgi_pass 127.0.0.1:8090;      #same as uwsgi socket
    include uwsgi_params;
    }

    location /static {
    alias /Blog/wwwroot/Blog/blog/blogapp/static/;  #static file
    }

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

保存,重启nginx即可

nginx s reload

去访问你的blog吧


参考文章

https://www.centos.bz/2018/01/centos7%EF%BC%8C%E4%BD%BF%E7%94%A8yum%E5%AE%89%E8%A3%85nginx/ https://blog.csdn.net/weixin_43343144/article/details/86772507 https://code.ziqiangxuetang.com/django/djangonginxdeploy.html