LoginSignup
2
3

More than 1 year has passed since last update.

https-portal でSSL証明書が取得できないエラー。原因はvolumeの設定し忘れ。

Last updated at Posted at 2021-08-20

開発・運営しているWebサービス満点学習帳が、アップデートした際にうごかなくなってしまいました。
アップデート前のコードに戻したものの直らず。

dockerコンテナの状態を確認すると、https-portalのコンテナがRestartを繰り返していました。
(ここに至るまでかなり時間がかかりました。次回からはまず$ docker container lsですべてのコンテナの起動状態を確認したいと思います)

https-portalとは

  • https化するためのSSL証明書の取得と設定を全自動でやってくれるdockerコンテナ
  • 満点学習帳ではAPIサーバーをhttps化するためにつかっています。

SSL証明書が取得できないエラー

$ docker logs コンテナIDhttps-portalコンテナのログを見てみると、証明書の取得ができないとのことでした。

SSL証明書の取得回数の制限を超えていた

ログをもうすこしよく読んでみると、Let's EncryptからSSL証明書を取得する回数の制限を超えているとのこと

Let's Encryptを読んでみると

主なレート制限としては、登録ドメインごとの証明書数 (1週間に50個まで) があります。

証明書の発行に使用されたリソースはすでに消費されているため、証明書を取り消してもレート制限はリセットされません。

どうやら1週間サービスを再開できなさそう。さすがにそれはマズイので、ドメインを変更することにしました。(APIサーバーなので変更して問題無し)

原因: https-portalコンテナにvolumeを設定していなかった

ドメインを変更するまえに、なぜ制限を超えてしまったか調べてみると、https-portalコンテナにvolumeを設定していないことが原因でした。

volumeを設定しないと、コンテナのビルド時やRestart時に毎回SSL証明書を取得するため、あっという間に制限回数を超えてしまうとのことです。

下はgithub: https-portalより拝借

docker-compose.yml
version: '3'

https-portal:
  image: steveltn/https-portal:1
  ports:
    - '80:80'
    - '443:443'
  links:
    - wordpress
  restart: always
  environment:
    DOMAINS: 'wordpress.example.com -> http://wordpress:80'
    # STAGE: 'production' # Don't use production until staging works
    # FORCE_RENEW: 'true'
  volumes: # ここを書いていなかった
    - https-portal-data:/var/lib/https-portal # ここを書いていなかった

wordpress:
  image: wordpress
  links:
    - db:mysql

db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: '<a secure password>'

volumes:  # ここを書いていなかった
  https-portal-data:  # ここを書いていなかった

なぜ今までvolumeを設定せずにエラーが起こらなかったのか、なぜ今回エラーが起きてしまったのかは謎です。

とりあえずvolumeを設定し、ドメインを変更すると無事エラーは解決し、サービスを再開できました。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3