Я пытаюсь запустить простой сервер 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, я протестировал его, запустив на localhost и работая правильно. (Основной путь: /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 (который работал на локальном хосте на сервере) с клиентской стороны с пересылкой портов SSH, а также ngrok (они предоставляют туннели на локальном сервере), но это не то, что я хочу,
Я новичок в создании собственных веб-серверов, и я изучал Apache и как он работает с VirtualHosts и т.д., Но я не мог найти, как именно настроить его, чтобы он связывал сервер python с общедоступным IP-адресом сервера Linux.
Лучший способ сделать это - использовать mod_wsgi с веб-сервера apache
Пример:
Приложение с /var/www/api/app.py
находится в /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