Cách đây vài tháng mình đã giới thiệu [wordpress-caddy-docker] một giải pháp đơn giản để thiết lập nhanh WordPress chạy trên nền Caddy server bằng Docker Compose. Công cụ này đã được khá nhiều bạn đón nhận, tuy nhiên nó tồn tại 2 nhược điểm lớn:

  1. Cần phải chỉnh sửa thông số $DOMAIN trong file .env trước khi kích hoạt.
  2. Chỉ hỗ trợ thiết lập một website duy nhất. Nếu bạn cần quản lý nhiều website WordPress trên cùng một máy chủ, bắt buộc phải có kiến thức về Caddy lẫn Docker để thiết lập thêm thông số cho phù hợp.

Mình đã hướng dẫn cách cấu hình Caddy làm Reserve Proxy cho homelab tại nhà, có thể áp dụng tương tự để cấu hình cho nhiều website WordPress. Tuy nhiên, việc thực hiện thủ công không chỉ tốn khá nhiều thời gian mà còn dễ dẫn đến lỗi nếu không cẩn thận trong quá trình chỉnh sửa cấu hình.

Những khó khăn và hạn chế kể trên đã thúc đẩy mình nâng cấp [wordpress-caddy-docker] lên phiên bản mới, hỗ trợ cài đặt nhiều website trên cùng máy chủ. Sau vài tuần nghiên cứu, thử nghiệm với sự hỗ trợ đắc lực của Claude AI và ChatGPT, xin giới thiệu với mọi người KazeWP – công cụ giúp quản lý nhiều website WordPress một cách dễ dàng, nhanh chóng và hiệu quả.

I. Giới thiệu KazeWP

KazeWP là một công cụ mã nguồn mở do mình phát triển (với sự hỗ trợ từ ChatGPT và Claude AI), giúp triển khai và quản lý nhiều website WordPress dễ dàng trên nền tảng Docker và Caddy.

Lợi ích nổi bật của KazeWP:

  • Mở rộng linh hoạt: Có thể thêm bao nhiêu website tùy thích mà không lo bị xung đột.
  • Hỗ trợ nhiều website WordPress: Dễ dàng thêm, xóa, hoặc quản lý các website WordPress trên cùng một server.
  • Tích hợp Reverse Proxy: Sử dụng Caddy để tự động cấu hình SSL và chuyển hướng mạng.
  • Hoàn toàn tự động: Tự động hóa cấu hình bằng Bash Script đơn giản.
  • Dễ dàng cài đặt: Tất cả mọi thứ đều được container hóa bằng Docker.

II. Cài đặt KazeWP

1. Yêu cầu:

  • Máy tính có cài sẵn DockerDocker Compose.
  • Hệ điều hành Unix (Linux hoặc macOS), hoặc WSL nếu dùng Windows.

2. Các bước cài đặt:

Tải mã nguồn từ Github:

git clone https://github.com/10h30/kazewp.git
cd kazewpCode language: Bash (bash)

Cấu trúc thư mục sẽ như sau, với file thực thi chính là kazewp.sh

.
├── kazewp.sh
├── images
│   ├── kazewp.png
├── lib
│   ├── caddy.sh
│   ├── colors.sh
│   ├── config.sh
│   ├── docker.sh
│   ├── utils.sh
│   ├── validation.sh
│   └── wordpress.sh
├── LICENSE
├── README.md
└── templates
    ├── caddy.template
    ├── docker-compose.yml.template
    └── wp-setup.sh.templateCode language: CSS (css)

Chạy script cài đặt:

Sử dụng lệnh sau để xem cách sử dụng KazeWP

./kazewp.sh
KazeWP - WordPress Site Management Script
Usage:
  ./kazewp.sh install <domain>              - Install a new WordPress site
  ./kazewp.sh list                          - List all installed WordPress sites
  ./kazewp.sh delete <domain>               - Delete a WordPress site
  ./kazewp.sh delete all                    - Delete everythingCode language: Shell Session (shell)

III. Hướng dẫn sử dụng KazeWP

A. Cài đặt website mới

Để cài đặt một website WordPress mới, bạn sử dụng lệnh sau:

./kazewp.sh install <domain>

Thay <domain> bằng tên miền của bạn (ví dụ: thuanbui.me). Hệ thống sẽ yêu cầu bạn nhập các thông tin quan trọng để cấu hình WordPress: Admin Email, Admin Username, Admin Password và Site Title

