https+PHPで作成してみる
APIのテストなどを行う場合、HTTPS環境でないと動作しない場合があるため、ローカル環境でもHTTPSが必要となる場合があった。
nginx + php で構築
このウェブサイトでは、PHPは必要なかったのだけれども、仕事で ウェブサーバー + PHPが必要だったので、nginx + php で試してみた
色々と準備が必要
事前に以下のものを用意する
- 証明書ファイル
- サーバー設定ファイル
- php設定ファイル
- php用Dockerfile
- docker-compose.yml
証明書ファイル。これは、以下などのサイトを参考に作成しておく。
「Nginxにサーバ証明書を設定する」
サーバー設定ファイル
nginx用の設定ファイルを用意する。SSLとPHPを使用するので、以下のような感じで用意しておく。
server.conf
server {
listen 443;
ssl on;
ssl_certificate /etc/certs/localhost.pem;
ssl_certificate_key /etc/certs/localhost-key.pem;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/html/;
index index.php index.html;
charset utf-8;
location / {
alias /var/www/html/;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP.iniとDockerFile
この辺は、codelikeなブログ さんを参照に作成。
https://codelikes.com/docker-compose-point/
docker-compose.yml
ymlファイルの作成。
version: '3'
services:
nginx:
image: nginx:latest
container_name: local_nginx
ports:
- 8080:80
- 443:443
depends_on:
- php
volumes:
- (ローカルの場所):/etc/nginx/conf.d/default.conf
- (ローカルの場所):/etc/certs/localhost.pem
- (ローカルの場所):/etc/certs/localhost-key.pem
- (ローカルの場所):/var/www/html
php:
build: ./php
container_name: local_php
volumes:
- (ローカルの場所):/var/www/html
- (ローカルの場所):/usr/local/etc/php/php.ini
docker-compose を行う
ymlファイルが保存しているディレクトリに移動後、
docker-compose -f docker-compose.yml up -d
で起動。
dockerからブラウザを開くと、400 Bad Request でてしまうかもしれないが、
https://localhost:443
に直してあげると開くはず。
止めるときは、
docker-compose -f docker-compose.yml down -v
downもup もオプションがあるので、調べてみるといいかも。
余談
Dockerを学習し始めたときは、書籍を使用していたのだけれども、手に取った本がわかりやすかったので紹介しておこうと思う。
基本的なことはこちらで学習した後、今回のような目的に合わせたものは検索しつつという方法をとった。実は数年前にDockerに手を出したが、よくわからん & ローカルに環境あるし、でほったらかしにしていた。そこで本屋で立ち読みして、良さそうなものを買ったのがこちら。シンプルにまとめていて良本だと思います。リンク先はアマゾン。
仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん
さらに余談だけれども、最近、実用書/参考書は、電子書籍と半々位で購入してる。個人的にcodeを参考するようなものは電子書籍で、やり方(Dockerもそこそこ書くけど)を参考するようなのは普通の書籍の方が良いような気がしてる近ごろです。本当にどうでもいい余談。