yusing 4ec352f1f6 refactor(homepage/icon): check service health before fetching icons and add retry logic
The icon fetching logic now checks if the target service is healthy before
attempting to fetch icons. If the health monitor reports an unhealthy status,
the function returns HTTP 503 Service Unavailable instead of proceeding.

Additionally, the icon cache lookup now includes infinite retry logic with a
15-second backoff interval, improving resilience during transient service
outages. Previously, failed lookups would not be retried.

The `route` interface was extended with a `HealthMonitor()` method to support
the health check functionality.
2026-01-09 21:48:35 +08:00
2024-12-11 07:21:04 +08:00
2026-01-09 10:57:24 +08:00
2025-10-09 01:14:43 +08:00
2025-10-10 20:40:33 +08:00
2026-01-09 10:57:24 +08:00
2026-01-09 10:57:24 +08:00
2025-05-01 07:29:48 +08:00

Quality Gate Status GitHub last commit Lines of Code

Demo Discord

A lightweight, simple, and performant reverse proxy with WebUI.

Website | Wiki | Discord
EN | 中文

Have questions? Ask ChatGPT! (Thanks to @ismesid)

Table of content

Running demo

https://demo.godoxy.dev

Deployed on Zeabur

Key Features

  • Simple
  • ACL: connection / request level access control
    • IP/CIDR
    • Country (Maxmind account required)
    • Timezone (Maxmind account required)
    • Access logging
    • Periodic notification of access summaries for number of allowed and blocked connections
  • Advanced Automation
    • Automatic SSL certificate management with Let's Encrypt (using DNS-01 Challenge)
    • Auto-configuration for Docker containers
    • Hot-reloading of configurations and container state changes
  • Container Runtime Support
    • Docker
    • Podman
  • Idle-sleep: stop and wake containers based on traffic (see screenshots)
    • Docker containers
    • Proxmox LXCs
  • Traffic Management
    • HTTP reserve proxy
    • TCP/UDP port forwarding
    • OpenID Connect support: SSO and secure your apps easily
    • ForwardAuth support: integrate with any auth provider (e.g. TinyAuth)
  • Customization
  • Web UI
    • App Dashboard
    • Config Editor
    • Uptime and System Metrics
    • Docker Logs Viewer
  • Cross-Platform support
    • Supports linux/amd64 and linux/arm64
  • Efficient and Performant
    • Written in Go

Prerequisites

Configure Wildcard DNS Record(s) to point to machine running GoDoxy, e.g.

  • A Record: *.domain.com -> 10.0.10.1
  • AAAA Record (if you use IPv6): *.domain.com -> ::ffff:a00:a01

Setup

Note

GoDoxy is designed to be running in host network mode, do not change it.

To change listening ports, modify .env.

  1. Prepare a new directory for docker compose and config files.

  2. Run setup script inside the directory, or set up manually

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/yusing/godoxy/main/scripts/setup.sh)"
    
  3. Start the docker compose service from generated compose.yml:

    docker compose up -d
    
  4. You may now do some extra configuration on WebUI https://godoxy.yourdomain.com

How does GoDoxy work

  1. List all the containers
  2. Read container name, labels and port configurations for each of them
  3. Create a route if applicable (a route is like a "Virtual Host" in NPM)
  4. Watch for container / config changes and update automatically

Note

GoDoxy uses the label proxy.aliases as the subdomain(s), if unset it defaults to the container_name field in docker compose.

For example, with the label proxy.aliases: qbt you can access your app via qbt.domain.com.

Update / Uninstall system agent

Update:

bash -c "$(curl -fsSL https://github.com/yusing/godoxy/raw/refs/heads/main/scripts/install-agent.sh)" -- update

Uninstall:

bash -c "$(curl -fsSL https://github.com/yusing/godoxy/raw/refs/heads/main/scripts/install-agent.sh)" -- uninstall

Screenshots

idlesleeper

idlesleeper

Metrics and Logs

Routes Servers
Routes Servers

Manual Setup

  1. Make config directory then grab config.example.yml into config/config.yml

    mkdir -p config && wget https://raw.githubusercontent.com/yusing/godoxy/main/config.example.yml -O config/config.yml

  2. Grab .env.example into .env

    wget https://raw.githubusercontent.com/yusing/godoxy/main/.env.example -O .env

  3. Grab compose.example.yml into compose.yml

    wget https://raw.githubusercontent.com/yusing/godoxy/main/compose.example.yml -O compose.yml

Folder structrue

├── certs
│   ├── cert.crt
│   └── priv.key
├── compose.yml
├── config
│   ├── config.yml
│   ├── middlewares
│   │   ├── middleware1.yml
│   │   ├── middleware2.yml
│   ├── provider1.yml
│   └── provider2.yml
├── data
│   ├── metrics # metrics data
│   │   ├── uptime.json
│   │   └── system_info.json
└── .env

Build it yourself

  1. Clone the repository git clone https://github.com/yusing/godoxy --depth=1

  2. Install / Upgrade go (>=1.22) and make if not already

  3. Clear cache if you have built this before (go < 1.22) with go clean -cache

  4. get dependencies with make get

  5. build binary with make build

Star History

Star History Chart

🔼Back to top

Description
No description provided
Readme MIT 214 MiB
Latest
2025-12-20 04:07:51 +01:00
Languages
Go 94.5%
Shell 1.5%
HTML 1.1%
TypeScript 0.9%
CSS 0.9%
Other 1.1%