Tergum is simple tool provides centralized backup solution with multiple sources (databases, files, S3, ...) and multiple backup storages (S3, filesystem, ...). Tergum has native backup monitoring and alerts you when backup fails. Tergum also support backup encryption, compression and automatic recovery testing.
Tergum is under active development, not all features are already implemented. Check current project state
Let's discuss Tergum in your project in 30 min call
Tergum means backup in latin.
Tergum Cloud allow you to manage your backup using UI & Terraform and store your backups securely in our AWS.
Are you interested in our public beta? Drop us email [email protected]
Tergum Enterprise brings our cloud platform behind your filewall. For an inquiry, contact our sales [email protected]
Install using Brew:
brew install sikalabs/tap/tergum
On Linux (amd64):
curl -fsSL https://raw.githubusercontent.com/sikalabs/tergum/master/install.sh | sudo sh
Using scoop on Windows:
scoop install https://raw.githubusercontent.com/sikalabs/scoop-bucket/master/tergum.json
See: tergum completion
source <(tergum completion bash)
See: https://github.com/sikalabs/tergum-cli-docs/blob/master/tergum.md#tergum
Generate Markdown CLI docs to ./cobra-docs
tergum generate-docs
Tergum supports only JSON config file, but we're working on YAML support.
Config file examples are in misc/example/config directory
Meta:
SchemaVersion: 3
Settings: <Settings>
Cloud: <Cloud>
Notification: <Notification>
Telemetry: <Telemetry>
Backups:
- <Backup>
- <Backup>
- ...ID: <UniqueBackupID>
Source:
Mysql: <BackupSourceMysqlConfiguration>
MysqlServer: <BackupSourceMysqlServerConfiguration>
Postgres: <BackupSourcePostgresConfiguration>
PostgresServer: <BackupSourcePostgresServerConfiguration>
Mongo: <BackupSourceMongoConfiguration>
SingleFile: <BackupSourceSingleFileConfiguration>
Dir: <BackupSourceDirConfiguration>
KubernetesTLSSecret: <BackupSourceKubernetesTLSSecret>
Kubernetes: <BackupSourceKubernetes>
Notion: <BackupSourceNotion>
FTP: <BackupSourceFTP>
Redis: <BackupSourceRedis>
Vault: <BackupSourceVault>
Dummy: <BackupSourceDummy>
Gitlab: <BackupSourceGitlab>
Consul: <BackupSourceConsul>
Middlewares:
- <MiddlewareConfiguration>
- ...
Destinations:
- ID: <UniqueBackupDestinationID>
Middlewares:
- <MiddlewareConfiguration>
- ...
FilePath: <BackupDestinationFilePathConfiguration>
File: <BackupDestinationFileConfiguration>
S3: <BackupDestinationS3Configuration>
AzureBlob: <BackupDestinationAzureBlobConfiguration>
Telegram: <BackupDestinationTelegramConfiguration>
- ...
SleepBefore: <sleep time befor backup job in seconds>Gzip: {}
SymmetricEncryption:
Passphrase: "passphrase"Host: "127.0.0.1"
Port: "3306"
User: "root"
Password: "root"
Database: "default"With extra args
Host: "127.0.0.1"
Port: "3306"
User: "root"
Password: "root"
Database: "default"
MysqldumpExtraArgs:
- --column-statistics=0Host: "127.0.0.1"
Port: "3306"
User: "root"
Password: "root"With extra args
Host: "127.0.0.1"
Port: "3306"
User: "root"
Password: "root"
MysqldumpExtraArgs:
- --column-statistics=0Host: "127.0.0.1"
Port: "15432"
User: "postgres"
Password: "pg"
Database: "postgres"With extra args
Host: "127.0.0.1"
Port: "15432"
User: "postgres"
Password: "pg"
Database: "postgres"
PgdumpExtraArgs:
- --ignore-versionWith SSL mode
Host: "127.0.0.1"
Port: "15432"
User: "postgres"
Password: "pg"
Database: "postgres"
SSLMode: "require"Host: "127.0.0.1"
Port: "15432"
User: "postgres"
Password: "pg"With extra args
Host: "127.0.0.1"
Port: "15432"
User: "postgres"
Password: "pg"
PgdumpallExtraArgs:
- --ignore-versionWith SSL mode
Host: "127.0.0.1"
Port: "15432"
User: "postgres"
Password: "pg"
SSLMode: "require"Dump all dbs & no auth
Host: "127.0.0.1"
Port: "27017"Dump all dbs with auth
Host: "127.0.0.1"
Port: "27017"
User: "root"
Password: "root"Dump single db with auth
Host: "127.0.0.1"
Port: "27017"
User: "root"
Password: "root"
Database: "test"Dump single db with auth and custom Authentication Database
Host: "127.0.0.1"
Port: "27017"
User: "root"
Password: "root"
AuthenticationDatabase: "test" # default is admin
Database: "test"Backup all TLS secrets
Server: https://kubernetes-api.example.com
Token: foo-bar-baz
Namespace: defaultBackup single TLS secret
Server: https://kubernetes-api.example.com
Token: foo-bar-baz
Namespace: default
SecretName: tls-example-comBackup all resources (pods)
Server: https://kubernetes-api.example.com
Token: foo-bar-baz
Namespace: default
Resource: podBackup single resource (hello-world pod)
Server: https://kubernetes-api.example.com
Token: foo-bar-baz
Namespace: default
Resource: pod
Name: hello-worldPath: /data/export/dump.sqlPath: /data
Excludes:
- /data/tmpToken: <Notion token_v2>
SpaceID: <Notion Space UID>
Format: <Fotmat of export ("html" or "markdown")>Host: <FTP host>
User: <FTP user>
Password: <FTP password>Host: <host>
Port: <port>Addr: <vault address>
Token: <vault token>
Headers: <map[string]string of headers, optional>example with cloudflare access headers
Addr: https://vault.corp.com
Token: s.1234567890
Headers:
CF-Access-Client-ID: xxx1234567890
CF-Access-Client-Secret: xxx123456789Content: <backup content>NamePrefix: <prefix Gitlab backup file in /var/opt/gitlab/backups>
Skip: <skip (for example registry)>- Gitlab Docs about SKIP - https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html?tab=Linux+package+%28Omnibus%29#excluding-specific-data-from-the-backup
Addr: <host>
Token: <token>Example without ACL
Addr: http://127.0.0.1:8500Example with ACL requires token
Addr: http://127.0.0.1:8500
Token: 51047cd1-c243-a969-2bf1-a845405e4da9Path: "/backup/mysql-default.sql"Dir: "/backup/"
Prefix: "mysql-default"
Suffix: "sql"AWS:
AccessKey: "admin"
SecretKey: "asdfasdf"
Endpoint: "https://minio.example.com"
BucketName: "tergum-backups"
Prefix: "mysql-default"
Suffix: "sql"Minio:
accessKey: "aws_access_key_id"
secretKey: "aws_secret_access_key"
region: "eu-central-1"
bucketName: "tergum-backups"
prefix: "mysql-default"
suffix: "sql"Minio with 3 retries:
You can set UploadRetries (default is 0) to retry upload in case of error.
accessKey: "aws_access_key_id"
secretKey: "aws_secret_access_key"
region: "eu-central-1"
bucketName: "tergum-backups"
prefix: "mysql-default"
suffix: "sql"
UploadRetries: 3AccountName: account_name
AccountKey: account_key
ContainerName: container_name
Prefix: "mysql-default"
Suffix: "sql"BotToken: "123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
ChatID: -123456789
FileName: "backup.sql"Backends: {
Email: <NotificationBackendEmail>
Target:
- <NotificationTarget>
- <NotificationTarget>
- ...SmtpHost: "mail.example.com"
SmtpPort: "25"
Usename: "aaa"
Password: "aaa/bbb"
From: "[email protected]"Email: <NotificationEmailTarget>
SlackWebhook: <NotificationSlackWebhookTarget>
Telegram: <NotificationTelegramTarget>Emails:
- [email protected]
- [email protected]
SendOK: falseSendOK=truewill send email notification for all tergum runs (failed & OK runs)
URLs:
- https://hooks.slack.com/services/xxx/yyy/zzz
SendOK: falseSendOK=truewill send email notification for all tergum runs (failed & OK runs)
BotToken: "123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
ChatIDs: -123456789
SendOK: falseSendOK=truewill send email notification for all tergum runs (failed & OK runs)
Email: <email of tergum cloud account>UseDoBackupV2- use new backup processor (default is false)ExtraName- extra name for backup file (for example "my-backup") - default is empty
Settings:
UseDoBackupV2: true
ExtraName: "my-backup"Origin- origin of custom telemetry apiDisable- disable telemetryName- name of the instance in telemetryCollectHostData- collect host data (hostname, os, arch, cpu, memory)CollectBackupLog- collect backup log (backup log is sent to telemetry api)
Telemetry:
Origin: "tergum-telemetry-api.corp.com"
Disable: true
Name: "my-tergum"
CollectHostData: true
CollectBackupLog: trueSimple cron scheduler in Tergum
tergum utils cron <cron-expression> <command> [args...]
Example usage:
tergum utils cron "0 0 * * *" -- tergum backup -c tergum.yml
- SingleFile
- Files (Dir)
- Postgres
- PostgresServer
- MySQL
- MySQLServer
- Oracle (Enterprise)
- S3
- Ceph RBD
- CephFS
- MongoDB
- Gitlab
- Proxmox
- Kubernetes Resource
- Kubernetes TLS Secret
- Container Image
- Redis
- Notion
- FTP Server (for old school hostings)
- Hashicorp Vault
- Hashicorp Consul
- Dummy (for testing)
- YAML
- Environment Variables
- Hashicorp Vault
- AWS Secrets Manager
- Azure Key Vault
- GZIP Compression
- Symmetric Encryption
- AsymmetricEncryption
- GPG Encryption
- GPG Signatures
- Files
- S3
- Tergum Cloud
- Azure Blob
- GCS (Google Cloud Storage)
- Container Registry
- Telegram
- Slack
- Telegram
- Microsoft Teams
- Pagerduty