dockercompose使ってローカルでnginxのssl

25/11/2019

laravelのローカル作業でlaradock使ってたのだけれども
ある程度色々自動やってくれるのと
使わない余計な物まで色々入りすぎてて
不具合出た時どこ直せばよいのかわかりづらい気がしたので
自分でdockerfileでやってみました。

で、とりあえずnginxでSSLをって初っ端の段階で詰まってしまったのでメモ

docker-compose.yml

version: "3"

services:
  nginx:
    build: ./docker/nginx/
    container_name: "nginx"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./app:/var/www/

ってやればいいって結構いろんな場所に書いてあります。

dockerfile

FROM nginx:latest

RUN apt-get update && apt-get install -y \
    openssl \
    ssl-cert \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

COPY default.conf /etc/nginx/conf.d/

dockerfileは手元では
RUN apt-getで多少なんやかんやといれないと動かない様子。
バージョンとかにもよりそう。

default.conf

default.conf

server {
    listen       443 ssl;
 
    ssl_certificate      /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key  /etc/ssl/private/ssl-cert-snakeoil.key;
 
    location / {
        root   /var/www/;
        index  index.html index.htm;
    }
}

我ながら情けないですが、個人的に結構詰まったポイントです。

ローカルでSSL対応する場合
letsencryptとかオレオレ証明書とか用意して、
なんやらかんやらって記事が多くあったのですが、

ローカル開発でのSSL化は僕の場合特に一人の個人開発なので
わざわざ用意しなくても別にクロームの
localhost にアクセスする(安全ではありません)
をクリックで見れればいいや、ぐらいな感じなので
できればpemとかkey用意する手順は横着して省きたい。

ってのがあってもともとは

# ssl_certificate      /etc/ssl/certs/ssl-cert-snakeoil.pem;
# ssl_certificate_key  /etc/ssl/private/ssl-cert-snakeoil.key;
# コメントするとnot workですよ。

snakeoil(スネーク・オイル)っていうダミー用なんかってのが用意されてるのかな?

ここコメントしちゃってたのが原因で動かなかったみたいです。

docker-compose up -dやってるとエラーは出力されないのと
buildでも特それらしいエラーも出てないような気がするので
気づくのに時間かかりました。

docker-compose logs -f

ってするか

docker-compose up

no “ssl_certificate” is defined for the “listen … ssl”

みたいなエラーが確認できました。

気づいたらそんな事かって感じではありますが
なかなか時間かかってしまった。

最終的に下記のような感じでなんとかなっている様子

server{
    listen 80;
    return 301 https://$host$request_uri;
}
server {
    listen       443 ssl;
    ssl_certificate      /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key  /etc/ssl/private/ssl-cert-snakeoil.key;

    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
    
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

laradock

半日ぐらいかけてphp/mysqlとかもやっとこさ動作自体はするようになったのだけども
どうにもlaradockに比べてブラウザ表示の体感がだいぶ重い、あきらかに重い。
多分laradockが何かうまいことやってくてれてるんだろうなーと思は思いつつ
何か面倒になってきたので結局laradockでやってます。

不具合はlaradock自体をcloneしなおしたら治りました。
何となく使ってたdockerの多少の勉強になったので良しとしよう。
laradock便利。

web

Posted by admin