SELF HOSTING

GoDoxy – Reverse proxy mã nguồn mở hiệu suất cao

GoDoxy là một công cụ reverse proxy mã nguồn mở, được viết bằng Go, được thiết kế để thay thế các giải pháp như Nginx Proxy Manager (NPM), Caddy và Traefik. Nếu bạn đang tìm kiếm một reverse proxy nhẹ, đơn giản, nhưng mạnh mẽ với giao diện web trực quan, GoDoxy chính là lựa chọn hoàn hảo cho bạn.

GoDoxy được tạo ra với mục tiêu làm cho việc quản lý traffic HTTP/HTTPS trở nên đơn giản hơn bao giờ hết, đặc biệt là khi làm việc với các container Docker. Với hơn 2.5k stars trên GitHub, GoDoxy đã được công nhận là một trong những công cụ self-hosted yêu thích năm 2024 bởi cộng đồng.

Tại sao nên chọn GoDoxy?

  • Đơn giản: Cấu hình dễ dàng thông qua WebUI hoặc labels trong Docker Compose
  • Hiệu suất cao: Viết bằng Go, tiêu tốn ít tài nguyên hệ thống
  • Tính năng phong phú: SSL tự động (Let’s Encrypt), OIDC SSO, load balancing, middleware tùy chỉnh
  • Tích hợp Docker: Tự động phát hiện container và tạo route mà không cần cấu hình thủ công
  • Idlesleeper: Tự động dừng container không sử dụng, tiết kiệm tài nguyên
  • Miễn phí hoàn toàn: Tất cả tính năng không bị hạn chế bởi paywall

Yêu cầu hệ thống

Trước khi cài đặt GoDoxy, đảm bảo máy tính của bạn đáp ứng các yêu cầu sau:

  • Docker (phiên bản 20.10 hoặc cao hơn)
  • Docker Compose (phiên bản 1.29 hoặc cao hơn)
  • Wildcard DNS Records: Cấu hình DNS wildcard để trỏ đến máy chạy GoDoxy (ví dụ: *.domain.com -> 10.0.10.1)
  • RAM tối thiểu: 512MB (khuyến nghị 1GB trở lên)
  • Ổ cứng: Tối thiểu 500MB không gian trống
  • Hệ điều hành hỗ trợ: Linux (amd64 và arm64)
  • Go 1.22+ (nếu build từ source)

Cách cài đặt GoDoxy

Hướng dẫn cài đặt qua Docker (Khuyến nghị)

Đây là cách nhanh nhất để cài đặt GoDoxy:

  1. Tạo thư mục cho GoDoxy
mkdir -p ~/godoxy
cd ~/godoxy
  1. Chạy script setup tự động
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/yusing/godoxy/main/scripts/setup.sh)"

Script này sẽ tự động tải xuống các tệp cấu hình cần thiết: docker-compose.yml, .env, và config/config.yml.

  1. Khởi động GoDoxy bằng Docker Compose
docker compose up -d
  1. Truy cập WebUI

Mở trình duyệt web và truy cập:

https://godoxy.yourdomain.com

GoDoxy sẽ tạo SSL certificate tự động (nếu DNS được cấu hình đúng) và hiển thị WebUI với dashboard trực quan.

Hướng dẫn cài đặt thủ công

Nếu muốn setup thủ công để có quyền kiểm soát tốt hơn:

  1. Tạo cấu trúc thư mục
mkdir -p ~/godoxy/config
cd ~/godoxy
  1. Tải tệp cấu hình
# Tải config.yml
wget https://raw.githubusercontent.com/yusing/godoxy/main/config.example.yml -O config/config.yml

# Tải .env
wget https://raw.githubusercontent.com/yusing/godoxy/main/.env.example -O .env

# Tải docker-compose.yml
wget https://raw.githubusercontent.com/yusing/godoxy/main/compose.example.yml -O compose.yml
  1. Chỉnh sửa .env (nếu cần)

