
Ich habe eine Domain (z. B. example.com) bei godaddy.com registriert und verwende AWS für das Hosting. Nameserver bei Godaddy später zu AWS hinzugefügt
Ich habe einen Ubuntu (t2.medium) Apache-Server installiert. Mein Projekt in Docker hat LAMP, ELK, Node, React und Postgres installiert. Alles funktioniert auf dem lokalen System über direkte Ports. In meinem Projekt sind nur wenige Ports geöffnet, d. h.
- example.com:3000 reagieren app [frontend]
- example.com:5601 Kibana-App
- example.com:5050 Postgradmin-App
- example.com/radius PHP-Anwendung [Backend]
- example.com:8080 phpmyadmin app
meine gewünschten URLs sind:
- example.com:3000 reagieren app [frontend] =>http://example.com
- example.com:5601 Kibana-App =>http://kibana.example.com
- example.com:5050 postgradmin app =>http://postgradmin.example.com
- example.com/radius php-Anwendung [Backend] =>http://example.com/radius
- example.com:8080 phpmyadmin app =>http://phpmyadmin.example.com
Ich habe ein paar Dinge probiert, aber nichts funktioniert. auf Route53
habe Reverse-Proxy auf Apache ausprobiert, indem ich separate Conf-Dateien hinzugefügt habe, z. B.
Datei 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>
wenn ich docker-compose auf EC2 ausführe,http://example.com/radiusfunktioniert gut. aber andere nicht (zBhttp://kibana.example.com). Wenn Sie es aber direkt mit dem Port versuchen (z. B. example.com:5601), funktioniert es. Ich möchte jedoch eine Subdomäne verwenden, keine Domäne mit einem Port.
Wie geht das?
Reverse-Proxy Ich habe es wie in der Beschreibung beschrieben versucht, aber es funktioniert nicht richtig
Antwort1
Habe die Lösung gefunden, bitte kommentieren Sie, wenn dieser Ansatz falsch ist.
Meine Subdomains in AWS route53 hinzugefügt:
In der Datei docker-compose.yml hinzugefügtAbonnierenund habe meine anderen Bilder im selben Netzwerk hinzugefügt (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
In dieser Konfiguration ist $DOCKER_IMAGE_TRAEFIK der Traefik-Image-Name aus meiner .env-Datei. Sie können Ihren Image-Namen hinzufügen und $DOCKER_TRAEFIK_HOST_PROXY ist der Hostname, z. B. proxy.example.com
für die Portkonfiguration:
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
In dieser Konfiguration ist $DOCKER_IMAGE_PHPMYADMIN der Name des phpmyadmin-Images und $PHPMYADMIN_PORT ist 7865 aus meiner .env-Datei. Sie können es beliebig ändern. $DOCKER_TRAEFIK_HOST_PHPMYADMIN ist der Hostname, z. B. phpmyadmin.example.com
In diesem Beispiel. Ich habe den Portzugriff blockiert und kann ordnungsgemäß auf die Subdomäne zugreifen. Dieselben Einstellungen für LAMP, ELK, Node und React in meinem Projekt.