Enter admin email: thuan@thuan.com
Enter admin username: thuan
Enter password (press Enter for random password):
Generated password: wIIWfNPfXL2qiLa0
Enter site title: Thuan
Do you want to (1) start services and set up WordPress automatically or (2) do it manually later? [1/2]:Code language: Shell Session (shell)

Bạn có 2 lựa chọn để cài đặt

1. Kích hoạt tự động

Khi chọn (1) start services and set up WordPress automatically, hệ thống sẽ tự động thao tác từ A-Z: tạo container, cấu hình WordPress và kết nối với Caddy. Bạn chỉ cần ngồi chờ vài phút cho đến khi thấy xuất hiện thông báo như bên dưới

== User List ==
[+] Creating 2/0
 ✔ Container db_thuan.com         Running                                                                                                                   0.0s 
 ✔ Container wordpress_thuan.com  Running                                                                                                                   0.0s 
+----+------------+--------------+-----------------+---------------------+---------------+
| ID | user_login | display_name | user_email      | user_registered     | roles         |
+----+------------+--------------+-----------------+---------------------+---------------+
| 1  | thuan      | thuan        | thuan@thuan.com | 2025-01-02 01:24:28 | administrator |
+----+------------+--------------+-----------------+---------------------+---------------+

== Theme List ==
[+] Creating 2/0
 ✔ Container db_thuan.com         Running                                                                                                                   0.0s 
 ✔ Container wordpress_thuan.com  Running                                                                                                                   0.0s 
+-------------------+----------+--------+---------+----------------+-------------+
| name              | status   | update | version | update_version | auto_update |
+-------------------+----------+--------+---------+----------------+-------------+
| kadence           | active   | none   | 1.2.14  |                | off         |
| twentytwentyfive  | inactive | none   | 1.0     |                | off         |
| twentytwentyfour  | inactive | none   | 1.3     |                | off         |
| twentytwentythree | inactive | none   | 1.6     |                | off         |
+-------------------+----------+--------+---------+----------------+-------------+

== Plugin List ==
[+] Creating 2/0
 ✔ Container db_thuan.com         Running                                                                                                                   0.0s 
 ✔ Container wordpress_thuan.com  Running                                                                                                                   0.0s 
+--------------------+----------+--------+---------+----------------+-------------+
| name               | status   | update | version | update_version | auto_update |
+--------------------+----------+--------+---------+----------------+-------------+
| akismet            | inactive | none   | 5.3.5   |                | off         |
| cache-enabler      | active   | none   | 1.8.15  |                | off         |
| hello              | inactive | none   | 1.7.2   |                | off         |
| wordfence          | active   | none   | 8.0.1   |                | off         |
| advanced-cache.php | dropin   | none   |         |                | off         |
+--------------------+----------+--------+---------+----------------+-------------+

WordPress setup completed!
WordPress setup completed successfully
Complete setup finished successfully!

WordPress Site Information:
----------------------------------------
Domain:       https://thuan.com
Admin URL:    https://thuan.com/wp-admin
Username:     thuan
Password:     wIIWfNPfXL2qiLa0 (SAVE THIS PASSWORD!)
Email:        thuan@thuan.com
----------------------------------------

Credentials have been saved to: /root/kazewp/wordpress/thuan.com/credentials.txtCode language: Shell Session (shell)

Sau đó dùng trình duyệt web, truy cập vào tên miền bạn vừa mới thiết lập để xác nhận lại WordPress đã được cài đặt thành công.

2. Kích hoạt thủ công

Bạn cũng có thể chọn (2) do it manually later, để chủ động việc kích hoạt hệ thống khi cần. Thông thường khi cần cấu hình nâng cao cho một số website WordPress đặc biệt, mình sẽ chọn bước này để chỉnh sửa file compose.yaml trước khi kích hoạt.

Hệ thống sẽ hiển thị hướng dẫn cách kích hoạt như bên dưới

Manual setup instructions:
1. Start Caddy:
   cd /root/kazewp/caddy && docker compose up -d
Reloading Caddy configuration...
2. Start WordPress:
   cd /root/kazewp/wordpress/thuan.com && docker compose up -d
3. Run the WordPress setup script:
   ./wp-setup.sh

WordPress Site Information:
----------------------------------------
Domain:       https://thuan.com
Admin URL:    https://thuan.com/wp-admin
Username:     thuan
Password:     y8bnRF2daKjGI2Wb (SAVE THIS PASSWORD!)
Email:        thuan@thuan.com
----------------------------------------

