MENU

Docker Centos7.7 で SSL化する (http化)

2020 5/09

Docker のコンテイナーに SSL化するところでの問題とその解決方法を紹介します。

まず、docker-compose.yml の方に http 通信が必要としているポート 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 のコネクションもhttp にリダイレクトするかと聞かれますので、2を入力します。


下記の画面が出たらSSLのインストール終了です。

この記事を書いた人

Full stack developer working on Game programming, AI, Data Analysis, and various server backend tech. Feel free to contact me via Huggingface or Linkedin.

コメント

コメントする

目次
閉じる