Open6

Traefik Memo

at yasuat yasu

TraeFik v3 から FastCGI のサポートが入る。ただ Beta2 でもまだ入っていない( https://github.com/traefik/traefik/issues/9521 )ので、Release Candidate あたりに入る気配?

個人的に Laravel / PHP プロジェクトが多いので、これが入ったらだいぶ嬉しいのでメモ書き。Apache 重たいんだ…

at yasuat yasu

こんな感じかなぁ。。。まだ動かす環境はないからわからん。

  1. 他の docker container packages からも使える感じにするために my-develop-net を作っている。
  2. SSL は使わないからコメントアウトしている。使うときは環境変数 CA_EMAIL などの設定を忘れないように。
    設定は色々抜かしてるけど Cloudflare のDNS API使ったLet's Encrypt の更新ができるみたいだから、他のクラウドサービスのモジュールとかもあるはず。
  3. Laravel/PHP プロジェクト自体には http://my-like-app.local で接続して見る感じ。
    1. traefik の dashboard は http://localhost:8080 で接続。
  4. 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
at yasuat yasu

my_like_app の docker build ですること

  1. 必要な php-ext のインストール
  2. 必要な設定をした php.ini のインストール
  3. composer install --verbose --prefer-dist --no-progress --no-interaction --no-dev --optimize-autoloader とか。
at yasuat yasu

my_like_static ですること

  1. public 以下をコピー
  2. *.php, .htaccess の削除とか?
at yasuat yasu

つか割と適当に書いてるな、あたし。my_like_app が http route になってるのがミス。ここが FastCGI になる。

at yasuat yasu

なかなか 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つの問題が挙げられています:

  1. 上流のサーバーが利用できないときにTraefikに接続を開始すると、その接続がハングアップする問題【25†source】【26†source】。 https://github.com/traefik/traefik/issues/9929
  2. Traefikが突然TLSパススルーを無視し、自己署名証明書でTLSを終了させる問題【33†source】【34†source】【37†source】。 https://github.com/traefik/traefik/issues/9913

これらの問題が修正されなければ、正式なリリースは行われない可能性があります。具体的なリリース日程については、公式な情報がないため確定的なことは言えません。

なお、この情報は2023年6月6日現在のもので、最新の情報を得るためにはTraefikの公式ウェブサイトやGitHubのリポジトリを定期的にチェックすることをおすすめします。