
У меня есть домен (например, example.com), зарегистрированный на godaddy.com, и я использую AWS для хостинга. Nameserver на Godaddy позже добавлен в AWS
У меня установлен сервер ubuntu (t2.medium) apache. В моем проекте в Docker установлены LAMP, ELK, Node, React и Postgres. Все работает на локальной системе с использованием прямых портов. В моем проекте открыто несколько портов, т.е.
- example.com:3000 реагировать приложение [фронтенд]
- example.com:5601 приложение kibana
- example.com:5050 приложение postgradmin
- example.com/radius php-приложение [бэкэнд]
- example.com:8080 приложение phpmyadmin
Мои желаемые URL-адреса:
- example.com:3000 реагировать приложение [фронтенд] =>http://example.com
- example.com:5601 приложение kibana =>http://kibana.example.com
- example.com:5050 приложение postgradmin =>http://postgradmin.example.com
- example.com/radius php приложение [бэкэнд] =>http://example.com/radius
- example.com:8080 приложение phpmyadmin =>http://phpmyadmin.example.com
Я пробовал несколько вещей, но ничего не работает. на route53
попробовал обратный прокси на apache, добавив отдельные файлы conf, например
default.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html"
ServerName example.com
<Directory "/var/www/html/">
AllowOverride all
</Directory>
</VirtualHost>
kibana.conf
Listen 5601
<VirtualHost *:5601>
ServerAdmin [email protected]
ServerName kibana.example.com
</VirtualHost>
pgadmin.conf
Listen 5050
<VirtualHost *:5050>
ServerAdmin [email protected]
ServerName pgadmin.example.com
</VirtualHost>
когда я запускаю docker-compose на EC2,http://example.com/radiusработает нормально. но другие нет (напримерhttp://kibana.example.com). но если попробовать напрямую с портом (например, example.com:5601), то все работает. но я хочу использовать поддомен, а не домен с портом.
Как это сделать?
Обратный прокси-сервер Я попробовал, как указано в описании, но он не работает должным образом.
решение1
Решение найдено, прокомментируйте, пожалуйста, если этот подход неверен.
Добавил свои поддомены в AWS route53:
В файле docker-compose.yml добавленотрафики добавил другие мои изображения в той же сети (t2_прокси)
traefik:
image: "traefik:v2.9"
container_name: $DOCKER_IMAGE_TRAEFIK
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
labels:
- traefik.enable=true
- traefik.http.routers.api.rule=Host(`$DOCKER_TRAEFIK_HOST_PROXY`)
- traefik.http.routers.api.entrypoints=web
- traefik.http.routers.api.service=api@internal
# - traefik.port=8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- t2_proxy
- postgreNetwork
- elk
В этой конфигурации $DOCKER_IMAGE_TRAEFIK — это имя образа traefik из моего файла .env. Вы можете добавить свое имя образа, а $DOCKER_TRAEFIK_HOST_PROXY — это имя хоста, например proxy.example.com
для конфигурации порта:
phpmyadmin:
image: phpmyadmin:latest
platform: linux/amd64
container_name: $DOCKER_IMAGE_PHPMYADMIN
links:
- mysqldb
networks:
- t2_proxy
environment:
PMA_HOST: mysqldb
PMA_PORT: ${MYSQL_PORT:-3306}
# ports:
# - "${PHPMYADMIN_PORT:-7865}:80"
labels:
- "traefik.enable=true"
- "traefik.http.routers.phpmyadmin.rule=Host(`$DOCKER_TRAEFIK_HOST_PHPMYADMIN`)"
- "traefik.http.routers.phpmyadmin.entrypoints=web"
- "traefik.http.routers.phpmyadmin-rtr.tls=true"
- "traefik.port=$PHPMYADMIN_PORT"
volumes:
- /sessions
В этой конфигурации $DOCKER_IMAGE_PHPMYADMIN — имя образа phpmyadmin, а $PHPMYADMIN_PORT — 7865 из моего файла .env. Вы можете изменить его по своему усмотрению. $DOCKER_TRAEFIK_HOST_PHPMYADMIN — имя хоста, например phpmyadmin.example.com
В этом примере я заблокировал доступ к порту и могу нормально получить доступ к поддомену. Та же настройка для LAMP, ELK, Node и React в моем проекте.