Skip to content
Thuan Bui's Blog
Go back

Cấu hình Dynamic DNS và Wildcard SSL cho Caddy Server

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.

https://thuanbui.me/cau-hinh-caddy-reverse-proxy-cho-homelab/

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.

I. Yêu cầu chuẩn bị

Trước khi bắt đầu, bạn cần chuẩn bị:

  1. 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.

  2. 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.

  3. 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

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

Terminal window
nano Dockerfile

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

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:

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
}
}
}

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>

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

Terminal window
docker compose up -d --build

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

{
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
}

Sau đó kích hoạt lại Caddy

Terminal window
docker compose restart

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! 🚀


Share this post on:

Previous Post
Học tiếng Nhật – Ngày 731: Nhìn lại chặng đường 2 năm học tiếng Nhật
Next Post
Chatwoot - Công cụ quản lý việc giao tiếp với khách hàng, hỗ trợ Live Chat, Email, Whatapps,...