前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >68. Django项目部署nginx + gunicorn

68. Django项目部署nginx + gunicorn

作者头像
Devops海洋的渔夫
发布2022-01-17 13:59:03
7210
发布2022-01-17 13:59:03
举报
文章被收录于专栏:Devops专栏

需求

在使用 uwsgi配置dwebsocket的时候,总会有使用上的问题。

image-20200420111715653

但是,直接使用python manage.py runserver启动是没问题的。其实只是我没有将uwsgi配置好,不过本章节主要是想看看如何使用gunicorn来部署试试。

安装gunicorn

安装命令如下:

代码语言:javascript
复制
pip3 install gunicorn

配置全局命令:安装完毕之后,全局环境是无法直接执行的,需要找到二进制文件软链接到/usr/bin路径下。

代码语言:javascript
复制
# 安装之后,无法直接执行命令
[root@server01 ~]# gunicorn -h
-bash: gunicorn: command not found

搜索安装之后,gunicorn二进制可执行文件的位置:

代码语言:javascript
复制
[root@server01 ~]# find / -name "*gunicorn*" -ls | grep python3 | grep bin
405121    4 -rwxr-xr-x   1 root     root          236 Dec 12 08:31 /usr/local/python3/bin/gunicorn
[root@server01 ~]# 

设置软链接如下:

代码语言:javascript
复制
[root@server01 ~]# ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn
[root@server01 ~]# 
[root@server01 ~]# ls -ll /usr/bin/gunicorn
lrwxrwxrwx 1 root root 31 Dec 12 08:38 /usr/bin/gunicorn -> /usr/local/python3/bin/gunicorn
[root@server01 ~]# 

配置软链接之后,就可以全局环境使用gunicorn了,例如查看版本如下:

代码语言:javascript
复制
[root@server01 ~]# gunicorn -v
gunicorn (version 20.0.4)
[root@server01 ~]# 

使用gunicorn启动Django项目

在项目根目录新建配置文件 gunicorn.confg

代码语言:javascript
复制
bind = "0.0.0.0:8000"

# workers是工作线程数,一般设置成:服务器CPU个数 + 1
workers = 2

#./代表当前目录
errorlog = './logs/gunicorn.error.log'
accesslog = './logs/gunicorn.access.log'

项目启动

普通命令行启动
代码语言:javascript
复制
gunicorn -w 4 -b 0.0.0.0:8000 --access-logfile access.log --error-logfile error.log 项目名.wsgi
使用配置文件启动
代码语言:javascript
复制
gunicorn 项目名.wsgi -c gunicorn.confg -D

配置文件gunicorn.confg

代码语言:javascript
复制
bind = "0.0.0.0:8000"

# workers是工作线程数,一般设置成:服务器CPU个数 + 1
workers = 2

#./代表当前目录
errorlog = './logs/gunicorn.error.log'
accesslog = './logs/gunicorn.access.log'

执行如下:

代码语言:javascript
复制
gunicorn performance.wsgi -c gunicorn.confg -D
重启gunicorn

当代码出现部署变更,那么则需要重启一下 gunicorn

代码语言:javascript
复制
# 查看当前的gunicorn进程
[root@locust01 performance]# ps -ef | grep gunicorn
root       848 30090  0 17:13 pts/2    00:00:00 grep --color=auto gunicorn
root      2973 27177  0 May12 ?        00:00:17 /usr/local/python3/bin/python3.7 /usr/bin/gunicorn performance.wsgi -c gunicorn.confg -D
root      4940 27177  0 May12 ?        00:00:14 /usr/local/python3/bin/python3.7 /usr/bin/gunicorn performance.wsgi -c gunicorn.confg -D
root     27177     1  0 May07 ?        00:01:33 /usr/local/python3/bin/python3.7 /usr/bin/gunicorn performance.wsgi -c gunicorn.confg -D
[root@locust01 performance]# 
[root@locust01 performance]# ps -ef | grep gunicorn | grep -v color | awk '{print $2}'
2973
4940
27177

# kill 当前gunicorn 进程
[root@locust01 performance]# ps -ef | grep gunicorn | grep -v color | awk '{print $2}' | xargs kill -9
[root@locust01 performance]# 
[root@locust01 performance]# ps -ef | grep gunicorn
root       903 30090  0 17:13 pts/2    00:00:00 grep --color=auto gunicorn

# 重启服务
[root@locust01 performance]# gunicorn performance.wsgi -c gunicorn.confg -D
!!!
!!! WARNING: configuration file should have a valid Python extension.
!!!

[root@locust01 performance]#
[root@locust01 performance]# ps -ef | grep gunicorn
root       989     1  0 17:14 ?        00:00:00 /usr/local/python3/bin/python3.7 /usr/bin/gunicorn performance.wsgi -c gunicorn.confg -D
root       992   989  3 17:14 ?        00:00:00 /usr/local/python3/bin/python3.7 /usr/bin/gunicorn performance.wsgi -c gunicorn.confg -D
root       993   989  3 17:14 ?        00:00:00 /usr/local/python3/bin/python3.7 /usr/bin/gunicorn performance.wsgi -c gunicorn.confg -D
root      1044 30090  0 17:14 pts/2    00:00:00 grep --color=auto gunicorn
[root@locust01 performance]# 

或者使用 --reload参数,自动重启。

也可以直接修改配置文件如下:

代码语言:javascript
复制
bind = "0.0.0.0:8000"

# workers是工作线程数,一般设置成:服务器CPU个数 + 1
workers = 2

#./代表当前目录
errorlog = './logs/error.log'
accesslog = './logs/access.log'

# 设置自动重启
reload = True

使用gunicorn启动默认是无法找到statics文件的

启动服务之后,访问网页,可以看到statics的文件目录是

image-20200420121828554

根据解决问题的办法,使用nginx转发static即可。

Nginx配置访问gunicorn

安装nginx这个步骤就省略了,下面来看看如何设置转发。

Nginx配置:

打开/usr/local/nginx/conf/nginx.conf文件

代码语言:javascript
复制
...
http {
    ....
    # 配置performance项目的上游服务
    upstream performance{
        server 127.0.0.1:8888;
    }

    # 配置server
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;

        access_log  logs/host.access.log  main;

        # 配置动态请求使用gunicorn
        location / {	
            #请求转发到gunicorn服务器
            proxy_pass http://performance;
            #设置请求头,并将头信息传递给服务器端 
            proxy_set_header Host $host;
            proxy_http_version 1.1;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 解决nginx转发websocket连接失败的问题
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

        # 配置静态文件路径
        location /static/ {
            alias /work/performance/static/;
        }
        
        ...
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 安装gunicorn
  • 使用gunicorn启动Django项目
    • 在项目根目录新建配置文件 gunicorn.confg
      • 项目启动
        • 普通命令行启动
        • 使用配置文件启动
        • 重启gunicorn
      • 使用gunicorn启动默认是无法找到statics文件的
      • Nginx配置访问gunicorn
        • Nginx配置:
        相关产品与服务
        云服务器
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档