Laradockで複数サイトをSSL対応して同時に動かす

Docker Laravel

Laradockで複数サイトを同時に動かすには、nginxの設定を追加します。

ついでにSSLにも対応します。

以下、手順です。

nginxの設定ファイルを編集する

Laradockにはnginxの設定ファイルのサンプルが以下の3種類用意されています。

  • nginx/sites/laravel.conf.example  … Laravel用の設定ファイルのサンプル
  • nginx/sites/symfony.conf.example  … Symfony用の設定ファイルのサンプル
  • nginx/sites/app.conf.example  … 上記以外のWebアプリの設定ファイルのサンプル

今回はLaravelのプロジェクトをいくつか同時に動かしたいので、laravel.conf.example をコピーして使います。

サイトの数のぶん、ファイルをコピーします。

>cp nginx/sites/laravel.conf.example nginx/sites/project1.conf
>cp nginx/sites/laravel.conf.example nginx/sites/project2.conf

設定ファイルのserver_name とroot を任意のパスに変更します。

server_name laravel.test;
root /var/www/laravel/public;

server_name project1.app;
root /var/www/project1/public;
server_name project2.app;
root /var/www/project2/public;

hostsを編集

ホストマシン側のhostsファイルを編集します。

127.0.0.1 project1.app
127.0.0.1 project2.app

SSLに対応する

必要であればSSLに対応するように設定します。

基本的に、やっておいたほうが良いでしょう。

nginxの設定

nginxの設定ファイルのコメントを外し、証明書のファイル名はホスト名に合わせます。

# For https
# listen 443 ssl;
# listen [::]:443 ssl ipv6only=on;
# ssl_certificate /etc/nginx/ssl/default.crt;
# ssl_certificate_key /etc/nginx/ssl/default.key;

# For https
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
ssl_certificate /etc/nginx/ssl/project1.app.crt;
ssl_certificate_key /etc/nginx/ssl/project1.app.key;

ssl証明書の追加

nginxコンテナのstartup.shに以下を追記します。

デフォルトの証明書の作り方のままだとGoogle Chromeで無効なSSL証明書になってしまうので、少し手を加えています。

#!/bin/bash

if [ ! -f /etc/nginx/ssl/default.crt ]; then
    openssl genrsa -out "/etc/nginx/ssl/default.key" 2048
    openssl req -new -key "/etc/nginx/ssl/default.key" -out "/etc/nginx/ssl/default.csr" -subj "/CN=default/O=default/C=UK"
    openssl x509 -req -days 365 -in "/etc/nginx/ssl/default.csr" -signkey "/etc/nginx/ssl/default.key" -out "/etc/nginx/ssl/default.crt"
fi

# ↓ここをサイトの数だけ追加
if [ ! -f /etc/nginx/ssl/project1.app.crt ]; then
    openssl genrsa -out "/etc/nginx/ssl/project1.app.key" 2048
    openssl req -new -key "/etc/nginx/ssl/project1.app.key" -out "/etc/nginx/ssl/project1.app.csr" -subj "/CN=project1.app/O=project1.app/C=UK"
    # ↓ Chrome用に設定を追加。ホスト名を指定する。
    echo subjectAltName=DNS:project1.app > "/etc/nginx/ssl/project1.ext"
    openssl x509 -req -days 365 -in "/etc/nginx/ssl/project1.app.csr" -signkey "/etc/nginx/ssl/project1.app.key" -out "/etc/nginx/ssl/project1.app.crt" -extfile "/etc/nginx/ssl/project1.ext"
fi

nginx

コンテナのビルドからやり直します。

docker-compose stop
docker-compose build nginx
docker-compose up -d workspace nginx

これでうまくいくと思います。

以上です。

 

 

コメント/ピンバック

  1. […] […]

  2. […] Laradockで複数サイトをSSL対応して同時に動かす […]

タイトルとURLをコピーしました