meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

Docker + Nginx + PHP+ Let’s Encryptでウェブサーバを立ち上げてみた

      2018/10/20

久しぶりにウェブ開発の話です。

サーバー

最近、新しいウェブサービスを立ち上げるために、Docker + Nginx + PHP + Let’s Encrypt で環境を構築しました。

色々とわからないことが多くて調べまくりましたw

今日は備忘録も兼ねて記事を書き思ました。

想定している環境

  • Ubuntu 16.04.2 LTS
  • Nginx 1.13.0
  • PHP7

という環境で試しました。

しかし、以下の手順で行えば、基本的にはバージョン関係なく構築できると思います。

環境構築の手順

Let’s Encryptの準備

まずはサーバー証明書を取得する必要があります。

Let’s Encryptのサーバー証明書を取得するので最も簡単な方法は、certbotを使う方法です。(というかこれ以外に方法があるのか知りませんw)

やり方はネット上で無数に紹介されていますので、グーグル先生に聞いてみてください。(個人的にわかりやすかったのはこちらのページです。)

certbotを使って、最終的に以下のようにサーバー証明書等を配置してください。certbot上でインストールするディレクトリを指定すれば、以下のようなフォルダ・ファイルが自動で作られます。

言うまでもないですが、www.hogehoge.comというホスト名は仮のものです。certbotを使っていると途中でホスト名の入力を促されるので、そこで自分のホスト名を設定してください。

/etc/letsencrypt/
├── accounts/ # アカウント情報
├── archive/  # 取得した証明書の実体がドメインごとのサブディレクトリに保存されている
│   └── www.hogehoge.com/
├── csr
├── keys
├── live/     # 最新の証明書へのシンボリックリンクが作られる。
│   └── www.hogehoge.com
│       ├── cert.pem -> ../../archive/www.hogehoge.com/cert2.pem
│       ├── chain.pem -> ../../archive/www.hogehoge.com/chain2.pem
│       ├── fullchain.pem -> ../../archive/www.hogehoge.com/fullchain2.pem
│       └── privkey.pem -> ../../archive/www.hogehoge.com/privkey2.pem
└── renewal/  # 証明書更新のための設定が保存されている。
    └── www.hogehoge.com.conf

docker-composeで構築

次にdocker-composeで環境を構築します。

以下のパスのようにフォルダ・ファイル等を作成してください。

├── Dockerfile
├── html
│   └── index.php
├── docker-compose.yml
└── site.conf

 

各々のファイルの内容は以下の通りです。

FROM nginx:latest
LABEL maintainer="meideru"

COPY ./site.conf /etc/nginx/conf.d/default.conf
RUN apt-get update && apt-get upgrade -y
<?php echo phpinfo(); ?>
version: '2'
services:
  web:
      build: ./
      ports:
          - "443:443"
      volumes:
          - /etc/letsencrypt:/mnt
      depends_on:
          - php
  php:
      image: php:7-fpm
      volumes:
          - ./html:/var/www/html
server {
    index index.php index.html;
    server_name www.hogehoge.com;
    root /var/www/html;

    listen 443 ssl;
    ssl_certificate      /mnt/live/www.hogehoge.com/fullchain.pem;
    ssl_certificate_key  /mnt/live/www.hogehoge.com/privkey.pem;

    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;
    }
}

 

用意するファイルは以上です。

最後にターミナルでcdコマンドを使って今回作成した親ディレクトリに移動して

$ docker-compose up -d

を実行するだけ。

これで環境構築完成です!

html以下にあるファイルを自分のものと置き換えれば、好きなウェブサイトが構築できます。

まとめ

正直言って、調べるのにめちゃくちゃ苦労しましたw

特に苦労したのはdockerでサーバー証明書のディレクトリをマウントさせる部分ですね。

私はdocker自体あまり使ったことがないので、ボリュームのマウントの挙動がよくわかりませんでした。

何はともあれ、できて良かったです!

わからないことがあればコメント欄へどうぞ♪( ´▽`)

 - 技術系