11 KiB
Doktainer adalah platform open-source dan self-hosted untuk mengelola server, aplikasi, container, domain, SSL, backup, dan operasi deployment dari satu panel web.
Doktainer ditujukan untuk tim atau individu yang ingin memiliki panel deployment sendiri tanpa bergantung pada vendor cloud tertentu, sekaligus tetap memegang kendali penuh atas server dan data mereka.
Fitur Utama
- Manajemen Multi-server, Multi-Proyek and Multi-Container dalam satu panel.
- Manajemen aplikasi dan container berbasis Docker.
- Dukungan untuk domain, SSL, jaringan, keamanan, log, metrik, dan akses terminal.
- Organisasi, akses berbasis peran, API key, dan konfigurasi pengaturan pengguna.
- Integrasi Git provider, tujuan penyimpanan, notifikasi, dan backup.
- UI panel modern dengan Next.js dan API backend yang berjalan terpisah saat runtime.
- Dukungan untuk pengembangan lokal dan deployment Docker ke VPS atau server online.
Kebutuhan Sistem
Minimum untuk pengembangan
- Node.js 22 atau versi yang kompatibel dengan dependensi proyek ini.
- npm 10 atau versi yang disertakan pada rilis Node.js modern.
- PostgreSQL 16 atau service PostgreSQL yang kompatibel.
- Docker Desktop atau Docker Engine + Docker Compose v2 jika ingin melakukan deployment dengan container.
Port default
3000untuk frontend Next.js4000untuk backend Fastify5432untuk PostgreSQL
Quick Start Lokal
1. Clone repository
git clone https://github.com/DoktainerApp/doktainer.git
cd doktainer
2. Install dependensi
npm install
3. Siapkan environment
Salin file environment contoh dan sesuaikan nilainya.
cp .env.example .env
Untuk Windows PowerShell:
Copy-Item .env.example .env
Nilai minimum yang perlu diperhatikan:
NODE_ENV=development
PORT=4000
HOST=0.0.0.0
DATABASE_URL=postgresql://doktainer:doktainerdb@postgres:5432/doktainer?schema=public
JWT_SECRET=change-this-to-a-secure-secret-with-32-chars-min
ENCRYPTION_KEY=change-this-to-a-secure-32-char-key
FRONTEND_URL=http://localhost:3000
NEXT_PUBLIC_API_URL=http://localhost:4000/api/v1
NEXT_PUBLIC_WS_URL=ws://localhost:4000
Catatan penting:
JWT_SECRETharus memiliki panjang minimal 32 karakter, jika tidak backend akan gagal berjalan.DATABASE_URLharus valid. Jika salah, autentikasi dan startup backend akan gagal lebih awal.ENCRYPTION_KEYsebaiknya diganti sebelum digunakan di environment nyata.
4. Siapkan database
Pastikan PostgreSQL berjalan, lalu generate Prisma client dan sinkronkan skema:
npm run db:generate
npm run db:push
Jika menggunakan workflow migrasi pengembangan, Anda juga dapat menjalankan:
npm run db:migrate
5. Jalankan server pengembangan
npm run dev
Setelah berhasil:
- frontend tersedia di
http://localhost:3000 - backend tersedia di
http://localhost:4000 - health check backend tersedia di
http://localhost:4000/health
Menjalankan Secara Lokal dalam Mode Production Tanpa Docker
Jika ingin menjalankan mode production di mesin lokal:
npm run build
npm run start
Perintah ini akan:
- membangun frontend Next.js
- mengompilasi backend TypeScript ke folder
dist - menjalankan frontend production dan backend production secara bersamaan
Instalasi Online / VPS dengan Docker
Pendekatan ini paling cocok untuk server online, instance VPS, atau environment self-hosted. Proyek ini sudah menyediakan:
Dockerfiledocker-compose.ymldocker-compose.build.ymldocker-entrypoint.sh.env.docker
Deployment yang direkomendasikan
Gunakan alur ini jika Anda membangun image langsung dari source proyek di server.
- Salin proyek ke server.
- Edit
.env.dockersesuai kebutuhan. - Jalankan:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
Jika ingin menggunakan image dari registry, sesuaikan DOKTAINER_IMAGE di .env.docker dan pastikan strategi deployment tetap konsisten dengan definisi Compose yang aktif.
Service yang dijalankan
Setup Docker Compose default akan menjalankan:
postgresuntuk database PostgreSQLappuntuk frontend Next.js dan backend Fastify dalam satu container aplikasi
Mapping port default:
3000:3000untuk frontend4000:4000untuk backend5432:5432untuk PostgreSQL
Langkah deployment Docker yang direkomendasikan
- Salin proyek ke server/VPS Linux.
- Pastikan Docker dan Docker Compose v2 sudah terpasang.
- Edit
.env.dockerdan ganti secret default. - Jalankan perintah build/deploy Compose.
- Periksa log container.
- Verifikasi
http://SERVER-IP:3000danhttp://SERVER-IP:4000/health. - Siapkan reverse proxy dan HTTPS untuk penggunaan production publik.
Contoh untuk melihat log:
docker compose logs -f app
docker compose logs -f postgres
Menghentikan service:
docker compose down
Menghentikan service dan menghapus volume database:
docker compose down -v
Konfigurasi Runtime Docker
File .env.docker adalah sumber environment utama untuk deployment container. Variabel paling penting adalah:
POSTGRES_DB=doktainer
POSTGRES_USER=doktainer
POSTGRES_PASSWORD=replace-this-password
POSTGRES_PORT=5432
NODE_ENV=production
HOST=0.0.0.0
PORT=4000
DATABASE_URL=postgresql://doktainer:replace-this-password@postgres:5432/doktainer?schema=public
JWT_SECRET=replace-this-with-a-secure-32-char-secret
ENCRYPTION_KEY=replace-this-with-a-secure-32-char-key
NEXT_PUBLIC_PANEL_NAME=DOKTAINER
NEXT_PUBLIC_VERSION=v0.1.3
NEXT_PUBLIC_BATCH=Batch-20260623
NEXT_PUBLIC_API_PORT=4000
Catatan penting deployment:
- Untuk deployment production,
NEXT_PUBLIC_API_URLsebaiknya dibiarkan kosong agar browser menggunakan same-origin/api/v1. - Jika Doktainer berjalan di belakang Nginx, Traefik, Caddy, atau Cloudflare Tunnel, aktifkan
TRUST_PROXY=true. - Atur
FRONTEND_URLatauNEXT_PUBLIC_PANEL_URLhanya jika Anda benar-benar ingin memaksa satu URL publik kanonis. - Jangan gunakan
localhost,0.0.0.0, atau host Docker internal sebagai URL production publik.
Reverse Proxy dan HTTPS
Untuk penggunaan online, sangat disarankan menempatkan Doktainer di belakang reverse proxy seperti:
- Nginx
- Traefik
- Caddy
- Cloudflare Tunnel
Tujuannya adalah untuk:
- menyediakan HTTPS
- meneruskan header host dan protokol dengan benar
- menyederhanakan akses publik dengan domain Anda sendiri
- mengurangi paparan backend langsung ke internet
Jika menggunakan reverse proxy, periksa dua hal berikut:
- set
TRUST_PROXY=true - set
FRONTEND_URL=https://your-domain.comjika Anda membutuhkan URL absolut yang konsisten
Workflow Pengembangan yang Tersedia
Script utama proyek:
npm run dev
npm run build
npm run start
npm run lint
npm run test
npm run db:generate
npm run db:push
npm run db:migrate
npm run db:studio
Ringkasan fungsi:
npm run devmenjalankan frontend dan backend dalam mode development.npm run buildmembangun frontend dan mengompilasi backend.npm run startmenjalankan output build production.npm run lintmenjalankan ESLint.npm run testmenjalankan test suite TypeScript.npm run db:generatemembuat Prisma client.npm run db:pushmenyinkronkan skema ke database.npm run db:migratemembuat dan menerapkan migrasi development.npm run db:studiomembuka Prisma Studio.
Troubleshooting
Login atau register gagal
Jika login atau registrasi mengembalikan Internal Server Error, hampir selalu mulai dari pengecekan berikut:
- pastikan
DATABASE_URLbenar - pastikan PostgreSQL benar-benar berjalan
- pastikan
JWT_SECRETvalid dan memiliki panjang minimal 32 karakter - jalankan ulang
npm run db:generate, lalunpm run db:push
Backend gagal berjalan
Kemungkinan penyebab umum:
- port
4000sudah digunakan oleh proses lain - koneksi PostgreSQL gagal
JWT_SECRETkosong atau terlalu pendek
Container app langsung berhenti
Periksa:
DATABASE_URLdi.env.docker- password Postgres di
POSTGRES_PASSWORD - log container dengan
docker compose logs -f app
Docker entrypoint proyek ini akan:
- menunggu sampai database dapat diakses
- menjalankan
prisma migrate deployjika migrasi tersedia - fallback ke
prisma db pushjika belum ada migrasi - menjalankan backend dan frontend dalam satu container
Catatan Arsitektur
Doktainer di folder ini menggunakan model repository monolith modular dengan dua runtime utama:
- Next.js untuk antarmuka web pada port
3000 - API Fastify pada port
4000
Keduanya digabungkan dalam satu proyek untuk menyederhanakan pengembangan dan deployment, sekaligus menjaga pemisahan frontend dan backend tetap jelas pada level runtime.
Lisensi
Doktainer menggunakan lisensi MIT. Lihat file LICENSE di root repository untuk detail lisensi.
Penggunaan Non-Komersial Saja
Software ini bebas digunakan, dimodifikasi, dan didistribusikan hanya untuk tujuan non-komersial. Penggunaan untuk aktivitas yang menghasilkan pendapatan atau di dalam organisasi profit dilarang keras berdasarkan ketentuan ini.
Lisensi Komersial
Jika ingin menggunakan Doktainer untuk tujuan komersial, operasional bisnis, atau sebagai bagian dari layanan berbayar, Anda harus memperoleh lisensi komersial terpisah. Silakan hubungi author untuk informasi lebih lanjut.
❤️ Sponsors
Terima kasih kepada sponsor yang sudah mendukung Doktainer.
| Sponsor | Website | Jenis Sponsor |
|---|---|---|
| IDCloudhost | https://idcloudhost.com | Cloud Hosting |
| SumoPod | https://sumopod.com | Cloud Hosting |
| PAAS ID | https://paas.id | Cloud Hosting |
| Ktikme | https://ktik.me | Profile BIO-Link |
| Dahono Labs | https://labs.dahono.com | AI Agent Services |
Tertarik juga untuk menjadi sponsor Doktainer? Hubungi kami melalui Discord Server Community
Dibuat dengan cinta oleh KodekaTeam