Traefik Memo
TraeFik v3 から FastCGI のサポートが入る。ただ Beta2 でもまだ入っていない( https://github.com/traefik/traefik/issues/9521 )ので、Release Candidate あたりに入る気配?
個人的に Laravel / PHP プロジェクトが多いので、これが入ったらだいぶ嬉しいのでメモ書き。Apache 重たいんだ…
こんな感じかなぁ。。。まだ動かす環境はないからわからん。
- 他の docker container packages からも使える感じにするために my-develop-net を作っている。
- SSL は使わないからコメントアウトしている。使うときは環境変数 CA_EMAIL などの設定を忘れないように。
設定は色々抜かしてるけど Cloudflare のDNS API使ったLet's Encrypt の更新ができるみたいだから、他のクラウドサービスのモジュールとかもあるはず。 - Laravel/PHP プロジェクト自体には
http://my-like-app.local
で接続して見る感じ。- traefik の dashboard は
http://localhost:8080
で接続。
- traefik の dashboard は
- ASSET_URL='http://static.my-like-app.local' とか、別にあるものとする。
メインとなる docker-compose.yml
docker swarm とか使ってるときはまた変わる。
version: "3.8"
services:
traefik:
image: traefik:v3.0
container_name: my-like-traefik
ports:
- "80:80"
# - "443:443"
- "8080:8080"
networks:
- my-develop-net
# traefik
command:
# provider
- --providers.docker=true
- --providers.docker.exposedbydefault=false
# # dashboard
- --api.dashboard=true
- --api.insecure=true
# entry points
- --entrypoints.web.address=:80
# - --entrypoints.websecure.address=:443
# # Certificate
# - --certificatesresolvers.letsencrypt.acme.dnschallenge=true
# - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare
# - --certificatesresolvers.letsencrypt.acme.email=${CA_EMAIL}
# - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
# - --certificatesresolvers.letsencrypt.acme.keyType=EC384
labels:
# casting a spell
- traefik.enable=true
# # Dashboard
- traefik.http.routers.dashboard.service=api@internal
- traefik.http.routers.dashboard.rule=Host(`traefik.local`)
# redirect to https
- traefik.http.routers.http-catchall.entrypoint=web
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
# - traefik.http.routers.http-catchall.middlewares=redirect-to-https@docker
# - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
# For Cloudflare auth
# environment:
# - CLOUDFLARE_EMAIL=${CF_EMAIL}
# - CLOUDFLARE_DNS_API_TOKEN=${CF_TOKEN}
# environment
volumes:
- /var/run/docker.sock:/var/run/docker.sock # mandatory
# - ./letsencrypt:/letsencrypt
# Laravel/PHPの実態
my_like_app:
build: ./docker/php
container_name: My-Like-FPM
# traefik
labels:
- traefik.enable=true
- traefik.docker.network=my-develop-net
- traefik.http.routers.My-Like-app.rule=Host(`my-like-app.local`)
# Traefik v3 で php-fpmへ変更
- traefik.http.routers.root.rule="PathPrefix(`/`)"
- traefik.http.routers.root.service="My-Like-app"
- traefik.http.services.My-Like-app.loadBalancer.servers.url="tcp://My-Like-app:9000/"
- traefik.http.services.My-Like-app.loadBalancer.serversTransport="MY-LIKE-APP"
- traefik.http.serversTransports.MY-LIKE-APP.fastCGI.index=index.php
- traefik.http.serversTransports.MY-LIKE-APP.insecureSkipVerify=true
volumes:
- .:/var/www/html
networks:
- my-develop-net
depends_on:
- traefik
environment:
- DB_CONNECTION=mysql
- DB_HOST=my-mysql
- DB_PORT=3306
# 静的ファイル用
my_like_static:
build: ./docker/nginx
container_name: my-like-static
labels:
- traefik.enable=true
- traefik.docker.network=my-develop-net
- traefik.http.routers.My-Like-app.rule=Host(`static.my-like-app.local`)
volumes:
- ./public/:/var/www/html
networks:
- my-develop-net
depends_on:
- traefik
networks:
my-develop-net:
external: true
my_like_app の docker build ですること
- 必要な php-ext のインストール
- 必要な設定をした php.ini のインストール
- composer install --verbose --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader とか。
my_like_static ですること
- public 以下をコピー
- *.php, .htaccess の削除とか?
つか割と適当に書いてるな、あたし。my_like_app が http route になってるのがミス。ここが FastCGI になる。
なかなか v3 がリリースされないなぁと思って chatgtp + browsering で聞いたら、こんな回答が帰ってきた。
リンクまではコピーしてくれないので、後付。
Traefik のバージョン3がマスターブランチにマージされていることは確認できました。具体的には、2023年5月17日に3.0がマスターブランチにマージされたようです【17†source】。
ただし、現時点では正式なリリースはされておらず、3.0のベータ版がリリースされています。バージョン3.0.0-beta2は2022年12月7日にビルドされたようです【27†source】【38†source】。
さらに調査を行ったところ、Traefik 3.0.0-beta2に関連する一部の問題がGitHub上で報告されていることがわかりました。具体的には、以下の2つの問題が挙げられています:
- 上流のサーバーが利用できないときにTraefikに接続を開始すると、その接続がハングアップする問題【25†source】【26†source】。 https://github.com/traefik/traefik/issues/9929
- Traefikが突然TLSパススルーを無視し、自己署名証明書でTLSを終了させる問題【33†source】【34†source】【37†source】。 https://github.com/traefik/traefik/issues/9913
これらの問題が修正されなければ、正式なリリースは行われない可能性があります。具体的なリリース日程については、公式な情報がないため確定的なことは言えません。
なお、この情報は2023年6月6日現在のもので、最新の情報を得るためにはTraefikの公式ウェブサイトやGitHubのリポジトリを定期的にチェックすることをおすすめします。