!Demo
A lightweight, simple, and performant reverse proxy with WebUI.
Website | Wiki | Discord
EN | 简体中文 | 繁體中文
Running demo
Quick start
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
[!NOTE]
GoDoxy is designed to be running in host network mode, do not change it.
> To change listening ports, modify .env.
- Prepare a new directory for Docker Compose and config files.
- Run setup script inside the directory, or set up manually
/bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/yusing/godoxy/main/scripts/setup.sh)"
- Start the docker compose service from generated
compose.yml:
docker compose up -d
- You may now do some extra configuration on WebUI
https://godoxy.yourdomain.com
Key features
- Simple setup
- Automatic routing
- Traffic management
- Access control
- Idle sleep
- Proxmox integration
- Platform support
How GoDoxy works
- List all the containers
- Read container name, labels, and port configurations for each of them
- Create a route if applicable (a route is like a "Virtual Host" in NPM)
- Watch for container / config changes and update automatically
[!NOTE]
GoDoxy uses the labelproxy.aliasesas the subdomain(s), if unset it defaults to thecontainer_namefield in docker compose.
> For example, with the labelproxy.aliases: qbtyou can access your app viaqbt.domain.com.
Screenshots
idlesleeper
Metrics and Logs
![]() |
![]() |
| Routes | Servers |
Proxmox Integration
GoDoxy can automatically discover and manage Proxmox nodes and LXC containers through configured providers.
Automatic Route Binding
Routes are automatically linked to Proxmox resources through reverse lookup:
- Node-level routes (VMID = 0): When hostname, IP, or alias matches a Proxmox node name or IP
- Container-level routes (VMID > 0): When hostname, IP, or alias matches an LXC container
routes:
pve-node-01:
host: pve-node-01.internal
port: 8006
# Automatically links to Proxmox node pve-node-01
WebUI Management
From the WebUI, you can:
- LXC Lifecycle Control: Start, stop, restart containers
- Node Logs: Stream real-time journalctl or log files output from nodes
- LXC Logs: Stream real-time journalctl or log files output from containers
Update / uninstall system agent
Installer supports both systemd and Alpine/OpenRC (rc-service) hosts.
Update:
sh -c "$(curl -fsSL https://github.com/yusing/godoxy/raw/refs/heads/main/scripts/install-agent.sh)" -- update
Uninstall:
sh -c "$(curl -fsSL https://github.com/yusing/godoxy/raw/refs/heads/main/scripts/install-agent.sh)" -- uninstall
Manual Setup
- Make
configdirectory then grabconfig.example.ymlintoconfig/config.yml
mkdir -p config && wget https://raw.githubusercontent.com/yusing/godoxy/main/config.example.yml -O config/config.yml
- Grab
.env.exampleinto.env
wget https://raw.githubusercontent.com/yusing/godoxy/main/.env.example -O .env
- Grab
compose.example.ymlintocompose.yml
wget https://raw.githubusercontent.com/yusing/godoxy/main/compose.example.yml -O compose.yml
Folder structure
├── 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 from source
- Clone the repository
git clone https://github.com/yusing/godoxy --depth=1
- Install / Upgrade go (>=1.22) and
shadowtreeif not already
- Clear cache if you have built this before (go < 1.22) with
go clean -cache
- Get dependencies with
shadowtree mod-tidy
- Build binary with
shadowtree build

