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 -mCode 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 OPcacheCode 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: .envCode 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 -dCode 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 + ionCube24Code 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 xdebugCode 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!

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 *