
Tengo un dominio (por ejemplo, ejemplo.com) registrado en godaddy.com y uso AWS para alojamiento. El servidor de nombres en Godaddy se agregó posteriormente a AWS
Tengo instalado un servidor apache ubuntu (t2.medium). Mi proyecto en Docker tiene instalados LAMP, ELK, Node, React y Postgres. Todo funciona en el sistema local utilizando puertos directos. Pocos puertos abiertos en mi proyecto, es decir
- ejemplo.com: aplicación de reacción 3000 [interfaz]
- ejemplo.com: aplicación kibana 5601
- ejemplo.com: aplicación de posgrado 5050
- ejemplo.com/radius aplicación php [backend]
- ejemplo.com: aplicación 8080 phpmyadmin
mis URL deseadas son:
- ejemplo.com: aplicación de reacción 3000 [frontend] =>http://ejemplo.com
- ejemplo.com:5601 aplicación kibana =>http://kibana.ejemplo.com
- ejemplo.com: aplicación de posgrado 5050 =>http://postgradmin.example.com
- ejemplo.com/radius aplicación php [backend] =>http://ejemplo.com/radius
- ejemplo.com:8080 aplicación phpmyadmin =>http://phpmyadmin.example.com
He probado algunas cosas pero nada funciona. en la ruta 53
Probé el proxy inverso en Apache agregando archivos de configuración separados, por ejemplo
predeterminado.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>
cuando ejecuto docker-compose up en EC2,http://ejemplo.com/radiusfunciona bien. pero otros no (por ejemplohttp://kibana.ejemplo.com). pero si lo intenta directamente con el puerto (por ejemplo, ejemplo.com:5601), funciona. pero quiero usar un subdominio, no un dominio con puerto.
¿Como hacer eso?
Proxy inverso. Lo intenté como se menciona en la descripción pero no funciona correctamente.
Respuesta1
Encontré la solución, comente por favor si este enfoque es incorrecto.
Agregué mis subdominios en AWS route53:
En el archivo docker-compose.yml, agregadotraefiky agregué mis otras imágenes en la misma red (t2_proxy)
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
En esta configuración, $DOCKER_IMAGE_TRAEFIK es el nombre de la imagen traefik de mi archivo .env. Puede agregar el nombre de su imagen y $DOCKER_TRAEFIK_HOST_PROXY es el nombre del host, por ejemplo, proxy.example.com
para la configuración del puerto:
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
En esta configuración, $DOCKER_IMAGE_PHPMYADMIN es el nombre de la imagen de phpmyadmin y $PHPMYADMIN_PORT es 7865 de mi archivo .env. Puedes cambiar como quieras. $DOCKER_TRAEFIK_HOST_PHPMYADMIN es el nombre del host, por ejemplo, phpmyadmin.example.com
En este ejemplo. He bloqueado el acceso al puerto y puedo acceder al subdominio correctamente. la misma configuración para LAMP, ELK, Node y React en mi proyecto.