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.
GoDoxy
A lightweight, easy-to-use, and performant reverse proxy with a Web UI and dashboard.
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
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
-
Pull the latest docker images
docker pull ghcr.io/yusing/go-proxy:latest -
Create new directory,
cdinto it, then run setup, or set up manuallydocker run --rm -v .:/setup ghcr.io/yusing/go-proxy /app/godoxy setup -
(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
-
-
(Optional) setup
docker-socket-proxyother docker nodes (see Multi docker nodes setup) then add them insideconfig.yml -
Start the container
docker compose up -d -
You may now do some extra configuration
- With text editor (e.g. Visual Studio Code)
- With Web UI via
https://gp.y.z
Manual Setup
-
Make
configdirectory then grabconfig.example.ymlintoconfig/config.ymlmkdir -p config && wget https://raw.githubusercontent.com/yusing/go-proxy/v0.8/config.example.yml -O config/config.yml -
Grab
.env.exampleinto.envwget https://raw.githubusercontent.com/yusing/go-proxy/v0.8/.env.example -O .env -
Grab
compose.example.ymlintocompose.ymlwget 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
Screenshots
idlesleeper
Build it yourself
-
Clone the repository
git clone https://github.com/yusing/go-proxy --depth=1 -
Install / Upgrade go (>=1.22) and
makeif not already -
Clear cache if you have built this before (go < 1.22) with
go clean -cache -
get dependencies with
make get -
build binary with
make build

