Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

Mặc định bản thân WordPress đã hỗ trợ rất nhiều phiên bản docker images, có sẵn nhiều phiên bản PHP, nhưng đa phần chỉ có các bản PHP mới, và các bản này cũng chỉ cài sẵn các extension cơ bản, nếu bạn cần chạy 1 bản PHP cũ hẳn như 7.4 hay mới hẳn như 8.4 thì WordPress chưa hỗ trợ hoặc không còn duy trì

Hay đơn giản bạn cần cài thêm các extension khác ít thông dụng hơn, kiểu composer, ioncube_loader, maxminddb … đọc 1 tấn các help hướng dẫn xong cài mãi vẫn lỗi be bét 😀

Hay công đoạn bảo mật, bảo trì, cập nhập khi ra phiên bản mới thì làm sao, ai rảnh đâu mà ngồi ngó suốt …

Mọi thứ quá là phức tạp cho một người dùng phổ thông bình thường, ơn trời là với sự giúp đỡ của chính bản thân PHP, WordPress, Github, Docker Hub và rất nhiều các lập trình viên với các dự án như docker-php-extension-installer, hiện tại mọi thứ dễ còn hơn ăn cả kẹo

  • Bài này mọi công cụ mình sử dụng, đều được cung cấp chính hãng, các phiên bản images gốc được cung cấp từ chính PHP, công cụ hỗ trợ cài đặt các extension từ dự án docker-php-extension-installer của thành viên mlocati và tất nhiên file cài đặt WordPress là từ chính WordPress

Mọi người có thể tự tin sử dụng, tùy chỉnh, ít nhất tiêu chuẩn an toàn và hiệu năng của nó, được chính PHP và WordPress đảm bảo

  • Cần có sẵn tài khoản của GitHubDocker, nếu chưa có thì đăng kí miễn phí là được

Mình đã làm sẵn tất cả các bước build 1 bản PHP 8.4, bao gồm tất cả extension tương tự bản gốc PHP 8.3 đang được WordPress cung cấp

Bước 1: fork bản wordpress-wp-cli-php8.4-fpm-alpine về tài khoản của bạn

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

  • 2 file docker-entrypoint.shwp-config-docker.php để nguyên, không cần quan tâm tới nó, chỉ cần sửa lại file Dockerfile

Nội dung 2 file docker-entrypoint.sh và wp-config-docker.php được mình bê về từ bản gốc của WordPress

Bước 2: chỉnh sửa file Dockerfile

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

Ấn trực tiếp vào hình cái bút để chỉnh sửa Dockerfile, chỉ cần chú ý 20 dòng đầu như hình là được

  • Ở dòng 1: chọn phiên bản PHP bạn muốn dùng, cụ thể thì mình sẽ build từ bản PHP 7.4 cho bài viết này, muốn lấy phiên bản chạy OS nào, thì vào tags của PHP xem rồi copy tên

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

  • Ở dòng 8, bắt đầu bằng apk add, muốn cài thêm gì vào Alpine thì thêm vào (curl, wget, git, htop, unzip, nano, zip, zstd …), bắt buộc giữ lại bash,ghostscript có sẵn không thích xóa đi tùy thích, mà do WordPress họ dùng như mặc định, nên mình cũng giữ lại
  • Từ dòng 14-20: các extension bạn muốn thêm vào cho PHP, các thứ có sẵn cũng là mặc định WordPress đang dùng, nên để lại, cá nhân thì nếu build riêng mình sẽ bỏ đi imagick, nếu bạn không hiểu mấy extension đang có dùng để làm gì, cứ giữ nguyên là được
  • Để biết chính xác extension bạn cài vào, được hỗ trợ trên bản PHP nào, điền theo tên cú pháp làm sao thì xem trực tiếp từ docker-php-extension-installer

Các đoạn code còn lại bên dưới chủ yếu là cài đặt thêm WordPress sẵn vào images, cấu hình chmod các thứ, phần này mình cũng chỉ copy lại theo bản gốc từ WordPress, chỉ sửa lại 1 chút, để nó luôn tự động download bản WordPress mới nhất

Ở dòng 79-81 là cài đặt thêm WP-CLI, theo mình đây là công cụ bắt buộc mà bất cứ ai dùng WordPress cũng phải có, mặc định là cài sẵn vào

  • Cụ thể mình cài PHP 7.4, bỏ đi ghostscript,imagick, và cài thêm @composer

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

  • Chỉnh sửa lại sẽ như ảnh bên trên, chú ý là ở dòng cuối cùng kết thúc lệnh, cần bổ xung thêm dấu ; hoặc &&

Xong xuôi, ấn vào Commit changes để save lại các thay đổi

Bước 3: chỉnh sửa file .github/workflows/main.yml

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

Mục đích của Github Active này giúp tự động build Dockerfile thành 1 images hoàn chỉnh, upload lên Docker Hub mỗi ngày vào lúc 0h sáng, images của bạn sẽ luôn được tự động cập nhập lên bản mới nhất, phiên bản PHP cũng sẽ được cập nhập theo, WordPress cũng sẽ tự download về bản mới nhất, cài đặt xong Github Active thì công đoạn bảo trì, bảo dưỡng không cần quan tâm nữa

