本サイト運用にあたり、稼働の確認やデータのバックアップ等で用いるローカル開発環境としているもののまとめ。
基本的な考え
- 単なる備忘録サイトなので自分しか見ないが、ローカルにバックアップは持っておきたい。
- バックアップに異常がないかを確認するため、直ぐにそれをローカルに反映したい。
- プラグインを自己開発するときは、ひとまずローカルで確認したい。
- ローカル環境を簡単に再構築できるようにしたい。
- PCの環境はあまり汚したくない。領域サイズも少ない方がいい。
- 仕事で使用する Hyper-V、WSL2、Docker Desktop とは可能な限り分離したい。
こうする
- WSL2+Docker Desktopを使用。
- WSL2ホストには、Alpineを用いて仮想ドライブサイズを極力減らす。
- WEBサーバには、Nginx を用いて軽量化する。
- DBサーバには、MariaDBを用いて軽量化する。
- バックアップはWordPressのプラグイン「All-in-One WP Migration」を用いる。
構築方法
以下の手順で構築する。
Alpine WSL パッケージのインストール
Windows Store で提供されている Alpine WSL パッケージをWindowsにインストールする。
Alpine ディストロをクローンする
Alpineディストロをtarファイルにバックアップし、それを別名のディストロとしてインポートする。
ここで出来たAlpineのクローンをローカル開発環境専用ディストロとして使用する。
ローカル開発環境専用ディストロ内でDocker仮想環境を構築する
ローカル開発環境専用ディストロにログインし、以下の4ファイルを同一ディレクトリに作成する。
作成後に、docker compose up -d すれば出来上がり。
docker-compose.yml
version: '3.9'
services:
web:
image: nginx:stable-alpine
container_name: dev-tasys-jp-web
depends_on:
- wp
ports:
- "8000:80"
env_file: project.env
restart: always
volumes:
- ./html:/var/www/html
- ./nginx.conf:/etc/nginx/nginx.conf
wp:
image: wordpress:6-php7.4-fpm-alpine
container_name: dev-tasys-jp-wp
depends_on:
- db
env_file: project.env
restart: always
volumes:
- ./html:/var/www/html
- ./php.ini:/usr/local/etc/php/php.ini
db:
image: yobasystems/alpine-mariadb
container_name: dev-tasys-jp-db
env_file: project.env
expose:
- "3306:3306"
restart: always
volumes:
- ./mysql:/var/lib/mysql
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
client_max_body_size 1g;
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass wp:9000;
fastcgi_index index.php;
}
}
}
php.ini
post_max_size = 1G
upload_max_filesize = 1G
memory_limit = 1024M
[xdebug]
xdebug.client_host=host.docker.internal
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host = 0
xdebug.remote_handler = "dbgp"
xdebug.client_port=9003
project.env
MYSQL_DATABASE: wordpressdb
MYSQL_USER: wordpressuser
MYSQL_PASSWORD: wordpresspassword
MYSQL_ROOT_PASSWORD: root
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpressuser
WORDPRESS_DB_PASSWORD: wordpresspassword
WORDPRESS_DB_NAME: wordpressdb