Docker のコンテイナーに SSL化するところでの問題とその解決方法を紹介します。
まず、docker-compose.yml の方に https 通信が必要としているポート 443 を開きましょう。
version : '2' services: web: build: ./web ports: - '80:80' - '443:443' tty: true volumes: - ./web/docroot:/docroot
次に、apache の設定にまだドメインの設定をしてない場合、 httpd.conf に設定を追加します。
コンテイナーの中入るため、下記のコマンドを実行して、コンテイナーのBash shell を起動します。
container_name は作成したコンテイナー名を置き換えてください。( docker container ls で参照できます)
(下記のコマンドじゃなくてもSSH などでもいいです。)
docker exec -it container_name /bin/bash
コンテイナーに入ったら下記のコマンドでapacheの設定編集します。
vi /etc/httpd/conf/httpd.conf
vi コマンドで設定ファイル開いたら、下記の設定を追記します。(ファイルのどこでもいいので)
<VirtualHost *:80>
ServerAdmin root@example.com
DocumentRoot /var/www/html
ServerName example.com
</VirtualHost>
:wq して vi を保存して終了します。
下記のコマンドで apache を再起動します。
systemctl restart httpd
ここで問題が発生、下記のエラーが発生。
調べた結果、docker内のコンティナーでsystemctl を使うには ホストと同等な権限に与えなければいけないらしいので、
docker-compose.yml に編集して、コンティナーを再起動します。
version : '2' services: web: build: ./web ports: - '80:80' - '443:443' tty: true volumes: - ./web/docroot:/docroot #権限追加 privileged: true command: /usr/sbin/init
そして下記のコマンドで設定を適応し、コンテイナーをアップします。
docker-compose up -d
systemctl を打ってみて、エラーが出ないことを確認できました。
次に Let’s Encrypt をインストールするため必要なモジュールをインストールします。
yum install -y mod_ssl
次に Let’s Encrypt をインストールします。
yum install -y certbot python2-certbot-apache
certbot を起動して証明書をインストールします
xxx.com のところを自分のサイトに置き換えてください。
www.xxx.com のサブドメインも一緒に証明書発行しましょう。
certbot –apache -d xxx.com -d www.xxx.com
コマンド実行したらメールを受け取るためのメールアドレスを聞かれますので、入力します。
次に規約への同意を聞かれますので、Aを入力します。
次にメール公開するかどうか聞かれますので、 N を入力します。
http のコネクションもhttps にリダイレクトするかと聞かれますので、2を入力します。
下記の画面が出たらSSLのインストール終了です。
コメント