Сейчас не время переносить мой Python Eve Api в производственную среду. Есть несколько способов сделать это, и наиболее распространенными требованиями являются:
- Регистрация ошибок
- Автоматическое возрождение
- Несколько процессов (если возможно)
Лучшее решение, которое я нашел, — использовать сервер nginx в качестве внешнего сервера. С python eve, работающим на промежуточном программном обеспечении uWSGI.
Проблема: у меня есть пользовательский __main__
, который не вызывается uwsgi.
У кого-нибудь есть эта конфигурация или другое предложение? Как только заработает, поделюсь работающей конфигурацией.
благодарю вас.
Решение (обновление):
Основываясь на приведенном ниже предложении, я переместил метод Eve() в init.py и запустил приложение с отдельным wsgi.py.
Структура папок:
webservice/init.py webservice/modules/... settings.py wsgi.py
Где init.py содержит
app = Eve(auth=globalauth.TokenAuth)
Bootstrap(app)
app.config['X_DOMAINS'] = '*'
...
и wsgi.py содержит
from webservice import app
if __name__ == "__main__":
app.run()
wsgi.ini
[uwsgi]
chdir=/var/www/api/prod
module=wsgi:app
socket=/tmp/api.sock
processes=1
master=True
pidfile=/tmp/api.v1.pid
max-requests=5000
daemonize=/var/www/api/logs/prod.api.log
logto=/var/www/api/logs/uwsgi.log
nginx.conf
location = /v1 { rewrite ^ /v1/; }
location /v1 { try_files $uri @apiWSGIv1; }
location @apiWSGIv1 {
include uwsgi_params;
uwsgi_modifier1 30;
uwsgi_pass unix:/tmp/digdisapi.sock;
}
команда запуска:
uwsgi --ini uwsgi.ini