
特定のドメインとリンクで Web UI を使用して Docker 上で Kafka を実行する必要があります。例:
http://somesite.com/kafka
私はこのdocker-compose.ymlを使用しています。
version: '3.3'
services:
zookeeper:
image: 'bitnami/zookeeper:latest'
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: 'bitnami/kafka:latest'
ports:
- '9092:9092'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
depends_on:
- zookeeper
kafka-ui:
image: 'provectuslabs/kafka-ui:latest'
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
- KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
depends_on:
- kafka
networks:
- default
ports:
- '9099:8080'
apache2
直接ドメインで設定するとkafka.somesite.com
動作します。
<VirtualHost *:80>
ServerName kafka.somesite.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9099/
ProxyPassReverse / http://127.0.0.1:9099/
</VirtualHost>
しかし、リンクを使用してドメインを設定しようとするとsomesite.com/kafka
、空白の画面しか表示されません。
<VirtualHost *:80>
ServerName somesite.com
ProxyPreserveHost On
ProxyPass /kafka http://127.0.0.1:9099/
ProxyPassReverse /kafka http://127.0.0.1:9099/
</VirtualHost>
リンクを使用して Kafka を機能させるにはどうすればよいですか?
ありがとう。
答え1
2つの点を変更する必要があります。まず、kafka-uiコンテナのベースURLを設定する必要があります。これは、SERVER_SERVLET_CONTEXT_PATH
環境変数。
# ...
kafka-ui:
image: 'provectuslabs/kafka-ui:latest'
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
- KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
- SERVER_SERVLET_CONTEXT_PATH=/kafka
# ...
そうしないと、kafka-ui によって生成されるすべての URL が で始まるため/
、CSS、JavaScript などが/
ではなくから取得されることになります/kafka/
。
ProxyPass
次に、そのパスに合わせてディレクティブを調整する必要があります。
ProxyPass /kafka/ http://127.0.0.1:9099/kafka/
ProxyPassReverse /kafka/ http://127.0.0.1:9099/kafka/
ProxyPass
末尾のスラッシュが一致していることを確認してください。ドキュメントに記載されている通り:
最初の引数が末尾の / で終わる場合、2 番目の引数も末尾の / で終わる必要があります。その逆も同様です。そうしないと、バックエンドへのリクエストで必要なスラッシュがいくつか欠落し、期待どおりの結果が得られない可能性があります。
答え2
ServerNameは のままですsomesite.com
。Apacheは依然としてそれをベースURLとして期待しているからです。URLが の場合、somesite.com/kafka
リダイレクトする必要があります。http://127.0.0.1:9099/
結論としては、2番目の設定は、ServerName somesite.com