使用 nginx + gunicorn 来部署生产环境的 Django app

在测试环境下,我们可以简单的使用 python manage.py runserver 8080 启动一个 Django,由于尚未通过安全审核或性能测试,而且是单线程,并发能力也不强,因此不能在生产环境中使用。

生产环境下,需要使用专门的 Web 服务器,像 Gunicorn 或 uWSGI。

今天就来分享一下如何使用 nginx + gunicorn 来部署生产环境的 Django app。

Gunicorn(Green Unicorn)是一个用于 UNIX 的 Python WSGI HTTP 服务器。Gunicorn 服务器广泛兼容各种 Web 框架,实现简单,服务器占用资源少,速度相当快。Django app 只是它支持的其中一种框架。

安装

pip install gunicorn

gunicorn 没有依赖项,因此下载后可以很容易迁移到生产环境。

快速使用

直接在 Django 项目的目录内,也就是 manage.py 所在的目录内执行:

gunicorn your_project.wsgi:application --bind 0.0.0.0:8000

即可启动生产级别的 Web 服务,前提是你的 Django settings 也是生产环境的配置,例如 Debug = False。

配置成系统服务

首先让我们创建一个系统级别的套接字文件:

sudo vim /etc/systemd/system/gunicorn.socket

写入以下内容:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

然后创建一个 Gunicorn 系统服务文件:

sudo vim /etc/systemd/system/gunicorn.service

写入以下内容:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=hitesh
Group=www-data
WorkingDirectory=/home/hitesh/myprojectdir
ExecStart=/home/hitesh/myprojectdir/myprojectenv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application

[Install]
WantedBy=multi-user.target

这样我们就可以在系统启动的时候启动 Gunicorn 服务,也可以很方面的启动、停止、重启 Gunicorn。

sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl stop gunicorn
sudo systemctl restart gunicorn

查看服务状态:

sudo systemctl status gunicorn.socket

与 Nginx 配合

Nginx 非常适合处理静态文件,所以静态文件就交给 Nginx,然后服务接口交给 Gunicorn,让 Nginx 代理 Gunicorn。

一个简单的配置文件如下:

server {
    listen 80;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/aaron/myprojectdir;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

测试配置文件是否有误:

sudo nginx -t

如果没有错误,可以重启 Nginx 让新的配置文件生效:

sudo nginx -s reload

你可能还需要配置你的证书。

Nginx 和 Gunicorn 故障排除

对于故障排除,日志可以帮助找到根本原因。检查以下日志可以帮助排除故障:

查看 Nginx 进程日志:sudo journalctl -u nginx

查看 Nginx 访问日志:sudo less /var/log/nginx/access.log

检查 Nginx 错误日志:sudo less /var/log/nginx/error.log

检查 Gunicorn 应用程序日志:sudo journalctl -u gunicorn

检查 Gunicorn 套接字日志:sudo journalctl -u gunicorn.socket

最后的话

本文分享了使用 nginx + gunicorn 来部署生产环境的 Django app,生产环境下 Nginx 的反向代理,最好都使用 socket 来通讯,至于为什么,可以参考前文redis 是单线程,是怎么解决高并发问题的。如有收获,还请在看支持。

98ba95cf6961164c99b3c9e5bcd5317b.jpeg

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI是一个现代、快速(高性能)的Web框架,它使用最新的ASGI标准。Gunicorn是一个使用WSGI标准的应用服务器,它可以直接运行Flask和Django,但不能直接运行FastAPI。为了在部署FastAPI时使用Gunicorn,可以借助uvicorn工作器。可以使用以下命令来启动FastAPI应用程序: ``` gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000 ``` 这个命令中,`main`是你的应用程序的入口文件名,`app`是FastAPI应用程序的实例名。`--workers 2`表示使用2个工作进程,`--worker-class uvicorn.workers.UvicornWorker`表示使用uvicorn工作器,`--bind 0.0.0.0:8000`表示绑定到0.0.0.0的8000端口。这样就可以使用Gunicorn和uvicorn工作器来部署FastAPI应用程序了。123 #### 引用[.reference_title] - *1* *2* [ubuntu+nginx+gunicorn+uvicorn+fastapi](https://blog.csdn.net/qq_41960127/article/details/128832617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [Docker生产环境部署FastAPI+supervisor+gunicorn+nginx](https://blog.csdn.net/weixin_45457042/article/details/129213133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值