v2.6.0 fe25b4f

reference.md RawHistoryFolder

Configuration Reference

Complete configuration reference with all options and their default values.

Full Configuration Example

# =============================================================================
# SERVER
# =============================================================================
[server]
port = 80                                    # HTTP proxy port
registry_port = 5000                         # Container registry port
gordon_domain = ""                           # Required: Gordon domain (registry + API)
data_dir = "~/.gordon"                       # Data directory (varies by install type)

# =============================================================================
# AUTHENTICATION (required - Gordon won't start without credentials configured)
# =============================================================================
[auth]
enabled = true                               # Enable registry authentication (default: true)
type = "password"                            # "password" or "token"
secrets_backend = "unsafe"                   # "pass", "sops", or "unsafe"
username = ""                                # Username for password auth
password_hash = ""                           # Path in secrets backend to bcrypt hash (REQUIRED for password type)
token_secret = ""                            # Path in secrets backend to JWT signing key (REQUIRED for token type)
token_expiry = "720h"                        # Token expiry duration (720h = 30 days)

# =============================================================================
# LOGGING
# =============================================================================
[logging]
level = "info"                               # "debug", "info", "warn", "error"
format = "console"                           # "console" or "json"

[logging.file]
enabled = false                              # Enable file logging
path = ""                                    # Log file path (default: {data_dir}/logs/gordon.log)
max_size = 100                               # Max size in MB before rotation
max_backups = 3                              # Number of old files to keep
max_age = 28                                 # Days to keep old files

[logging.container_logs]
enabled = true                               # Enable container log collection
dir = ""                                     # Log directory (default: {data_dir}/container-logs)
max_size = 100                               # Max size in MB before rotation
max_backups = 3                              # Number of old files to keep
max_age = 28                                 # Days to keep old files

# =============================================================================
# ENVIRONMENT
# =============================================================================
[env]
dir = ""                                     # Env files directory (default: {data_dir}/env)

# =============================================================================
# DEPLOYMENT
# =============================================================================
[deploy]
pull_policy = "if-tag-changed"               # "always", "if-tag-changed", "never"

# =============================================================================
# AUTO-ROUTE
# =============================================================================
[auto_route]
enabled = false                              # Create routes from image labels automatically

# =============================================================================
# NETWORK ISOLATION
# =============================================================================
[network_isolation]
enabled = false                              # Enable per-app Docker networks
network_prefix = "gordon"                    # Prefix for created networks
dns_suffix = ".internal"                     # DNS suffix for internal resolution

# =============================================================================
# VOLUMES
# =============================================================================
[volumes]
auto_create = true                           # Auto-create volumes from Dockerfile VOLUME
prefix = "gordon"                            # Volume name prefix
preserve = true                              # Keep volumes when containers are removed

# =============================================================================
# ROUTES
# =============================================================================
[routes]
# "domain.com" = "image:tag"
# "http://insecure.domain.com" = "image:tag"   # HTTP-only (no HTTPS redirect)

# =============================================================================
# EXTERNAL ROUTES
# =============================================================================
[external_routes]
# "domain.com" = "host:port"                 # Proxy to non-container services

# =============================================================================
# NETWORK GROUPS
# =============================================================================
[network_groups]
# "group-name" = ["domain1.com", "domain2.com"]

# =============================================================================
# ATTACHMENTS
# =============================================================================
[attachments]
# "domain-or-group" = ["image1:tag", "image2:tag"]

Default Values Summary

Setting Default Description
server.port 80 HTTP proxy port
server.registry_port 5000 Container registry port
server.gordon_domain "" Required - Gordon domain
server.data_dir ~/.gordon Data directory
auth.enabled true Enable authentication
auth.type "password" Auth type
auth.secrets_backend "unsafe" Secrets storage
auth.token_expiry "720h" 30 days
logging.level "info" Log level
logging.format "console" Log format
logging.file.enabled false File logging disabled
logging.file.max_size 100 100 MB
logging.file.max_backups 3 Keep 3 old files
logging.file.max_age 28 28 days
logging.container_logs.enabled true Container logs enabled
logging.container_logs.max_size 100 100 MB
logging.container_logs.max_backups 3 Keep 3 old files
logging.container_logs.max_age 28 28 days
deploy.pull_policy "if-tag-changed" Pull on tag change
auto_route.enabled false Auto-route disabled
network_isolation.enabled false Isolation disabled
network_isolation.network_prefix "gordon" Network prefix
network_isolation.dns_suffix ".internal" DNS suffix
volumes.auto_create true Auto-create volumes
volumes.prefix "gordon" Volume prefix
volumes.preserve true Keep volumes

