Docker - Настройка контейнера PhpMyAdmin за контейнером обратного прокси-сервера Apache - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу настроить конфигурацию Docker-контейнеров на моем хосте AWS EC2.

Я хочу иметь контейнер обратного прокси-сервера Apache, который принимает запросы от хоста EC2 через порты 80, 443 и 8080 и передаетэто на контейнерах позади него.Запросы на 80 и 443 следует передавать в контейнер веб-приложения (с открытым портом 80).Принимая во внимание, что те на 8080, должны быть переданы контейнеру, выполняющему phpmyadmin (с открытым портом 80).Я использую официальное изображение phpmyadmin / phpmyadmin docker.

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

При проверке запроса в Chrome Dev Tools отображается «Состояние» запроса phpmyadmin как «не выполнено».Я не могу понять, что является причиной сбоя запроса.Буду признателен за любую помощь в этом.

Ниже моя конфигурация.

Переменные среды (.dev.env):

# For PHPMyAdmin
PMA_HOST=db
PMA_PORT=3306
PMA_ABSOLUTE_URI=http://localhost:8080/

Конфигурация docker-compose.yml:

# Development
version: '3'

services:
  db:<test_database_config>

  proxy:
    build:
      context: .
      dockerfile: Dockerfile.proxy.dev
    env_file: .dev.env
    volumes:
      - ./etc/apache2/sites-available:/etc/apache2/sites-available
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db
    env_file: .dev.env
    expose:
      - '80'
    depends_on:
      - db
      - proxy


  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    env_file: .dev.env
    volumes:
      - ./website_content:/var/www/html/website_content
      - ./subdomain_website_content:/var/www/html/subdomain_website_content
      - ./etc/apache2/sites-available:/etc/apache2/sites-available
    extra_hosts:
      - "subdomain.localhost:127.0.0.1"
    expose:
      - "80"
    depends_on:
      - db
      - proxy
      - phpmyadmin

Конфигурация обратного прокси-сервера Apache (включенная конфигурация на сайтах с включенным):

<IfModule mod_ssl.c>

<VirtualHost *:80>
  ErrorLog ${APACHE_LOG_DIR}/proxy_port_80_error.log
  CustomLog ${APACHE_LOG_DIR}/proxy_port_80_access.log combined

  ProxyPreserveHost On
  ProxyPass / http://web:80/
  ProxyPassReverse / http://web:80/
</VirtualHost>

<VirtualHost *:443>
  ErrorLog ${APACHE_LOG_DIR}/proxy_port_443_error.log
  CustomLog ${APACHE_LOG_DIR}/proxy_port_443_access.log combined

  ProxyPreserveHost On
  ProxyPass / http://web:80/
  ProxyPassReverse / http://web:80/
</VirtualHost>
</IfModule>

<VirtualHost *:8080>
  ErrorLog ${APACHE_LOG_DIR}/proxy_port_8080_error.log
  CustomLog ${APACHE_LOG_DIR}/proxy_port_8080_access.log combined

  ProxyPreserveHost On
  ProxyPass / http://phpmyadmin:80/
  ProxyPassReverse / http://phpmyadmin:80/
</VirtualHost>

1 Ответ

0 голосов
/ 18 декабря 2018

В этом не было ничего особенного.Оказалось, что мой обратный прокси-сервер Apache не настроен на прослушивание через порт 8080.

Добавил то же самое в мой файл ports.conf :

Listen 80
Listen 8080

<IfModule mod_ssl.c>
  Listen 443
</IfModule>

не было проблем с docker-compose.yml и переменными окружения config ;они работали как есть.


Также для тех, кто использует конфигурацию apache выше, вот еще одно небольшое изменение - внутри IfModule должен быть только VirtualHost для порта 443, как показано ниже:

<IfModule mod_ssl.c>

<VirtualHost *:443>
  #ServerAdmin webmaster@localhost
  #DocumentRoot /var/www/html/
  ErrorLog ${APACHE_LOG_DIR}/proxy_port_443_error.log
  CustomLog ${APACHE_LOG_DIR}/proxy_port_443_access.log combined

  ProxyPreserveHost On
  ProxyPass / http://web:80/
  ProxyPassReverse / http://web:80/
</VirtualHost>

</IfModule>

<VirtualHost *:80>
  #ServerAdmin webmaster@localhost
  #DocumentRoot /home/ubuntu/DNZProject/
  ErrorLog ${APACHE_LOG_DIR}/proxy_port_80_error.log
  CustomLog ${APACHE_LOG_DIR}/proxy_port_80_access.log combined

  ProxyPreserveHost On
  ProxyPass / http://web:80/
  ProxyPassReverse / http://web:80/
</VirtualHost>

<VirtualHost *:8080>
  #ServerAdmin webmaster@localhost
  #DocumentRoot /home/ubuntu/DNZProject/
  ErrorLog ${APACHE_LOG_DIR}/proxy_port_8080_error.log
  CustomLog ${APACHE_LOG_DIR}/proxy_port_8080_access.log combined

  ProxyPreserveHost On
  ProxyPass / http://phpmyadmin:80/
  ProxyPassReverse / http://phpmyadmin:80/
</VirtualHost>
...