Hướng dẫn cài đặt WordPress localhost với docker chuyên nghiệp

Photo of author

By Admin

Với docker chúng ta có thể khởi chạy WordPress ở localhost một cách nhanh chóng. Sau đây vooclaptrinh sẽ hướng dẫn cách cài đặt WordPress tại localhost với Docker, tạo 1 file docker-compose.yml tiêu chuẩn dành cho WordPress như sau:

Bước 1: Tạo file docker-compose.yml

File docker-compose này định nghĩa cách triển khai một ứng dụng sử dụng hai dịch vụ chính: một dịch vụ cơ sở dữ liệu MySQL và một dịch vụ WordPress. Docker Compose được sử dụng để cấu hình và quản lý các container của các dịch vụ này cùng với các tham số và tùy chọn liên quan.

version: "3"
services:
  db:
    image: mysql:8.0
    platform: linux/x86_64
    ports:
      - "3307:3306"
    restart: unless-stopped
    env_file: .env
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./db_data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d
    command: '--default-authentication-plugin=mysql_native_password'
  wordpress:
    depends_on:
      - db
    image: wordpress:6.0-php8.1-apache
    volumes:
      - ./:/var/www/html
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    ports:
      - "8000:80"
    restart: unless-stopped
    env_file: .env
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_ADMIN_USER: ${WORDPRESS_ADMIN_USER}
      WORDPRESS_ADMIN_PASSWORD: ${WORDPRESS_ADMIN_PASSWORD}
      WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
volumes:
  db_data: {}

Dưới đây là phân tích chi tiết của file docker-compose:

  1. version: "3": Đây là phiên bản của Docker Compose được sử dụng trong file. Phiên bản “3” thường được sử dụng trong nhiều trường hợp triển khai ứng dụng.
  2. services: Đây là phần chứa định nghĩa của các dịch vụ được triển khai.
    • db (MySQL service):
      • image: mysql:8.0: Định rõ image sử dụng để tạo container, ở đây sử dụng image của MySQL phiên bản 8.0.
      • platform: linux/x86_64: Xác định nền tảng của container, ở đây sử dụng Linux x86_64.ports: Ánh xạ cổng của host vào cổng của container, ở đây ánh xạ cổng 3307 của host vào cổng 3306 của container
      (Lưu ý: nếu không có dòng này thì khi chạy trên Macbook M1 bạn sẽ gặp phải dòng warning: ! db The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested)
      • .restart: unless-stopped: Container sẽ tự động khởi động lại trừ khi bị dừng bởi người dùng.env_file:
      • .env: Sử dụng file .env để đọc các biến môi trường
      • .environment: Định nghĩa các biến môi trường sử dụng trong container MySQL, như mật khẩu root, tên database, người dùng và mật khẩu của MySQL
      • .volumes: Ánh xạ thư mục trên host vào thư mục trong container, ở đây là ánh xạ thư mục
      • ./db_data trên host vào /var/lib/mysql trong container để lưu trữ dữ liệu MySQL, và ánh xạ thư mục ./sql trên host vào /docker-entrypoint-initdb.d trong container để tạo schema và dữ liệu mẫu
      • .command: Định nghĩa các tham số command khi khởi chạy container MySQL, ở đây sử dụng plugin xác thực mysql_native_password.
      • wordpress (WordPress service):
      • depends_on: Xác định rằng dịch vụ WordPress cần phải chờ dịch vụ MySQL khởi chạy trước khi bắt đầu.
      • image: wordpress:6.0-php8.1-apache: Định rõ image sử dụng cho container WordPress, phiên bản 6.0 với PHP 8.1 và Apache.
      • volumes: Ánh xạ thư mục trên host vào thư mục trong container, ở đây ánh xạ thư mục gốc ./ trên host vào /var/www/html trong container để lưu trữ mã nguồn của WordPress, và ánh xạ file ./uploads.ini trên host vào /usr/local/etc/php/conf.d/uploads.ini để cấu hình tùy chỉnh cho PHP.
      • ports: Ánh xạ cổng của host vào cổng của container, ở đây ánh xạ cổng 8000 của host vào cổng 80 của container.
      • restart: unless-stopped: Container sẽ tự động khởi động lại trừ khi bị dừng bởi người dùng.
      • env_file: .env: Sử dụng file .env để đọc các biến môi trường.
      • environment: Định nghĩa các biến môi trường sử dụng trong container WordPress, như thông tin cấu hình cơ sở dữ liệu và tài khoản quản trị WordPress.
  3. volumes: Định nghĩa các khối lưu trữ dữ liệu được sử dụng trong các dịch vụ. Trong trường hợp này, chỉ định khối lưu trữ db_data được sử dụng bởi dịch vụ MySQL.

