centos部署Nginx+uwsgi+django

参考

1. 首先通过django直接运行项目-调试模式

先在服务器上放上网站项目代码,然后python manage.py runserver 0.0.0.0:80,打开浏览器看能否访问。注意开启防火墙,包括云服务器防火墙,linux防火墙。

2. 然后通过uwsgi运行项目-不走nginx

关掉上面的manage.py, python下安装uwsgi,通过uwsgi运行项目

检查项目中wsgi.py是否存在

参考django官方文档,https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/
用django start-project 命令创建的项目会在创建时自带 wsgi.py

假设项目根目录为/www/myadmin, 创建项目时在此目录下执行django-admin startproject server .,默认会创建/www/myadmin/server/uwsgi.py。如果不存在则需手动创建,方法参考上面的django官方文档。

在项目文件夹根目录下新建uwsgi.ini配置文件。

; run: uwsgi --ini uwsgi.ini
; reload: uwsgi --reload uwsgi.pid
; stop: uwsgi --stop uwsgi.pid

[uwsgi]
chdir=/www/your_websit
pidfile = /www/your_website/uwsgi.pid
daemonize = /www/your_website/running.log ;记录日志的位置

module=server.wsgi:application
master=True
vacuum=True
max-requests=5000
py-autoreload = 1 ;修改py文件后自动重启uwsgi
processes=4 ;根据实际cpu数量酌情配置
disable-logging = true ;正常的request不记录,只记录异常

http-socket = :8090 ;网页直接访问,可用于测试没有nginx时是否正常运行。
socket = 127.0.0.1:30888 ;和nginx相连时的配置

  • 配置daemonize = *.log,会使任务在后台运行。
  • 配置logto = *.log, 会使任务在前台运行。
  • 网上说的后台运行方法uwsgi -d --ini uwsgi.ini,可能是老版本的,这个命令在2.2版本会创建一个名为--ini的文件作为日志文件,命令后面的uwsgi.ini会被被忽略。

通过uwsgi启动项目

cd到项目根目录下,先测试没有nginx时uwsgi是否正常运行:

# 激活虚拟环境
conda activate your_env

# 启动wsgi,该命令相当于上面的 python manage.py runserver 
uwsgi --ini uwsgi.ini

浏览器访问服务器8090端口。因为配置文件中设置了http-socket=8090,所以此时应该能访问网站,但是静态文件打不开(注意防火墙开放端口)。

错误排查

如果不能访问,可查看uwsgi的日志排查错误,/www/your_website/running.log

3. 最后通过nginx + wsgi 运行项目

安装nginx

参考 https://www.jianshu.com/p/8a6d923cda9f

# 添加nginx存储库
sudo yum install epel-release

# 使用yum安装Nginx
sudo yum install nginx

# 也可以试试这个:https://www.jianshu.com/p/c22faafc7b8b 
yum install nginx --enablerepo=epel

# 设置nginx开机自启动
systemctl enable nginx

# 重启nginx
systemctl restart nginx

配置nginx

ubuntu Nginx 默认的配置文件在 /etc/nginx 目录下,centos 发行版的配置文件是在 /etc/nginx/nginx.conf

  • server_name可以区分从不同hostname网址来的请求,比如两个网址都解析到了该主机,那么设置server_name可以将其区分。设置为_表示所有如果没有其他适配的,就到这里。

  • client_max_body_size,前端上传文件大小限制,nginx默认是1m

  • 可以设置多个server,实现一台主机上部署多个网站。通过listen不同的端口,设置不同的server_name来区别不同的请求。

...

http {
    ...
    server {
        listen 80;
        client_max_body_size 200m;  
        
        server_name  _;
        ...

        #配置uwsgi转发,需要和上面uwsgi.ini中的端口对应
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:30888; 
        }

        # serve静态文件
        location /static {
            autoindex on; 
            alias /www/myadmin/static/; 
        }
        ...
    }
    

    server {
        listen 80;
        listen 8090;
        client_max_body_size 200m; 
        server_name  www.aaa.com www.bbb.com;
        ...
    }
    
    

}

重启nginx使配置生效:

systemctl restart nginx

uwsgi可能也需要重启:

# 先激活python虚拟环境,再执行下面语句
uwsgi --stop uwsgi.pid
uwsgi --ini uwsgi.ini

#或者使用reload
uwsgi --reload uwsgi.pid

测试和错误排查

此时访问服务器的80端口,应该能正常访问网站,包括静态资源。

如果不行,可能需要关闭SELinux。 临时关闭:输入命令setenforce 0,永久关闭,vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled

另外可查看nginx中配置中error_log的位置,检查nginx的error_log。默认路径为/var/log/nginx/error.log

4. 设置开机自启动

创建sh脚本,脚本中激活anaconda,然后启动uwsgi服务。

# #!/bin/sh
# #this script will run in background

systemctl start nginx

source /root/anaconda3/bin/activate syadmin

uwsgi --ini /www/syadmin/uwsgi.ini

# nohup python /www/your_webst/manage.py start_circle_task >/dev/null 2>&1 &

有了上面的sh脚本后,可以将其加入/etc/rc.d/rc.local中实现开机自启动。

也可以用systemctl启动。参考下面的方法(这个没有实践):

创建systemctl服务,指定Type=forking,systemd认为当该服务fork出子进程并生成PIDFile,且父进程退出后服务启动成功。同时指定 PIDFile=FilePath,以便 systemd 能够跟踪服务的主进程。

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