ARTICLE

Cara Deploy Aplikasi dari GitHub di Dalang.io (Wajib Pakai Dockerfile)

Panduan langkah demi langkah memakai App Hosting dari GitHub: syarat Dockerfile, port, environment variables, build ulang otomatis setiap push, dan cara mengatasi masalah yang paling sering muncul.

October 29, 2026
Cara Deploy Aplikasi dari GitHub di Dalang.io (Wajib Pakai Dockerfile)

Deploy dari GitHub ke Dalang.io, Langkah demi Langkah

App Hosting dari GitHub membangun repository kamu menjadi aplikasi yang online di alamat seperti https://nama-aplikasi-1a2b3c4d.svc.dalang.io. Setiap kali kamu git push ke branch yang dipilih, aplikasi dibangun ulang dengan sendirinya.

Ada satu syarat yang tidak bisa dilewati: repository harus punya file Dockerfile. Dockerfile adalah cara kamu memberi tahu Dalang.io bagaimana aplikasimu dibangun dan dijalankan. Tanpa itu, build tidak bisa dimulai. Panduan ini menjelaskan syarat-syaratnya, lalu langkah deploy dan perawatan sehari-hari.


Syarat sebelum mulai

  1. Akun Dalang.io dengan kredit yang cukup. Pembayaran dari saldo kredit atau lewat Xendit.
  2. Akun GitHub yang sudah terhubung ke Dalang.io. Ini cukup dilakukan sekali, lewat login GitHub di dashboard.
  3. Repository dengan Dockerfile di folder paling atas (root). Namanya harus persis Dockerfile, dengan huruf D besar, tanpa ekstensi. Dockerfile yang ada di subfolder tidak dibaca.
  4. Image dasar berbasis Alpine. Ini yang paling sering terlewat, dijelaskan di bawah.
  5. Aplikasi yang mendengarkan di satu port (yang kamu tulis di EXPOSE).

Kenapa harus Alpine?

Aplikasi dijalankan sebagai container sistem ringan yang memakai tool Alpine Linux di dalamnya untuk jaringan dan menjalankan aplikasi. Image berbasis Debian atau Ubuntu tetap bisa dibuild, tetapi tidak bisa menyala. Jadi pilih varian -alpine:

BahasaGunakanHindari
Node.jsnode:22-alpinenode:22, node:22-slim
Pythonpython:3.12-alpinepython:3.12, python:3.12-slim
PHPphp:8.3-cli-alpinephp:8.3-apache
Gobuild di golang:1.21-alpine, jalankan di alpine:latestgolang biasa sebagai image akhir

Kalau pustaka yang kamu pakai butuh paket sistem, pasang dengan apk add di Dockerfile.


Contoh Dockerfile

Semua contoh di bawah bisa kamu lihat dan salin dari repository publik kami: example-app-go, example-app-php, dan example-app-fastapi.

Node.js

FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Go (multi-stage, hasil akhir kecil)

FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod ./
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/main .
EXPOSE 3000
CMD ["./main"]

PHP

FROM php:8.3-cli-alpine
WORKDIR /app
COPY . /app
EXPOSE 8000
CMD ["php", "-S", "0.0.0.0:8000", "-t", "/app"]

Python (FastAPI)

FROM python:3.12-alpine
WORKDIR /app
RUN pip install fastapi "uvicorn[standard]"
COPY main.py .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Dua hal yang berlaku untuk semua bahasa:

  • Aplikasi harus mendengarkan di 0.0.0.0, bukan hanya 127.0.0.1, supaya bisa dijangkau dari luar container.
  • Tulis EXPOSE dengan port yang benar-benar dipakai aplikasi. Dari situlah port terdeteksi saat kamu membuat aplikasi.

Langkah deploy di dashboard

  1. Buka Services, lalu Create, dan pilih App Hosting dari GitHub.
  2. Pilih repository. Daftarnya memuat semua repository yang bisa diakses akun GitHub-mu, dan ada kolom pencarian.
  3. Pilih branch. Dashboard memeriksa apakah ada Dockerfile di branch itu dan memberi tahu hasilnya. Tanpa Dockerfile, kamu tidak bisa lanjut.
  4. Cek port. Port terisi otomatis dari EXPOSE dan diberi tanda “Terdeteksi dari Dockerfile”. Kalau Dockerfile-mu tidak punya EXPOSE, isi sendiri port yang didengarkan aplikasimu.
  5. Isi environment variables jika perlu, misalnya DATABASE_URL atau kunci API. Ini opsional. Variabel PORT sudah diatur otomatis sesuai port di atas.
  6. Pilih periode dan cara bayar. Satu bulan Rp 25.000, atau satu tahun Rp 300.000 yang sudah termasuk custom domain gratis. Harga belum termasuk PPN 11%, jadi totalnya Rp 27.750 per bulan atau Rp 333.000 per tahun. Dashboard menampilkan total akhir sebelum kamu mengonfirmasi.
  7. Tinjau dan buat. Setelah pembayaran berhasil, build dimulai otomatis dan kamu dibawa ke halaman detail aplikasi.

