Self-hosted backup pipeline manager.
Configure your sources, schedule your runs, route your archives β without depending on any third-party cloud.
Orbix lets you build automated backup pipelines from a web UI. Pick where your data comes from (local files, HTTP APIs, remote SFTP), choose how it gets packaged (zip, tar, encrypted), and decide where it ends up (email, remote SSH server). Everything runs on your own infrastructure.
Sources Archive Outputs
βββββββ βββββββ βββββββ
Local files βββΊ βββΊ Email (SMTP)
Folders βββΊ zip / tar βββΊ SSH / SFTP
HTTP REST API βββΊ encrypted βββΊ (more planned)
SFTP (remote) βββΊ
- Visual pipeline builder β build backups step by step with a guided wizard
- Multiple input types β local files, folders, HTTP REST APIs (custom body, auth, OAuth2), remote SFTP
- Flexible archiving β zip, tar, tar.gz, tar.bz2, with optional AES-256 password encryption
- Scheduled runs β manual, cron expression, or fixed interval
- Vault β encrypted storage for HTTP credentials, SMTP configs, SSH credentials (user/pass, PEM key), and variable sets
- Email output β send archives via SMTP with HTML/text templates, to/cc/bcc, per-recipient variables
- SSH output β upload archives to remote servers via SFTP or
sudo tee - File explorer β browse and download files from a configurable server path
- Dashboard β KPIs, run history charts (success/error, archive sizes)
- Structured logs β real-time log viewer with filtering by category and level
- Settings β global settings and per-module configuration
- Security β JWT via HTTP-only cookie, AES-256 vault encryption, rate-limited auth endpoints
Requirements: Docker, Docker Compose
git clone <repo> orbix && cd orbix
cp .env.example .env
# Edit .env and fill in all required variables
docker compose -f docker-compose.prod.yml up -dOpen http://localhost:6666 and complete the setup wizard.
Migrations run automatically on every container start via docker-entrypoint.sh.
| Variable | Required | Default | Description |
|---|---|---|---|
DB_PASSWORD |
β | β | PostgreSQL password |
JWT_SECRET |
β | β | JWT signing secret (β₯32 chars) |
VAULT_ENCRYPTION_KEY |
β | β | Vault AES-256 encryption key (β₯32 chars) |
FRONTEND_URL |
β | β | Public URL of the app β used for CORS (no trailing slash) |
NEXT_PUBLIC_API_URL |
β | β | Public URL baked into the frontend image at build time |
TZ |
UTC |
Timezone for cron schedules and timestamps | |
LOG_LEVEL |
INFO |
DEBUG | INFO | WARN | ERROR |
|
ORBIX_SECURE |
false |
Set true to enforce HTTPS-only cookies (behind a TLS reverse proxy) |
FRONTEND_URLandNEXT_PUBLIC_API_URLshould both point to the public app URL (e.g.,https://orbix.yourdomain.com).NEXT_PUBLIC_API_URLis a Docker build argument and must be set before building the frontend image.
docker-compose.prod.yml exposes the backend on port 6667 and the frontend on port 6666. It connects to an external Docker network named bifrost β create it once if it doesn't exist:
docker network create bifrostExample SWAG/nginx proxy configuration for orbix.*:
server {
listen 443 ssl;
server_name orbix.*;
include /config/nginx/ssl.conf;
include /config/nginx/authelia-server.conf;
location /api {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app orbix-backend;
set $upstream_port 3001;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location / {
include /config/nginx/authelia-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app orbix-frontend;
set $upstream_port 3000;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}| Volume / Mount | Contents |
|---|---|
orbix_db |
PostgreSQL data |
orbix_backups |
Generated archive files |
orbix_logs |
Application logs |
./data |
Bind mount β files accessible via the File Explorer (configurable root in Settings) |
To expose local directories in the File Explorer, place them under ./data/ on the host (or adjust the bind mount in your compose file). The default file root is /data/files.
- Backend β NestJS 11 Β· PostgreSQL 17 Β· Prisma 7 Β· node-archiver Β· ssh2-sftp-client
- Frontend β Next.js 14 (App Router) Β· shadcn/ui Β· Tailwind CSS v4 Β· Recharts
- Auth β JWT via HTTP-only cookie
# Start the database only
docker compose up db -d
# Backend (separate terminal)
cd backend
pnpm install
pnpm prisma migrate dev # first time only, or after schema changes
pnpm run start:dev
# Frontend (separate terminal)
cd frontend
pnpm install
pnpm run devBackend: http://localhost:3001 Β· Frontend: http://localhost:3000
# Run backend tests
cd backend && pnpm test
# Run frontend tests
cd frontend && pnpm test| Document | Description |
|---|---|
docs/architecture.md |
System overview, module map, execution flow, directory layout |
docs/modules.md |
NestJS modules β responsibilities and API endpoints |
docs/providers.md |
Provider pattern β how to add Input/Output types |
docs/data-model.md |
Prisma schema reference β all tables and column types |
MIT