阿里云centos7 部署 nginx + uwsgi + django

近来瞎胡闹尝试用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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容