DockerDocker ComposeLinuxWordpress

Hướng Dẫn Sử Dụng Docker Để Xây Dựng Môi Trường Phát Triển Cho Nhiều Site WordPress, MariaDB, Và phpMyAdmin

Khám phá cách sử dụng Docker để thiết lập môi trường phát triển cho nhiều site WordPress, tích hợp với MariaDB và phpMyAdmin. Bài viết hướng dẫn chi tiết từ cài đặt Docker, thiết lập Docker Compose, đến cấu hình và quản lý môi trường phát triển.

File docker-compose.yml

version: '3.8'

services:
  db:
    image: mariadb:latest
    volumes:
      - ./db_data:/var/lib/mysql
      - ./mariadb-container:/home
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: wordpress_password
    networks:
      - wp-network

  php:
    build: .
    volumes:
      - ./sites/site1:/var/www/html/site1
      - ./sites/site2:/var/www/html/site2
    ports:
      - "8080:80"
    restart: always
    environment:
      DB_HOST: db:3306
      DB_PASSWORD: password

      SITE2_DB_NAME: site2
      SITE2_USERNAME: site2
      SITE2_TABLE_PREFIX: wpsite2_

      SITE1_DB_NAME: site1
      SITE1_USERNAME: site1
      SITE1_TABLE_PREFIX: wpsite1_

      PHP_DISPLAY_ERRORS: "Off"
      OPCACHE_VALIDATE_TIMESTAMPS: "1" #Bật kiểm tra timestamps
      OPCACHE_REVALIDATE_FREQ: "2" #Kiểm tra file thay đổi mỗi 2 giây
    networks:
      - wp-network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: root_password
    ports:
      - "8081:80"
    restart: always
    networks:
      - wp-network
volumes:
  db_data:

networks:
  wp-network:
    driver: bridge

Tạo file apache.conf

  • tạo file theo đường dẫn này apache-container/apache.conf
  • nội dung file
ServerName localhost
<VirtualHost *:80>
    ServerName site1.local
    DocumentRoot /var/www/html/site1
    <Directory /var/www/html/site1>
        AllowOverride All
        Require all granted
    </Directory>
        ErrorLog /dev/null
    CustomLog /dev/null common
</VirtualHost>

<VirtualHost *:80>
    ServerName site2.local
    DocumentRoot /var/www/html/site2
    <Directory /var/www/html/site2>
        AllowOverride All
        Require all granted
    </Directory>
        ErrorLog /dev/null
    CustomLog /dev/null common
</VirtualHost>

Sửa file hosts trên môi trường host (máy tính vật lý)

  • trên môi trường host (máy tính vật lý) sửa file hosts thêm vào cuối file 2 hay nhiều dòng virtualhost tương ứng cho từng site
  • Windows: C:\Windows\System32\drivers\etc\hosts
  • macOS và Linux: /etc/hosts
  • nội dung file
127.0.0.1 site1.local
127.0.0.1 site2.local

Tạo file php.ini ở vị trí apache-container/php-config/php.ini

  • tạo file ở vị trí này apache-container/php-config/php.ini
  • nội dung file
memory_limit = 256M

; Error handling and logging
display_errors = ${PHP_DISPLAY_ERRORS}
log_errors = On
error_log = /dev/stderr

; OPcache configuration
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=${OPCACHE_REVALIDATE_FREQ}  ; Kiểm tra file thay đổi mỗi 2 giây
opcache.validate_timestamps=${OPCACHE_VALIDATE_TIMESTAMPS}  ; Bật kiểm tra timestamps
opcache.fast_shutdown=1

DockerFile để build môi trường apache php8

FROM php:8.0-apache

COPY ./apache-container/apache.conf /etc/apache2/sites-available/000-default.conf

# Copy custom PHP configuration
COPY ./apache-container/php-config/php.ini /usr/local/etc/php/

# Install necessary PHP extensions and other dependencies
RUN apt-get update && apt-get install -y \
    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 \
    && docker-php-ext-install -j$(nproc) mysqli \
    && docker-php-ext-install -j$(nproc) pdo pdo_mysql \
    && docker-php-ext-install -j$(nproc) mbstring \
    && docker-php-ext-install -j$(nproc) zip \
    && docker-php-ext-install -j$(nproc) opcache \
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

RUN a2enmod rewrite

Truy cập vào container database mariadb để tạo các databases, users, phân quyền cho site tương ứng

  • Kiểm tra id của container db dùng lệnh
docker ps
  • sẽ thấy được container id của database mariadb là gì copy id đó

  • thực hiện exec vào container database để tạo database tương ứng cho site

docker exec -it {contaner_db_id} bash
mariadb -u root -p
  • nhập password root_password như ví dụ trong bài viết này để vào mariadb
  • tạo database, bằng lệnh này
CREATE DATABASE site1;
CREATE USER 'site1'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON site1.* TO 'site1'@'%';
FLUSH PRIVILEGES;
  • tương tự cho việc tạo database cho những site2, 3
  • tiếp đến muốn thực hiện import database - ở trong docker-compose.yml mình đã mount 1 folder mariadb-container/databases tới contaner mariadb /home/ chỉ cần copy file site1.sql vào mariadb-container/databases thì ta sẽ có mariadb-container/databases/site1.sql
  • đang trong container mariadb → thực hiện lệnh sau để import
mariadb -u root -p site1 < /home/databases/site1.sql
  • nhập password root là hệ thống thực hiện import

Chỉnh sửa file wp-config theo môi trường docker-compose define

define('DB_NAME', getenv('SITE1_DB_NAME'));
define('DB_USER', getenv('SITE1_USERNAME'));
define('DB_PASSWORD', getenv('DB_PASSWORD'));
define('DB_HOST', getenv('DB_HOST'));
$table_prefix = getenv('SITE1_TABLE_PREFIX');

Truy cập vào phpmyadmin

  • Vào đường dẫn sau để vào phpmyadmin http://localhost:8081
  • nhập username: root, password: root_password
  • có thể quản lý toàn bộ database trên giao diện này

Done

  • Let's enjoy, có câu hỏi hay thắc mắc nào comment bên dưới cho mình hay nha

Link github repository: https://github.com/tuannt23065/docker-wp-sites

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 *

Back to top button
Close