Cập nhật 04/2025: KazeWP đã được cập nhật hỗ trợ tích hợp phpMyAdmin khi thiết lập website. Xem thêm chi tiết ở đây: https://thuanbui.me/tich-hop-phpmyadmin-vao-website-tao-boi-kazewp/
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:
- Cần phải chỉnh sửa thông số
$DOMAIN
trong file.env
trước khi kích hoạt. - 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ả.
Mục Lục
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 Docker và Docker 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 kazewp
Code 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.template
Code 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 everything
Code 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>
Code language: HTML, XML (xml)
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. Các bạn cũng có thể chọn cài đặt phpMyAdmin ở bước này.
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 include phpMyAdmin? (Y/n) [N]: Y
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.txt
Code 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.txt
Code language: Shell Session (shell)
Kích hoạt Caddy
cd /root/kazewp/caddy && docker compose up -d
Code language: Bash (bash)
Kích hoạt WordPress
cd /root/kazewp/wordpress/thuan.com && docker compose up -d
Code 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>
Code language: HTML, XML (xml)
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 list
Code 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. Khởi động lại website
Khởi động lại Caddy
./kazewp.sh restart caddy
Khởi động lại website `thuan.com
./kazewp.sh restart thuan.com
Khởi động lại toàn bộ hệ thống (tất cả website và caddy)
./kazewp.sh restart all
D. 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 deleted
Code language: JavaScript (javascript)
E. 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 all
Code language: JavaScript (javascript)
Are you sure you want to uninstall everything? This will stop and remove all containers, and delete files. (Y/n): Y
Code 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!
Dùng theo cách này có chạy chung với Nginx Proxy Manager được không bác
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.
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
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ì.
xịn quá bác ơi, mình muốn dùng wp và emailserver cùng chạy trên docker thì dùng script này có được không nhỉ?
Miễn sao emailserver của bạn không dùng port 80/443 thì sẽ không ảnh hưởng gì đến cái script này cả
Project hay quá anh, với stacks WordPress này thì có nên kết hợp dùng plugin WP-Rocket và Redis để làm cache không ạ? Qua sử dụng thì a thấy hiệu năng so với OpenLiteSpeed như nào vậy anh?
Stack này đã tích hợp sẵn plugin Cache Enabler. Mình thấy đơn giản hiệu quả hơn WP-Rocket, và không tốn tiền nữa.
Mình dùng stack này cho các trang blog, web công ty vì đơn giản, dễ quản lý. Còn web bán hàng thì vẫn chưa thấy cái nào qua được OpenLiteSpeed + LiteSpeed Cache
Ây za… Mới 1 tháng không vào blog mà có nhiều bài hay quá. Thank anh nhiều 😀
Chào a Thuận!!!
Lâu lắm mới lại quay lại trên đây!! Cho em hỏi một chút là với script này triển khai được nhiều wordpress khác nhau ko anh nhỉ, kiểu sử dụng trên cùng 1 caddy chứ mỗi lần cài lại cài mới caddy thì không ổn lắm
Trong bài có ghi rồi mà ta “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ả.”
Sr a Thuận!! Lúc hỏi xong e đã cài và đã thấy nhiều dịch vụ từ kaze, đã lên xóa mà chắc xóa miss nên nó vẫn nằm đấy phiền a trả lời
Em vẫn đang chờ cái hướng dẫn là dùng OpenWRT VM trong Proxmox làm Router chính của anh anh nhé ^^!!!!
Em đang muốn tận dụng con RouterPC chạy Proxmox N5105 của e, để biến hệ mạng trong nhà thành full 2.5Gbps
Rất mong bài viết hoặc video youtube về chủ đề này từ anh
Dear a Thuận!!
Cho em hỏi một chút về việc connect database:
1. Hiện tại không có phần quản lý nào tương tự như phpmyadmin ạ (hoặc nếu có rồi thì a bảo em với)
2. Password database là gì a nhỉ? e đang mò mà không ra!!!
Thx a Thuận, em đã tìm được thông tin của database, password và data cũng như đã cài đặt được phpmyadmin để quản lý database
P/S: Em vẫn rất mong có bài về cài đặt openWRT trong proxmox làm router chính :). Nếu lúc nào đó có thời gian rảnh mong anh chỉ giáo nhé
Anh xài router OpenWRT sẵn rồi em, nên chắc sẽ không có bài nào về router ảo openWRT trên Proxmox đâu 🙂 vì cũng không có phần cứng phù hợp để thử.
có thể chia sẽ phần này giúp mình được không bạn. mình đang cần dùng phpmyadmin ạ
Mình sẽ cập nhật script bổ sung phpmyadmin trong 1-2 ngày tới.
Tham khảo bài này nhé: https://thuanbui.me/tich-hop-phpmyadmin-vao-website-tao-boi-kazewp/
mình cần thay theme mới nhưng up load theme bị lỗi. xin hướng dẫn
This message was triggered by WordPress Core.
Call stack:
wp_die()
wp-includes/functions.php:3703
wp_nonce_ays()
wp-includes/pluggable.php:1293
check_admin_referer()
wp-admin/update.php:307
Mình kiểm tra thử thì thấy vẫn upload theme mới bình thường. Bạn thử tải các theme khác xem có bị lỗi không? Nhiều khả năng lỗi là do cái theme.
em chào anh Thuận. anh cho em hỏi dùng cách này thì mỗi web là 1 docker phải ko ạ. vậy nếu có nhiều web demo subdomain thì có gom vào 1 docker cho nhẹ phần cứng và dễ quản lý subdomain được không ạ, còn các web chính thì mỗi web 1 docker riêng. mong anh giải đáp.
em cám ơn
Web demo subdomain hay web chính thì nó cũng là 1 trang web riêng, tên miền riêng. Dùng cái KazeWP này thì nó tách riêng ra hết nhé. Còn muốn gom subdomain vào chung thì em phải tự tùy biến lại. Tuy nhiên, gom lại cũng chẳng giúp tiết kiệm được gì nhiều về phần cứng, chỉ khiến việc quản lý rắc rối thêm.
Đã cài phải nói là triển khai trong 1 phút. Cảm ơn Thuận.
em chào anh Thuận. chúc anh sức khoẻ.
anh cho em hỏi là trong bài viết này em k thấy đề cập đến phpmyadmin. không biết là đã có chưa ạ. và có thì sử dụng như thế nào ạ,
Anh không dùng phpmyadmin nên không có cho vào bộ KazeWP này nhé. EM cần dùng thì phải thiết lập riêng và kết nối nó vào mysql database đang chạy.
em chào anh. anh không dùng phpmyadmin thì dùng bằng phương pháp gì vậy ạ. và muốn truy cập vào database thì mình làm thế nào ạ. mong anh giải đáp
Anh truy cập MySQL bằng dòng lệnh Commandline, ko dùng phpmyadmin. Em có thể thêm phpmyadmin bằng cách chỉnh sửa lại file compose.yml, tham khảo mẫu ở đây: https://github.com/10h30/wordpress-caddy-docker/blob/main/compose.yml, dòng 45-52
Tham khảo bài này nhé: https://thuanbui.me/tich-hop-phpmyadmin-vao-website-tao-boi-kazewp/
chào anh. anh cho em hỏi là a đang triển khai hệ thống này trên mạng ip động đúng khộng ạ. tại em tìm hiểu thì ip tĩnh khá đắt nên muốn hỏi a để làm cho đúng. vì em ko biết code ạ
Cái này thường sẽ triển khai trên VPS, và VPS luôn có IP tĩnh nhé. Nhưng cũng có thể triển khai trên mạng nội bộ ở nhà với IP động và dùng Dynamic DNS để xử lý.
Em chào anh. Anh cho em hỏi. Em muốn triển khai trên proxmox dùng ip động. Vậy em phải triển khai caddy trước hay là tải kazewp về là đc ạ. Mong anh hướng dẫn. Và em muốn sau này các dịch vụ nào cần cấp phát ssl thì dùng luôn caddy ạ
KazeWP đã bao gồm Caddy trong đó rồi nên không cần triển khai Caddy trước nhé.
Cùng quan tâm với bạn Tuấn Anh.
Nhờ a Thuận giải đáp. Vậy em chỉ cần triển khai kazewp có sẳn caddy khi cần khai báo cho các dịch vụ khác cần caddy thì sẽ mở docker caddy lên thêm vào đúng k ạ. Em gà mờ mong a hỗ trợ
Đúng vậy nhé
anh cho em hỏi. muốn chỉnh php. phiên bản khác thì làm sao ạ. mong anh giải đáp. em cáp ơn
Muốn đổi PHP cho từng site sau khi tạo thì em cần truy cập vào thư mục của site đã tạo, mở file compose.yaml, tìm dòng
image: wordpress:fpm-alpine
, thay thếfpm-alpine
bằng một trong các lựa chọn sau tùy thuộc vào bản PHP muốn dùng:php8.4-fpm-alpine
,php8.3-fpm-alpine
,php8.2-fpm-alpine
,php8.1-fpm-alpine
,php8.0-fpm-alpine
,php7.4-fpm-alpine
Cám ơn a đã chia sẽ công cụ hữu ích. Em là người mới từ windown qua proxmox. Mọi thứ mù tịt. Rất mong a giải đáp vấn đề:
1: em làm theo bài viết cài kazewp của a nhưng vấn đề là em k biết làm sao để cài đặt caddy đưa website ra internet. Em thấy docker caddy đã được cài.
Em dùng ip động. Vậy thì phải vào caddy để chỉnh sửa thông tin chứ đúng k ạ.
Em có tìm mấy bài a hướng dẫn cài caddy làm server proxy và đọc các bình luận thì thấy là cài kazewp có sẳn caddy.
Mong anh hướng dẩn cụ thể
Chỉnh sửa lại Caddy sau khi tạo theo hướng dẫn này để dùng Dynamic DNS, tự động cập nhật IP cho tên miền: https://thuanbui.me/cau-hinh-dynamic-dns-va-wildcard-ssl-cho-caddy-server/
Sau đó chỉnh port forwarding cho port 80 và 443 , trỏ về IP của máy chủ đang chạy KazeWP (Caddy) là xong nhé.