- GitHub Repository kita punya branch: main feature/landing-page feature/admin-page
Workflow: feature/* ↓ development ↓ merge ↓ main
main = source code yang siap untuk production.
- Mac Mini Mac Mini sekarang berfungsi sebagai host/server utama. Di dalamnya ada: Mac Mini │ ├── Lima VM │ └── cloudflared
Jadi Mac Mini belum menjalankan Astro langsung.
- Lima VM
VM ini yang menjalankan aplikasi production.
- Astro
Astro kita menggunakan SSR Node adapter. Build: npm run build
menghasilkan: dist/ └── server/ └── entry.mjs
Production dijalankan: npm start
yang sebenarnya menjalankan: node --env-file=.env dist/server/entry.mjs
Astro listen di: 0.0.0.0:4321
Sehingga bisa diakses dari LAN:
http://
- PostgreSQL PostgreSQL belum langsung di-install di VM. Kita pakai Docker: Docker └── myportfolio-postgres └── PostgreSQL 16
Data persistent menggunakan Docker volume: postgres_data
Jadi container mati → data tetap ada.
- systemd
Supaya Astro tidak perlu kita jalankan manual: npm start
kita bikin service: /etc/systemd/system/my-portfolio.service
Isinya kurang lebih:
[Service]
User=muhamadfikrinabilassyawali
WorkingDirectory=
Sekarang Linux yang menjaga aplikasi.
Kalau crash:
Astro crash ↓ systemd ↓ restart ↓ Astro hidup lagi
Dan ketika VM reboot: VM boot ↓ systemd ↓ my-portfolio ↓ Astro
- Cloudflare Tunnel
Di Mac Mini kita install: cloudflared
Cloudflared membuat koneksi: Mac Mini ↓ Cloudflare
Tanpa perlu membuka port router ke internet.
- Ingress
Ingress = aturan routing Cloudflare Tunnel.
Konsepnya:
fikrinabil.my.id
↓
cloudflared
↓
Config-nya secara konsep:
ingress:
hostname: fikrinabil.my.id service: http:
:4321 service: http_status:404
Artinya: Kalau request datang ke fikrinabil.my.id, teruskan ke Astro di VM.
Sedangkan:
- service: http_status:404
adalah fallback kalau hostname tidak cocok. Jadi Ingress bukan aplikasi baru. Dia cuma routing rule.
- DNS
Domain: fikrinabil.my.id
Nameserver sudah dipindahkan ke Cloudflare. Kemudian kita jalankan: cloudflared tunnel route dns my-portfolio fikrinabil.my.id
Cloudflare kemudian membuat routing DNS untuk tunnel.
