相信用过Django做开发的人对于python manage.py runserver
这个命令一定不陌生,这个命令利用django自带的一个web服务器,可以帮助我们在本地很简单地就运行django,对于本地测试来说足够了,但是不能用作生产环境中,甚至测试环境都不行,主要有如下几点问题:
正式使用Gunicorn之前,先说一下它的优点: (以下内容来自GPT4)
Gunicorn(Green Unicorn)是一个Python的WSGI HTTP服务器,许多大型网站和高性能应用都选用它来托管 Python web 应用。以下是 Gunicorn 的一些主要优点:
在使用 Gunicorn 运行 Django 之前,你需要确保已经正确地安装了 Django 和 Gunicorn。假设你的 Django 项目名为 myproject
,并且它位于 /path/to/myproject/
下。
安装 Gunicorn 如果你还没有安装 Gunicorn,可以使用 pip 来安装:
pip install gunicorn
运行 Gunicorn
现在你应该可以用 Gunicorn 来启动你的 Django 应用了。Gunicorn 的基本命令格式是 gunicorn [OPTIONS] APP_MODULE
,其中 APP_MODULE
是一个 Python 导入路径,指向包含 WSGI application 对象的模块。
在标准的 Django 项目中,这个对象(通常被称为 application
)定义在 wsgi.py
文件里。所以如果你的项目名为 myproject
,那么 APP_MODULE
就是 myproject.wsgi
。
要让 Gunicorn 启动 Django 项目,可以执行以下命令:
cd /path/to/myproject/
gunicorn myproject.wsgi
这将会在监听 localhost:8000 的 Gunicorn 服务器上启动你的 Django 应用。
注意:这个只是为了演示gunicorn的简单运行方式,正式环境中不推荐这么使用
配置 Gunicorn
Gunicorn 提供了许多可配置的选项,可以根据自己的需求去调整其行为,比较常用的方式是创建一个 Gunicorn 配置文件可以让你的配置更加结构化和方便管理。Gunicorn 的配置文件通常是一个 Python 脚本,其中定义了一些全局变量。
假设我们在 /path/to/myproject/gunicorn_config.py
创建以下配置文件:
# gunicorn_config.py
import multiprocessing
# 绑定ip和端口号
bind = "0.0.0.0:8080"
# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'
# 开启的进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 并发处理的请求数量
threads = 2
# 最大待处理连接数
backlog = 2048
# 工作模式协程
worker_connections = 1000
# 重载、修改配置后,自动重新加载程序
reload = True
# 访问日志文件
accesslog = "/var/log/gunicorn/access.log"
# 错误日志文件
errorlog = "/var/log/gunicorn/error.log"
上述配置中,我们设置了多个参数,如绑定地址、工作模式、日志位置等等。这只是一个基础的配置例子,你可以根据实际需求进行修改或扩展。
然后,你可以通过 -c
或 --config
命令行选项来指明配置文件的路径,运行 Django 应用,如下所示:
cd /path/to/myproject/
gunicorn myproject.wsgi -c gunicorn_config.py
该命令告诉 Gunicorn 加载 gunicorn_config.py
文件,并应用里面定义的配置。
gunicorn比起django的runserver要好很多,但是实践中,一般不会直接将gunicorn直接对外暴露,而是再加一层反向代理,最常用的就是Nginx。
使用Nginx作为反向代理,主要有以下优势:
下面是使用 Nginx 作为 Gunicorn 的反向代理的详细步骤
安装 Nginx
在 Ubuntu/Debian 上,你可以通过 apt-get 来安装 Nginx:
sudo apt-get install nginx
配置 Nginx
配置 Nginx 以使其能正确地将请求转发到 Gunicorn。Nginx 的设置文件通常位于 /etc/nginx/sites-available/default
。
下面是一个基本的配置示例:
server {
listen 80;
server_name yourdomain.com;
location /static/ {
alias /path/to/myproject/static/; # 这里是指向Django中的静态文件目录的
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8000; # 替换成 gunicorn 正在监听的地址和端口号
}
}
启动 Nginx
完成配置后,你就可以启动 Nginx 了:
sudo service nginx start
以上就是基本的流程。当然,这只是最简单的配置,如果你需要更高级的特性(比如 HTTPS、负载均衡或缓存),则需要进行更多的配置。建议查阅 Nginx 官方文档 获取更详细的信息。
我是在第二份工作中才接触到supervisor的,了解之后就非常喜欢这个工具,最大好处就是托管某一个进程,尤其是如果进程出现问题死掉了,supervisor会自动尝试重启这个进程,这个对于线上环境来说非常重要。
Supervisor
是一个用 Python 写的进程管理工具,可以很方便地用来在 UNIX-like 系统(不支持Windows)下启动、重启(自动)和关闭进程。
以下是如何使用 Supervisor 托管 gunicorn 和 nginx 的步骤:
安装 Supervisor
在 Ubuntu/Debian 上,你可以通过 apt-get 来安装 Supervisor:
sudo apt-get install supervisor
创建 Supervisor 配置文件
你需要为每个要由 Supervisor 管理的程序创建一个配置文件。这些文件通常位于 /etc/supervisor/conf.d/
目录下,并且以 .conf
结尾。
如上假设,Django 项目路径为 /path/to/myproject/
,Gunicorn 的配置文件名为 gunicorn_config.py
,那么我们需要为 Gunicorn 创建一个名为 myproject_gunicorn.conf
的文件:
# /etc/supervisor/conf.d/myproject_gunicorn.conf
[program:myproject_gunicorn]
command=/usr/local/bin/gunicorn myproject.wsgi:application -c /path/to/myproject/gunicorn_config.py
directory=/path/to/myproject/
user=yourusername
autostart=true
autorestart=true
redirect_stderr=true
同样,我们也需要为 Nginx 创建一个名为 nginx.conf
的文件:
# /etc/supervisor/conf.d/nginx.conf
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
redirect_stderr=true
运行 Supervisor
安装完 Supervisor 并创建了相关的配置文件后,你就可以让 Supervisor 开始工作了。首先,你需要读取所有新的或修改过的配置文件:
sudo supervisorctl reread
接着,你可以更新 Supervisor 服务的状态,使其开始运行新添加的程序:
sudo supervisorctl update
或者,如果你想单独启动某个程序,比如 myproject_gunicorn
(也就是上面的Django),你可以这样做:
sudo supervisorctl start myproject_gunicorn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有