Mở .env và cấu hình các biến môi trường:

# Cấu hình listening port
GODOXY_PORT=80
GODOXY_TLS_PORT=443

# Cấu hình domain
GODOXY_DOMAIN=yourdomain.com
  1. Khởi động Docker Compose
docker compose up -d

Hướng dẫn build từ source

Nếu bạn muốn build GoDoxy từ source code:

  1. Cài đặt Go (phiên bản 1.22+)
# Trên Ubuntu/Debian
wget https://golang.org/dl/go1.22.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
  1. Clone repository
git clone https://github.com/yusing/godoxy --depth=1
cd godoxy
  1. Chuẩn bị và build
# Xóa cache cũ (nếu có)
go clean -cache

# Tải dependencies
make get

# Build binary
make build
  1. Chạy GoDoxy
./godoxy

GoDoxy sẽ mở nghe trên port 3000 theo mặc định. Bạn có thể cấu hình port thông qua .env.

Cách sử dụng GoDoxy

Giao diện WebUI chính

Sau khi truy cập WebUI, bạn sẽ thấy các section chính:

  • Dashboard: Tổng quan về các app, health status, và metrics
  • Proxies: Quản lý các route proxy
  • Apps: Danh sách các container Docker đã được phát hiện
  • Config Editor: Chỉnh sửa config.yml trực tiếp
  • Logs: Xem Docker logs của từng container
  • System: Giám sát tài nguyên hệ thống

Cấu hình tự động Docker Container

GoDoxy tự động phát hiện các container Docker và tạo route mà không cần cấu hình thủ công. Dưới đây là ví dụ:

version: '3.8'
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "8000:8000"
      - "9000:9000"
    labels:
      # Tự động phát hiện bằng GoDoxy
      proxy.aliases: portainer
      # (Hoặc để trống để dùng container_name)

Sau khi khởi động container, bạn có thể truy cập tại: https://portainer.yourdomain.com

Cài đặt SSL Let’s Encrypt tự động

GoDoxy hỗ trợ cấp SSL certificate tự động từ Let’s Encrypt. Cấu hình trong config/config.yml:

acme:
  provider: letsencrypt # hoặc provider khác
  email: [email protected]
  challenge: dns-01 # hoặc http-01

GoDoxy sẽ tự động gia hạn certificate trước khi hết hạn.

Bảo mật với OIDC (OpenID Connect)

Bạn có thể bảo vệ các app bằng OIDC SSO. Ví dụ với Authentik hoặc Keycloak:

proxies:
  myapp:
    target: http://172.17.0.2:5000
    middlewares:
      - oidc:
          client_id: your-client-id
          client_secret: your-client-secret
          issuer: https://your-oidc-issuer

Thiết lập Idlesleeper

Tính năng idlesleeper tự động dừng container nếu không có traffic trong thời gian nhất định:

services:
  myapp:
    labels:
      proxy.idlesleep: "30m" # Dừng sau 30 phút không có traffic

Ví dụ trường hợp sử dụng

Trường hợp 1: Trang chủ tập trung

Bạn muốn tạo một homepage tập trung để quản lý tất cả các app self-hosted (Portainer, Plex, Nextcloud, v.v.):

version: '3.8'
services:
  # Homepage
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    labels:
      proxy.aliases: home
    ports:
      - "3000:3000"

  # Portainer
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    labels:
      proxy.aliases: portainer
    ports:
      - "9000:9000"

  # Nextcloud
  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    labels:
      proxy.aliases: nextcloud
    ports:
      - "8080:80"

GoDoxy sẽ tự động tạo route cho tất cả, bạn chỉ cần truy cập:

  • https://home.yourdomain.com
  • https://portainer.yourdomain.com
  • https://nextcloud.yourdomain.com

Trường hợp 2: API Gateway với Load Balancing

GoDoxy hỗ trợ load balancing giữa nhiều instance:

