Devinwon / article

0 stars 0 forks source link

centos下nginx+uwsgi+django部署——值得一看 #1

Open Devinwon opened 6 years ago

Devinwon commented 6 years ago

本文力求以简单的步骤帮助你快速地进入部署,只要你确认我的环境一致,设置一致,你将会非常顺利,不会踩坑,谁让我已经帮你全部埋了~~~ 本文与其他网帖不同在于

一. 环境说明: CentOS 6.8 64位 python 3.X django 2.0 nginx 1.12.2
uwsgi 2.0.15

二. 部署过程:

01-python3的安装(如果centos下不会安装软件,请自行百度)或参考个人另一文章 这里需要说明下,个人采用指定路径安装的,安装路径为 /home/python,如果你的跟我不一样,请进行相应修改 由于centos本身自带有python2.7,需要使用python3,故而建立软连接,命令如下: ln -s /home/python/bin/python3.6 /usr/bin/python3,后面就可以直接使用pyhton3调用Python3了

02-pip安装django2.0,我的命令如下,注意和python2区分 python3 -m pip install django

03-必要库提前安装(为安装nginx等工作准备) 一般为:gcc-c++,PCRE 安装方法: yum install gcc-c++,同样的方式安装PCRE,

04-nginx的安装 下载源码,安装方式同python,个人指定路径为: /home/nginx

一般如果没有意外的话,安装都会是成功的,诸如Successfully之类(这里我没有像其他帖子那样紧接着测试,避免篇幅太长,万一错了还是需要自行查找资料...)

05-uwsgi的安装 python3 -m pip install uwsgi 注意:由于Python是指定路径安装,uwsgi是安装在python3的子路径,为了后面命令能够被识别,需要建立软连接,命令如下: ln -s /home/python/bin/uwsgi /usr/bin/uwsgi

06-文件配置 以上将全部需要的软件以及协议安装完了,接下来需要进行相关配置,以便使他们协同工作。 确保已有一个可以正常运行的django项目在(本机或服务器)上,个人django项目树为: tree 项目位于服务器路径为: /home/programe

将nginx/conf/nginx.conf复制到个人工程目录下,并对server进行修改,这里仅提供了基本的配置,更加丰富的配置可参见个人拓展配置文章或者待熟悉了之后再自行配置

server {
    listen 80;
    server_name localhost;
    charset     utf-8;

    location / {
        include     /home/nginx/conf/uwsgi_params;
        uwsgi_pass  127.0.0.1:9000;
    }
}

需要说明的是,uwsgi_pass这个对应的值需要与后面的保持一致,后面还会再次提醒。 py-autoreload = 1 #py文件修改,自动加载

接着在项目目录下新建uwsgi.ini文件,配置如下,(注意socket值与上文提到的uwsgi_pass保持一致):

[uwsgi]
socket = 127.0.0.1:9000
chdir=/home/programe/cloudms
module=cloudms.wsgi
#wsgi-file = /home/programe/cloudms/cloudms/wsgi.py
master = true      
processes=2
threads=2
max-requests=2000
chmod-socket=664
vacuum=true
daemonize = /home/programe/cloudms/uwsgi.log

说明: chdir=/home/programe/cloudms 即项目路径 module=cloudms.wsgi 绝对路径其实就是/home/programe/cloudms/cloudms/wsgi.py, 参照配置你的文件

注意:由于centos自带Python(指python2),所以请检查你的/home/programe/cloudms/cloudms/wsgi.py,是否匹配,这里给出我的wsgi.py,

"""
WSGI config for cloudms project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""
#!/usr/bin/python3
#coding: utf-8
import os
import sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cloudms.settings")
from django.core.handlers.wsgi import WSGIHandler
application = get_wsgi_application() 

至此,所有的服务配置都已经完成,接下来对工程进行简单的设置就可以启动了。

07-工程配置 服务器上运行不同于个人机上调试测试,需要将项目中settings.py部分修改——关闭调试,允许所有主机访问, DEBUG = False ALLOWED_HOSTS = ['*'] 08-项目启动

启动uwsgi:

uwsgi --ini /home/programe/cloudms/uwsgi.ini

uwsgi --stop uwsgi.pid 重启(一般系统环境变化会用到) uwsgi --reload uwsgi.pid 重载(一般修改参数,或者修改py文件经常用到)

启动nginx前,先将nginx配置文件目录下文件 mime.types (/home/nginx/conf/mime.types)拷贝到工程目录(/home/programe/cloudms/mime.types),和nginx.conf位于同一目录下。 否则用配置文件启动nginx会报错

启动nginx,(由于个人是自定义安装nginx,也没有为其建立软连接,所以需要切换到/home/nginx/sbin,然后执行以下名令)

./nginx -c /home/programe/cloudms/nginx.conf

至此,顺利的话,你就可以看到令人激动兴奋的web页面了。 success

三. 部署小结: 整个部署步骤较多,对于不是很熟悉的环境及操作的人来说会有一些障碍,跨越过去就好了。下面列出一些经常使用到的操作命令。 端口占用 netstat -lpnt

Nginx的启动、关闭 ./nginx 启动nginx服务 ./nginx -s stop 关闭nginx服务 ./nginx -s reload nginx重载,避免对线上用户造成大影响

uwsgi重启 ,这个命令会对对应pid的进程进行重启,据说很温柔~~~

(重要,更新时重启下面这个操作,否则报错)

kill -HUP pid killall -9 uwsgi

mk 新建文件夹 cp 复制文件 mv 移动文件(重命名) rm 删除文件(夹)(-rf) vim 新建或编辑文件(文件已存在就编辑) cat 读文件

后续如果有时间再进行补充吧 netstat -antp|grep 80|grep ESTABLISHED -c4 查看Web服务器进程连接数 ps -ef|grep nginx|wc -l 查看Nginx运行进程数

重启后启动数据库(网站) 1---启动数据库 [root@devin support-files]# pwd /home/mysql/support-files [root@devin support-files]# ./mysql.server start Starting MySQL [ OK ] 2--启动uwsgi uwsgi --ini /home/programe/smartSdy8888/uwsgi.ini 3--启动nginx [root@devin sbin]# ls nginx restartNginx.py [root@devin sbin]# pwd /home/nginx/sbin [root@devin sbin]# ./nginx -c /home/programe/smartSdy8888/nginx.conf