DB Backup Manager — Web Dashboard. Next.js 14 frontend untuk manajemen backup database ke cloud.
5.6K
Web dashboard untuk aplikasi DB Backup Manager — antarmuka manajemen backup database self-hosted berbasis Next.js 14. Backup MySQL, MariaDB, dan PostgreSQL otomatis ke Google Drive, S3, MinIO, atau OwnCloud.
🌐 Live Demo: bm.alfi-gusman.web.id
🔗 Backend image:alfigusman0/backend-dbbackup
Gunakan bersama docker compose — membutuhkan container alfigusman0/backend-dbbackup yang berjalan.
docker-compose.yml lengkapversion: '3.9'
services:
backend:
image: alfigusman0/backend-dbbackup:latest
container_name: dbbackup-api
restart: unless-stopped
pull_policy: always
ports:
- "${PORT:-4000}:4000"
env_file: .env
environment:
NODE_ENV: production
TZ: ${TZ:-Asia/Jakarta}
DB_HOST: mysql
DB_PORT: "3306"
DB_USER: ${DB_USER:-backupuser}
DB_PASS: ${DB_PASS}
DB_NAME: ${DB_NAME:-backup_manager}
REDIS_HOST: redis
REDIS_PORT: "6379"
REDIS_PASS: ${REDIS_PASS:-}
JWT_SECRET: ${JWT_SECRET}
JWT_EXPIRED_IN: ${JWT_EXPIRED_IN:-7d}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
CORS_ORIGINS: ${CORS_ORIGINS}
FRONTEND_URL: ${FRONTEND_URL}
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
GOOGLE_REDIRECT_URI: ${GOOGLE_REDIRECT_URI:-}
LICENSE_SERVER_URL: ${LICENSE_SERVER_URL:-}
LICENSE_PUBLIC_KEY: ${LICENSE_PUBLIC_KEY:-}
LOG_LEVEL: ${LOG_LEVEL:-info}
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
networks: [dbbackup-network]
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:4000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
frontend:
image: alfigusman0/frontend-dbbackup:latest
container_name: dbbackup-frontend
restart: unless-stopped
pull_policy: always
ports:
- "${FRONTEND_PORT:-3001}:3000"
environment:
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-http://localhost:4000}
depends_on:
backend:
condition: service_healthy
networks: [dbbackup-network]
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:3000"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
mysql:
image: mysql:8.0
container_name: dbbackup-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME:-backup_manager}
MYSQL_USER: ${DB_USER:-backupuser}
MYSQL_PASSWORD: ${DB_PASS}
volumes:
- mysql_data:/var/lib/mysql
ports:
- "127.0.0.1:3307:3306"
networks: [dbbackup-network]
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASS}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
redis:
image: redis:7-alpine
container_name: dbbackup-redis
restart: unless-stopped
command: >
redis-server --appendonly yes --requirepass ${REDIS_PASS:-}
--maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
networks: [dbbackup-network]
healthcheck:
test: ["CMD", "sh", "-c", "redis-cli ${REDIS_PASS:+-a $REDIS_PASS} ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mysql_data:
redis_data:
networks:
dbbackup-network:
driver: bridge
.env# Timezone
TZ=Asia/Jakarta
# Database MySQL
DB_ROOT_PASS=ganti_password_root_kuat
DB_USER=backupuser
DB_PASS=ganti_password_user_kuat
DB_NAME=backup_manager
# Redis
REDIS_PASS=ganti_redis_password
# Security — WAJIB DIISI
# Generate: openssl rand -hex 32
JWT_SECRET=
# TEPAT 32 karakter: openssl rand -hex 16
ENCRYPTION_KEY=
# URL — sesuaikan dengan IP/domain server
PORT=4000
FRONTEND_PORT=3001
FRONTEND_URL=http://IP_ATAU_DOMAIN:3001
CORS_ORIGINS=http://IP_ATAU_DOMAIN:3001
NEXT_PUBLIC_API_URL=http://IP_ATAU_DOMAIN:4000
# Google OAuth (opsional — untuk Cloud Storage Google Drive)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI=http://IP_ATAU_DOMAIN:4000/api/storages/google/callback
# Lisensi (kosongkan = mode development tanpa validasi)
LICENSE_SERVER_URL=https://license.alfi-gusman.web.id
LICENSE_PUBLIC_KEY=
LOG_LEVEL=info
docker compose pull
docker compose up -d
# Pantau sampai semua container healthy
docker compose ps
# Buka dashboard
# http://IP_ATAU_DOMAIN:3001
| Variable | Wajib | Default | Keterangan |
|---|---|---|---|
NEXT_PUBLIC_API_URL | ✅ | http://localhost:4000 | URL backend API yang diakses dari browser. Wajib diisi dengan IP/domain publik server. |
FRONTEND_PORT | — | 3001 | Port host yang di-expose ke luar |
Catatan penting —
NEXT_PUBLIC_API_URL: Nilai ini diinjeksi ke dalam JS bundle saat container start (bukan saat build image). Cukup set via env var di.env— tidak perlu rebuild image. Isi dengan URL yang bisa diakses oleh browser pengguna, bukan URL internal Docker network.
| Role | Password | |
|---|---|---|
| Admin | [email protected] | Admin2026! |
| Operator | [email protected] | Operator2026! |
| Viewer | [email protected] | Viewer2026! |
⚠️ Segera ganti semua password setelah install pertama kali!
Dashboard → Pengaturan → Ubah Password
| Role | Akses |
|---|---|
| Admin | Semua fitur: CRUD resource, kelola user, konfigurasi WhatsApp, aktivasi lisensi |
| Operator | Kelola koneksi DB, cloud storage, backup job, jadwal cron. Lihat log |
| Viewer | Hanya melihat log backup. Tidak bisa membuat atau mengubah apapun |
| Tag | Keterangan |
|---|---|
latest | Build terbaru dari branch production |
sha-<7char> | Build spesifik berdasarkan commit SHA |
v1.2.3 | Release versi tertentu |
v1.2 | Minor version terbaru |
# Pull image terbaru
docker compose pull
# Restart container dengan image baru
docker compose up -d
# Verifikasi
docker compose ps
.env
docker compose restarttidak membaca ulang.env. Gunakanup -duntuk recreate container.
# Edit konfigurasi
nano .env
# Recreate container agar .env dibaca ulang
docker compose up -d frontend # hanya frontend
docker compose up -d # semua container
# Jika perubahan tidak teraplikasi, paksa recreate
docker compose up -d --force-recreate frontend
Tersedia di halaman dokumentasi aplikasi: bm.alfi-gusman.web.id/docs
Termasuk script instalasi otomatis (Linux Bash & Windows PowerShell) yang menangani semua konfigurasi secara interaktif.
Aplikasi ini memerlukan lisensi untuk penggunaan production. Informasi langganan: hubungi tim kami.
Content type
Image
Digest
sha256:e3166b983…
Size
55 MB
Last updated
17 days ago
docker pull alfigusman0/frontend-dbbackup