Releases: yusing/godoxy
v0.9.8
What's changed
- bug: Fix CloudflareRealIP not resolving correct remote IP
- change: CloudflareRealIP middleware will now skip all local IPs when resolving
- docker: GitHub Workflow update, image name change to
ghcr.io/yusing/godoxy
with taglatest
for stable build andnightly
fornightly build
(while old one still works)
Full Changelog: 0.9.7...v0.9.8
v0.9.7
v0.9.6
v0.9.5
v0.9.4-1
What's Changed
- Support file server route, see Wiki - Key File Server Properties
- Routes will now fail when route idle watcher / health monitor fail to start
- Rename
bypass
inrule.do
topass
, butbypass
with still work
Fixes
- bug: Prometheus metrics not working properly with load-balanced routes
- bug: extra output about loading icon cache on command like
ls-config
- webui: fix long line in Logs page messing up the page
- webui: now WebUI works with custom
GODOXY_API_ADDR
. Thanks @Brandawg93, yusing/godoxy-frontend#6 - code: cleanup route related code
- bug: fix startup panic when no notification provider is set in v0.9.4-1
Full Changelog: 0.9.3...0.9.4-1
WebUI Changelog
v0.9.3
What's changed
- Fixed incorrect behavior when using YAML list string with only one element, e.g.
was parsed into
proxy.foo.middlewares.cidr_whitelist.allow: | - 1.2.3.4
- 1.2.3.4
, now it correctly parses to1.2.3.4
- Updated rules to allow checking if field exists, e.g.
proxy.foo.rules: | name: on search params exists on: query searchParams | query searchparams
v0.9.2
What's new in v0.9.2
This release is mainly about bug and error message fixes.
Fixed
- bug: servers not being restarted after config reload, introduced since 98443be
- webui: saving file successfully in config editor will now show a toast
- example: simplified and adjusted example config and docker compose
- formatting: fix incorrect bullet dot "• " being shown on single line error
- formatting: make the error message much clear when config reload failed
v0.9.1
What's Changed
- Support Ntfy notification in #57
- Moved Prometheus metrics server inside API server under
/v1/metrics
, instead of using a seperate portGODOXY_PROMETHEUS_ADDR
removedGODOXY_PROMETHEUS_ENABLED
added, defaulttrue
- Updated Prometheus and Notifications Wiki Page
- Added timeout per notification to prevent stuck
- Notification fields is now properly sorted, e.g (Old vs New).
Bug Fixes
- WebUI no longer create / show empty category group
- WebUI should now show "No result" when no icon found for keyword, instead of "e is null"
Full Changelog: 0.9...0.9.1
v0.9
GoDoxy v0.9.0 changes
What's New
-
Brand new rewritten WebUI
-
Support selfh.st icons:
@selfhst/<reference>.<format>
(e.g.@selfhst/adguard-home.webp
)- also uses the display name on https://selfh.st/icons/ as default for our dashboard!
-
GoDoxy server side favicon retreiving and caching
- deliver smooth dashboard experience by caching favicons
- correct icon can show without setting
homepage.icon
by parsing it from app's root path "/", selectinglink[rel=icon]
from HTML as default icon
-
Thanks polds
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. Or potentially lock the start endpoints behind a different authentication mechanism, etc.
Sample service showing this:
hello-world: image: nginxdemos/hello container_name: hello-world restart: "no" ports: - "9100:80" labels: proxy.aliases: hello-world proxy.#1.port: 9100 proxy.idle_timeout: 45s proxy.wake_timeout: 30s proxy.stop_method: stop proxy.stop_timeout: 10s proxy.stop_signal: SIGTERM proxy.start_endpoint: "/start"
Hitting
/
on this service when the container is down:$ curl -sv -X GET -H "Host: hello-world.godoxy.local" http://localhost/ * Host localhost:80 was resolved. * IPv6: ::1 * IPv4: 127.0.0.1 * Trying [::1]:80... * Connected to localhost (::1) port 80 > GET / HTTP/1.1 > Host: hello-world.godoxy.local > User-Agent: curl/8.7.1 > Accept: */* > * Request completely sent off < HTTP/1.1 403 Forbidden < Content-Type: text/plain; charset=utf-8 < X-Content-Type-Options: nosniff < Date: Wed, 08 Jan 2025 02:04:51 GMT < Content-Length: 71 < Forbidden: Container can only be started via configured start endpoint * Connection #0 to host localhost left intact
Hitting
/start
when the container is down:curl -sv -X GET -H "Host: hello-world.godoxy.local" -H "X-Goproxy-Check-Redirect: skip" http://localhost/start * Host localhost:80 was resolved. * IPv6: ::1 * IPv4: 127.0.0.1 * Trying [::1]:80... * Connected to localhost (::1) port 80 > GET /start HTTP/1.1 > Host: hello-world.godoxy.local > User-Agent: curl/8.7.1 > Accept: */* > X-Goproxy-Check-Redirect: skip > * Request completely sent off < HTTP/1.1 200 OK < Date: Wed, 08 Jan 2025 02:13:39 GMT < Content-Length: 0 < * Connection #0 to host localhost left intact
-
Thanks polds
Support WebUI authentication via OIDC by setting these environment variables:GODOXY_OIDC_ISSUER_URL
e.g.:- Pocket ID:
https://pocker-id.yourdomain.com
- Authentik:
https://authentik.yourdomain.com/application/o/<application_slug>/
The ending slash is required
- Pocket ID:
GODOXY_OIDC_LOGOUT_URL
(if your issuer supports it, e.g.)- Authentik:
https://authentik.yourdomain.com/application/o/<application_slug>/end-session
- Authentik:
GODOXY_OIDC_CLIENT_ID
GODOXY_OIDC_CLIENT_SECRET
GODOXY_OIDC_REDIRECT_URL
GODOXY_OIDC_SCOPES
(optional)GODOXY_OIDC_ALLOWED_USERS
GODOXY_OIDC_ALLOWED_GROUPS
(optional)
-
Use OpenID Connect to authenticate GoDoxy's WebUI and all your services (SSO)
# default labels: proxy.app.middlewares.oidc: # with overridden allowed users labels: proxy.app.middlewares.oidc.allowed_users: user1, user2 # with overridden allowed groups labels: proxy.app.middlewares.oidc.allowed_groups: group1, group2 # with both overridden (can use inline YAML string for less typing) labels: proxy.app.middlewares.oidc: | allowed_users: [user1, user2] allowed_groups: [group1, group2]
-
Caddyfile like rules (experimental)
proxy.goaccess.rules: | - name: default do: | rewrite / /index.html serve /var/www/goaccess - name: ws on: | header Connection Upgrade header Upgrade websocket do: bypass # do nothing, pass to reverse proxy proxy.app.rules: | - name: default do: bypass # do nothing, pass to reverse proxy - name: block POST and PUT on: method POST | method PUT do: error 403 Forbidden
Behavior changes
-
config reload will now cause a server full restart (i.e. proxy, api, prometheus, etc), eliminating some incorrect behaviors
-
drop support of multiline string list without hyphen
-
prefix, e.g.# old proxy.app.middlewares.request.hide_headers: | X-Header1 X-Header2 # new proxy.app.middlewares.request.hide_headers: | - X-Header1 - X-Header2
-
autocert now supports hot-reload
-
middleware compose now supports cross-referencing, e.g.
foo: - use: RedirectHTTP bar: # in the same file or different file - use: foo@file
-
changed default
ResponseHeaderTimeout
to60s
-
allow customizing
ResponseHeaderTimeout
for each app, e.g.proxy.<app>.response_header_timeout: 3m
Bug fixes
- cert renewal failure no longer causes renew schdueler to stuck forever
- access log writes to closed file after config reload
What's Changed
- feat: Add optional StartEndpoint support for idle watcher by @polds in #34
- feat: Add optional OIDC support by @yusing in #39
- fix: allow oauth_state token to be cross-domain by @polds in #40
- Feat/auto schemas by @yusing in #48
- Feat/OIDC middleware by @yusing in #50
- feat: add a
add_prefix
middleware by @polds in #51
Full Changelog: 0.8.1...0.9
v0.8.1
GoDoxy v0.8.1
Changes
-
breaking API update, please update
GoDoxy
together with WebUI -
WebUI Config Editor update
-
healtcheck: notification no longer includes
latency
field in "Service went down" message -
json schema updates
-
request
andresponse
middleware no longer canonicalize header key (i.e.X-Real-IP
->X-Real-Ip
) -
removed
ratelimter
middleware on api, one should set it ongodoxy-frontend
's docker labels
Fixes
- bug: udp stream not stopping on error
- panic: route without content in "include files" causes crash
- panic: edge case that RefCounter closes it channel twice