Hướng dẫn cài đặt Caddy Reverse Proxy cực kỳ nhẹ và dễ sử dụng

Caddy Server là gì? Hướng dẫn chi tiết cách cài đặt Caddy bằng Docker và cấu hình Caddy làm Reverse Proxy tự động cấp phát SSL miễn phí cực kỳ dễ dàng.

Hướng dẫn cài đặt Caddy Reverse Proxy cực kỳ nhẹ và dễ sử dụng

Trong thế giới quản trị hệ thống và vận hành Website, Nginx và Apache đã quá quen thuộc. Tuy nhiên, nếu bạn đang tìm kiếm một Web Server gọn nhẹ, cấu hình cực kỳ đơn giản và đặc biệt là tự động cấu hình HTTPS (SSL) miễn phí, thì Caddy Server chính là ngôi sao sáng nhất hiện nay.

Trong bài viết này, TechCoBan sẽ chia sẻ với anh em cách cài đặt và sử dụng Caddy làm Reverse Proxy một cách đơn giản và tối ưu hiệu suất nhất bằng Docker.

1. Giới thiệu tổng quan về Caddy Server

Caddy Server là một web server mã nguồn mở, mạnh mẽ được viết hoàn toàn bằng ngôn ngữ Go. Điểm “ăn tiền” lớn nhất của Caddy là khả năng tự động cấp và gia hạn chứng chỉ HTTPS (Let’s Encrypt) mà không cần bạn phải cấu hình phức tạp. Nó sinh ra để làm cho trải nghiệm chạy Web Server trở nên an toàn mặc định (Secure by default).

Được thiết kế để dễ sử dụng và đạt hiệu suất cao, Caddy hiện đang được rất nhiều DevOps lựa chọn làm giải pháp thay thế hoàn hảo cho Nginx và Apache trong các dự án web hiện đại.

Các tính năng nổi bật của Caddy:

  • Tùy biến cấu hình cực kỳ dễ hiểu, ngắn gọn thông qua file Caddyfile.
  • Hỗ trợ tuỳ biến cấu hình nâng cao qua JSON API.
  • Tự động xác thực HTTPS mặc định.
  • Đa chức năng: Hoạt động như Web server, Reverse proxy, Load balancer.
  • Sẵn sàng chạy trên môi trường Production.
  • Hỗ trợ mặc định HTTP/1.1, HTTP/2, và HTTP/3.
  • Dễ dàng cài thêm plugin/module nhờ thiết kế kiến trúc mở (Modular architecture).
  • Khởi chạy dưới dạng file thực thi nhị phân độc lập, không phụ thuộc thư viện (Zero dependencies).

2. Cài đặt Caddy Server bằng Docker

Cách triển khai sạch sẽ và dễ dàng nhất là sử dụng Docker.

Bước 1: Tạo thư mục lưu trữ cấu hình Caddy

mkdir -p ~/caddy
cd ~/caddy

Bước 2: Tạo file cấu hình compose.yml (hoặc docker-compose.yml)

nano compose.yml

Dán nội dung sau vào file:

version: '3.8'

services:
  caddy:
    container_name: caddy
    image: caddy:alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    networks:
      - reverse_proxy
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:

networks:
  reverse_proxy:
    external: true

Bước 3: Tạo file Caddyfile

Caddyfile là “linh hồn” của Caddy. Chúng ta sẽ tạo cấu hình cơ bản để test thử. Hãy đổi caddy.kienletv.com thành domain hoặc subdomain thực tế của bạn đã trỏ IP về máy chủ.

nano Caddyfile

Dán nội dung sau vào:

caddy.kienletv.com {
    respond / "Hello World from Caddy" 200
    tls internal
}

(Lưu ý: tls internal sẽ dùng chứng chỉ tự ký (self-signed) dành cho test nội bộ, nếu trỏ tên miền thật, bạn xoá dòng này đi Caddy sẽ tự đăng ký HTTPS miễn phí với Let’s Encrypt).

Bước 4: Khởi tạo Network và chạy Caddy Server

Vì Caddy sẽ làm cầu nối (Reverse Proxy) tới các Container khác, chúng ta nên tạo một mạng network chung trên Docker tên là reverse_proxy.

docker network create reverse_proxy
docker compose up -d

Sau khi chạy xong, hãy mở trình duyệt và truy cập vào địa chỉ https://caddy.kienletv.com. Nếu bạn nhìn thấy dòng chữ Hello World from Caddy, xin chúc mừng, bạn đã cài đặt thành công!

3. Sử dụng Caddy làm Reverse Proxy thực tế

Bây giờ chúng ta sẽ đi vào các ví dụ thực tế: Dùng Caddy chặn phía trước và phân luồng traffic về các ứng dụng nội bộ.

Ví dụ 1: Triển khai Uptime Kuma

Hãy tạo một thư mục mới và chạy ứng dụng giám sát Uptime Kuma.

mkdir ~/uptime-kuma
cd ~/uptime-kuma
nano compose.yml

Nội dung cấu hình Uptime Kuma:

version: '3.8'
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - ./data:/app/data
    restart: unless-stopped
    networks:
      - reverse_proxy     

networks:
  reverse_proxy:
    external: true

Khởi chạy Uptime Kuma:

docker compose up -d

Cấu hình Caddy chỉ hướng về Uptime Kuma: Bạn mở file Caddyfile ở thư mục ~/caddy lúc nãy, và khai báo thêm cấu hình mới vào cuối file:

kuma.kienletv.com {
    reverse_proxy uptime-kuma:3001
}

(Cấu hình này nói cho Caddy biết: Bất kỳ ai truy cập vào tên miền kuma.kienletv.com, hãy chuyển tiếp toàn bộ luồng dữ liệu đó về container tên uptime-kuma ở cổng 3001).

Khởi tạo lại Caddy để nhận cấu hình mới:

cd ~/caddy
docker compose up -d --force-recreate

Bây giờ, mở trình duyệt truy cập vào https://kuma.kienletv.com và tận hưởng thành quả.

Ví dụ 2: Triển khai ứng dụng traefik/whoami

Một ứng dụng trả về thông tin network nhỏ gọn thường dùng để test.

mkdir ~/whoami
cd ~/whoami
nano compose.yml
version: '3.7'
services:
  whoami:
    image: traefik/whoami
    container_name: whoami_test
    networks:
      - reverse_proxy

networks:
  reverse_proxy:
    external: true

Tương tự, sửa file Caddyfile thêm đoạn sau:

whoami.kienletv.com {
    reverse_proxy whoami_test:80
}

Khởi chạy ứng dụng whoami và khởi động lại Caddy:

# Khởi chạy whoami
docker compose up -d

# Reload lại cấu hình Caddy
cd ~/caddy
docker compose up -d --force-recreate

4. Tổng kết

Như vậy, qua bài viết này TechCoBan đã chia sẻ với anh em cách xây dựng Caddy làm Web Server kiêm Reverse Proxy hoàn chỉnh. Cấu hình của Caddy cực kỳ ngắn gọn so với Nginx, và điểm tuyệt vời nhất là anh em không còn phải đau đầu chạy các lệnh certbot để xin chứng chỉ SSL nữa.

Ngoài Caddy ra, anh em cũng có thể tham khảo thêm một số giải pháp Reverse Proxy mạnh mẽ khác (như Traefik hay Nginx Proxy Manager) trong các bài viết trước của mình.

Nếu muốn tìm hiểu sâu hơn về Caddy, anh em có thể tham khảo các tài liệu chính thức sau:

Bình luận

Bài viết liên quan