Credentials have been saved to: /root/kazewp/wordpress/thuan.com/credentials.txtCode language: Shell Session (shell)

Kích hoạt Caddy

cd /root/kazewp/caddy && docker compose up -dCode language: Bash (bash)

Kích hoạt WordPress

cd /root/kazewp/wordpress/thuan.com && docker compose up -dCode language: Bash (bash)

Cài đặt WordPress

./wp-setup.sh

Trong cả hai trường hợp, thông số của trang WordPress đều được lưu lại trong file credentials.txt nằm trong thư mục của tên miền vừa tạo.

Để thêm website mới, sử dụng lại lệnh

./kazewp.sh install <domain>

và thao tác tương tự như hướng dẫn trên

B. Xem danh sách website đã cài đặt

Để xem danh sách các website đang chạy, sử dụng lệnh sau:

./kazewp.sh listCode language: PHP (php)

Danh sách các website cùng thông tin tương ứng sẽ hiển thị trên terminal.

Installed WordPress Sites:
-------------------------
Site: thuan.com
Path: /root/kazewp/wordpress/thuan.com
Status: No container is running
-------------------------Code language: YAML (yaml)

C. Xóa website

Để xóa một website đã cài đặt, sử dụng lệnh:

./kazewp.sh delete <domain>Code language: JavaScript (javascript)

Thay <domain> bằng tên miền bạn muốn xóa. Bạn cần phải xác nhận ở bước Are you sure you want to continue? (y/N). Chọn Y để xác nhận.

Warning: This will permanently delete the site: thuan.com
Are you sure you want to continue? (y/N): y
Stopping Docker containers...
Removing site directory...
Removing Caddy configuration...
Reloading Caddy...
Reloading Caddy configuration...
Site 'thuan.com' has been successfully deletedCode language: JavaScript (javascript)

D. Reset lại từ đầu

Để xóa toàn bộ các site và cấu hình, sử dụng lệnh

./kazewp.sh delete allCode language: JavaScript (javascript)
Are you sure you want to uninstall everything? This will stop and remove all containers, and delete files. (Y/n): YCode language: JavaScript (javascript)

Toàn bộ container, thư mục đã tạo bởi script KazeWP này sẽ được dọn dẹp sạch sẽ để bạn có thể cài đặt lại từ đầu.

IV. Lời kết

KazeWP là giải pháp mạnh mẽ và tiện lợi cho việc quản lý nhiều website WordPress trên cùng một máy chủ. Với các tính năng tự động hóa, KazeWP sẽ giúp bạn tiết kiệm thời gian và tối ưu hóa công việc quản lý.

Ngoài các tính năng hiện có, mình đang dự tính sẽ bổ sung thêm các tính năng mới như backup / restore, tuỳ chọn cài đặt plugin / theme,…

Hãy thử sử dụng KazeWP và chia sẻ ý kiến của bạn nhé! Nếu có bất kỳ câu hỏi nào hoặc phát hiện lỗi khi sử dụng, hãy thông báo cho mình ở phần bình luận bên dưới.

Chúc bạn cài đặt thành công!

Nếu bạn cần hỗ trợ kỹ thuật miễn phí, 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 trong thời gian sớm nhất.

Để 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 *


6 Comments

    1. Nếu đã có sẵn NPM thì bạn cần chọn cách cài đặt thủ công để KazeWP không tự động kích hoạt CaddyWP. Sau đó kích hoạt WordPress và cấu hình Reverse Proxy trong NPM.

  1. cd /root/kazewp/wordpress/hello.domain.com && docker compose up -d
    empty compose file

    Mình bị lỗi này khi chạy ở chế độ auto mà manual, mình đã check và thấy đúng file compose.yaml empty thật, mong được trợ giúp

    1. Mình đã thử đi thử laị nhiều lần những không bị lỗi như bạn. Bạn thử chạy lại lệnh này

      ./kazewp.sh install example.com | tee -a kazewp.log

      và copy nội dung file kazewp.log để mình kiểm tra thử xem lỗi gì.

Bạn cần hỗ trợ kỹ thuật chuyên sâu?

Khám phá các gói dịch vụ giúp bạn tối ưu công việc và vận hành hệ thống hiệu quả hơn. Từ chăm sóc website đến hỗ trợ kỹ thuật, mọi thứ đều linh hoạt và phù hợp với nhu cầu của bạn.