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.
Mục lục
hiệ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 foldermariadb-container/databases
tới contaner mariadb/home/
chỉ cần copy filesite1.sql
vàomariadb-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