Easy to use reverse proxy with docker integration
Find a file
Peter Olds 7fedd5729e feat: Add optional StartEndpoint support for idle watcher
Optionally allow a user to specify a “warm-up” endpoint to start the container, returning a 403 if the endpoint isn’t hit and the container has been stopped.

This can help prevent bots from starting random containers, or allow health check systems to run some probes.
2025-01-08 11:01:10 +08:00
.github/workflows improved idlewatcher and content type matching, update CI 2024-10-07 17:41:08 +08:00
.trunk naive implementation of caddy like route rules, dependencies upgrade 2025-01-08 07:18:09 +08:00
.vscode fix schemas 2025-01-05 15:03:03 +08:00
cmd simplify task package implementation 2025-01-01 06:07:32 +08:00
examples n8n compose example 2024-12-11 07:21:04 +08:00
internal feat: Add optional StartEndpoint support for idle watcher 2025-01-08 11:01:10 +08:00
pkg added package version api, dependencies upgrade 2024-10-06 09:23:41 +08:00
schema schema update and api /v1/schema 2025-01-06 00:49:29 +08:00
screenshots fixed idlewatcher panics and incorrect behavior, update screenshot 2024-10-06 16:17:52 +08:00
scripts update build files and dependencies 2025-01-05 03:16:59 +08:00
.env.example initial prometheus metrics support, simplfied some code 2024-11-06 12:24:12 +08:00
.gitignore added example error pages, removed compose examples 2024-11-03 09:56:47 +08:00
.gitlab-ci.yml added package version api, dependencies upgrade 2024-10-06 09:23:41 +08:00
.gitmodules refactor file names, readme updates, removed frontend submodule as it is being built independently 2024-09-25 11:22:25 +08:00
.golangci.yml refactor and typo fixes 2024-11-02 03:14:47 +08:00
compose.example.yml README and example re-formatting 2024-12-03 11:51:13 +08:00
config.example.yml update config example 2025-01-06 04:04:05 +08:00
Dockerfile schema update and api /v1/schema 2025-01-06 00:49:29 +08:00
go.mod naive implementation of caddy like route rules, dependencies upgrade 2025-01-08 07:18:09 +08:00
go.sum naive implementation of caddy like route rules, dependencies upgrade 2025-01-08 07:18:09 +08:00
LICENSE added license 2024-04-01 04:08:48 +00:00
Makefile docs and makefile changes 2025-01-05 03:58:56 +08:00
providers.example.yml readme updates, docs moved to wiki 2024-10-04 11:27:11 +08:00
README.md docs and makefile changes 2025-01-05 03:58:56 +08:00
README_CHT.md docs and makefile changes 2025-01-05 03:58:56 +08:00

GoDoxy

Quality Gate Status Lines of Code Security Rating Maintainability Rating Vulnerabilities

繁體中文文檔請看此

A lightweight, easy-to-use, and performant reverse proxy with a Web UI and dashboard.

Screenshot

Join our Discord for help and discussions

Table of content

Key Features

  • Easy to use
    • Effortless configuration
    • Simple multi-node setup
    • Error messages is clear and detailed, easy troubleshooting
  • Auto SSL cert management (See Supported DNS-01 Challenge Providers)
  • Auto configuration for docker containers
  • Auto hot-reload on container state / config file changes
  • idlesleeper: stop containers on idle, wake it up on traffic (optional, see screenshots)
  • HTTP(s) reserve proxy
  • HTTP middleware support
  • Custom error pages support
  • TCP and UDP port forwarding
  • Web UI with App dashboard and config editor
  • Supports linux/amd64, linux/arm64
  • Written in Go

🔼Back to top

Getting Started

For full documentation, See Wiki

Prerequisites

Setup DNS Records point to machine which runs GoDoxy, e.g.

  • A Record: *.y.z -> 10.0.10.1
  • AAAA Record: *.y.z -> ::ffff:a00:a01

Setup

  1. Pull the latest docker images

    docker pull ghcr.io/yusing/go-proxy:latest
    
  2. Create new directory, cd into it, then run setup, or set up manually

    docker run --rm -v .:/setup ghcr.io/yusing/go-proxy /app/godoxy setup
    
  3. (Optional) setup WebUI login

    • set random JWT secret

      sed -i "s|API_JWT_SECRET=.*|API_JWT_SECRET=$(openssl rand -base64 32)|g" .env
      
    • change username and password for WebUI authentication

      sed -i "s|API_USERNAME=.*|API_USERNAME=admin|g" .env
      sed -i "s|API_PASSWORD=.*|API_PASSWORD=some-strong-password|g" .env
      
  4. (Optional) setup docker-socket-proxy other docker nodes (see Multi docker nodes setup) then add them inside config.yml

  5. Start the container docker compose up -d

  6. You may now do some extra configuration

    • With text editor (e.g. Visual Studio Code)
    • With Web UI via https://gp.y.z

🔼Back to top

Manual Setup

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

    mkdir -p config && wget https://raw.githubusercontent.com/yusing/go-proxy/v0.8/config.example.yml -O config/config.yml

  2. Grab .env.example into .env

    wget https://raw.githubusercontent.com/yusing/go-proxy/v0.8/.env.example -O .env

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

    wget https://raw.githubusercontent.com/yusing/go-proxy/v0.8/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
└── .env

Use JSON Schema in VSCode

Copy .vscode/settings.example.json to .vscode/settings.json and modify it to fit your needs

🔼Back to top

Screenshots

idlesleeper

idlesleeper

🔼Back to top

Build it yourself

  1. Clone the repository git clone https://github.com/yusing/go-proxy --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

🔼Back to top