Kesalahan Umum Deployment dan Cara Mengatasinya
Daftar kesalahan yang sering terjadi saat deployment beserta solusi praktisnya di getlaunch.dev.
Kenapa Deployment Gagal?
Deployment yang gagal bisa membuat frustasi, terutama saat deadline mendekat. Berita baiknya, sebagian besar kegagalan disebabkan oleh masalah yang sama dan mudah diperbaiki.
Di getlaunch.dev, kamu bisa melihat deployment logs secara real-time untuk membantu debugging. Berikut daftar kesalahan paling umum dan cara mengatasinya.
1. Port yang Salah atau Tidak Dikonfigurasi
Masalah: Aplikasi berjalan tapi tidak bisa diakses dari luar.
Penyebab: Port yang didefinisikan di project tidak sesuai dengan port yang di-listen oleh aplikasi.
Solusi:
// ✅ Gunakan port yang konsisten
const PORT = 3000;
app.listen(PORT, "0.0.0.0", () => {
console.log(`Server running on port ${PORT}`);
});
Pastikan port di konfigurasi project getlaunch.dev sesuai dengan port yang digunakan di code dan di-expose di Dockerfile:
EXPOSE 3000
Tips dari getlaunch.dev: Saat membuat project baru, pastikan field Port diisi sesuai dengan port yang digunakan oleh aplikasi kamu. Platform membutuhkan informasi ini untuk mengarahkan traffic ke container.
2. Dockerfile Tidak Ditemukan
Masalah: Build gagal dengan error "Dockerfile not found".
Penyebab: Dockerfile tidak ditemukan di path yang dikonfigurasi, atau nama file salah.
Solusi:
- Pastikan file bernama
Dockerfile(huruf besar D, tanpa ekstensi) - Pastikan path Dockerfile yang diset di konfigurasi project getlaunch.dev sesuai dengan lokasi file di repository
- Commit dan push ke branch yang benar
# Cek apakah Dockerfile ada
ls -la Dockerfile
# Jika belum ada, buat
touch Dockerfile
3. Menyimpan Data di Filesystem Lokal
Masalah: Data hilang setelah container restart atau re-deploy.
Penyebab: Menulis file ke filesystem container yang bersifat ephemeral.
Solusi: Gunakan external service untuk semua data yang perlu persisten:
// ❌ JANGAN: Simpan di filesystem lokal
fs.writeFileSync("/app/data/users.json", JSON.stringify(users));
// ✅ GUNAKAN: External database
await db.query("INSERT INTO users (name, email) VALUES ($1, $2)", [
name,
email,
]);
Kenapa getlaunch.dev menggunakan arsitektur stateless? Karena ini memungkinkan scale to zero — kamu hanya bayar saat ada request. Baca lebih lanjut di Arsitektur Stateless.
4. Dependency yang Tidak Ter-install
Masalah: Build berhasil tapi aplikasi crash saat start dengan "Module not found".
Penyebab: package.json tidak lengkap atau ada dependency yang hanya di-install secara global.
Solusi:
# Pastikan semua dependency ter-install
COPY package*.json ./
RUN npm ci
# JANGAN gunakan npm install tanpa lock file
# npm ci lebih cepat dan lebih reliable
Pastikan semua dependency yang digunakan ada di package.json:
# Cek apakah ada import yang tidak ada di package.json
npm ls
5. Environment Variables yang Belum Di-set
Masalah: Aplikasi crash dengan error seperti "Cannot read property of undefined" atau koneksi database gagal.
Penyebab: Environment variables belum dikonfigurasi di platform.
Solusi:
Di getlaunch.dev, tambahkan environment variables di halaman project settings:
DATABASE_URL— Connection string databaseAPI_KEY— API key untuk external serviceNODE_ENV— Set keproduction
// Validasi environment variables saat startup
const required = ["DATABASE_URL", "API_KEY"];
for (const key of required) {
if (!process.env[key]) {
console.error(`Missing required env var: ${key}`);
process.exit(1);
}
}
Tips: Jangan pernah commit file .env ke repository. Gunakan fitur environment variables di dashboard getlaunch.dev.
6. Build Timeout
Masalah: Build berhenti di tengah jalan karena timeout.
Penyebab: Build process terlalu lama, biasanya karena dependency yang besar atau build step yang tidak optimal.
Solusi:
# ✅ Gunakan multi-stage build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["node", "dist/index.js"]
# ✅ Gunakan .dockerignore
node_modules
.git
.env
*.md
tests
7. Health Check Gagal
Masalah: Container ter-deploy tapi terus restart.
Penyebab: Aplikasi tidak merespons health check dari platform.
Solusi:
// Tambahkan health check endpoint
app.get("/health", (req, res) => {
res.status(200).json({ status: "ok", timestamp: new Date().toISOString() });
});
Pastikan aplikasi sudah siap menerima request saat container start. Jika ada proses inisialisasi yang lama, pastikan health check tetap merespons:
let isReady = false;
// Inisialisasi async
async function init() {
await connectToDatabase();
await loadCache();
isReady = true;
}
app.get("/health", (req, res) => {
if (isReady) {
res.status(200).json({ status: "ok" });
} else {
res.status(503).json({ status: "initializing" });
}
});
init();
8. Image Docker Tidak Ditemukan
Masalah: Deploy dari Docker image gagal dengan error "image not found".
Penyebab: Image name salah atau image bersifat private.
Solusi:
- Pastikan image name lengkap dengan registry dan tag:
ghcr.io/user/app:v1.0 - Pastikan image bersifat public — getlaunch.dev saat ini hanya mendukung public images
- Coba pull image secara lokal untuk memastikan:
docker pull <image-name>
Debugging di getlaunch.dev
Deployment Logs
Setiap deployment memiliki log yang bisa dilihat secara real-time di dashboard. Log ini menampilkan output dari proses build dan startup.
Runtime Logs
Setelah deployment berhasil, kamu bisa melihat runtime logs untuk melihat output dari aplikasi yang berjalan, termasuk error dan console.log.
Request ID
Jika kamu mengalami error, setiap error response dari API getlaunch.dev menyertakan Request ID unik. Salin ID ini dan kirimkan ke support untuk debugging yang lebih cepat.

