3

Systemd 和 Gunicorn 需要某种 wsgi 文件作为最后一个参数ExecStarthttp ://docs.gunicorn.org/en/latest/deploy.html?highlight=ExecStart#systemd

使用 Django,这在主模块中为wsgi.py

ExecStart=/home/admin/django/bin/gunicorn --config /home/admin/src/gunicorn.py --bind unix:/tmp/api.sock myapp.wsgi

但是这个文件在使用 Sanic 和 uvloop 时显然是不存在的(我相信新的协议叫做 ASGI)。我尝试用它代替它,app.py这并不奇怪:

ExecStart=/home/admin/sanic/bin/gunicorn --config /home/admin/src/gunicorn.py --bind unix:/tmp/api.sock myapp.app

使用Sanic的时候这个参数应该怎么配置?

4

2 回答 2

1

如果你想用 systemd 开始 sanic,你为什么不使用 supervisrod: Supervisord

引导 -> Systemd -> supervisord -> gunicorn -> sanic

[unix_http_server]
file=/tmp/supervisor.sock                       ; path to your socket file

[supervisord]
logfile=/var/log/supervisord/supervisord.log    ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=error                                  ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid                ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
user=root                                       ; default user
childlogdir=/var/log/supervisord/               ; where child log files will live

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock         ; use a unix:// URL  for a unix socket

[program:ctrlapi]
directory=/home/ubuntu/api
command=/home/ubuntu/api/venv3/bin/gunicorn api:app --bind 0.0.0.0:8000 --worker-class sanic.worker.GunicornWorker -w 2
stderr_logfile = log/api_stderr.log
stdout_logfile = log/api_stdout.log
于 2018-06-01T08:29:38.050 回答
0

我自己还没有使用 Systend 和 gunicorn 部署它。但是,文档在这方面似乎相当不错。

为了使用 Gunicorn 运行 Sanic 应用程序,您需要使用特殊的 sanic.worker.GunicornWorker 作为 Gunicorn 工人类参数:

gunicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker

考虑到这一点,这个怎么样:

ExecStart=/home/admin/sanic/bin/gunicorn --config /home/admin/src/gunicorn.py myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker

我认为您缺少的重要部分是GunicornWorker工人阶级。

于 2018-01-04T08:23:11.613 回答