Tunggu status berubah dari Building menjadi Running. Alamat aplikasimu ada di tab Overview, pada bagian Deployment Info.

Paket standar memberi 1 core CPU, RAM 128 MiB, dan penyimpanan 2 GiB untuk container aplikasi.


Build ulang otomatis setiap push

Saat aplikasi dibuat, Dalang.io memasang webhook di repository-mu. Mulai saat itu:

  1. Kamu git push ke branch yang dipilih.
  2. GitHub memberi tahu Dalang.io.
  3. Dalang.io mengambil kode terbaru, membangun ulang image dari Dockerfile-mu, lalu mengganti container lama dengan yang baru.

Beberapa hal yang perlu kamu tahu:

  • Build ulang hanya berjalan selama langganan aktif.
  • Setiap build memakan waktu beberapa menit. Saat container diganti, aplikasi sempat tidak tersedia sebentar.
  • Kamu bisa memicu build tanpa push lewat tombol Rebuild di halaman detail.
  • Perkembangan build bisa dilihat di tab Build Logs. Kalau build gagal, penyebabnya ada di sana.

Mengelola aplikasi setelah online

Halaman detail aplikasi punya beberapa tab:

TabGunanya
OverviewStatus, spesifikasi, alamat aplikasi, dan info langganan
TerminalShell langsung ke container aplikasi untuk memeriksa sesuatu
EnvironmentMengubah port dan environment variables
Build LogsRiwayat build dan log lengkapnya
Running LogsLog aplikasi yang sedang berjalan
Access & networkDomain dan akses

Mengubah environment variables

Buka tab Environment, tambah, ubah, atau hapus variabel, lalu pilih Save and rebuild. Variabel yang disimpan dipakai mulai build berikutnya. Aplikasi yang sedang berjalan tidak berubah sebelum di-rebuild, karena itu tombol Save and rebuild menyimpan dan langsung membangun ulang. Nilai variabel disamarkan sampai kamu memilih Show values.

Mengubah port

Port juga diatur di tab Environment. Port awal diambil dari EXPOSE, dan ikut berubah saat kamu mengganti EXPOSE di Dockerfile, selama kamu belum menetapkan port lain secara manual. Kalau kamu sudah mengisi port sendiri, port itu tidak akan diganti otomatis. Log build memberi peringatan bila EXPOSE atau variabel PORT tidak sama dengan port yang dipakai. Perubahan port juga berlaku mulai build berikutnya.


Aplikasi ini stateless

Container dibangun ulang dari Dockerfile pada setiap build. File yang ditulis aplikasi ke disk container akan hilang saat build berikutnya. Simpan data di tempat lain:

  • Database di container Dalang.io (PostgreSQL, MySQL, MariaDB, atau Redis), lalu sambungkan lewat environment variable.
  • Layanan penyimpanan eksternal untuk berkas unggahan.

Kalau ada yang tidak berjalan

GejalaPenyebab yang paling umumYang dilakukan
Tidak bisa melanjutkan di langkah repositoryTidak ada Dockerfile di root branch ituTambahkan, namanya persis Dockerfile, lalu pilih branch yang benar
Build gagalKesalahan di Dockerfile atau kodenyaBaca tab Build Logs dari bawah
Build berhasil tetapi aplikasi tidak menyalaImage dasar bukan AlpineGanti ke varian -alpine
Aplikasi “Running” tetapi halaman error 502Aplikasi mendengarkan di port yang berbeda dari port aplikasi, atau hanya di 127.0.0.1Samakan port di tab Environment, dan dengarkan di 0.0.0.0
Perubahan environment tidak terasaBelum di-rebuildPilih Save and rebuild atau tombol Rebuild
Data hilang setelah buildAplikasi menyimpan data di disk containerPindahkan ke database atau penyimpanan eksternal
Push tidak memicu buildBranch yang di-push bukan branch aplikasi, atau langganan sudah berakhirCek branch di Deployment Info dan masa aktif langganan

Ringkasannya

  1. Siapkan Dockerfile di root repository, dengan image dasar Alpine, EXPOSE yang benar, dan aplikasi yang mendengarkan di 0.0.0.0.
  2. Hubungkan GitHub sekali, lalu buat aplikasi di Create → App Hosting dari GitHub.
  3. Setiap git push ke branch aplikasi membangun ulang aplikasi otomatis.
  4. Ubah environment variables dan port di tab Environment, lalu rebuild.
  5. Anggap container stateless: data penting disimpan di luar container.

Siap mencoba? Buat aplikasi dari GitHub sekarang.