v3.5.0 8345e76

backup.md RawHistoryFolder

Backup Command

Manage app database backups and app volume backups.

Backups are identified by app, service, and the declared resource. Domains are routing addresses and are never a backup identity.

Declaring backup targets

A service declares its databases and volumes in the app manifest, and lists which of them are backed up:

[services.api]
image = "registry.example.com/shop/api:1.4.2"

[[services.api.database]]
name = "orders"
type = "postgres"
schedule = "daily"

[[services.api.volume]]
name = "data"
path = "/var/lib/data"

[services.api.backup]
postgres = ["orders"]
volume = ["data"]

A declared database or volume that the service's backup declaration does not reference is not a backup target.

Administrative bind mounts are never backup targets. [services.<name>.backup] accepts only declared databases and volumes, and Gordon never archives an operator-owned host path exposed through a bind.

gordon backups

Database backups are logical PostgreSQL backups made with pg_dump.

gordon backups <subcommand>

Subcommands:

  • list [app] - List stored backups, for every app or one app
  • run <app> --service <service> --database <database> - Run one declared database backup now
  • status - Show stored backups plus declared targets that have no completed backup yet

gordon backups volume

Volume backups are best-effort filesystem archives of the app's declared volumes, uploaded to S3.

gordon backups volume <subcommand>

Subcommands:

  • list [app] - List completed volume backup archives
  • run <app> --service <service> --volume <volume> - Run one declared volume backup now
  • status - Show completed archives plus current/recent in-memory job state

Volume archives are not application-consistent unless the application is quiesced or stopped.

Selectors

--service and the resource flag (--database, --volume) select the target:

  • both given: the target must exist, otherwise the command reports not found;
  • one omitted: it is only allowed when exactly one compatible target remains;
  • several candidates: the command reports the ambiguity and lists the safe service/resource names.

Nothing is ever chosen by guessing.

Examples

# Database backups
gordon backups list
gordon backups list shop
gordon backups run shop --service api --database orders
gordon backups status

# Volume backups
gordon backups volume list
gordon backups volume list shop
gordon backups volume run shop --service api --volume data
gordon backups volume status

Scheduling

Backups run on the installation schedule (backups.databases.schedule and backups.volumes.schedule, each with an optional time in server local time; see Backups). The database schedule runs every declared database whose own schedule matches the firing tier. Volume declarations carry no schedule of their own: every declared volume target runs, up to max_concurrency at once. Retention is applied per app after the run.

JSON Output

Every list, run, and status command supports --json.

gordon backups volume list --json

Required Permissions

  • Read operations (list, status) require admin:status:read.
  • run requires admin:config:write.
source
1# Backup Command
2
3Manage app database backups and app volume backups.
4
5Backups are identified by app, service, and the declared resource. Domains are
6routing addresses and are never a backup identity.
7
8## Declaring backup targets
9
10A service declares its databases and volumes in the app manifest, and lists
11which of them are backed up:
12
13```toml
14[services.api]
15image = "registry.example.com/shop/api:1.4.2"
16
17[[services.api.database]]
18name = "orders"
19type = "postgres"
20schedule = "daily"
21
22[[services.api.volume]]
23name = "data"
24path = "/var/lib/data"
25
26[services.api.backup]
27postgres = ["orders"]
28volume = ["data"]
29```
30
31A declared database or volume that the service's backup declaration does not
32reference is not a backup target.
33
34Administrative bind mounts are never backup targets. `[services.<name>.backup]` accepts
35only declared databases and volumes, and Gordon never archives an
36operator-owned host path exposed through a bind.
37
38## gordon backups
39
40Database backups are logical PostgreSQL backups made with `pg_dump`.
41
42```bash
43gordon backups <subcommand>
44```
45
46Subcommands:
47
48- `list [app]` - List stored backups, for every app or one app
49- `run <app> --service <service> --database <database>` - Run one declared
50  database backup now
51- `status` - Show stored backups plus declared targets that have no completed
52  backup yet
53
54## gordon backups volume
55
56Volume backups are best-effort filesystem archives of the app's declared
57volumes, uploaded to S3.
58
59```bash
60gordon backups volume <subcommand>
61```
62
63Subcommands:
64
65- `list [app]` - List completed volume backup archives
66- `run <app> --service <service> --volume <volume>` - Run one declared volume
67  backup now
68- `status` - Show completed archives plus current/recent in-memory job state
69
70Volume archives are not application-consistent unless the application is
71quiesced or stopped.
72
73## Selectors
74
75`--service` and the resource flag (`--database`, `--volume`) select the target:
76
77- both given: the target must exist, otherwise the command reports not found;
78- one omitted: it is only allowed when exactly one compatible target remains;
79- several candidates: the command reports the ambiguity and lists the safe
80  `service/resource` names.
81
82Nothing is ever chosen by guessing.
83
84## Examples
85
86```bash
87# Database backups
88gordon backups list
89gordon backups list shop
90gordon backups run shop --service api --database orders
91gordon backups status
92
93# Volume backups
94gordon backups volume list
95gordon backups volume list shop
96gordon backups volume run shop --service api --volume data
97gordon backups volume status
98```
99
100## Scheduling
101
102Backups run on the installation schedule (`backups.databases.schedule` and
103`backups.volumes.schedule`, each with an optional `time` in server local time;
104see [Backups](../config/backups.md#schedule)). The database schedule runs every
105declared database whose own `schedule` matches the firing tier. Volume
106declarations carry no schedule of their own: every declared volume target runs,
107up to `max_concurrency` at once. Retention is applied per app after the run.
108
109## JSON Output
110
111Every list, run, and status command supports `--json`.
112
113```bash
114gordon backups volume list --json
115```
116
117## Required Permissions
118
119- Read operations (`list`, `status`) require `admin:status:read`.
120- `run` requires `admin:config:write`.
121
122## Related
123
124- [CLI Commands](./index.md)
125- [Backups Configuration](../config/backups.md)
126- [Apps Configuration](../config/apps.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