Back up and restore plain directories, alongside the database sources.
Files source and Archive (P0)
- `files` type: absolute path (not /), options.exclude and
options.one_file_system; walk + tar.gz with symlinks kept as links,
special files skipped, unreadable entries fail the run.
- Mirror restore: archive validated first, then everything not excluded
is wiped (mount points and special files kept) and the archive is
extracted, retrying without metadata on filesystems refusing chown/chmod.
- Windows-safe platform helpers; helm extraVolumes/extraVolumeMounts.
Universal rclone mapper (P1)
- rclone_target(storage) for s3, blob, gcs, drive, rclone and sftp; sftp
goes through it; rclone obscure reads the password from stdin.
Snapshots, restic (P2)
- restic in the image; repository per source and channel, password
derived from the master key (HKDF); stable host, bs:<row> tags,
translated excludes; exit 3 fails and forgets the snapshot.
- Mirror restore with `restic restore --delete`; restore payload carries
the encrypted channel; snapshot ids must be full ids.
- Engine in the ping and in scheduled task metadata.
One locked method per source (spec A)
- databases.json declares options.method (archive, snapshot, sync),
reported in the ping for local sources only.
- Sync: rclone sync per channel onto <folder>/sync/<id>/current, refuses
an empty source, reports transferred/deleted counters.
Local channel (spec B)
- Snapshots and Sync reach the dashboard's local storage through its
append-only restic REST server and its WebDAV server.
Security
- Strict rclone config validation: one section, no duplicate keys, no
command, credential or host-file keys, no quoted values, valid backend
type, blocked backends.
- Scheduled task metadata (decrypted storages) is no longer logged.
- Add mysql:8.4 client tools stage to Dockerfile so the real mysqldump
binary (with --network-timeout) takes PATH precedence over MariaDB's
mysqldump symlink, which lacks this flag
- Use --network-timeout in MySQL backup command; sets net_read_timeout and
net_write_timeout to 86400s for the duration of the dump
- Simplify config: replace net_read_timeout/net_write_timeout/max_allowed_packet
with a single max_packet_size field (optional, defaults to 512M)
- Log mysqldump/mariadb-dump client version as a debug message before each backup
* fix: tests and refactoring, add justfile instead of makefile
* chore: add tiberius dependency for MSSQL support
* feat: add Mssql variant to DbType enum and config validation
* feat: add MSSQL domain adapter with tiberius ping and sqlpackage backup/restore
* feat: install sqlpackage in Docker base and prod stages
* feat: add MSSQL service to docker-compose and config examples
* fix: log backup errors instead of silently discarding them
* fix: use dotnet-install.sh instead of Microsoft apt feed (SHA1 key rejected by Debian Trixie)
* fix: add /TrustServerCertificate:true to sqlpackage commands for self-signed certs
* fix: use connection string with TrustServerCertificate for sqlpackage
* fix: use user database in MSSQL config example (system databases cannot be exported)
* feat: add seed-mssql task and seed script
* fix: docker-compose.yml
* fix: s3 port type mismatch, add string_or_number_to_string deserializer
* fix: adding some tests
* fix: adding some tests
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
* fix: working on pipeline
---------
Co-authored-by: charlesgauthereau <charles.gauthereau@soluce-technologies.com>