Несколько приложений на одном сервере в Flask

#python #flask

#python #flask

Вопрос:

В настоящее время моя структура сервера выглядит следующим образом:

 /srv/http/:
  index.html
  projects/:
    app1/
    app2/
    appetc/
  

index.html Это было приложение Flask, но я изменил его на статическую веб-страницу, поскольку это соответствовало моим потребностям.

Я хочу, чтобы мои несколько приложений (в project папке) были найдены по URL-адресам, по которым они расположены в файловой структуре. т.е.

 app1: http://example.com/app1
app2: http://example.com/app2
appetc: http://example.com/appetc
  

В настоящее время это не работает. Я могу перейти на домашнюю страницу приложений по соответствующему URL-адресу, но если я нажму на любую ссылку (поскольку это приложение Flask), оно действует так, как будто оно запущено в корне сервера.

У меня есть root-доступ к серверу, и я могу редактировать файлы конфигурации apache, но у меня нет возможности создавать больше поддоменов (мой dns-провайдер ограничивает меня, и в настоящее время я нахожусь на этом пределе). Кроме того, я не настроен на этот макет. В настоящее время я нахожусь на переходном этапе, когда я могу реструктурировать свои приложения так, как я хочу.

Комментарии:

1. Возможно, запустите сервер WSGI (например, twisted) и позвольте ему выдавать разные объекты WSGI на основе пути.

2. В настоящее время у меня есть WSGI с apache. Это похоже?

3. Это проблема с гиперссылками на каждой странице, не указывающими на правильный URL?

4. Вероятно, вам нужно правильно установить WSGIScriptAlias . Пример: WSGIScriptAlias /app1 /some/path/to/app1.wsgi

5. @cpb2 mod_wsgi настраивается для использования процесса-демона с WSGIDaemonProcess директивой. Это позволяет вам выполнять длительный процесс вместо того, чтобы запускать его для каждого запроса.

Ответ №1:

В документации представлены стратегии для запуска нескольких приложений Flask, например, с использованием промежуточного программного обеспечения от werkzeug:

 from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend

application = DispatcherMiddleware(frontend, {
    '/backend':     backend
})