EN — English

Muhamad Irga

Purwokerto, Jawa Tengah

Diperbarui

Deployer — Deployment Website dari GitHub

Dasbor deployment dengan OAuth GitHub, pemilihan repositori dan branch, antrean build, worker, riwayat log per tahap, redeploy, dan alamat subdomain per proyek.

Tangkapan layar

Dasbor Deployer yang mendaftar proyek beserta status deployment terakhirnya
Tampilan utama aplikasi · Buka gambar untuk resolusi penuh
Pemilihan repositori dan branch di Deployer setelah akun GitHub terhubung
Tampilan aplikasi 2 · Buka gambar untuk resolusi penuh
Proses build Deployer yang sedang berjalan dengan log per tahap
Tampilan aplikasi 3 · Buka gambar untuk resolusi penuh
Deployment Deployer yang selesai beserta subdomain proyeknya
Tampilan aplikasi 4 · Buka gambar untuk resolusi penuh

Ringkasan

Apa yang dikerjakan sistem ini.

Deployer adalah aplikasi deployment dengan dasbor Next.js dan backend Express berbasis TypeScript. Pengguna mendaftar, menghubungkan akun GitHub-nya lewat OAuth, memilih repositori dan branch, lalu membuat proyek dengan subdomainnya sendiri. Deployment bisa dijalankan langsung dari dasbor atau dipicu otomatis oleh webhook push repositori.

Permintaan deployment masuk ke antrean dan diproses oleh worker: kode sumber diambil sesuai konfigurasi proyek, struktur proyek diperiksa, dan bila ada package.json, dependensi dipasang dan perintah build dijalankan sebelum hasilnya disalin ke direktori subdomain. Website statis tanpa package.json mengikuti jalur pemrosesan terpisah. Setiap tahap menyimpan status dan log-nya sehingga kegagalan bisa ditelusuri dari dasbor.

Kredensial GitHub dienkripsi saat disimpan, permintaan dibatasi lajunya, dan operasi yang rawan gagal dibungkus mekanisme retry. Backend menyimpan data di PostgreSQL dengan skrip migrasinya sendiri, memakai autentikasi JWT berbasis cookie, dan diuji dengan Jest, Supertest, serta property-based test. Seluruh layanannya dipaketkan dengan Docker Compose.

Daftar fitur

Rincian kemampuan

17 kemampuan yang diverifikasi langsung terhadap kode sumber proyek.

  • Registrasi, login, dan sesi dasbor berbasis JWT
  • Penghubungan akun GitHub lewat OAuth dengan penyimpanan token terenkripsi
  • Pendaftaran repositori GitHub dan pemilihan branch
  • Pembuatan proyek dengan nama dan subdomain
  • Daftar proyek pengguna beserta status terakhirnya
  • Deployment manual dari dasbor
  • Pemicu deployment dari webhook push GitHub
  • Antrean deployment dengan worker pemrosesan terpisah
  • Pengambilan kode repositori sesuai konfigurasi proyek
  • Deteksi proyek Node.js melalui package.json
  • Pemasangan dependensi dan eksekusi perintah build
  • Pemilihan direktori hasil build atau pemrosesan website statis
  • Penyalinan hasil build ke direktori subdomain proyek
  • Riwayat deployment, status, dan log per tahap
  • Redeploy dan penghapusan proyek
  • Pembatasan laju permintaan dan mekanisme retry untuk operasi eksternal
  • Migrasi basis data mandiri dan pemaketan Docker Compose

Teknologi

Dibangun dengan 12 teknologi.

  • Next.js 14
  • React 18
  • TypeScript
  • Tailwind CSS 3
  • Framer Motion
  • Node.js
  • Express 4
  • PostgreSQL
  • GitHub API
  • JWT
  • Jest
  • Docker

Pertanyaan umum

Yang biasanya ditanyakan.

Apa yang terjadi setelah deployment dipicu?

Permintaan masuk antrean dan diambil worker: repositori diambil, struktur proyek diperiksa, dan bila ada package.json dependensi dipasang lalu build dijalankan sebelum hasilnya disalin ke direktori subdomain.

Bagaimana kredensial GitHub disimpan?

Terenkripsi saat disimpan. Permintaan dibatasi lajunya dan operasi eksternal yang rawan gagal dibungkus retry, karena penyebab kegagalan deployment paling umum adalah gangguan jaringan, bukan build yang salah.

Bisakah deployment yang gagal ditelusuri dari dasbor?

Bisa. Setiap tahap menyimpan status dan log-nya sendiri, jadi kegagalan menunjuk ke tahap yang gagal, bukan sekadar pesan "deployment gagal" yang tidak menjelaskan apa-apa.

Satu bidang

Butuh sistem seperti ini?

Kirim ringkasan singkat, saya balas dengan lingkup kerja, pendekatan, dan estimasi waktu yang jujur.