Centos7下 Nginx+Uwsgi 配置Django项目

服务器的部署笔记。


各部分功能介绍:

  • Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
  • Uwsgi负责多线程,即支持多人同时访问网站。
  • Django是由Python编写的开源Web应用框架,适合个人小项目搭建。

服务器系统为Centos7,当然记录的所有命令再更高版本上也都可以使用。

1、既然搭建的是Python项目,首先升级以下服务器端的Python版本,默认linux自带python2,我们把它先升级为python3。

安装依赖软件

yum -y install sqlite-devel
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

下载安装python3.6

wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
tar zxvf Python-3.6.1.tgz
cd Python-3.6.1
./configure --prefix=/usr/local/python3
make && make install

创建python及pip命令软链接

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

这样python3就已经安装完成了,键入 python3 再回车就可以进入python编译了。
注:Ctrl+Z退出python编译
python3

2、接下来安装Django并配置项目,这里选择的版本是 2.1.8,单纯的因为够用且稳定,新版本的环境配置没有前人指导。

pip3 install django==2.1.8

等待安装完成后,上传Django项目到服务器上任意目录,使用Xftp或者git clone都可以

cd 项目文件夹
python3 manage.py runserver 0.0.0.0:80

注意,运行项目时可能报错:

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run ‘python manage.py migrate’ to apply them.

这时只需要按照提示,输入以下内容即可

python3 manage.py migrate

出现以下信息则说明启动成功。
启动成功
注意: 如果访问页面出现了以下错误,那么进入你的项目,修改 settings.py 将 ALLOWED——HOSTS = [] 修改为 ['*'] 即可解决。

DisallowedHost at / Invalid HTTP_HOST header: ‘47.56.227.27’. You may need to add ‘47.56.227.27’ to ALLOWED_HOSTS.

修改
至此,python环境与Django环境就安装完成。

3、接下来安装uwsgi web网关。
首先下载安装uwsgi

wget http://projects.unbit.it/downloads/uwsgi-2.0.1.tar.gz
tar zxvf uwsgi-2.0.1.tar.gz
cd uwsgi-2.0.1
python3 uwsgiconfig.py --build
cp -R /home/uwsgi-2.0.1 /usr/local/uwsgi
ln -s /usr/local/uwsgi/uwsgi /usr/bin/uwsgi

然后测试uwsgi是否安装成功,创建测试文件

vi test.py

文件内容为:

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

输入完成后 :wq 保存,然后执行以下命令进行测试。

/usr/local/uwsgi/uwsgi --http :9090 --wsgi-file /home/test.py

防火墙开放端口指令:
firewall-cmd –list-all | 查看当前开放的所有端口
firewall-cmd –add-port=80/tcp –permanent | 80替换为你需要开放的端口
firewall-cmd –reload
然后去对应服务商的安全组处开放安全组。这里就以阿里云国际为例。 安全组

前往你的 ip:9090 出现 Hello World 就说明uwsgi的安装已经完成了!
成功

4、开始Uwsgi和Django结合,执行

uwsgi --http :9090 --chdir /home/Django项目文件夹 --wsgi-file Django项目(与manage.py同级)/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9192

同样访问 ip:9090 ,如果可以访问django页面则说明成功。
注:如果在访问django项目时静态文件加载失败可以先忽略,在nginx配置中会指定静态文件路径,配置后可以正常访问。

5、安装Nginx
首先下载安装依赖第三方软件pcre

wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.34/pcre-8.34.tar.bz2
tar jxvf pcre-8.34.tar.bz2

如果报错:bzip2: Cannot exec: No such file or directory
执行:yum -y install bzip2

cd pcre-8.34
./configure --enable-utf8
make && make install

下载安装依赖第三方软件openssl

wget http://distfiles.macports.org/openssl/openssl-1.0.2h.tar.gz
tar zxvf openssl-1.0.2h.tar.gz

下载安装nginx

wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar zxvf nginx-1.9.9.tar.gz
./configure --prefix=/usr/local/nginx --with-pcre --with-http_stub_status_module --with-http_ssl_module --with-openssl=/home/openssl-1.0.2h --with-http_gzip_static_module --with-http_sub_module --with-cc=/usr/bin/gcc
make install

新建www用户

useradd -s /sbin/nologin -M www

备份、修改nginx配置文件

cd /usr/local/nginx/conf
cp -f nginx.conf nginx.conf_bak
vi nginx.conf
    (修改文件)
    user www;         #修改启动用户为www
    worker_processes 4;         #启动4个进程,根据实际需求配置

启动nginx

cd /usr/local/nginx/sbin
./nginx

如果报错:nginx: [emerg] still could not bind()
说明80端口目前被占用
执行:netstat -apn | grep 80
然后:kill -9 26105
26105为搜索出来的 0.0.0.0/80 对应的PID
注意:需要删除5-6次,因为执行的适合有进程保护

再访问 ip:80 显示nginx页面说明nginx安装成功。
成功

6、Nginx+Uwsgi+Django 三者连携。
首先在Django项目文件夹中创建 uwsgi.ini

vi uwsgi.ini
    (文件内容)
    [uwsgi]
    #uwsgi启动端口
    socket = 127.0.0.1:9090 
    #django项目目录
    chdir=/home/SteamCash
    module=SteamCash.wsgi
    master = true
    processes=2
    threads=2
    max-requests=2000
    chmod-socket=664
    vacuum=true
    # 日志路径
    daemonize = /home/SteamCash/logs/uwsgi.log

配置Nginx

vi /usr/local/nginx/conf/nginx.conf
    (文件内容)
    ......
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        # 选择为你项目的static文件夹
	    location /static {
		    alias /home/SteamCash/static;
	    }

        location / {
	    include uwsgi_params;
	    uwsgi_pass 127.0.0.1:9090;
            root   html;
            index  index.html index.htm;
        }
    ......

启动uwsgi

uwsgi --ini /home/SteamCash/uwsgi.ini

启动nginx

./usr/local/nginx/sbin/nginx

接着访问页面即可。
访问