Удаленный доступ к virtualenv

У меня есть apache httpd установлен на сервере 10.37.45.89 который имеет wsgi_module установлен в нем. Я разместил мой wsgi.conf файл под /etc/apache2/conf.d местоположение, имеющее следующие детали:

<virtualhost *:80>
    ServerName my.webtool

    WSGIDaemonProcess webtool user=www-data group=www-data threads=5 home=/home/user/flask-dev
    WSGIScriptAlias / /home/user/flask-dev/webtool.wsgi

    <directory /home/user/flask-dev>
        WSGIProcessGroup webtool
        WSGIApplicationGroup %{GLOBAL}
        WSGIScriptReloading On
        Order deny,allow
        Allow from all
    </directory>
</virtualhost>

я имею Flask установлен на другом сервере 10.37.45.90 в котором я впервые настроил virtualenv следующим образом

([email protected] [~/flask-dev]) sudo pip install virtualenv
([email protected] [~/flask-dev]) sudo virtualenv venv
([email protected] [~/flask-dev]) source venv/bin/activate
(venv)([email protected] [~/flask-dev])
(venv)([email protected] [~/flask-dev]) sudo pip install Flask

У меня есть следующая иерархия моего кода и файла wsgi:

(venv)([email protected] [~/flask-dev])$ ls
__init__.py*  webtool.wsgi*

(venv)([email protected] [~/flask-dev])$ cat webtool.wsgi
import sys
sys.path.append('/home/user/flask-dev')
from webtool import app as application

(venv)([email protected] [~/flask-dev])$ cat __init__.py
import socket
from flask import Flask
app = Flask(__name__)
host_ip_address = socket.gethostbyname(socket.gethostname())
@app.route("/")
def hello():
    return "Hello world!"
if __name__ == "__main__":
    app.run(debug=True,host=host_ip_address,port=30004)

Я не уверен, как выполнить связывание между этими двумя серверами, чтобы Flask мог обслуживать запрос, заданный httpd.

1 ответ

Решение

Я не эксперт по этой теме, но я думаю, что если вы запускаете свое приложение python на другом сервере, WSGI может оказаться невозможным / неправильным выбором.

Вместо этого: установите ваш Apache, чтобы действовать как обратный прокси

Запустите приложение фляги на удаленном сервере, используя WSGI-сервер "производственного качества" вместо встроенного в флеш-сервер werkzeug для разработки. Популярными вариантами являются uWSGI, gunicorn, gevent,...

Я нашел официантку, чтобы быть хорошим выбором для этого. Он поставляется с инструментом командной строки, поэтому вы можете запустить свое приложение, выполнив:waitress-serve --port=8080 myapp:wsgifunc

Затем обратитесь к прокси-серверу Apache по адресу http://:8080.

Другие вопросы по тегам