proxies:
  api:
    target:
      - http://api-1:3000
      - http://api-2:3000
      - http://api-3:3000
    load_balancer: round_robin # hoặc least, ip

Trường hợp 3: Bảo vệ với Cloudflare

Tích hợp Cloudflare Real IP middleware để lấy IP thực của client:

middlewares:
  - use: CloudflareRealIP

Những tính năng nổi bật

  • Multi-node Setup: Thiết lập GoDoxy trên nhiều node với GoDoxy Agents
  • Rule-Based Routing: Định tuyến dựa trên path, header, host tương tự Caddy
  • Notification System: Nhận cảnh báo qua Gotify hoặc Webhook (Discord, v.v.)
  • Prometheus Metrics: Xuất metrics cho Grafana monitoring
  • TCP/UDP Port Forwarding: Không chỉ HTTP, mà còn port forwarding
  • Custom Middlewares: Hỗ trợ middleware tùy chỉnh để sửa đổi request/response
  • Custom Error Pages: Tạo trang lỗi 404, 500 tùy chỉnh

Những lưu ý quan trọng

  • Network Mode: GoDoxy được thiết kế để chạy ở host network mode, tránh những vấn đề về connectivity
  • Wildcard DNS: Bạn phải cấu hình wildcard DNS record (*.domain.com) trước khi sử dụng
  • Tự động: GoDoxy là một reverse proxy động – tập trung vào tính năng tự động hơn là cấu hình tĩnh
  • Sao lưu trước cập nhật: Luôn sao lưu config.yml trước khi cập nhật phiên bản mới
  • Còn phát triển: GoDoxy vẫn đang được phát triển tích cực, có thể xảy ra breaking changes

FAQ (Câu hỏi thường gặp)

Q: GoDoxy có tương thích với Docker Swarm không?
A: Hiện tại, GoDoxy chủ yếu được tối ưu cho Docker daemon. Hỗ trợ Kubernetes vẫn đang được xem xét.

Q: Tôi có thể sử dụng GoDoxy với Cloudflared tunnel không?
A: Có, bạn có thể dùng Cloudflared tunnel kết hợp với GoDoxy. Tuy nhiên, bạn cần cấu hình DNS wildcard thích hợp.

Q: GoDoxy có mất dữ liệu khi cập nhật không?
A: Thường thì không, nhưng nên sao lưu config.yml trước khi cập nhật để an toàn.

Q: Idlesleeper có tác động đến downtime của app không?
A: Có, khi container bị dừng, traffic đầu tiên sẽ chờ container khởi động lại (thường 3-10 giây). Điều này là trade-off để tiết kiệm tài nguyên.

Q: GoDoxy có hỗ trợ wildcard SSL không?
A: Có, GoDoxy tự động tạo wildcard certificate từ Let’s Encrypt cho toàn bộ domain.


GoDoxy là một reverse proxy mã nguồn mở đáng chú ý cho những ai tìm kiếm giải pháp đơn giản, hiệu suất cao, và dễ sử dụng. So với Nginx Proxy Manager, Caddy hay Traefik, GoDoxy nổi bật với:

  • Tích hợp Docker tự động mà không cần cấu hình phức tạp
  • WebUI trực quan và dễ sử dụng
  • Tính năng idlesleeper tiết kiệm tài nguyên
  • Đầy đủ các tính năng bảo mật (OIDC, middleware)
  • Miễn phí hoàn toàn, không có paywall

Nếu bạn đang quản lý một homelab hoặc infrastructure tự lưu trữ, GoDoxy chắc chắn là công cụ mà bạn nên thử.

Duy Nghiện
Hãy làm khán giả, đừng làm nhân vật chính :)

You may also like

Nhận thông báo qua email
Nhận thông báo cho
guest

0 Bình luận
Mới nhất
Cũ nhất Nhiều like nhất
Phản hồi nội tuyến
Xem tất cả bình luận