Khi cài đặt WordPress bằng Docker, trong nhiều trường hợp mình cần phải cài thêm PHP Extensions theo yêu cầu của một số plugins đặc biệt.
Bài viết này mình sẽ hướng dẫn cách cài đặt PHP Extensions cho PHP Docker Image, sử dụng script docker-php-extension-installer. Ưu điểm của khi dùng script cài đặt này so với cách cài đặt PHP Extensions thông thường:
- Tiêu chuẩn hóa các bước cài đặt thêm PHP Extension bằng 1 lệnh duy nhất
install-php-extensions
- Tương thích cho mọi phiên bản PHP từ 5.5 đến 8.3.
- Tương thích với nhiều hệ điều hành: Ubuntu, Alpine, Debain và nhiều PHP Image khác nhau.
- Hỗ trợ 146 PHP Extensions, xem chi tiết ở đây.
1. Tạo website nháp
Để demo, mình sẽ tạo 1 website WordPress theo hướng dẫn ở đây
Kiểm tra danh sách PHP Extension đã được cài mặc định
docker compose exec wordpress php -m
Code language: Bash (bash)
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
exif
fileinfo
filter
gd
hash
iconv
imagick
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
random
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
Code language: CSS (css)
2. Cài đặt ionCube Loader
Mình muốn cài đặt thêm PHP Extension: Ioncube Loader cho WordPress.
Tạo file Dockerfile
trong cùng thư mục với file compose.yml
và nhập vào nội dung sau
FROM wordpress:fpm-alpine
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN install-php-extensions ioncube-loader
Code language: Dockerfile (dockerfile)
Chỉnh sửa lại file compose.yml
, thay thế mục image: wordpress:fpm-alpine
bằng build: .
. Phần khai báo woordpress sẽ tương tự như sau
wordpress:
build: .
container_name: wordpress
restart: always
depends_on:
- db
#- redis
volumes:
- ./wordpress/html:/var/www/html
- ./wordpress/custom.ini:/usr/local/etc/php/conf.d/custom.ini
env_file: .env
Code language: YAML (yaml)
Cấu hình này sẽ yêu cầu Docker tạo 1 Container mới dựa trên thông số đã được cấu hình trong file Dockerfile
Kích hoạt lại hệ thống
docker compose build
docker compose up -d
Code language: Nginx (nginx)
Sau đó, kiểm tra lại thông số PHP Extensions. Giờ đã thấy ionCube Loader được bổ sung trong danh sách
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
hash
iconv
imagick
intl
ionCube Loader
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
the ionCube PHP Loader + ionCube24
Code language: Shell Session (shell)
Để cài thêm cùng lúc nhiều PHP Extensions, bạn sửa lại dòng thứ 3 trong Dockerfile
, và thêm vào tên các extensions mong muốn
RUN install-php-extensions ioncube-loader xdebug
Code language: Dockerfile (dockerfile)
Mình đã thử cài đặt thêm PHP Extension cho nhiều phiên bản WordPress khác nhau: wordpress:php8.1-fpm-alpine
, wordpress:php7.4-apache
, … Tất cả đều hoạt động ngon lành, bất kể Docker OS là Debian, Ubuntu hay Alpine.
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!
Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!