Я хочу настроить конфигурацию контейнеров докеров на моем хосте AWS EC2.
Я хочу иметь контейнер обратного прокси Apache, который принимает запросы от хоста EC2 на портах 80, 443 и 8080 и передает их находящимся за ним контейнерам. Запросы на 80 и 443 должны передаваться в контейнер веб-приложения (с открытым портом 80). В то время как те, что на 8080, должны быть переданы в контейнер, в котором запущен phpmyadmin (с открытым портом 80). Я использую официальный образ докера phpmyadmin / phpmyadmin.
В настоящее время пытаюсь запустить эту установку для локальной разработки, где:
При проверке запроса в 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>
Собственно, это было бы для производства, где да, порты открыты. В настоящее время я пытаюсь запустить эту установку локально для своей среды разработки.
Ничего особенного. Оказалось, что мой Apache с обратным прокси-сервером не был настроен для прослушивания порта 8080.
То же самое добавил в мой файл ports.conf:
Listen 80
Listen 8080
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Был нет проблем с конфигурацией docker-compose.yml и переменных среды; они работали как есть.
Также для тех, кто использует конфигурацию 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>
Вы проверили, где у вас открыт порт EC2 8080 и 443 в группе безопасности?