{"id":20217645,"url":"https://github.com/skyfay/database-backup-manager","last_synced_at":"2026-01-29T21:09:48.047Z","repository":{"id":190967650,"uuid":"683680975","full_name":"Skyfay/Database-Backup-Manager","owner":"Skyfay","description":"A self-hosted backup automation tool for MySQL, PostgreSQL, MongoDB \u0026 more. Backup to S3, FTP, or Local Storage. Features cron scheduling, notifications, and easy restores via a modern Web UI.","archived":false,"fork":false,"pushed_at":"2026-01-25T22:03:43.000Z","size":4879,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-26T02:35:36.904Z","etag":null,"topics":["automation","backup","backups","cloud-storage","cron","dashboard","database","database-backup","databases","devops","docker","mongodb","mysql","nextjs","open-source","postgresql","recovery","s3","self-hosted","shadcn-ui"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Skyfay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security/security-audit.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"skyfay"}},"created_at":"2023-08-27T11:13:56.000Z","updated_at":"2026-01-25T22:03:46.000Z","dependencies_parsed_at":"2024-11-14T12:35:33.562Z","dependency_job_id":null,"html_url":"https://github.com/Skyfay/Database-Backup-Manager","commit_stats":null,"previous_names":["skyfay/database-backup-manager"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/Skyfay/Database-Backup-Manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Skyfay%2FDatabase-Backup-Manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Skyfay%2FDatabase-Backup-Manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Skyfay%2FDatabase-Backup-Manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Skyfay%2FDatabase-Backup-Manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Skyfay","download_url":"https://codeload.github.com/Skyfay/Database-Backup-Manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Skyfay%2FDatabase-Backup-Manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28885036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T21:06:44.224Z","status":"ssl_error","status_checked_at":"2026-01-29T21:06:42.160Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","backup","backups","cloud-storage","cron","dashboard","database","database-backup","databases","devops","docker","mongodb","mysql","nextjs","open-source","postgresql","recovery","s3","self-hosted","shadcn-ui"],"created_at":"2024-11-14T06:34:56.601Z","updated_at":"2026-01-29T21:09:48.042Z","avatar_url":"https://github.com/Skyfay.png","language":"TypeScript","readme":"# Database Backup Manager\n\n\u003e **⚠️ Work in Progress**: This project is currently under active development. There is no stable release available yet. Use at your own risk.\n\u003e Check out [TODO](docs/todo/features.md) to see the roadmap and pending tasks.\n\n\u003e **Note**: This project is primarily developed on GitLab. This GitHub repository is a mirror.\n\u003e **Main Repository**: [https://gitlab.com/Skyfay/database-backup-manager](https://gitlab.com/Skyfay/database-backup-manager)\n\nA robust, self-hosted solution for automating database backups. Manage sources, destinations, and backup schedules through a modern web interface.\n\n![Dashboard Preview](docs/images/overview.png)\n\n## 🚀 Features\n\n- **Multi-Database Support**: Backup **MySQL**, **PostgreSQL**, **MongoDB** and **SQLite** (Local \u0026 via SSH). (MSSQL coming soon)\n- **Bank-Grade Security**:\n  - **Encryption Vault**: Secure your backups with **AES-256-GCM** encryption.\n  - **Encryption Profiles**: Manage multiple keys and rotate secrets easily.\n  - **Recovery Kits**: Download standalone, offline decryption tools to ensure you can always recover your data, even without this application.\n- **Storage Optimization**: Built-in **GZIP** and **Brotli** compression to save storage space and bandwidth.\n- **Flexible Storage**: Store backups on the **Local Filesystem**, **S3 Storage**, and **SFTP**. (Cloud Providers, SMB/CIFS, and FTP coming soon)\n- **Automated Scheduling**: Configure cron-based backup schedules for your jobs.\n- **Live Activity Monitoring**: Watch backup and restore processes in real-time with detailed step-by-step logs and visual progress bars.\n- **Granular Access Control**: Define custom user groups with precise permissions for every resource and action (RBAC).\n- **Notifications**: Get alerts via **Discord** or **Email** when backups succeed or fail.\n- **Restore \u0026 Management**: Browse backup history, view logs, and restore databases directly from the UI.\n- **Health Check**: Health check for databases and storage destinations.\n- **Modern Dashboard**: Built with Next.js 16, Shadcn UI, and Tailwind CSS.\n## 🗄️ Supported Databases\n\n| Database | Supported Versions |\n| :--- | :--- |\n| **PostgreSQL** | 12, 13, 14, 15, 16, 17, 18 |\n| **MySQL** | 5.7, 8, 9 |\n| **MariaDB** | 10, 11 |\n| **MongoDB** | 4, 5, 6, 7, 8 |\n| **SQLite** | 3.x (Local \u0026 SSH) |\n\n\u003e For detailed technical information about client versions and extensive compatibility notes, please refer to our [Supported Database Versions Documentation](docs/development/supported-database-versions.md).\n## 🐳 Deployment (Docker)\n\nYou can easily deploy the application using Docker. The application is in beta, so there may be bugs!\n\n### Docker Compose (Recommended)\n\nView the latest [docker-compose.yml](docker-compose.yml) in the repository.\n\n```yaml\nservices:\n  app:\n    image: registry.gitlab.com/skyfay/database-backup-manager:beta\n    restart: always\n    ports:\n      - \"3000:3000\"\n    environment:\n      - DATABASE_URL=file:/app/db/prod.db\n      - ENCRYPTION_KEY= # openssl rand -hex 32\n      - BETTER_AUTH_URL=http://localhost:3000\n      - BETTER_AUTH_SECRET= # openssl rand -base64 32\n    volumes:\n      # Persist local backups\n      - ./backups:/backups # use /backups as local adapter path in the application\n      # Persist SQLite DB in a dedicated folder\n      - ./app/db:/app/db\n      # Persist Uploads/Avatars\n      - ./app/storage:/app/storage\n```\n\n### Docker Run\n\nAlternatively, you can run the container directly using `docker run`:\n\n```bash\ndocker run -d \\\n  --name backup-manager \\\n  --restart always \\\n  -p 3000:3000 \\\n  -e DATABASE_URL=\"file:/app/db/prod.db\" \\\n  -e ENCRYPTION_KEY=\"your-32-byte-hex-key\" \\\n  -e BETTER_AUTH_URL=\"http://localhost:3000\" \\\n  -e BETTER_AUTH_SECRET=\"your-base64-secret\" \\\n  -v \"$(pwd)/backups:/backups\" \\\n  -v \"$(pwd)/db-data:/app/db\" \\\n  -v \"$(pwd)/storage:/app/storage\" \\\n  registry.gitlab.com/skyfay/database-backup-manager:beta\n```\n## �🛠️ Tech Stack\n\n- **Framework**: [Next.js 16](https://nextjs.org) (App Router)\n- **Database**: SQLite (via Prisma ORM) for application state\n- **UI Components**: [shadcn/ui](https://ui.shadcn.com)\n- **Styling**: Tailwind CSS\n- **Scheduler**: Custom Node-based scheduler\n- **Streaming**: Native Node.js streams for efficient, low-memory piping of encryption and compression.\n## 📦 Getting Started\n\n### Prerequisites\n\n- Node.js (v18+)\n- Package manager (`pnpm`)\n- Docker (optional, for running test databases)\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://gitlab.com/Skyfay/database-backup-manager.git\n   cd database-backup-manager\n   ```\n\n2. **Install dependencies**\n   ```bash\n   pnpm install\n   ```\n\n3. **Configure Environment**\n   Set up your `.env` file containing your database configuration and app secrets.\n   ```bash\n   # Example\n   DATABASE_URL=\"file:./dev.db\"\n\n   # Better Auth Configuration\n   BETTER_AUTH_SECRET=\"your-super-secret-key-here\"\n   BETTER_AUTH_URL=\"http://localhost:3000\" # Set to your domain in production\n\n   # System Encryption Key (AES-256-GCM)\n   # Allows encryption of sensitive DB connections and wraps your Backup Vault keys.\n   ENCRYPTION_KEY=\"your-64-char-hex-key-here\"\n   ```\n\n   \u003e **Tip**: You can generate secure secrets using `openssl`:\n   \u003e ```bash\n   \u003e # For BETTER_AUTH_SECRET\n   \u003e openssl rand -base64 32\n   \u003e\n   \u003e # For ENCRYPTION_KEY (Required: 32 bytes as hex string)\n   \u003e openssl rand -hex 32\n   \u003e ```\n\n4. **Initialize Database**\n   Push the schema to your local database:\n   ```bash\n   npx prisma db push\n   npx prisma generate\n   ```\n\n## 👨‍💻 Development\n\nStart the development server:\n\n```bash\npnpm dev\n```\n\nOpen [http://localhost:3000/dashboard](http://localhost:3000/dashboard) with your browser to see the dashboard.\n\n\u003e **Note**: You must create the first user account manually via the login screen (\"Sign Up\"). This self-registration feature is only available for the very first user to establish the administrator account.\n\n## 🐳 Testing Infrastructure\n\nTo spin up test instances of MySQL, Postgres, and MongoDB for development:\n\n```bash\ndocker-compose -f docker-compose.test.yml up -d\n```\n\nIf you want to add the test containers to the Database use the following command:\n\n```bash\npnpm test:ui\n```\n\n## 📦 Release Preparation\n\nBefore creating a release tag, verify that the application builds successfully:\n\nUnit tests:\n```bash\npnpm run test\n```\n\nType checking:\n```bash\npnpm run type-check\n```\n\nLinting:\n```bash\npnpm run lint\n```\n\nBuild:\n```bash\npnpm run build\n```\n\nIf you make changes to the database schema (`prisma/schema.prisma`), you must create a new migration before creating a release tag. This ensures that the production database is updated correctly.\n\n```bash\n# 1. Update schema.prisma\n# 2. Create a new migration (this also generates your local client)\nnpx prisma migrate dev --name describe_your_changes\n\n# 3. Commit the new migration folder\ngit add prisma/migrations\ngit commit -m \"chore: add db migration for feature xyz\"\n```\n\n## � Gallery\n\n### Backup Jobs\n![Jobs](docs/images/jobs.png)\n\n### Storage Explorer\n![Storage](docs/images/storage-explorer.png)\n\n### Execution History\n![History](docs/images/history.png)\n\n### Encryption Vault\n![Vault](docs/images/vault.png)\n\n### Group Permissions\n![Permissions](docs/images/group-permission.png)\n\n### Configuration\n\u003cimg src=\"docs/images/edit-configuration.png\" width=\"400\" alt=\"Configuration\" /\u003e\n\n### User Profile\n![Profile](docs/images/profile.png)\n\n### Light Mode\n![Light Mode](docs/images/dashboard-light-theme.png)\n\n### Security Settings\n![Security](docs/images/security.png)\n\n## �📝 License\n\n[GNU GENERAL PUBLIC LICENSE](LICENSE)\n","funding_links":["https://ko-fi.com/skyfay"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskyfay%2Fdatabase-backup-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskyfay%2Fdatabase-backup-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskyfay%2Fdatabase-backup-manager/lists"}