半農半エンジニアの記録

関西在住エンジニア。個人で勉強・開発したこと、その他趣味のことを書いてます。農業してます。

dockerのubuntu18.04でnginxとphpの環境作成

前回の続き

www.m24te28.com

tl;dr

githubに載せたので、そちらでどうぞ。

github.com

おさらい

dockerコンテナを使ってubuntu 18に入れたnginxでphpを動かす環境を作ります。

最終的にはKubernetesへのデプロイも考えてますが、まずはdocker-composeで動かせるところまで。

構成

最終的にはこんな感じになります。

.
|--docker-compose.yml
|--html
|  |--index.php
|--nginx
|  |--Dockerfile
|  |--nginx.conf
|  |--server.conf
|--php
   |--Dockerfile

コンテナ使わずにやるならnginxとphpは1つのインスタンスに入れると思いますが、コンテナはプロセス毎に分けるのがベストプラクティスとされているので分けます。敢えてね。

設定ファイル

nginx

Dockerfile for nginx on ubuntu

server.conf(抜粋)

phpの処理をphpコンテナに送ります。

        location ~ \.php$ {
              include snippets/fastcgi-php.conf;
        
              # With php-fpm (or other unix sockets):
              fastcgi_pass php:9000;
        }

fastcgi_pass php:9000;

のphpはdocker-compose.ymlのservice名で名前解決しているので、適宜変更してください。

nginx.conf

include /etc/nginx/sites-enabled/*; を消すだけです。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;

        include /etc/nginx/conf.d/*.conf;
}

php

Dockerfile for php on ubuntu

docker-compose

compose nginx and php via http

nginxとphpの通信

server.confに記述しているように、phpファイルはphpのコンテナに処理を移譲します。

このnginxとphpのやりとりにsocket通信かhttpを設定できて、どちらを使うかによって設定が変わります。

上記の設定ではhttpで行なっているので、socket通信する場合はgithubの方に修正箇所を記載したのでそちらを参照してください。

まとめ

phpを動かすのが初めてだったので少し苦戦しましたが、最終的な内容を見るとこんなもんかという感じでまだまだ勉強せな、となりました。。

次回はKubernetesで動かしてみます!