v2.2.4 af396ea

external-routes.md RawHistoryFolder

External Routes Configuration

External routes allow proxying to non-containerized services running on the host or network.

Configuration

[external_routes]
"service.mydomain.com" = "localhost:5000"
"cache.mydomain.com" = "192.168.1.100:6379"

Syntax

[external_routes]
"<domain>" = "<host>:<port>"
Component Description
domain Fully qualified domain name
host Target hostname or IP address
port Target port number

Use Cases

Docker Registry

Proxy to a Docker registry running outside of Gordon:

[external_routes]
"registry.mydomain.com" = "localhost:5000"

Database Admin Tools

Proxy to database admin interfaces:

[external_routes]
"pgadmin.mydomain.com" = "localhost:5050"
"redis-commander.mydomain.com" = "localhost:8081"

Legacy Services

Proxy to services that can't be containerized:

[external_routes]
"legacy-api.mydomain.com" = "192.168.1.50:8080"

How It Works

  1. Request arrives for service.mydomain.com
  2. Gordon checks if domain matches an external route
  3. If matched, proxies directly to the configured host:port
  4. No container lookup is performed
Client ─> Gordon Proxy ─> External Service
          (port 80)       (configured host:port)

Limitations

  • HTTP only (no HTTPS upstream)
  • No health checks
  • No load balancing

Hot Reload

External routes reload automatically when the config file changes:

# Edit config
vim ~/.config/gordon/gordon.toml

# Add external route
[external_routes]
"newservice.mydomain.com" = "localhost:9000"

# Save - Gordon reloads automatically
source
1# External Routes Configuration
2
3External routes allow proxying to non-containerized services running on the host or network.
4
5## Configuration
6
7```toml
8[external_routes]
9"service.mydomain.com" = "localhost:5000"
10"cache.mydomain.com" = "192.168.1.100:6379"
11```
12
13## Syntax
14
15```toml
16[external_routes]
17"<domain>" = "<host>:<port>"
18```
19
20| Component | Description |
21|-----------|-------------|
22| `domain` | Fully qualified domain name |
23| `host` | Target hostname or IP address |
24| `port` | Target port number |
25
26## Use Cases
27
28### Docker Registry
29
30Proxy to a Docker registry running outside of Gordon:
31
32```toml
33[external_routes]
34"registry.mydomain.com" = "localhost:5000"
35```
36
37### Database Admin Tools
38
39Proxy to database admin interfaces:
40
41```toml
42[external_routes]
43"pgadmin.mydomain.com" = "localhost:5050"
44"redis-commander.mydomain.com" = "localhost:8081"
45```
46
47### Legacy Services
48
49Proxy to services that can't be containerized:
50
51```toml
52[external_routes]
53"legacy-api.mydomain.com" = "192.168.1.50:8080"
54```
55
56## How It Works
57
581. Request arrives for `service.mydomain.com`
592. Gordon checks if domain matches an external route
603. If matched, proxies directly to the configured `host:port`
614. No container lookup is performed
62
63```
64Client ─> Gordon Proxy ─> External Service
65          (port 80)       (configured host:port)
66```
67
68## Limitations
69
70- HTTP only (no HTTPS upstream)
71- No health checks
72- No load balancing
73
74## Hot Reload
75
76External routes reload automatically when the config file changes:
77
78```bash
79# Edit config
80vim ~/.config/gordon/gordon.toml
81
82# Add external route
83[external_routes]
84"newservice.mydomain.com" = "localhost:9000"
85
86# Save - Gordon reloads automatically
87```
88
89## Related
90
91- [Routes Configuration](./routes.md)
92- [Configuration Overview](./index.md)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close