Nginx+Nginx Unit+docker-composeでWordPress立ててみた

PHP

約 6 分で読めます。



先日こんな記事を見つけました。

PHP標準のアプリケーションサーバー「PHP-FPM」から「NGINX Unit」に乗り換えるだけで約8倍も応答速度が改善したというテスト結果
NGINX Unitはさまざまな言語で動作可能なオープンソースの動的アプリケーションサーバーです。PHPのアプリケーションを動作させる際にNGINX Unitを使うと、PHP-FPMを使う場合に比べて約8倍も応答速度が改善するというテスト結...



いまこのサイトではPHP-FPMで動かしていますが、ラズパイ上で動かしていることもあり、パフォーマンスが気になっていて。

そんなところにこんな記事が出てきたので、試してみようと。

TL;DR

これらのファイルでやれました。

$ tree
.
├── docker-compose.yml
├── myapp
│   └── config.json
└── wordpress
    └── Dockerfile

3 directories, 3 files



docker-compose.yml

version: '3.1'

services:
  wordpress:
   build:
    context: wordpress
   restart: always
   ports:
    - 8080:8080
   links:
    - db
   volumes:
    - ./myapp/config.json:/docker-entrypoint.d/config.json
    - wordpress_var_run:/var/run

  db:
   image: mariadb:latest
   restart: always
   ports:
    - 3306:3306
   environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: wordpress
    MYSQL_DATABASE: wordpress
   volumes:
    - wordpress_var_run:/var/run

volumes:
  wordpress_var_run:



Dockerfile

FROM unit:php

RUN mkdir /www/ && \
	cd /www/ && \
	curl -L https://ja.wordpress.org/latest-ja.tar.gz -o wordpress.tar.gz && \
	tar zxvf wordpress.tar.gz && \
	mv wordpress/* . && \
	rm -f /www/wordpress.tar.gz && \
	chown -R www-data:www-data /www/ && \
	docker-php-ext-install mysqli && \
	docker-php-ext-enable mysqli



config.json
– applications/wordpress/processesは動作PCのCPUコア数で増減させると良いです。

{
	"listeners": {
		"*:8080": {
			"pass": "routes"
		}
	},

	"routes": [
		{
			"match": {
				"uri": [
					"*.php",
					"*.php/*",
					"/wp-admin/"
				]
			},
			"action": {
				"pass": "applications/wordpress/direct"
			}
		},
		{
			"action": {
				"share": "/www$uri",
				"fallback": {
					"pass": "applications/wordpress/index"
				}
			}
		}
	],

	"applications": {
		"wordpress": {
			"type": "php",
			"user": "www-data",
			"processes": 12,
			"targets": {
				"direct": {
					"root": "/www/"
				},

				"index": {
					"root": "/www/",
					"script": "index.php"
				}
			}
		}
	}
}



コンテナ起動すれば、http://localhost:8080で初期設定画面が見えているはず。

$ sudo apt install -y docker docker-compose

$ sudo docker-compose up -d

参考にした記事

このあたりを参考にしました。

NGINX Unit: Unit in Docker
NGINX Unit: WordPress

終わりに

いかがでしたか。

当然これだけでは使い物にならないので、以下を継続して調べていきます!

  • WAF(ModSecurity)の適用
  • キャッシュの適用
  • その他

Comments

  1. より:

    docker composeのportsは3306に穴を開けていますよ
    https://tec.tecotec.co.jp/entry/2021/12/17/000000

    • yatch より:

      コメントありがとうございます。
      該当マシンはインターネットからアクセスできないセグメントに置くことで対策をしています。

タイトルとURLをコピーしました