Trong quá trình đóng gói website WordPress chuyển qua chạy trên Docker + OpenLiteSpeed, mình nhận ra các thiết lập mặc định của combo Docker + OpenLiteSpeed chưa thực sự tối ưu cho nhu cầu sử dụng thực tế: thiếu một số PHP Extension, các thông số PHP không phù hợp và đang mở cổng kết nối đến PhpMyAdmin trong khi mình không dùng đến nó.

Dưới đây là các bước mình đã tối ưu hoạt động cho OpenLiteSpeed trên nền Docker.

1. Vô hiệu hoá PhpMyAdmin

Mình không có nhu cầu sử dụng PhpMyAdmin nên sẽ tắt container chạy ứng dụng này bằng cách chỉnh sửa file docker-compose.yml

nano docker-compose.ymlCode language: CSS (css)

Xoá toàn bộ phần thiết lập liên quan đến PhpMyAdmin, hoặc gõ dấu # phía trước để vô hiệu hoá. Nội dung file docker-compose.yml sau khi chỉnh sửa sẽ như sau.

version: '3'
services:
  mysql:
    image: mariadb:10.5.9
    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}
    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}
  #phpmyadmin:
  #  image: bitnami/phpmyadmin:5.0.2-debian-10-r72
  #  ports:
  #    - 8080:80
  #    - 8443:443
  #  environment:
  #      DATABASE_HOST: mysql
  #  restart: alwaysCode language: YAML (yaml)

Kích hoạt lại Docker-Compose

docker-compose up -d

2. Cài đặt thêm PHP Extension

Một số website của mình yêu cầu phải có PHP extension ionCube mới hoạt động được. Mặc định, các bản PHP đi kèm theo Openlitespeed không có sẵn extension này, do đó mình cần phải cài đặt thêm bằng cách build custom container.

Tạo file Dockerfile nằm trong thư mục custom

mkdir custom
nano custom/DockerfileCode language: Nginx (nginx)

Nhập vào nội dung sau và lưu lại

FROM litespeedtech/openlitespeed:1.7.15-lsphp74
RUN apt-get update && apt-get install lsphp74-ioncube -yCode language: Dockerfile (dockerfile)

Bạn cần thay đổi thông số 1.7.15-lsphp74 tương ứng với cấu hình bạn đã thiết lập trong file .env .

Ví dụ: trong file .env mình thiết lập thông số như sau

OLS_VERSION=1.7.15
PHP_VERSION=lsphp74

Do đó, mình sẽ sử dụng tag 1.7.15-lsphp74 cho openlitespeed khi khai báo trong file Dockerfile.

Chỉnh sửa lại file docker-compose.yml , thêm dòng container_name: litespeedbuild: ./custom vào trong phần khai báo litespeed như dưới đây. Sau đó lưu lại

litespeed:
    container_name: litespeed
    image: litespeedtech/openlitespeed:${OLS_VERSION}-${PHP_VERSION}
    build: ./custom
    env_file:
      - .envCode language: YAML (yaml)

Kích hoạt lại docker-compose kèm thêm hậu tố --build

docker-compose down
docker-compose up -d --build

Docker sẽ tạo container mới cho openlitespeed với tên gọi litespeed cùng cài đặt extension lsphp74-iconcube như thông báo tương tự bên dưới

Creating network "ols-docker-env_default" with the default driver
Building litespeed
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM litespeedtech/openlitespeed:1.7.15-lsphp74
 ---> d41ceb1142a0
Step 2/2 : RUN apt-get update && apt-get install lsphp74-ioncube -y
 ---> Running in 7294df7a6226
Hit:1 <http://security.ubuntu.com/ubuntu> focal-security InRelease
Hit:2 <http://archive.ubuntu.com/ubuntu> focal InRelease
Ign:3 <http://rpms.litespeedtech.com/debian> focal InRelease
Hit:4 <http://archive.ubuntu.com/ubuntu> focal-updates InRelease
Hit:5 <http://rpms.litespeedtech.com/debian> focal Release
Hit:6 <http://archive.ubuntu.com/ubuntu> focal-backports InRelease
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
lsphp74-ioncube is already the newest version (10.4.1-1+focal).
0 upgraded, 0 newly installed, 0 to remove and 19 not upgraded.
Removing intermediate container 7294df7a6226
 ---> da4f327b6abd
