美文网首页
阿里云centos7 部署 nginx + uwsgi + dj

阿里云centos7 部署 nginx + uwsgi + dj

作者: hh5460 | 来源:发表于2018-07-08 13:21 被阅读0次

    近来瞎胡闹尝试用python搭建一个http游戏服务器,由于django本身并发性能不高,所以查了下需要用nginx + uwsgi + django才能搭建一个勉强够用的http服务器,由于对nginx 和 uwsgi都不是很了解,所以搭建过程并不像想象中那么简单。。。
    由于这三个模块都是可以独立运行的,那么我们在部署的时候先单独的一个个去安装,装完独立运行,最后再通过配置文件去统一部署,思路就是这样。。。

    第零步,我们先安装下c c++相关依赖库

    sudo yum -y install gcc gcc-c++
    
    #避免后续pip安装时无法使用https源
    sudo yum install openssl-devel 
    

    第一步,我们先部署nginx

    你可以通过wget nginx的源码然后手动编译安装到指定目录
    但对小白来说还是怎么方便怎么来吧,我们直接通过yum安装

    yum install nginx
    
    #不同版本的linux系统可能会遇到No package nginx available.那么请尝试先安装epel
    #yum install epel-release
    

    安装完成之后,我们手动启动以下nginx

    service nginx start
    

    没有大问题的情况下,我们直接访问127.0.0.1就可以看到nginx部署完成的界面了,当然这里如果你直接在linux服务器上操作的话,那么你打开自己的浏览器,输入你linux服务器的地址就可以了


    浏览器中看到此界面表示nginx部署完成了

    第二步,我们再部署uwsgi

    直接通过如下指令安装

    pip install uwsgi
    

    安装完成之后我们新建一个python脚本,test-uwsgi.py,写入如下内容

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

    然后在这个脚本的同级目录下,执行

    #简单理解就是通过uwsgi服务创建一个http测试服务器,端口8001,通过浏览器访问后返回脚本内定义的“Hello UWSGI”文本
    uwsgi --http :8001 --wsgi-file test-uwsgi.py
    //如果显示没有uwsgi命令那么请找到uwsgi命令所在位置
    //通过pip3安装一般在/usr/local/python3/bin/目录下
    //然后通过ln -s关联到环境变量中存在的目录,例如'/usr/local/bin'或者'/usr/bin'
    //即ln -s /usr/local/python3/bin/uwsgi /usr/local/bin/uwsgi
    

    如果你直接部署在linux上的,那么打开浏览器,在地址栏输入你的linux地址:8001 看到浏览器返回文本“Hello UWSGI”那么恭喜,uwsgi部署完成

    第三步,我们部署django开发环境

    pip install django
    

    django安装成功之后,创建一个django项目,名为test_project

    django-admin.py startproject test_project
    //如果显示没有django-admin.py 或 django-admin命令那么请找到django-admin.py 或 django-admin命令命令所在位置,然后通过ln -s关联到环境变量中存在的目录,例如'usr/local/bin'或者'/usr/bin'
    

    进入到创建的项目目录test_project,然后看到还有一级test_project目录,进入后发现有个settings.py文件,我们修改这个文件

    找到
    ALLOWED_HOSTS = [""]
    将其修改为
    ALLOWED_HOSTS = ["*"]
    修改成["*"]表示允许任何IP访问进来,否则访问会被拒绝
    

    修改之后我们再回到上一级目录,即manage.py所在目录,然后执行如下命令

    #执行如下命令即在8002端口创建了一个django的测试运行环境
    python manage.py runserver 0.0.0.0:8002
    

    完成之后我们继续通过浏览器,地址栏输入你的linux地址:8002,然后成功看到如下的界面,则表示django环境也部署完成了


    django测试环境完成

    第四步,我们通过配置文件链接几个模块

    1.django的settings.py文件配置

    继续回到上一步提到的settings.py文件

    为了安全性找到,测试时候建议打开,部署到nginx的时候必须关闭DEBUG
    DEBUG = True
    修改为
    DEBUG = False
    

    并且再settings.py文件末尾添加

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    

    结束修改后,回到manage.py所在目录,执行如下代码收集所有静态文件
    为什么要收集静态文件呢,因为一个项目中可能又多个app,多个app有时候可能公用同一个js文件
    所以将其收集起来再删除每个app自己独立的static,可以更好的复用
    PS:如果事先已经将自行将静态文件的目录和内容配置好,则无需收集

    python manage.py collectstatic 
    
    2.nginx的配置文件

    通过yum安装nginx的,默认的启动nginx的配置文件位置在/ect/nginx/nginx.conf
    我们修改这个文件的server部分,注意是server部分

    server {
            listen       80;
            server_name  test;
            charset      utf-8;
            # 静态路径相关配置
            location /static {
                autoindex on;
                #root /var/www/test_project/;
                alias /var/www/test_project/static;
            }
    
            location / {
                uwsgi_pass 127.0.0.1:9090;
                include /etc/nginx/uwsgi_params;     #这里我们使用默认文件即可,此处若不指定或指定错误,会出现502错误,uwsgi.log文件中会看到KeyError: 'REQUEST_METHOD'的错误
                index index.html index.htm;
            }
        }
    
    ##如还需要其他参数请自行了解后配置添加
    ##如还需要其他参数请自行了解后配置添加
    ##如还需要其他参数请自行了解后配置添加
    
    3.uwsgi配置文件

    uwsgi的配置文件可以放在任何目录下,只需要在uwsgi的启动的时候指定下目录即可,这里我们将其创建在/etc/目录下,我们在/etc/目录下新建一个 uwsgi_config.ini 文件,并写入如下内容

    [uwsgi]
    #重要重要重要!!!此处的9090端口和之前nginx配置文件需要一致,相当于链接通路
    socket = 127.0.0.1:9090
    # 指定test_project项目所在路径,一般放在 /var/www 这个目录,避免遇到nginx root权限问题
    chdir = /var/www/test_project
    # 指定Django's wsgi file
    wsgi-file = /var/www/test_project/test_project/wsgi.py
    # 最大工作进程 processes
    processes = 10
    #每个工作进程processes启动后开启线程个数threads
    threads = 2
    #环境退出时自动清理
    vacuum = true
    
    #记录uwsgi日志路径 
    #daemonize = /var/log/uwsgi.log
    
    ##如还需要其他参数请自行了解后配置添加
    ##如还需要其他参数请自行了解后配置添加
    ##如还需要其他参数请自行了解后配置添加
    
    4.我们启动服务,查看结果

    1.先重启下nginx

    service nginx restart
    

    2.我们指定uwsgi配置文件启动uwsgi服务

    ##先关闭之前启动的进程
    killall -9 uwsgi
    然后执行
    uwsgi --ini /etc/uwsgi_config.ini
    

    如果uwsgi配置文件中没有将log计入指定文件中,那么你会看到如下,如配置文件中的设置一致,启动10个进程,每个进程启动2个线程


    uwsgi启动成功

    这里补充下nginx和uwsgi相关服务的启动和关闭命令

    service nginx start                     #启动nginx服务
    service nginx stop                      #关闭nginx服务
    service nginx restart                   #重启nginx服务
    
    systemctl enable nginx.service   #开启启动nginx服务
    
    uwsgi --ini /etc/uwsgi_config.ini       #初始化uwsgi服务
    uwsgi --stop /etc/uwsgi_config.ini      #停止uwsgi服务
    uwsgi --reload /etc/uwsgi_config.ini    #重新加载uwsgi服务
    
    ##重启命令可能无效,请尝试先杀死相关进程然后再重启
    killall -9 nginx                        #kill所有 nginx相关进程
    killall -9 uwsgi                        #kill所有 uwsgi 相关进程
    
    
    5.启动浏览器验证

    由于nginx中监听的是80端口,所以在你的浏览器直接输入你linux的服务器ip地址即可,如果能看到之前的django界面,那么恭喜,部署完成了。。。


    部署完成

    PS:如果还是一切配置都正确还是出现了502错误,请查看nginx或uwsgi相关日志
    若出现错误
    "connect() to 127.0.0.1:9090failed (13: Permission denied) while connecting to upstream"
    那么是SeLinux问题导致的,执行以下代码方可解决:

    setsebool -P httpd_can_network_connect 1
    

    相关文章

      网友评论

          本文标题:阿里云centos7 部署 nginx + uwsgi + dj

          本文链接:https://www.haomeiwen.com/subject/zetouftx.html