Demo cho bài viết này mình build từ images gốc php:7.4-fpm-alpine, đây là phiên bản đã kết thúc vòng đời từ 11/2022, bạn sẽ thấy images này đã hơn 2 năm không có cập nhập mới

Sửa 2 dòng cuối 34 theo tên tài khoản Docker Hub của bạn, các dòng khác để nguyên

Mình dùng trên tài khoản Docker Hub là bibicadotnet, muốn đặt tên images là wordpress-wp-cli-php7.4-fpm-alpine, hỗ trợ trên 2 nền tảng phổ biến amd64 và arm64 thì sửa lại như sau

tags: bibicadotnet/wordpress-wp-cli-php7.4-fpm-alpine
platforms: linux/amd64,linux/arm64
  • Để phân biệt tài khoản và tên images mặc định dùng dấu /

Chỉnh sửa xong thì ấn vào Commit changes để save lại các thay đổi

Bước 4: Thêm Docker Hub Credentials

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

  1. Truy cập tab Settings của repository.
  2. Trong menu bên trái, chọn Secrets and variables > Actions.
  3. Nhấp vào nút New repository secret và thêm các thông tin:
    • Name: DOCKER_USERNAME Secret: Tên người dùng Docker Hub của bạn.
    • Name: DOCKER_PASSWORD Secret: Mật khẩu truy cập Docker Hub.

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

Xong xuôi ta sẽ có 2 repository secrets lưu trữ thông tin Username và Password tài khoản Docker Hub

Về cơ bản, lúc này mọi bước cấu hình đã hoàn tất

Bước 5: Kiểm tra lại Workflow

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

  1. Quay lại tab Actions.
  2. Bạn sẽ thấy workflow Build and Push Docker Image trong danh sách.
  3. Nhấp vào workflow và chọn Run workflow (nếu muốn chạy ngay lập tức).
  4. Theo dõi quá trình thực thi trong giao diện (mất tầm 10-15s mới hiện ra In progress cho bạn nhìn)

Do bản Dockerfile này thêm vào khá nhiều extension, công đoạn build hơi lâu, đa phần ~15 phút mới xong, có điều cũng không quan trọng, vì hàng ngày tự chạy rồi, không cần để ý tới nó nữa

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

Xong xuôi thì trên tài khoản Docker của bạn sẽ có repositories với tên chính xác như đã đặt từ trong main.yml

Bước 6: kiểm tra lại mọi thứ

Mọi thứ sẽ hoạt động chính xác như cài đặt

Hướng dẫn build PHP và WordPress tùy chỉnh với Docker

php -v
PHP 7.4.33 (cli) (built: Nov 12 2022 05:16:49) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
php -m
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
hash
iconv
intl
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
composer --version
Composer version 2.8.4 2024-12-11 11:57:47
PHP version 7.4.33 (/usr/local/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.

Làm xong hết, kiểm tra mọi thứ chạy ổn định. có thể sửa lại README, ghi chú các cấu hình, tùy chỉnh …. để ai đó thích dùng bản images này có thể dùng

Công nhận docker-php-extension-installer hỗ trợ cài đặt các extension cho PHP tốt thật, mình cũng có thử làm 1 bản cài đặt extension thông thường trên PHP 8.4, cài đặt quá xá thứ mới xong, dùng docker-php-extension-installer điền mỗi tên extension vào là tự động mọi thứ hết, nhàn điên 🥕

Vấn đề cấu hình tối ưu hiệu năng thêm cho PHP mình nghĩ dùng trên Docker LCMP Multisite cho nhàn, mình tách sẵn mọi cấu hình quan trọng ra ngoài, tự chỉnh nhàn hơn, sửa trực tiếp trong Dockerfile nó hơi lỉnh kỉnh, lại khó tùy biến

Kết luận

Viết xong bài mới tự tin bản PHP 7.4 chạy không lỗi á, images gốc quá cũ rồi, không có Dockerfile nên cũng không rõ thời đó PHP cấu hình làm sao, may mà họ vẫn duy trì cấu hình chuẩn, mọi thứ chạy mượt, kiểu họ quên 1 lệnh chmod, quên tạo user, viết thừa 1,2 đấu chấm phẩy là đủ ngồi sửa lỗi đần luôn

Nếu bạn sử dụng các phiên bản PHP mới nhất, như 8.3, 8.4 …. mỗi khi Alpine OS hay phiên bản PHP có cập nhập mới, PHP sẽ tự cập nhập vào các file images ban đầu, với cấu hình trong bài, mỗi ngày cũng tự build 1 bản mới, bạn sẽ luôn có images với PHP, WordPress và các extension được cập nhập tự động mới nhất, không phải động tay động chân làm gì, dùng 3-6 tháng nếu hôm nào rảnh tay, muốn cập nhập lên bản mới, chạy 1 lệnh cập nhập cơ bản docker compose pull && docker compose up -d là xong

Thời điểm bạn đọc thấy dòng này, thèng bibica.net đang dùng chính xác phiên bản images wordpress-wp-cli-php8.4-fpm-alpine được nói tới trong bài


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!