Запуск контейнера Docker на Apache2

#docker #flask #apache2

Вопрос:

У меня есть сервер, на котором я размещаю несколько приложений. Все они доступны в своих собственных подкаталогах через одно и то же имя сервера, поэтому мое приложение foo находится по адресу www.servername.com/foo , bar находится по адресу www.servername.com/bar и так далее. Большинство из этих приложений-это приложения Flask с маршрутом и статическими файлами, настроенными через apache VirtualHost *:443 для запуска SSL.

Мне дали другое приложение Flask baz для запуска на сервере, которое было настроено на разделение на два контейнера Docker , один для приложения и один для базы данных. Мне удалось настроить свой файл apache .conf следующим образом:

 <VirtualHost *:443>
    ServerName www.servername.com

    # some additional config for my other apps, in Directories and static aliases

    ProxyPreserveHost On
    SSLProxyEngine On
    <Proxy *>
        Allow from *
    </Proxy>
    ProxyPass "/baz" "http://<IP address>:5000"
    ProxyPassReverse "/baz" "http://<IP address>:5000"
</VirtualHost>
 

Я думаю, что конфигурация достигает запущенного контейнера, потому что, когда я перехожу к www.servername.com/baz нему, он перенаправляется на www.servername.com/login . Он должен перенаправить на www.servername.com/baz/login , но явно что-то пошло не так. Как я могу заставить прокси правильно направлять весь baz трафик через /baz подкаталог?

Кроме того, я могу вручную перейти на www.servername.com/baz/login страницу входа в baz приложение, чтобы просмотреть ее, но, похоже, CSS не загружен, поэтому я предполагаю, что статические файлы не загружаются. Нужно ли мне также настраивать псевдоним для этих статических файлов, как я делаю с другими приложениями, не связанными с докером? Если да, то стандартный формат, который я обычно использую:

 Alias baz/static /path/to/baz/static
 

не работает. По прихоти я также попробовал кое-что более странное, просто чтобы посмотреть, сработает ли это:

 Alias "baz/static" "http://<IP address>:5000/static"
 

но и это не сработало. Возможно, это будет исправлено путем решения проблемы маршрутизации прокси-сервера выше, но как я могу сделать статические файлы доступными для baz приложения?

Ответ №1:

Похоже, что веб-сайт, под которым он работает, /baz не знает, где он работает, и поэтому вместо этого отображает URL / -адреса. У вас есть несколько вариантов:

  1. Используйте поддомены: baz.servername.com . Тогда приложения Flask могут просто / свободно использовать без конфликтов.
  2. Сообщите приложениям Flask, где они работают, чтобы ваше приложение Flask было настроено для использования /baz в качестве префикса каждого URL-адреса, который оно обслуживает.