Menerapkan Proyek Astro dengan Dokploy dan Nixpacks serta Mengoptimalkan Cache untuk Mempercepat Build

1. Konfigurasi Dokploy
Dokploy adalah platform deployment open-source yang bisa di-host secara mandiri. Dirancang sebagai alternatif gratis untuk Heroku, Vercel, dan Netlify, Dokploy dibangun di atas Docker dan Traefik.
1. Buat proyek baru dan hubungkan ke repositori GitHub
2. Atur variabel lingkungan
NIXPACKS_NODE_VERSION=22
NIXPACKS_PNPM_STORE_PATH=/root/.local/share/pnpm/store/v3
NIXPACKS_INSTALL_CACHE_DIRS=/app/node_modules
NIXPACKS_BUILD_CACHE_DIRS=/app/node_modules/.cache,/app/astro_cache
3. Nonaktifkan pembersihan cache otomatis
- Layanan Proyek → Clean Cache: nonaktif
- Web Server → Daily Docker Cleanup: nonaktif
2. Mesin Build Nixpacks
Nixpacks adalah alat build open-source dari Railway yang mengubah kode sumber menjadi image Docker standar. Dokploy menggunakan Nixpacks sebagai mesin build default, dapat dikonfigurasi melalui file nixpacks.toml
atau nixpacks.json
.
Buat file nixpacks.toml
di direktori root proyek dan tentukan direktori cache.
Prioritas konfigurasi (rendah → tinggi):
- Logika default penyedia
nixpacks.toml
- Variabel lingkungan
- Argumen CLI
Variabel lingkungan umum
Variabel | Deskripsi |
---|---|
NIXPACKS_INSTALL_CMD | Perintah instalasi kustom |
NIXPACKS_BUILD_CMD | Perintah build kustom |
NIXPACKS_START_CMD | Perintah start kustom |
NIXPACKS_PKGS | Paket Nix tambahan |
NIXPACKS_APT_PKGS | Paket Apt tambahan |
NIXPACKS_INSTALL_CACHE_DIRS | Direktori cache selama instalasi |
NIXPACKS_BUILD_CACHE_DIRS | Direktori cache selama build |
NIXPACKS_NO_CACHE | Nonaktifkan cache (tidak disarankan) |
NIXPACKS_CONFIG_FILE | Tentukan file konfigurasi |
NIXPACKS_DEBIAN | Gunakan image dasar Debian |
3. Konfigurasi Proyek Astro
Astro adalah framework modern yang dirancang untuk situs berbasis konten seperti blog, halaman marketing, dan e-commerce. Bila situs memiliki banyak gambar dan sumber daya statis, proses build bisa melambat — tetapi dengan cache, kinerja bisa ditingkatkan.
1. Tentukan direktori cache build di konfigurasi Astro
Atur direktori cache di file astro.config.mjs
. Anda dapat menggunakan path relatif atau absolut.
// astro.config.mjs
export default defineConfig({
cacheDir: './astro_cache',
});
2. File Konfigurasi Cache Nixpacks
Buat file nixpacks.toml
di root proyek Astro dengan pengaturan direktori cache dan perintah build.
# Tentukan versi Node.js dan pnpm
[phases.setup]
nixPkgs = ["nodejs_22", "pnpm"]
# Instal dependensi dengan cache pnpm
[phases.install]
cmds = ["pnpm install --frozen-lockfile"]
cacheDirectories = ["/root/.local/share/pnpm/store/v3"]
# Build proyek dan aktifkan cache
[phases.build]
cmds = ["pnpm run build"]
cacheDirectories = [
"node_modules/.cache",
"astro_cache"
]
# Perintah start (placeholder, diasumsikan menggunakan NGINX untuk serve dist)
[start]
cmd = "echo 'Build selesai. Silakan gunakan NGINX untuk melayani direktori dist.'"
4. Optimalkan Konteks Build Docker
Tambahkan file .dockerignore
di root proyek Astro:
node_modules
astro_cache
dist
*.log
.DS_Store
.vscode
.env*
5. Deployment & Validasi
Setelah deployment otomatis via Dokploy, periksa log build untuk memastikan cache aktif:
1. Perintah build menggunakan mount cache
RUN --mount=type=cache,id=xxxx-node_modules/cache,target=/app/node_modules/.cache \
--mount=type=cache,id=xxxx-astro_cache,target=/app/astro_cache \
pnpm run build
2. Astro menggunakan entri cache yang telah digunakan sebelumnya (misalnya optimasi gambar)
▶ /_astro/202409272055577_Z2smeTW.avif (reused cache entry)
▶ /_astro/202409272055575_Z2wPyJN.avif (reused cache entry)
▶ /_astro/202409272055577_1IgP6g.avif (reused cache entry)
✅ Jika Anda melihat --mount=type=cache
dan reused cache entry
, itu artinya cache berjalan dengan baik dan build sudah dipercepat.
🎉 Di tab Deployments Dokploy, Anda bisa melihat bahwa waktu build menurun dari 31 menit menjadi hanya 3 menit dengan cache — sangat hemat waktu dan bandwidth.
6. Catatan Penting
- Pastikan nilai
cacheDir
(Astro) dancacheDirectories
(Nixpacks) konsisten - Definisikan direktori cache secara eksplisit di setiap fase
nixpacks.toml
mendukung"..."
untuk menggabungkan dengan variabel lingkungan- Secara default
node_modules/.astro
tidak termasuk dalam cache — tambahkan secara manual keastro_cache