2.0.0 4803e67

production.toml RawHistoryFolder

1# Gordon v2 - Production Configuration Example
2# Optimized for production environments with multiple services
3
4[server]
5port = 8080
6registry_port = 5000
7registry_domain = "registry.company.com"
8runtime = "auto"  # auto-detects Docker/Podman
9# socket_path = ""  # optional: override with custom socket path
10ssl_email = "devops@company.com"
11data_dir = "/var/lib/gordon"
12
13[registry_auth]
14enabled = true
15username = "deploy-bot"
16password = "CHANGE-THIS-IN-PRODUCTION"  # Use environment variables in production!
17
18# Production logging configuration
19[logging]
20enabled = true                    # Enable comprehensive logging
21level = "info"                    # Standard production logging level
22dir = "/var/log/gordon"           # System log directory
23main_log_file = "gordon.log"      # Main application logs
24proxy_log_file = "proxy.log"      # HTTP proxy traffic logs
25container_log_dir = "containers"  # Container logs subdirectory
26
27# Production log rotation settings
28max_size = 100                    # Max 100MB per log file
29max_backups = 10                  # Keep 10 old files for history
30max_age = 90                      # Keep logs for 3 months
31compress = true                   # Compress old logs to save space
32
33# Environment variables configuration
34[env]
35# Directory where .env files are stored for each route
36dir = "/var/lib/gordon/env"
37# Secret providers for secure credential management
38providers = ["pass", "sops"]
39
40# Production service routes
41[routes]
42"app.company.com" = "company-app:v2.1.0"           # Main app with pinned version
43"api.company.com" = "company-api:v1.5.2"           # API service
44"admin.company.com" = "admin-panel:v1.0.1"         # Admin interface
45"docs.company.com" = "company-docs:latest"         # Documentation site
46"status.company.com" = "status-page:v0.3.0"        # Status page
47
48# Monitoring and internal tools  
49"grafana.company.com" = "grafana/grafana:latest"   # Metrics dashboard
50"prometheus.company.com" = "prom/prometheus:latest" # Metrics collection
51
52# Network isolation for production security
53[network_isolation]
54enabled = true                    # Enable per-app network isolation
55network_prefix = "prod"           # Production network prefix
56dns_suffix = ".internal"          # Internal DNS suffix
57
58# Network groups for microservices that need to communicate
59[network_groups]
60"backend" = ["app.company.com", "api.company.com"]        # App and API share services
61"monitoring" = ["grafana.company.com", "prometheus.company.com"]  # Monitoring stack
62
63# Service attachments with isolated networks
64[attachments]
65# Shared backend services
66"backend" = ["company-redis:latest", "company-rabbitmq:latest"]
67# Individual databases for isolation
68"app.company.com" = ["company-postgres:latest"]
69"api.company.com" = ["company-postgres:latest"] 
70"admin.company.com" = ["company-mysql:latest"]
71# Monitoring services get their own network
72"monitoring" = ["company-prometheus-data:latest"]
73
74# Environment Variables Usage:
75# 
76# For each route, create a .env file named after the domain:
77# /var/lib/gordon/env/app_company_com.env
78# /var/lib/gordon/env/api_company_com.env
79# 
80# Example env file content:
81# NODE_ENV=production
82# DATABASE_URL=postgresql://user:pass@db:5432/prod
83# API_KEY=${pass:company/api-key}              # From pass
84# SECRET_KEY=${sops:secrets.yaml:app.secret}   # From sops
85# 
86# Secret syntax:
87# ${pass:path/to/secret}        - Unix password manager
88# ${sops:file.yaml:key.path}    - SOPS encrypted file
89
90# Production deployment workflow:
91# 1. Build and tag: docker build -t company-app:v2.1.1 .
92# 2. Tag for registry: docker tag company-app:v2.1.1 registry.company.com/company-app:v2.1.1  
93# 3. Update this config: "app.company.com" = "company-app:v2.1.1"
94# 4. Create/update env file: /var/lib/gordon/env/app_company_com.env
95# 5. Restart Gordon to reload config
96# 6. Push to deploy: docker push registry.company.com/company-app:v2.1.1
97# 7. Gordon automatically deploys to app.company.com with environment variables!
98#
99# NETWORK ISOLATION IN PRODUCTION:
100# - Each app gets its own isolated network (prod-app-company-com, prod-admin-company-com)
101# - Network groups allow controlled sharing (prod-backend, prod-monitoring)
102# - Services communicate via simple DNS names (redis:6379, postgres:5432)
103# - Complete isolation between tenant/service boundaries
104#
105# Example service Dockerfiles for persistent storage:
106#
107# company-postgres/Dockerfile:
108#   FROM postgres:15
109#   VOLUME ["/var/lib/postgresql/data"]
110#   ENV POSTGRES_DB=production
111#   ENV POSTGRES_USER=app
112#   ENV POSTGRES_PASSWORD=supersecret
113#
114# company-redis/Dockerfile:
115#   FROM redis:7-alpine  
116#   VOLUME ["/data"]
117#   CMD ["redis-server", "--appendonly", "yes"]

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