Hướng dẫn chi tiết: Thiết lập môi trường phát triển WordPress đa phiên bản PHP với Docker
Cài đặt và cấu hình môi trường local cho nhiều WordPress site sử dụng Docker, Nginx, PHP-FPM và MariaDB
12-10-2024
Nâng cấp một vài config để tối ưu tốc độ
09-10-2024
Cập nhật sử dụng nhiều phiên bản PHP cho từng loại website
21-09-2024
Mới cập nhật lại stack dùng php-fpm + nginx tối ưu hiệu năng hơn apache
[12-10-2024] Nâng cấp các config thêm cho môi trường dev nhanh hơn
-
Docker Compose:
- Sử dụng
depends_on
cho các service phụ thuộc nhau. - Sử dụng
restart: unless-stopped
thay vìalways
.
- Sử dụng
-
Docker Sync:
- Thêm
sync_excludes
cho các thư mục không cần đồng bộ thường xuyên. - Sử dụng
sync_userid
để khớp với UID của người dùng trong container.
- Thêm
-
Nginx:
- Bật gzip compression.
- Tăng worker_connections.
- Thêm caching cho static files.
-
PHP:
- Bật opcache với cấu hình tối ưu.
- Sử dụng PHP-FPM pools.
-
MariaDB:
- Tinh chỉnh thêm các tham số như
innodb_buffer_pool_instances
,max_connections
.
- Tinh chỉnh thêm các tham số như
-
Volume mounts:
- Sử dụng
:cached
cho các volume chỉ đọc.
- Sử dụng
Đây là một số điều chỉnh cụ thể:
-
Trong docker-compose.yml:
services: db: volumes: - ./mariadb-container:/etc/mysql/conf.d:cached
-
Trong docker-sync.yml:
syncs: app-sync: sync_excludes: ['node_modules', 'vendor', '*.log', '*.sql', '*.sqlite'] sync_userid: '1000'
-
Trong nginx.conf:
http { gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; }
-
Trong php82.ini và php74.ini:
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
-
Trong my.cnf:
innodb_buffer_pool_instances = 4 max_connections = 200
Hướng dẫn cài đặt môi trường phát triển WordPress với Docker
Mục đích
Hướng dẫn này giúp bạn thiết lập một môi trường phát triển WordPress linh hoạt sử dụng Docker. Môi trường này cho phép bạn:
- Chạy nhiều phiên bản PHP (7.4 và 8.2) cùng lúc
- Sử dụng MariaDB làm cơ sở dữ liệu
- Quản lý cơ sở dữ liệu thông qua phpMyAdmin
- Cấu hình Nginx làm web server
- Dễ dàng thêm và quản lý nhiều WordPress site
Cấu trúc dự án
project/
│
├── docker-compose.yml
├── Dockerfile-php74
├── Dockerfile-php82
├── mariadb-container/
│ ├── init.sql
│ ├── my.cnf
│ └── home/
├── nginx-container/
│ ├── nginx.conf
│ └── logs/
├── php-container/
│ ├── php74.ini
│ └── php82.ini
└── sites/
└── site1/
Cấu hình Docker Compose
File docker-compose.yml
định nghĩa và cấu hình các service cần thiết cho môi trường WordPress. Nó bao gồm:
- Database server (MariaDB)
- PHP-FPM containers (cho PHP 7.4 và 8.2)
- phpMyAdmin để quản lý database
- Nginx web server
Cấu hình này cho phép bạn chạy nhiều phiên bản PHP, giúp kiểm tra tính tương thích của ứng dụng với các phiên bản PHP khác nhau.
version: '3.8'
services:
db:
image: mariadb:latest
volumes:
- db_data:/var/lib/mysql
- ./mariadb-container/init.sql:/docker-entrypoint-initdb.d/init.sql
- ./mariadb-container/my.cnf:/etc/mysql/my.cnf
- ./mariadb-container/home:/home
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: wordpress_password
networks:
- wp-network
php74:
build:
context: .
dockerfile: Dockerfile-php74
volumes:
- ./sites:/var/www/html
- ./php-container/php74.ini:/usr/local/etc/php/php.ini
environment:
UPLOAD_MAX_FILESIZE: 100M
expose:
- "9000"
restart: always
networks:
- wp-network
php82:
build:
context: .
dockerfile: Dockerfile-php82
volumes:
- ./sites:/var/www/html
- ./php-container/php82.ini:/usr/local/etc/php/php.ini
environment:
UPLOAD_MAX_FILESIZE: 100M
expose:
- "9000"
restart: always
networks:
- wp-network
phpmyadmin:
image: phpmyadmin
platform: linux/arm64
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: root_password
ports:
- "8081:80"
restart: always
networks:
- wp-network
nginx:
image: nginx:latest
ports:
- "8880:80"
volumes:
- ./nginx-container/nginx.conf:/etc/nginx/nginx.conf:ro
- ./sites:/var/www/html
- ./nginx-container/logs:/var/log/nginx
depends_on:
- php74
- php82
networks:
- wp-network
volumes:
db_data:
networks:
wp-network:
driver: bridge
Cấu hình PHP
Các Dockerfile cho PHP 7.4 và 8.2 cài đặt các extension PHP cần thiết cho WordPress và các ứng dụng web PHP phổ biến khác. Việc sử dụng các container riêng biệt cho mỗi phiên bản PHP cho phép bạn dễ dàng chuyển đổi giữa các phiên bản cho các dự án khác nhau.
PHP 7.4: Tạo file Dockerfile-php74
với nội dung sau
FROM php:7.4-fpm
RUN apt-get update --allow-unauthenticated \
&& apt-get install -y --no-install-recommends --allow-unauthenticated \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libonig-dev \
libzip-dev \
zip \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd mysqli pdo pdo_mysql mbstring zip opcache
COPY ./php-container/php74.ini /usr/local/etc/php/
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
PHP 8.2 - Tạo file Dockerfile-php82
với nội dung sau:
FROM php:8.2-fpm
RUN apt-get update --allow-insecure-repositories \
&& apt-get install -y --no-install-recommends \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libonig-dev \
libzip-dev \
zip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd mysqli pdo pdo_mysql mbstring zip opcache
COPY ./php-container/php82.ini /usr/local/etc/php/
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
Cấu hình PHP.ini
Các file cấu hình PHP.ini tùy chỉnh các giới hạn quan trọng như kích thước upload tối đa và thời gian thực thi, giúp tối ưu hóa hiệu suất và khả năng của PHP cho WordPress.
Cấu hình PHP.ini
Tạo hai file php-container/php74.ini
và php-container/php82.ini
với nội dung giống nhau:
max_input_vars = 5000
post_max_size = 100M
upload_max_filesize = 100M
max_execution_time = 300
memory_limit = 256M
Cấu hình Nginx
File cấu hình Nginx thiết lập web server để xử lý các request HTTP, định tuyến chúng đến các container PHP phù hợp, và cấu hình các thông số cần thiết cho WordPress. Nó cũng cho phép bạn dễ dàng thêm nhiều WordPress site vào cùng một môi trường.
Cấu hình Nginx - Tạo file nginx-container/nginx.conf
với nội dung sau:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
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;
keepalive_timeout 65;
upstream php74 {
server php74:9000;
}
upstream php82 {
server php82:9000;
}
client_max_body_size 100M;
client_header_buffer_size 64k;
large_client_header_buffers 4 64k;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
server {
listen 80;
server_name site1.local;
root /var/www/html/site1;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php82;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# Thêm các block server khác tương tự ở đây
}
Cấu hình MariaDB
File cấu hình MariaDB tùy chỉnh các thông số quan trọng của database server để tối ưu hóa hiệu suất cho WordPress. Các cài đặt này giúp cải thiện tốc độ truy vấn và độ tin cậy của database.
Tạo file mariadb-container/my.cnf
với nội dung sau:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
Thay đổi file hosts
Windows
Mở Notepad với quyền Administrator.
Mở file: C:\Windows\System32\drivers\etc\hosts
Thêm các dòng sau vào cuối file:
127.0.0.1 site1.local
127.0.0.1 site2.local
# Thêm các site khác nếu cần
Lưu file.
macOS và Linux
Mở Terminal.
Chạy lệnh sau để mở file hosts bằng trình soạn thảo nano:
sudo nano /etc/hosts
Thêm các dòng sau vào cuối file:
127.0.0.1 site1.local
127.0.0.1 site2.local
# Thêm các site khác nếu cần
Nhấn Ctrl+X, sau đó nhấn Y và Enter để lưu và thoát.
Khởi động môi trường
Lệnh docker-compose up -d
khởi động tất cả các container đã được định nghĩa trong file docker-compose.yml. Tùy chọn -d
chạy các container trong chế độ nền (detached mode), cho phép bạn tiếp tục sử dụng terminal.
Để khởi động môi trường, chạy lệnh sau trong thư mục gốc của dự án:
docker-compose up -d
Sau khi hoàn tất, bạn có thể truy cập:
WordPress site1: http://site1.local:8880
WordPress site2: http://site2.local:8880
phpMyAdmin: http://localhost:8081
Bạn có thể thêm nhiều WordPress site khác bằng cách thêm các block server trong file nginx.conf và tạo thư mục tương ứng trong thư mục sites/.
Kết luận
Môi trường này cung cấp một nền tảng linh hoạt và mạnh mẽ để phát triển WordPress. Bạn có thể dễ dàng thêm nhiều site, chuyển đổi giữa các phiên bản PHP, và quản lý cơ sở dữ liệu một cách hiệu quả. Điều này đặc biệt hữu ích cho việc phát triển và kiểm thử các theme và plugin WordPress trong nhiều môi trường khác nhau.
Link github repository: https://github.com/tuannt23065/docker-wp-sites