Развертывание Python Falcon на Apache2 с помощью mod_wsgi

1

Сценарий: я использую Python Falcon для моего сервиса REST API. Приложение первоначально запускается Gunicorn. Прямо сейчас, когда я вызываю https://example.com:8000/, я получаю правильный ответ, который диктует логика API.

Цель: я хочу развернуть его на Apache2 вместе с mod_wsgi на моем персональном сервере разработки. API все еще будет работать под управлением Gunicorn, и Apache должен взаимодействовать с Gunicorn всякий раз, когда запрос делается в этой конечной точке.

Структура каталога:

| - abc_service
        | - abc_service
                | - __init__.py
                | - app.py
        | - wsgi.py
        | - .abc_venv

Исходный код для app.py выглядит примерно так:

import falcon
from .abc import ABC

api = application = falcon.API() # pylint: disable=invalid-name

# Creating a unique GET resource from the ABC class
test_handler_resource = ABC() # pylint: disable=invalid-name

# Mapping the HTTP GET endpoint with the unique resource
api.add_route('/abc', test_handler_resource)

# Mapping the HTTP POST endpoint with the unique resource
api.add_route('/abc/filters', test_handler_resource)

В моем wsgi.py меня есть следующее содержание:

from abc_service import application

Конфигурация для Apache в /etc/apache2/sites-available/000-default.conf выглядит следующим образом:

# WSGI
WSGIDaemonProcess python-path=/home/uname/abc-service/src/abc_service/.abc_venv/lib/python3.5/site-packages
WSGIScriptAlias /abc /home/uname/abc-service/src/abc_service/wsgi.py

ProxyPass /abc http://localhost:8000/abc
ProxyPassReverse /abc http://localhost:8000/abc
<Location /abc>
AuthType None
Require all granted
# Always set these headers.
Header always set Access-Control-Allow-Origin "https://example.com"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
</Location>

Я не могу найти какой-либо полезный ресурс в Интернете относительно того же в Интернете, который использует эту комбинацию Falcon, Gunicorn, mod_wsgi и Apache. Поэтому я не могу понять, что я делаю неправильно.

Я ценю ваше время и помощь. Спасибо!

Теги:
mod-wsgi

1 ответ

1
Лучший ответ

Итак, решение, которое сработало для меня, заключалось в том, чтобы добавить путь WSGIPythonHome к конфигурации Apache.

WSGIPythonHome /var/local/abc-service/src/abc_service/.venv

Окончательная конфигурация Apache выглядит так:

# At the top of the Apache Config file
WSGIPythonHome /var/local/abc-service/src/abc_service/.venv

...
...
...

# WSGI
WSGIDaemonProcess python-path=/home/uname/abc-service/src/abc_service/.abc_venv/lib/python3.5/site-packages
WSGIScriptAlias /abc /home/uname/abc-service/src/abc_service/wsgi.py

ProxyPass /abc http://localhost:8000/abc
ProxyPassReverse /abc http://localhost:8000/abc
<Location /abc>
AuthType None
Require all granted
# Always set these headers.
Header always set Access-Control-Allow-Origin "https://example.com"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
</Location>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню