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>
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.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>
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. 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)
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 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ả