Files
jtlPosSync/scripts/s3-backup
2026-07-27 00:13:47 +02:00
..
u
2026-07-15 03:11:30 +02:00
u
2026-07-15 01:25:38 +02:00
u
2026-07-15 03:11:30 +02:00
u
2026-07-27 00:13:47 +02:00
u
2026-07-27 00:13:47 +02:00
u
2026-07-27 00:13:47 +02:00
u
2026-07-15 03:11:30 +02:00

MSSQL backup via local S3 endpoint

Custom S3-compatible HTTPS server (no MinIO). SQL Server 2022+ backs up with BACKUP TO URL; files land on disk under data/sqlbackups/.

Quick start

npm run backup:s3

First run installs the CA into the mssql Docker container (/var/opt/mssql/security/ca-certificates/) and restarts SQL Server — required on Linux.

Commands

Command Description
npm run backup:s3 Start S3 endpoint + backup MSSQL_DATABASE from .env
npm run backup:s3:quick Same, but skip PAL CA install/restart (after first setup)
npm run restore:s3 Start S3 endpoint + restore latest .bak for MSSQL_DATABASE
npm run restore:s3:quick Same, but skip PAL CA install/restart (after first setup)
node scripts/s3-backup/backup.mjs --all Backup eazybusiness and Mandant_3
node scripts/s3-backup/backup.mjs --server-only Run endpoint only
npm run backup:s3 -- --skip-trust Skip CA install (npm needs -- before script args)
npm run restore:s3:quick -- <file.bak> Restore a specific backup file

Layout

scripts/s3-backup/
  server.mjs      S3-compatible HTTPS server (SigV4, multipart upload)
  backup.mjs      Orchestrator: trust CA → start server → sqlcmd BACKUP
  restore.mjs     Orchestrator: trust CA → start server → sqlcmd RESTORE
  config.mjs      Host, port, credentials
  ensure-certs.mjs  TLS certs + Docker MSSQL PAL trust
  sigv4.mjs       AWS Signature V4 verification
  data/sqlbackups/  Backup files written here

Configuration

Reads MSSQL_* from repo .env. Optional overrides:

Variable Default Description
S3_BACKUP_HOST Docker bridge IP (172.17.0.1) Host SQL Server uses in s3:// URL
S3_BACKUP_PORT 19443 HTTPS port
S3_BACKUP_ACCESS_KEY jtlsrv-s3 S3 access key
S3_BACKUP_SECRET_KEY jtlsrv-s3-secret S3 secret key
MSSQL_DOCKER_CONTAINER mssql Container name for CA install

Notes

  • MSSQL runs in Docker: the endpoint binds 0.0.0.0 and uses the docker bridge IP so the container can reach it.
  • SQL Server on Linux uses SQLPAL for outbound TLS — the CA must be in /var/opt/mssql/security/ca-certificates/, not only the OS trust store.
  • Regenerating certs requires re-running without --skip-trust so PAL stays in sync.