Environment Variables

All configuration options can be set via environment variables using the pattern:

GORDON_<SECTION>_<KEY>=value

Examples:

GORDON_SERVER_PORT=8080
GORDON_SERVER_GORDON_DOMAIN=gordon.example.com
GORDON_AUTH_ENABLED=true
GORDON_AUTH_TYPE=token
GORDON_LOGGING_LEVEL=debug
GORDON_NETWORK_ISOLATION_ENABLED=true

Nested keys use underscores:

GORDON_LOGGING_FILE_ENABLED=true
GORDON_LOGGING_FILE_MAX_SIZE=200
GORDON_LOGGING_CONTAINER_LOGS_ENABLED=false

Pull Policy Options

Value Behavior
"always" Always pull image before deploying
"if-tag-changed" Pull only if image tag differs from running container
"never" Never pull, use local image only

Auth Type Options

Value Description
"password" HTTP Basic authentication with username/password
"token" JWT token authentication

Secrets Backend Options

Value Description
"pass" Unix password manager (recommended for production)
"sops" Mozilla SOPS encrypted files
"unsafe" Plain text files (development only)

Log Level Options

Value Description
"debug" Verbose debugging information
"info" General operational information
"warn" Warning conditions
"error" Error conditions only
source
1# Configuration Reference
2
3Complete configuration reference with all options and their default values.
4
5## Full Configuration Example
6
7```toml
8# =============================================================================
9# SERVER
10# =============================================================================
11[server]
12port = 80                                    # HTTP proxy port
13registry_port = 5000                         # Container registry port
14gordon_domain = ""                           # Required: Gordon domain (registry + API)
15data_dir = "~/.gordon"                       # Data directory (varies by install type)
16
17# =============================================================================
18# AUTHENTICATION (required - Gordon won't start without credentials configured)
19# =============================================================================
20[auth]
21enabled = true                               # Enable registry authentication (default: true)
22type = "password"                            # "password" or "token"
23secrets_backend = "unsafe"                   # "pass", "sops", or "unsafe"
24username = ""                                # Username for password auth
25password_hash = ""                           # Path in secrets backend to bcrypt hash (REQUIRED for password type)
26token_secret = ""                            # Path in secrets backend to JWT signing key (REQUIRED for token type)
27token_expiry = "720h"                        # Token expiry duration (720h = 30 days)
28
29# =============================================================================
30# LOGGING
31# =============================================================================
32[logging]
33level = "info"                               # "debug", "info", "warn", "error"
34format = "console"                           # "console" or "json"
35
36[logging.file]
37enabled = false                              # Enable file logging
38path = ""                                    # Log file path (default: {data_dir}/logs/gordon.log)
39max_size = 100                               # Max size in MB before rotation
40max_backups = 3                              # Number of old files to keep
41max_age = 28                                 # Days to keep old files
42
43[logging.container_logs]
44enabled = true                               # Enable container log collection
45dir = ""                                     # Log directory (default: {data_dir}/container-logs)
46max_size = 100                               # Max size in MB before rotation
47max_backups = 3                              # Number of old files to keep
48max_age = 28                                 # Days to keep old files
49
50# =============================================================================
51# ENVIRONMENT
52# =============================================================================
53[env]
54dir = ""                                     # Env files directory (default: {data_dir}/env)
55
56# =============================================================================
57# DEPLOYMENT
58# =============================================================================
59[deploy]
60pull_policy = "if-tag-changed"               # "always", "if-tag-changed", "never"
61
62# =============================================================================
63# AUTO-ROUTE
64# =============================================================================
65[auto_route]
66enabled = false                              # Create routes from image labels automatically
67
68# =============================================================================
69# NETWORK ISOLATION
70# =============================================================================
71[network_isolation]
72enabled = false                              # Enable per-app Docker networks
73network_prefix = "gordon"                    # Prefix for created networks
74dns_suffix = ".internal"                     # DNS suffix for internal resolution
75
76# =============================================================================
77# VOLUMES
78# =============================================================================
79[volumes]
80auto_create = true                           # Auto-create volumes from Dockerfile VOLUME
81prefix = "gordon"                            # Volume name prefix
82preserve = true                              # Keep volumes when containers are removed
83
84# =============================================================================
85# ROUTES
86# =============================================================================
87[routes]
88# "domain.com" = "image:tag"
89# "http://insecure.domain.com" = "image:tag"   # HTTP-only (no HTTPS redirect)
90
91# =============================================================================
92# EXTERNAL ROUTES
93# =============================================================================
94[external_routes]
95# "domain.com" = "host:port"                 # Proxy to non-container services
96
97# =============================================================================
98# NETWORK GROUPS
99# =============================================================================
100[network_groups]
101# "group-name" = ["domain1.com", "domain2.com"]
102
103# =============================================================================
104# ATTACHMENTS
105# =============================================================================
106[attachments]
107# "domain-or-group" = ["image1:tag", "image2:tag"]
108```
109
110## Default Values Summary
111
112| Setting | Default | Description |
113|---------|---------|-------------|
114| `server.port` | `80` | HTTP proxy port |
115| `server.registry_port` | `5000` | Container registry port |
116| `server.gordon_domain` | `""` | **Required** - Gordon domain |
117| `server.data_dir` | `~/.gordon` | Data directory |
118| `auth.enabled` | `true` | Enable authentication |
119| `auth.type` | `"password"` | Auth type |
120| `auth.secrets_backend` | `"unsafe"` | Secrets storage |
121| `auth.token_expiry` | `"720h"` | 30 days |
122| `logging.level` | `"info"` | Log level |
123| `logging.format` | `"console"` | Log format |
124| `logging.file.enabled` | `false` | File logging disabled |
125| `logging.file.max_size` | `100` | 100 MB |
126| `logging.file.max_backups` | `3` | Keep 3 old files |
127| `logging.file.max_age` | `28` | 28 days |
128| `logging.container_logs.enabled` | `true` | Container logs enabled |
129| `logging.container_logs.max_size` | `100` | 100 MB |
130| `logging.container_logs.max_backups` | `3` | Keep 3 old files |
131| `logging.container_logs.max_age` | `28` | 28 days |
132| `deploy.pull_policy` | `"if-tag-changed"` | Pull on tag change |
133| `auto_route.enabled` | `false` | Auto-route disabled |
134| `network_isolation.enabled` | `false` | Isolation disabled |
135| `network_isolation.network_prefix` | `"gordon"` | Network prefix |
136| `network_isolation.dns_suffix` | `".internal"` | DNS suffix |
137| `volumes.auto_create` | `true` | Auto-create volumes |
138| `volumes.prefix` | `"gordon"` | Volume prefix |
139| `volumes.preserve` | `true` | Keep volumes |
140
141## Environment Variables
142
143All configuration options can be set via environment variables using the pattern:
144
145```
146GORDON_<SECTION>_<KEY>=value
147```
148
149Examples:
150```bash
151GORDON_SERVER_PORT=8080
152GORDON_SERVER_GORDON_DOMAIN=gordon.example.com
153GORDON_AUTH_ENABLED=true
154GORDON_AUTH_TYPE=token
155GORDON_LOGGING_LEVEL=debug
156GORDON_NETWORK_ISOLATION_ENABLED=true
157```
158
159Nested keys use underscores:
160```bash
161GORDON_LOGGING_FILE_ENABLED=true
162GORDON_LOGGING_FILE_MAX_SIZE=200
163GORDON_LOGGING_CONTAINER_LOGS_ENABLED=false
164```
165
166## Pull Policy Options
167
168| Value | Behavior |
169|-------|----------|
170| `"always"` | Always pull image before deploying |
171| `"if-tag-changed"` | Pull only if image tag differs from running container |
172| `"never"` | Never pull, use local image only |
173
174## Auth Type Options
175
176| Value | Description |
177|-------|-------------|
178| `"password"` | HTTP Basic authentication with username/password |
179| `"token"` | JWT token authentication |
180
181## Secrets Backend Options
182
183| Value | Description |
184|-------|-------------|
185| `"pass"` | Unix password manager (recommended for production) |
186| `"sops"` | Mozilla SOPS encrypted files |
187| `"unsafe"` | Plain text files (development only) |
188
189## Log Level Options
190
191| Value | Description |
192|-------|-------------|
193| `"debug"` | Verbose debugging information |
194| `"info"` | General operational information |
195| `"warn"` | Warning conditions |
196| `"error"` | Error conditions only |
197
198## Related
199
200- [Configuration Overview](./index.md)
201- [Authentication](./auth.md)
202- [Network Isolation](./network-isolation.md)
203- [Volumes](./volumes.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