Successfully built da4f327b6abd
Successfully tagged litespeedtech/openlitespeed:1.7.15-lsphp74
Creating ols-docker-env_mysql_1 ... done
Creating litespeed              ... doneCode language: PHP (php)

Kiểm tra lại thông số PHP bằng lệnh sau

docker-compose exec litespeed su -c "php -v"Code language: Bash (bash)

iconCube đã được cài đặt và kích hoạt thành công theo kết quả trả về

PHP 7.4.28 (cli) (built: Feb 17 2022 14:53:51) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with the ionCube PHP Loader + ionCube24 v10.4.1, Copyright (c) 2002-2020, by ionCube Ltd.
    with Zend OPcache v7.4.28, Copyright (c), by Zend TechnologiesCode language: CSS (css)

Nếu cần cài đặt PHP Extension khác, bạn cần chỉnh sửa lại file Dockerfile như hướng dẫn ở trên.

3. Thay đổi thông số php.ini

Kiểm tra thông số hiện tại của PHP bằng cách tạo file info.php trong thư mục sites/localhost

nano sites/localhost/html/info.phpCode language: Nginx (nginx)

Điền vào nội dung sau và lưu lại

<?php
phpinfo( );
?>Code language: PHP (php)

Mở trình duyệt vào truy cập vào địa chỉ http://<IP-Address>/info.php để kiểm tra thông số hiện tại của PHP

Những thông số mình muốn chỉnh sửa lại:

  • max_execution_time hiện tại đang là 30 (giây), mình muốn sửa lại thành 600 (giây)
  • memory_limit hiện tại đang là 128M, mình sẽ sửa lại thành 512M
  • upload_max_filesize hiện tại đang là 2M, mình sẽ sửa lại thành 16M.

Đầu tiên, copy file php.ini nằm trong openlitespeed container ra ngoài để có thể chỉnh sửa.

docker-compose exec litespeed su -c 'mv /usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini /usr/local/lsws/conf'Code language: Bash (bash)

Nếu sử dụng PHP 8.0 bạn cần thay đổi lsphp74 thành lsphp807.4 thành 8.0 trong đường dẫn ở trên.

Chỉnh sửa php.ini

nano lsws/conf/php.iniCode language: Nginx (nginx)

Tìm các mục max_execution_time, memory_limit, upload_max_filesize , sửa lại thông số theo ý muốn và lưu lại.

Copy file php.ini đã chỉnh sửa về lại vị trí cũ trong openlitespeed container

docker-compose exec litespeed su -c 'mv /usr/local/lsws/conf/php.ini /usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini'Code language: Bash (bash)

Khởi động lại PHP trong container

docker-compose exec litespeed su -c 'pkill lsphp'Code language: Bash (bash)

Quay lại địa chỉ http://<IP-Address>/info.php, các thông số PHP giờ đã được cập nhật theo đúng ý của mình.

Chúc bạn thực hiện thành công!

[convertkit form=7087807]

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!

Để lại một bình luận

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 *


3 Comments

  1. Bạn cho mình hỏi, mình đóng gói như vậy là server sẽ chạy trên nền nginx hay apache vậy bạn, vì mình cần thêm một vài hàm vào webserver nhưng không biết cách config thông số server ở đâu.
    Cám ơn bạn!

  2. FROM litespeedtech/openlitespeed:1.8.1-lsphp81
    RUN apt-get update && apt-get install lsphp81-ioncube -y
    ở đoạn mkdir custom
    nano custom/Dockerfile
    mình có test thử 8.1-8.3 toàn bị báo lỗi sau khi chạy lại. Trước đó mình đã chạy theo bài bạn với php74 ngon lành nhưng do một số plugin wp mới hỗ trợ php8 trở lên nên mình cần update