Bạn đang muốn tạo một môi trường webserver cho WordPress là php-fpm + nginx nhanh bằng Docker Compose trên tất cả các hệ điều hành Windows, MacOS, Linux tham khảo bài viết mình nhé

Yêu cầu cần tạo môi trường như sau:

  1. Domain cho môi trường dev local là: localhost.com:5000
  2. Webserver là nginx
  3. Dùng php-fpm
  4. Source code wordpress
  5. Datbase Mysql
  6. Tất cả đều được ánh xạ tới nơi chứa project ví dụ như source code wordpress được lưu trữ trong project mình và có thể thêm, sửa, xóa.

Các bước thực hiện như sau:

Tạo file docker-compose.yml cho WordPress + Nginx + Mysql

Trước khi tạo file docker-compose.yml bạn chắc chắn con trỏ mình đang ở thư mục project bạn mong muốn tạo. Ví dụ ở đây mình sẽ dùng thư mục có tên là project-demo

Khai báo service database

version: '3'
services:
db:
image: mysql:5.7
container_name: db-demo
restart: unless-stopped
env_file: ./app/.env
environment:
- MYSQL_DATABASE=db-demo
volumes:
- ./dbdata:/var/lib/mysql
networks:
- app-network

Mình giải thích chút:

Database ở đây mình sẽ sử dụng image mysql:5.7
Container name sẽ là đặt là db-demo
File .env khai báo biến môi trường trong thư mục app (ví dụ như MYSQL_ROOT_PASSWORD(mật khẩu root của mysql), MYSQL_USER, MYSQL_PASSWORD,…)
Biến môi trường environment: MYSQL_DATABASE=db-demo (tên database là db-demo)
Ánh xạ mysql tới folder dbdata ./dbdata:/var/lib/mysql

 Khai báo service wordpress

wordpress:
depends_on:
- db
image: wordpress:5.1.1-fpm-alpine
container_name: wp-demo
restart: unless-stopped
env_file: ./app/.env
environment:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=root
- WORDPRESS_DB_NAME=db-demo
volumes:
- ./app:/var/www/html
networks:
- app-network

Service wordpress:

– Liên kết tới db depends_on: db
– Image mình sẽ sử dụng wordpress:5.5.1-fpm-alpine
– Container mình đặt là: wp-demo
– Khai báo biến môi trường trong file ./app/.env
– Khai báo biến môi trường trực tiếp: (WORDPRESS_DB_HOST, WORDPRESS_DB_USER, WORDPRESS_DB_PASSWORD, WORDPRESS_DB_NAME)
– Ánh xạ source code wordpress tới thư mục app: ./app:/var/www/html

Khai báo service webserver

webserver:
depends_on:
- wordpress
image: nginx:1.15.12-alpine
container_name: webserver-example
restart: unless-stopped
ports:
- "5000:80"
volumes:
- ./app:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
networks:
- app-network

Service webserver Nginx:

– Lệ thuộc buộc phải có sẵn wordpress: depends_on: – wordpress
Image sử dụng là: nginx:1.15.12-alpine
– Đăt tên container webserver là webserver-demo
– Port sử dụng trên máy host là 80 container là 5000: 5000:80
– Ánh xạ webroot tại thư mục app: ./app:/var/www/html
– Ánh xạ thư mục config nginx /etc/nginx/conf.d tới thư mục nginx-conf: ./nginx-conf:/etc/nginx/conf.d. Trong thư mục nginx-conf cần phải có file nginx.conf, mình sẽ hướng dẫn tạo file nginx.conf bên dưới

File docker-compose.yml hoàn thiện

version: '3'

services:
db:
image: mysql:5.7
container_name: db-demo
restart: unless-stopped
env_file: ./app/.env
environment:
- MYSQL_DATABASE=db-demo
volumes:
- ./dbdata:/var/lib/mysql
networks:
- app-network


wordpress:
depends_on:
- db
image: wordpress:5.1.1-fpm-alpine
container_name: wp-demo
restart: unless-stopped
env_file: ./app/.env
environment:
- WORDPRESS_DB_HOST=db:3306
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=root
- WORDPRESS_DB_NAME=db-demo
volumes:
- ./app:/var/www/html
networks:
- app-network

webserver:
depends_on:
- wordpress
image: nginx:1.15.12-alpine
container_name: webserver-example
restart: unless-stopped
ports:
- "5000:80"
volumes:
- ./app:/var/www/html
- ./nginx-conf:/etc/nginx/conf.d
networks:
- app-network

networks:
app-network:
driver: bridge

Tạo file nginx.conf

Tạo file config trong thư mục nginx-conf/nginx.conf

Mục đích tạo file này để config webser theo ý muốn mình:

Domain sẽ là localhost.com
Port host là 80
Thực hiện chạy backend php-fpm port 9000

server {
listen 80;
#listen [::]:80;

server_name example.co www.localhost.com;

index index.php index.html index.htm;

root /var/www/html;

server_tokens off;

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# enable strict transport security only if you understand the implications

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wp-example:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~ /\.ht {
deny all;
}

location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}

Giải thích ở dòng fastcgi_pass wp-demo:9000; có nghĩa là nginx sẽ thực hiện run backend wordpress-fpm thông qua port 9000 với container name đặt ở trên là wp-demo

Mở terminal

Chạy lệnh docker-compose up -d để khởi tạo.
Truy cập http://localshot.com:5000 để xem kết quả.

Lời kết

Như vậy, qua bài viết này mình đã hướng dẫn các bạn tạo ra một môi trường webserver cho WordPress là php-fpm + nginx nhanh bằng Docker Compose trên tất cả các hệ điều hành Windows, MacOS, Linux.

Chúc các bạn thành công!

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *