
私はドメイン(例:example.com)をgodaddy.comに登録しており、ホスティングにはAWSを使用しています。Godaddyのネームサーバーは後にAWSに追加されました。
Ubuntu (t2.medium) Apacheサーバーをインストールしています。Dockerのプロジェクトには、LAMP、ELK、Node、React、Postgresがインストールされています。すべては直接ポートを使用してローカルシステムで動作します。私のプロジェクトではいくつかのポートが開いています。
- example.com:3000 react アプリ [フロントエンド]
- example.com:5601 キバナアプリ
- example.com:5050 postgadmin アプリ
- example.com/radius php アプリケーション [バックエンド]
- example.com:8080 phpmyadmin アプリ
希望する URL は次のとおりです。
- example.com:3000 react アプリ [フロントエンド] =>http://example.com
- example.com:5601 kibana アプリ =>キバナ
- example.com:5050 postgadmin アプリ =>http://postgadmin.example.com より
- example.com/radius php アプリケーション [バックエンド] =>http://example.com/radius
- example.com:8080 phpmyadmin アプリ =>phpmyadmin.example.com より
別々のconfファイルを追加してApacheでリバースプロキシを試しました。
デフォルト.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html"
ServerName example.com
<Directory "/var/www/html/">
AllowOverride all
</Directory>
</VirtualHost>
キバナ.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>
EC2でdocker-compose upを実行すると、http://example.com/radius正常に動作します。しかし、他のものは動作しません(例:キバナ)。ただし、ポートを直接指定すると(例: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 は私の .env ファイルからの traefik イメージ名です。イメージ名を追加でき、$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 は .env ファイルからの 7865 です。必要に応じて変更できます。$DOCKER_TRAEFIK_HOST_PHPMYADMIN はホスト名です (例: phpmyadmin.example.com)。
この例では、ポート アクセスをブロックし、サブドメインに適切にアクセスできます。プロジェクト内の LAMP、ELK、Node、React に同じ設定を適用しています。