Skip to content

AlexArtaud-Dev/Orbix

Repository files navigation

Orbix

Self-hosted backup pipeline manager.
Configure your sources, schedule your runs, route your archives β€” without depending on any third-party cloud.


What is Orbix?

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)   ──►

Features

  • 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

Quick start

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 -d

Open http://localhost:6666 and complete the setup wizard.

Migrations run automatically on every container start via docker-entrypoint.sh.


Configuration

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_URL and NEXT_PUBLIC_API_URL should both point to the public app URL (e.g., https://orbix.yourdomain.com). NEXT_PUBLIC_API_URL is a Docker build argument and must be set before building the frontend image.


Production with a reverse proxy

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 bifrost

Example 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;
    }
}

Data volumes

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.


Tech stack

  • 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

Development

# 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 dev

Backend: http://localhost:3001 Β· Frontend: http://localhost:3000

# Run backend tests
cd backend && pnpm test

# Run frontend tests
cd frontend && pnpm test

Documentation

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

License

MIT

About

πŸ—„οΈ Build and schedule automated data pipelines from a clean web UI β€” self-hosted, no cloud required.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages