Hồi tháng 03/2022, mình đã tiến hành thử nghiệm chạy WordPress trên nền Docker + OpenLiteSpeed cho các website nhỏ. Sau vài tháng theo dõi, thấy tất cả đều hoạt động mượt mà, mình đã quyết định đóng gói hết tất cả các website WordPress lớn còn lại qua chạy trên Docker luôn.
Tuy nhiên, lúc này mình mới phát hiện ra thiết lập mặc định của OpenLiteSpeed Docker đang bị thiếu Redis Cache và Memcached – hai công cụ làm bộ nhớ đệm giúp tăng tốc độ xử lý cũng như làm giảm tần suất truy cập vào database cho WordPress.
Dưới đây là cách tích hợp thêm Redis Cache và Memcached vào hệ thống OpenLiteSpeed Docker.
Mục Lục
I. Cài đặt Redis Cache
1. Khai báo và kích hoạt Redis
Chỉnh sửa file docker-compose.yml
trong thư mục ols-docker-env
và bổ sung thêm đoạn này ở cuối
redis:
image: docker.io/bitnami/redis:7.0
environment:
- ALLOW_EMPTY_PASSWORD=yes
- REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
#ports:
# - '6379:6379'
restart: always
volumes:
- 'redis:/bitnami/redis/data'
volumes:
redis:
driver: local
Code language: YAML (yaml)
Mình thêm #
vào trước phần khai báo ports để không mở kết nối từ bên ngoài vào container chạy Redis. Chỉ có container OpenLiteSpeed nằm trong cùng mạng Docker mới có quyền truy cập vào container Redis này.
File docker-compose.yml
sau khi chỉnh sửa sẽ tương tự như sau
version: '3'
services:
mysql:
image: mariadb:10.5.9
logging:
driver: none
command: --max_allowed_packet=256M
volumes:
- "./data/db:/var/lib/mysql:delegated"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
litespeed:
image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
build: ./custom
logging:
driver: none
env_file:
- .env
volumes:
- ./lsws/conf:/usr/local/lsws/conf
- ./lsws/admin-conf:/usr/local/lsws/admin/conf
- ./bin/container:/usr/local/bin
- ./sites:/var/www/vhosts/
- ./acme:/root/.acme.sh/
- ./logs:/usr/local/lsws/logs/
ports:
- 80:80
- 443:443
- 443:443/udp
- 7080:7080
restart: always
environment:
TZ: ${TimeZone}
redis:
image: docker.io/bitnami/redis:7.0
environment:
- ALLOW_EMPTY_PASSWORD=yes
- REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
#ports:
# - '6379:6379'
restart: always
volumes:
- 'redis:/bitnami/redis/data'
volumes:
redis:
driver: local
Code language: YAML (yaml)
Kích hoạt lại hệ thống để tạo thêm container Redis
docker-compose up -d
2. Tìm IP Address của Redis Container
Chúng ta cần tìm ra IP Address của Redis Container để khai báo trong plugin LiteSpeed Cache ở bước sau.
Liệt kê danh sách các container đang hoạt động
docker ps
Code language: Nginx (nginx)
Kết quả trả về
thuanbui@debian:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29a0b87f0b19 bitnami/memcached:1 "/opt/bitnami/script…" About an hour ago Up About an hour 0.0.0.0:11211->11211/tcp, :::11211->11211/tcp ols-docker-env_memcached_1
0babcaee5704 mariadb:10.5.9 "docker-entrypoint.s…" 36 hours ago Up 36 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp ols-docker-env_mysql_1
e329dffb521f litespeedtech/openlitespeed:1.7.15-lsphp74 "/entrypoint.sh" 37 hours ago Up 37 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:7080->7080/tcp, :::7080->7080/tcp, 0.0.0.0:443->443/udp, :::443->443/udp ols-docker-env_litespeed_1
2822935a82d7 bitnami/redis:7.0 "/opt/bitnami/script…" 37 hours ago Up 37 hours 6379/tcp ols-docker-env_redis_1
Code language: YAML (yaml)
Tìm IP Address của container Redis (ID: 2822935a82d7)
docker inspect 2822935a82d7 | grep -i IPAddress
Code language: Nginx (nginx)
IP Address: 172.20.0.4
3. Cấu hình Object Cache
Truy cập vào website WordPress đang chạy trên hệ thống, truy cập vào phần cấu hình Object Cache của plugin LiteSpeed Cache và cấu hình như dưới đây. Sau đó bấm Save changes, nếu thấy dòng Connection Test ghi Passed nghĩa là Redis đã hoạt động ngon lành.
4. Xác nhận Redis Cache đang chạy
Quay trở lại Terminal, kiểm tra Redis Cache có đang chạy hay không bằng lệnh sau
docker exec -it ols-docker-env_redis_1 redis-cli monitor
Code language: Bash (bash)
Bạn có thể cần phải thay ols-docker-env_redis_1
bằng tên của Container Redis đang chạy. Dùng lệnh docker ps
để kiểm tra tên của Container.
Kế tiếp, truy cập vào website bằng trình duyệt, nếu thấy màn hình liên tục cập nhật các thông số như hình sau nghĩa là Redis Cache đã được cấu hình chính xác và hoạt động trơn tru.
II. Cài đặt Memcached
1. Khai báo và kích hoạt Memcached
Tương tự như trên, mình sẽ khai báo thêm Memcached trong file docker-compose.yml
. Sau khi chỉnh sửa file sẽ như sau
version: '3'
services:
mysql:
image: mariadb:10.5.9
logging:
driver: none
command: --max_allowed_packet=256M
volumes:
- "./data/db:/var/lib/mysql:delegated"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
litespeed:
image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
build: ./custom
logging:
driver: none
env_file:
- .env
volumes:
- ./lsws/conf:/usr/local/lsws/conf
- ./lsws/admin-conf:/usr/local/lsws/admin/conf
- ./bin/container:/usr/local/bin
- ./sites:/var/www/vhosts/
- ./acme:/root/.acme.sh/
- ./logs:/usr/local/lsws/logs/
ports:
- 80:80
- 443:443
- 443:443/udp
- 7080:7080
restart: always
environment:
TZ: ${TimeZone}
memcached:
#image: launcher.gcr.io/google/memcached1
image: docker.io/bitnami/memcached:1
ports:
- '11211:11211'
Code language: YAML (yaml)
Kích hoạt lại hệ thống
docker-compose up -d
2. Tìm IP Address của Redis Container
Chúng ta cần tìm ra IP Address của Memcached Container để khai báo trong plugin LiteSpeed Cache ở bước sau.
Liệt kê danh sách các container đang hoạt động
docker ps
Code language: Nginx (nginx)
Kết quả trả về
thuanbui@debian:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29a0b87f0b19 bitnami/memcached:1 "/opt/bitnami/script…" About an hour ago Up About an hour 0.0.0.0:11211->11211/tcp, :::11211->11211/tcp ols-docker-env_memcached_1
0babcaee5704 mariadb:10.5.9 "docker-entrypoint.s…" 36 hours ago Up 36 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp ols-docker-env_mysql_1
e329dffb521f litespeedtech/openlitespeed:1.7.15-lsphp74 "/entrypoint.sh" 37 hours ago Up 37 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:7080->7080/tcp, :::7080->7080/tcp, 0.0.0.0:443->443/udp, :::443->443/udp ols-docker-env_litespeed_1
2822935a82d7 bitnami/redis:7.0 "/opt/bitnami/script…" 37 hours ago Up 37 hours 6379/tcp ols-docker-env_redis_1
Code language: YAML (yaml)
Tìm IP Address của container Memcached (ID: 29a0b87f0b19)
docker inspect 29a0b87f0b19 | grep -i IPAddress
Code language: Nginx (nginx)
IP Address: 172.20.0.5
3. Cấu hình Object Cache dùng Memcached
Khai báo như dưới đây và lưu lại, thấy dòng Connection Test: Passed nghĩa là Memcached đã hoạt động ổn.
Bạn không cần phải cài đặt cả hai công cụ Redis và Memcached. Vì bạn chỉ chọn 1 trong 2 để sử dụng làm Object Cache cho WordPress. Mình thì luôn chọn Redis Cache.
Chúc bạn thực hiện thành công!
Trang của anh có nhiều bài khá hay. Anh cho em hỏi hiện anh đang chạy trang web trên VPS như thế nào? Dùng Script như HOCVPS hay tự cài những cái thích hợp.
Kiểu người mới muốn sử dụng về VPS để chạy trang web thì cần cài những gì? Trên site anh có bài viết nào như thế không?
Mong sớm nhận được phản hồi từ anh….
Hiện tại mình không dùng script gì cả. Tất cả VPS đều cài đặt theo cách này: https://thuanbui.me/wordpress-mariadb-openlitespeed-phpmyadmin-docker-compose/
Khi server khởi động lại redis container sẽ tự động bị assign IP khác, vì vậy cấu hình trong wordpress lại phải sửa lại.
Mong bạn hướng dẫn cách bind ip cho container để tránh trường hợp trên.
Cảm ơn bạn rất nhiều
Bạn xem qua bài này có hướng dẫn cách tạo Docker network và bind static IP cho container. Bạn sửa lại cho container Redis tương tự là được
https://thuanbui.me/thiet-lap-wireguard-client-bang-docker-tren-may-chu-linux/?swcfpc=1#1-tao-docker-network