Создание веб-сервера apache в ubuntu с connexion / flask и общедоступным ip-адресом

Я пытаюсь запустить простой сервер Python со встроенным REST API и Connexion / Flask на удаленном сервере Linux (привязка к серверу публичный IP-адрес) с помощью Apache. (Сервер работает под управлением Ubuntu 16.04.5 LTS, код python был написан на Python 3.7)

Вот несколько файлов для реализации сервера:

server.py:

import connexion
app = connexion.App(__name__, specification_dir='./')
app.add_api('swagger.yml')

if __name__ == "__main__":
    app.run(host='127.0.0.1', port=5000, debug=True)

swagger.yml: Спецификации REST API, я протестировал его, запустив на локальном хосте, и он работает правильно. (Базовый путь - / api)

opertations.py: Функции для API в зависимости от ответа

Моя цель - запустить сервер на удаленном сервере Linux, чтобы любой, кто знает общедоступный IP-адрес сервера, мог вызвать API. Например, если общедоступный IP-адрес - xxx.xx.xx.xxx, то пользователи должны иметь возможность вызывать следующий URL-адрес для получения данных:

http://xxx.xx.xx.xxx:<port>/api/<operation_name>?<query_parameters>

До сих пор мне удалось вызвать API (который работал на localhost на сервере) со стороны клиента с помощью Перенаправление портов SSH, а также нгрок (они предоставляют туннели к локальному хосту сервера), но это не то, что я хочу.

Я новичок в создании собственных веб-серверов, и я изучал Apache и то, как он работает с VirtualHosts и т. д., Но я не мог найти, как именно его настроить, чтобы он привязывал сервер python к общедоступному IP-адресу сервера Linux.

1
0
563
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Лучший способ сделать это - использовать mod_wsgi из веб-сервера apache.

Пример:

Приложение фляги находится в /var/www/api/app.py

Конфигурация Apache (/etc/apache2/sites-enabled/500-api.conf)

WSGIDaemonProcess app threads=5 home=/var/www/api/
 WSGIScriptAlias /api /var/www/api/app.wsgi

 <directory /var/www/api/>
 WSGIProcessGroup app
 WSGIApplicationGroup %{GLOBAL}
 WSGIScriptReloading On
 Order deny,allow
 Allow from all
</directory>

Файл WSGI - вызов вашего фляжного приложения (/var/www/api/app.wsgi)

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
sys.path.append('/var/www/api')
from app import app as application

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