1
0
Fork 0
mirror of https://github.com/yusing/godoxy.git synced 2026-04-24 19:05:49 +03:00
No description
Find a file
yusing 16e23c55ce
chore(ci): bump Docker GitHub Actions in docker-image workflow
Bump docker/metadata-action, setup-buildx-action, login-action,
and build-push-action to their latest major versions in the
reusable docker-image workflow.
2026-04-24 15:33:28 +08:00
.github chore(ci): bump Docker GitHub Actions in docker-image workflow 2026-04-24 15:33:28 +08:00
.trunk chore(trunk): add linter configs and update versions 2026-02-15 17:31:36 +08:00
.vscode chore(vscode): update YAML schema paths in settings example 2026-02-23 11:34:44 +08:00
agent chore(deps): downgrade moby client stack and refresh module pins 2026-04-24 11:31:27 +08:00
assets feat(docs): update README files to include logo and improve table of contents formatting 2025-09-09 14:40:09 +08:00
cmd feat(debug): add debug route for reverseproxy origin unreachable page 2026-04-23 17:23:39 +08:00
examples chore(example): add netbird docker compose example 2026-02-25 12:09:05 +08:00
goutils@586f5c382e chore(assets): track .min.*; drop **/*.min.* ignore 2026-04-24 15:16:26 +08:00
internal chore(assets): track .min.*; drop **/*.min.* ignore 2026-04-24 15:16:26 +08:00
pkg refactor: move version.go to goutils 2025-10-09 01:14:43 +08:00
screenshots chore: update screenshots 2026-02-16 10:48:41 +08:00
scripts fix(scripts): harden update-wiki impl doc sync and GitHub line links 2026-04-23 17:23:39 +08:00
socket-proxy fix(socketproxy): add Transfer-Encoding: chunked header 2026-04-24 11:47:36 +08:00
.dockerignore chore(docker): copy minify scripts into builder stage 2026-04-24 12:00:43 +08:00
.env.example feat(config): opt-in flag for non-loopback local API bind 2026-04-13 12:24:52 +08:00
.gitignore chore(assets): track .min.*; drop **/*.min.* ignore 2026-04-24 15:16:26 +08:00
.gitlab-ci.yml added package version api, dependencies upgrade 2024-10-06 09:23:41 +08:00
.gitmodules feat(proxmox): add go-proxmox submodule for customized Proxmox integration 2026-01-24 21:25:45 +08:00
.golangci.yml chore(lint): update golangci-lint configuration 2026-02-15 17:33:17 +08:00
AGENTS.md docs(AGENTS): reshape AGENTS.md principles and Go/testing notes 2026-04-20 16:29:32 +08:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2026-01-28 16:24:06 +08:00
compose.example.yml refactor: update webui rules and docker compose 2026-02-05 22:53:35 +08:00
config.example.yml fix(example): remove relay_proxy_protocol_header from config example 2026-04-19 15:16:02 +08:00
dev.compose.yml refactor(benchmark): replace whoami service with bench server 2026-01-03 12:40:10 +08:00
dev.Dockerfile chore: update dev environment configuration and base images 2025-10-25 23:31:53 +08:00
Dockerfile chore(docker): copy minify scripts into builder stage 2026-04-24 12:00:43 +08:00
go.mod chore(deps): downgrade moby client stack and refresh module pins 2026-04-24 11:31:27 +08:00
go.sum chore(deps): downgrade moby client stack and refresh module pins 2026-04-24 11:31:27 +08:00
Jenkinsfile ci: add Jenkinsfile for CI pipeline and configure SonarQube analysis 2025-11-13 23:39:23 +08:00
LICENSE update license 2025-05-01 07:29:48 +08:00
Makefile chore(make): align minify and update-wiki with Bun package layout 2026-04-23 17:23:39 +08:00
providers.example.yml feat(route): add support for relaying PROXY protocol header to TCP upstreams 2026-03-10 12:04:07 +08:00
README.md docs(readme): remove API endpoints section and clarify proxmox log streaming descriptions 2026-02-23 11:34:33 +08:00
README_CHT.md docs(readme): remove API endpoints section and clarify proxmox log streaming descriptions 2026-02-23 11:34:33 +08:00
rootless-compose.example.yml fix(compose): update rootless compose example 2025-10-28 17:03:20 +08:00
rootless.env.example fix(docker): correct environment variables in rootless setup 2025-09-10 10:01:05 +08:00
socket-proxy.Dockerfile chore(deps): bump Go to 1.26.2 and refresh modules 2026-04-08 14:20:52 +08:00
sonar-project.properties ci: add Jenkinsfile for CI pipeline and configure SonarQube analysis 2025-11-13 23:39:23 +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

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 LXC containers
  • Proxmox Integration
    • Automatic route binding: Routes automatically bind to Proxmox nodes or LXC containers by matching hostname, IP, or alias
    • LXC lifecycle control: Start, stop, restart containers directly from WebUI
    • Real-time logs: Stream journalctl logs from nodes and LXC containers via WebSocket
  • 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
      • Container lifecycle management (start, stop, restart)
      • Real-time container logs via WebSocket
    • Proxmox
      • LXC container lifecycle management (start, stop, restart)
      • Real-time node and LXC journalctl logs via WebSocket
  • 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.

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:

  1. Node-level routes (VMID = 0): When hostname, IP, or alias matches a Proxmox node name or IP
  2. Container-level routes (VMID > 0): When hostname, IP, or alias matches an LXC container

This enables seamless proxy configuration without manual binding:

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

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