Sau một thời gian dài gắn bó với Nginx và OpenLiteSpeed, gần đây mình đang dần chuyển qua sử dụng Caddy ứng dụng làm web server cho các website và reverse proxy cho các dịch vụ mạng trong homelab ở nhà.

So với Nginx và Openlitesped, Caddy cài đặt nhanh chóng dễ sử dụng hơn rất nhiều. Chỉ cần cấu hình 3 dòng lệnh tương tự như bên dưới là đã thiết lập xong 1 reverse proxy, đồng thời được thiết lập SSL tự động từ Let’s Encrypt.

webserver.thuanbui.me {
    reverse_proxy 192.168.0.50:9000
}Code language: YAML (yaml)

Bài viết hôm nay mình sẽ giới thiệu nhanh về Caddy Server cùng cách cài đặt và sử dụng.

1. Giới thiệu Caddy Server

Caddy Server là một phần mềm web server mã nguồn mở được phát triển dựa trên ngôn ngữ lập trình Golang (Go). Được ra đời từ 2015, Caddy liên tục được bổ sung nhiều tính năng mạnh mẽ, trong đó đáng chú ý nhất là việc hỗ trợ HTTP / 3.0 và tự động xác thực chứng chỉ Let’s Encrypt SSL.

Các tính năng của Caddy:

  • Tùy biến cấu hình dễ dàng với Caddyfile
  • Tùy biến cấu hình nâng cao với native JSON config
  • Tự động xác thực HTTPS
  • Đa tính năng: web server, reverse proxy, load balancer
  • Production-ready
  • Hỗ trợ HTTP/1.1, HTTP/2, and HTTP/3
  • Dễ dàng mở rộng tính năng nhờ thiết kế modular architecture
  • Hỗ trợ nhiều hệ điều hành, và không bị phụ thuộc dependencies
  • Và còn nhiều tính năng khác chờ bạn khám phá

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

Bạn có thể cài đặt Caddy bằng nhiều cách thông qua hướng dẫn ở đây.

Mình chọn cách cài đặt bằng Docker để có thể dễ dàng xóa đi khi cần mà không ảnh hưởng đến hệ thống.

Tạo file compose.yml

mkdir ~/caddy
cd ~/caddy
nano compose.ymlCode language: Bash (bash)

Nhập vào nội dung sau

services:
  caddy:
    image: caddy:2.7.6-alpine
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./html:/var/www/html
      - ./caddy_data:/data
      - ./caddy_config:/configCode language: Markdown (markdown)

Tạo thêm file Caddyfile

nano CaddyfileCode language: Nginx (nginx)

và nhập tạm vào nội dung

:80 {
	respond "Hello, world!"
}Code language: JavaScript (javascript)

Kích hoạt Caddy

docker compose up -dCode language: Nginx (nginx)

Mở trình duyệt truy cập vào địa chỉ http://<IP>, nếu thấy hiện ra dòng chữ Hello, world! nghĩa là Caddy đã được cài đặt và kích hoạt thành công.

3. Cấu hình Caddy làm Reverse Proxy

Để cấu hình Caddy làm Reverse Proxy cho Portainer đang chạy ở địa chỉ 192.168.0.50:9000, mình chỉnh sửa file Caddyfile và bổ sung thêm 3 dòng sau

portainer.thuanbui.me {
	reverse_proxy 192.168.0.50:9000
}Code language: YAML (yaml)

Sau đó khởi động lại Caddy bằng lệnh

docker compose exec -w /etc/caddy caddy caddy reloadCode language: Bash (bash)

Chờ 1-2 phút để Caddy hoàn thành bước xác thực chứng chỉ SSL, giờ mình đã có thể truy cập Portainer thông qua địa chỉ https://portainer.thuanbui.me

Trong trường hợp Portainer và caddy nằm cùng trên 1 server, bạn có thể tham khảo bài viết dưới đây để biết cách thiết lập các container vào chung 1 docker network và chỉnh sửa lại Caddyfile như sau

portainer.thuanbui.me {
	reverse_proxy portainer
}

Mình cũng đã chuyển website thuanbui.me này qua chạy trên nền Docker và được Reverse Proxy thông qua Caddy. Khi check curl -I https://thuanbui.me sẽ hiện ra thông tin server: Caddy

HTTP/2 200
accept-ranges: bytes
alt-svc: h3=":443"; ma=2592000
content-type: text/html; charset=utf
etag: "sa2ao42enp"
last-modified: Sat, 09 Mar 2024 03:50:28 GMT
server: Caddy
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
content-length: 112309
date: Sat, 09 Mar 2024 03:58:40 GMTCode language: YAML (yaml)

Trong bài viết sau, mình sẽ hướng dẫn cách thiết lập website WordPress chạy trên nền Docker và Caddy.

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, 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 sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


8 Comments

  1. Biết đến trang này khi mày mò tự học làm web server.
    Đang muốn làm 1 host web bằng vps free của oracle nhưng còn khá mơ hồ, chưa tìm ra hướng dẫn cho newbie.
    Cảm ơn anh đã có những bài viết hướng dẫn, chúc anh khỏe ra thêm nhiều bài mới

  2. Thực sự bị kẹt ở lệnh nano khi trên Windows không hiểu lệnh này. Các bài viết của bạn đều không có một chỉ dẫn làm sao để Windows chạy được lệnh nano. Tôi buộc phải mò vào thư mục rồi tự tạo 1 file dummy “compose.yml”.