File docker-compose này thực hiện việc triển khai cùng lúc một dịch vụ cơ sở dữ liệu MySQL và một dịch vụ WordPress, tạo ra một môi trường phát triển đơn giản để phát triển ứng dụng WordPress.

Bước 2: Tạo file uploads.ini để tùy tình các tham số của php.ini

Tạo 1 file upload.ini trong thư mục sẽ khởi tạo docker-compose của bạn với các giá trị như sau:

file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600

Như bạn đã biết các tham số này được định nghĩa trong php.ini, với việc tạo file này bạn có thể tùy chỉnh các giá trị này theo ý muốn mà không cần phải tìm file php.ini trong docker để điều chỉnh.

Bước 3: Tạo file .env

MYSQL_ROOT_PASSWORD=root_password@@
MYSQL_DATABASE=ten_database
MYSQL_USER=ten_mysql_user
MYSQL_PASSWORD=password_sql

WORDPRESS_DB_HOST=db
WORDPRESS_DB_USER=ten_user_cho_db
WORDPRESS_DB_PASSWORD=password_wordpress
WORDPRESS_DB_NAME=ten_database
WORDPRESS_ADMIN_USER=wp_admin
WORDPRESS_ADMIN_PASSWORD=wp_admin@@2023

WORDPRESS_TABLE_PREFIX=tr_

Ở đây có 1 số thông số không cần thiết khi start docker-compose tuy nhiên mình vẫn đặt vào đây để lưu trữ phòng khi quên, ví dụ WORDPRESS_ADMIN_USER, WORDPRESS_ADMIN_PASSWORD

Bước 4: Khởi chạy Database cũ (nếu có)

Lưu ý: Tại dòng số 17 ở bước 1 chúng ta có định nghĩa: ./sql:/docker-entrypoint-initdb.d

Đều này có ý nghĩa trong folder sql mình sẽ lưu trư 1 file database_backup.sql, file sql này mình sử dụng mysqldump để backup và đặt vào folder sql. Khi chúng ta khởi chạy docker-compose up nếu trước hợp source code chưa sinh ra folder db_data thì docker sẽ mount file này vào /docker-entrypoint-initdb.d của container và đồng thời tạo import database đã backup vào database mới.

Thêm các câu lệnh để tạo database tự động

Thêm các câu lệnh SQL sau vào đầu file backup.sql của bạn:

CREATEDATABASEIFNOTEXISTS`ten_database`;
USE`ten_database`;

SETNAMESutf8mb4;
SETFOREIGN_KEY_CHECKS=0;
SETSQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

Ghi chú thêm lệnh mysqldump để backup sql tại localhost

docker ps
docker exec -it f601 mysqldump -uroot -pdb_passowrd@@ ten_database > ./sql/backup.sql

Như vậy ở 4 bước trên thì cấu trúc thư mục của chúng ta sẽ bao gồm các file như sau

.env
docker-compose.yml
uploads.ini
/sql/backup.sql (nếu có)

Hãy loại bỏ bớt các chi tiết nếu không cần thiết.

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

Viết một bình luận