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.
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
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
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
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
Tìm IP Address của container Redis (ID: 2822935a82d7)
docker inspect 2822935a82d7 | grep -i IPAddress
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
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'
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
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
Tìm IP Address của container Memcached (ID: 29a0b87f0b19)
docker inspect 29a0b87f0b19 | grep -i IPAddress
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!
Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!