目的

docker-composeで立てたnginxをhttps対応にしたい。
あくまでも開発環境用なのでオレオレ証明書です。

手順

自己署名証明書をサクッと作成する

❯ openssl req -x509 -nodes -new -keyout server.key -out server.crt -days 365

docker-composeの更新

443ポートを使用するように変更。
また、作成した証明書も読み込めるようにvolumesも更新。

version: "3.5"
services:
    web:
        build: ./docker/nginx
        restart: always
        ports:
            - 443:443  # 変更
        depends_on:
            - app
        volumes:
            - ./:/var/www/html
            - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
            - ./docker/nginx/server.crt:/etc/nginx/server.crt  # 追加
            - ./docker/nginx/server.key:/etc/nginx/server.key  # 追加
        links:
            - app
        networks:
            - default

default.confの更新

ポートを443に変更し、証明書の情報を追加します。

server {
    listen       443;
    ssl on;
    ssl_certificate /etc/nginx/server.crt;
    ssl_certificate_key /etc/nginx/server.key;
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/laravel/public;

    location / {
     try_files $uri $uri/ @laravel;
    }

立ち上げ

❯ docker-compose down && docker-compose up -d
❯ docker-compose ps
       Name                      Command              State                           Ports
--------------------------------------------------------------------------------------------------------------------

web_1                 nginx -g daemon off;            Up      0.0.0.0:443->443/tcp

オレオレ証明書なので接続時に警告が出ますが、ひとまずこれでhttpsでの接続が可能になりました。

【補足】laravel-admin対応

環境変数の更新

.envAPP_URLを更新します。
APP_URL=https://~~~

ちなみに実際の作業時、ここをちゃんとhttpsにはしてたんですが、お試しデプロイ時にlocalhostにしたままにしてしまって遷移先が全部つながらずフフ……となるなどしました。

設定ファイルの更新

larave-adminの遷移先URLもhttpsにするため、confit/admin.phpも修正。

    'https' => env('ADMIN_HTTPS', TRUE),

参考にさせていただいたもの

オレだよオレオレ認証局で証明書つくる - Qiita
Nginx on DockerでHTTPS接続できるローカルサーバーを用意する - Tomcky’s blog

これも大事:
オレオレ証明書を使いたがる人を例を用いて説得する - Qiita