Trước đây, mình đã chia sẻ cách cấu hình Caddy làm Reverse Proxy cho dịch mạng trong homelab. Mình đang áp dụng phương pháp này không chỉ trên homelab mà còn trên các VPS từ các nhà cung cấp. Ngoài ra, mình cũng áp dụng cho công cụ KazeWP để cài đặt và quản lý WordPress.
Trong bài viết hôm nay, mình sẽ hướng dẫn cách cấu hình Dynamic DNS và thiết lập Wildcard SSL cho Caddy, giúp bạn quản lý homelab tiện lợi hơn.
Mục Lục
I. Yêu cầu chuẩn bị
Trước khi bắt đầu, bạn cần chuẩn bị:
- Caddy Server: Đã được cài đặt trên server của bạn. Nếu chưa, bạn có thể tham khảo hướng dẫn cài đặt Caddy.
- Tài khoản Cloudflare: Đăng ký một tài khoản tại Cloudflare và thêm domain của bạn vào Cloudflare.
- API Token từ Cloudflare: Token cần có quyền truy cập vào DNS để cập nhật Dynamic DNS. Bạn có thể xem hướng dẫn tạo API Token từ Cloudflare.
II. Cập nhật cấu hình Caddy
1. Chỉnh sửa compose.yml
Chỉnh sửa lại file compose.yml
của Caddy, bổ sung thêm thông số CLOUDFLARE_API_TOKEN
trong mục environment. Ngoài ra, bổ sung thêm dòng build: .
và thêm dấu #
vào trước dòng image: caddy:x.x.x
để vô hiệu hóa dòng này.
services:
caddy:
container_name: caddy
#image: caddy:2.9.1
build: .
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./sites:/etc/caddy/sites
- ./caddy_data:/data
- ./caddy_config:/config
environment:
- CLOUDFLARE_API_TOKEN=2k3Zxxxxxxxxxx3gxMRzhwXe7Soa
Code language: YAML (yaml)
2. Tạo Dockerfile
Tạo thêm file Dockerfile
nằm cùng thư mục đang chứa file compose.yml
, sử dụng lệnh
nano Dockerfile
Code language: Nginx (nginx)
Nhập vào nội dung sau
FROM caddy:2.9.1-builder-alpine AS builder
RUN xcaddy build \
--with github.com/mholt/caddy-dynamicdns \
--with github.com/caddy-dns/cloudflare
FROM caddy:2.9.1-alpine
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
Code language: Dockerfile (dockerfile)
Mục đích của Dockerfile
này là tạo ra một Docker image mới, dựa trên phiên bản cho Caddy, được cài đặt thêm 2 module:
- caddy-dynamicdns: tìm Public IP của caddy server và cập nhật vô bản ghi DNS của tên miền.
- cloudflare: quản lý các bản ghi DNS của Cloudflare.
II. Thiết lập Dynamic DNS
Cập nhật lại nội dung Caddyfile
và bổ sung thêm đoạn sau vào trên cùng
{
dynamic_dns {
provider cloudflare {env.CLOUDFLARE_API_TOKEN}
domains {
domain.com @
domain.com subdomain
}
}
}
Code language: Dockerfile (dockerfile)
Bạn cần lưu ý cập nhật đúng tên miền cần cập nhật theo đúng định dạng <domain name> <subdomain>
- Tên miền:
thuanbui.me
–> nhập vàothuanbui.me @
- Tên miền:
caddy.thuanbui.me
–> nhập vàothuanbui.me caddy
Bạn có thể thêm bao nhiêu tên miền tùy thích con trong phần khai báo domains. Các tên miền con này nếu chưa được tạo bản ghi sẽ được tự động tạo trong Cloudflare.
Lưu ý: API Token đã tạo cần phải có quyền truy cập và chỉnh sửa DNS Zone của các tên miền bạn khai báo ở đây.
Kích hoạt lại Caddy bằng lệnh
docker compose up -d --build
Code language: Nginx (nginx)
Hệ thống sẽ mất khoảng 3-5′ để tạo Docker image mới, và khởi tạo lại Caddy container từ image này. Sau khi hoàn thành, các tên miền bạn đã khai báo ở trên xem đã được cập nhật đúng Public IP của server đang cài Caddy.
III. Cấu hình Wildcard SSL
Để tiện việc cấu hình SSL cho các dịch vụ trong homelab, mình sẽ thiết lập Wildcard SSL sử dụng tính năng DNS Challenge.
Mình sẽ thiết lập Wildcard SSL cho tên miền *.homelab.thuanbui.me
, các dịch vụ trong homelab sẽ được truy cập theo các tên miền con như adguad.homelab.thuanbui.me
hay proxmox.homelab.thuanbui.me
Chỉnh sửa lại Caddyfile
như sau
- Dòng 5: thêm vào khai báo
thuanbui.me *.homelab
để Caddy tự động thêm bản ghi này vào Cloudflare. - Dòng 9: khai báo thông tin email để dùng truy vấn SSL Certificate
- Dòng 11-15: khai báo cấu hình Wildcard SSL cho tên miền wildcard
*.homelab.thuanbui.me
- Dòng 17-27: khai báo reverse proxy cho các tên miền con
{
dynamic_dns {
provider cloudflare {env.CLOUDFLARE_API_TOKEN}
domains {
thuanbui.me *.homelab
}
}
email thuanbuidepchai@thuanbui.me
}
*.homelab.thuanbui.me {
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
}
proxmox.homelab.thuanbui.me {
reverse_proxy 192.168.0.45:8006 {
transport http {
tls_insecure_skip_verify
}
}
}
adguard.homelab.thuanbui.me {
reverse_proxy 192.168.0.5:3000
}
Code language: YAML (yaml)
Sau đó kích hoạt lại Caddy
docker compose restart
Code language: Nginx (nginx)
Xác nhận lại xem bạn có thể truy cập được vào các dịch vụ bằng tên miền đã thiết lập chưa. Nếu gặp vấn đề thì kiểm tra logs bằng lệnh docker compose logs
để xem lỗi và tìm cách khắc phụ.
IV. Lời kết
Mình vừa mới hướng dẫn các bạn cách cấu hình Dynamic DNS và thiết lập Wildcard SSL cho Caddy Server. Với cấu hình này, bạn có thể dễ dàng triển khai các dịch vụ mạng tại nhà, truy cập được vào thông qua tên miền con, tất cả được bảo mật bằng chứng chỉ SSL.
Nếu bạn có câu hỏi hoặc góp ý, đừng ngần ngại để lại bình luận bên dưới! Chúc bạn thành công! 🚀
Bài viết liên quan
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.
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.