Website publik dan panel admin untuk Mitra Coffeeshop, dibangun dengan TanStack Start, React 19, TypeScript, Tailwind CSS, Node.js, dan SQLite.
- Publik: coffeeshop.itmivhs.net
- Admin: admin-coffeeshop.itmivhs.net
- Data konten: SQLite lokal pada server
- Upload: JPG, PNG, atau WebP maksimal 5 MB, otomatis dioptimalkan menjadi WebP
Gunakan Node.js 22+ dan npm. Bun tidak dipakai sebagai runtime karena backend menggunakan node:sqlite.
npm ci
cp .env.example .env.localIsi .env.local dengan password awal minimal 12 karakter dan session secret minimal 32 karakter. Session secret bisa dibuat dengan:
openssl rand -base64 32Jalankan pada dua terminal:
npm run dev
npm run dev:admin- Website publik: http://127.0.0.1:8082
- Panel admin: http://127.0.0.1:8081/admin
Kedua proses membaca .env.local dan memakai direktori COFFEE_DATA_DIR yang sama (default .data/content.sqlite). Port publik lokal memakai 8082; port 8080 dapat tetap dipakai aplikasi lain. Setelah akun admin pertama tersimpan, ganti username atau password dari menu Akun di panel admin.
- Menu: cari/filter menu, tambah menu/kategori, klik menu untuk mengedit harga/foto/status. Label dan warna berada di Pengaturan tambahan.
- Galeri: tambah/ganti foto, edit judul dan tag, atur tampil/sembunyi serta urutan.
- Beranda: pilih Teks hero, Foto, atau Promo & strip; preview mengikuti draft secara realtime.
- Informasi Toko: kontak, tautan pemesanan, alamat, jam buka, dan FAQ.
- Akun: perbarui kredensial dengan verifikasi password saat ini.
Selesai edit menutup editor tanpa memublikasikan. Simpan memublikasikan seluruh draft; Batalkan draft mengembalikan versi terakhir yang disimpan. Simpan menunggu upload selesai. Jika tab lain lebih dulu menyimpan, panel menolak penimpaan dan mempertahankan draft.
Kebutuhan lengkap dan pengembangan berikutnya: PRD Admin. Hasil verifikasi dan batas QA: audit admin.
npm run check
npm run build
npm audit --omit=devAudit dependensi pada 5 Oktober 2026 melaporkan 0 vulnerability, baik dengan --omit=dev maupun audit seluruh dependensi. Jalankan ulang saat menyiapkan release karena advisory dapat berubah.
Build menghasilkan server Node di .output/server/index.mjs. Satu build dijalankan sebagai dua service terpisah:
mitra-coffeeshop.service→127.0.0.1:3001untuk domain publik.mitra-coffeeshop-admin.service→127.0.0.1:3002untuk subdomain admin.
Keduanya berbagi /home/it/.local/share/mitra-coffeeshop untuk database dan upload. Nginx hanya meneruskan traffic domain publik ke port 3001 dan subdomain admin ke port 3002.
Prasyarat:
- DNS
coffeeshop.itmivhs.netdanadmin-coffeeshop.itmivhs.netmengarah ke IP server. - Server memiliki Git, Nginx, Certbot, Node.js 22+, npm, dan user deployment bernama
it. - Firewall membuka port 80 dan 443; port 3001/3002 tetap hanya mendengar pada
127.0.0.1.
Clone menggunakan path yang dipakai service:
git clone https://github.com/teamitmivhs/mitra_coffeeshop.git /home/it/mitra-coffeeshop
cd /home/it/mitra-coffeeshopBuat file environment di luar repository:
mkdir -p /home/it/.config
chmod 700 /home/it/.config
openssl rand -hex 32
nano /home/it/.config/mitra-coffeeshop.env
chmod 600 /home/it/.config/mitra-coffeeshop.envIsi file tersebut dengan nilai asli. Jangan salin contoh password berikut apa adanya:
ADMIN_INITIAL_USERNAME=admin
ADMIN_INITIAL_PASSWORD=ganti-dengan-password-kuat
ADMIN_SESSION_SECRET=tempel-hasil-openssl-di-siniJangan tambahkan COFFEE_DATA_DIR=.data ke environment produksi. Service sudah menetapkan direktori persisten absolut. Jalankan deployment dan aktifkan user service saat user it sedang logout:
sudo loginctl enable-linger it
./deploy.shPasang reverse proxy, uji konfigurasi, kemudian aktifkan HTTPS:
sudo install -m 644 nginx.conf.example /etc/nginx/conf.d/mitra-coffeeshop.conf
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d coffeeshop.itmivhs.net -d admin-coffeeshop.itmivhs.netLogin admin produksi hanya bekerja melalui HTTPS karena cookie sesi menggunakan atribut Secure.
Verifikasi akhir:
systemctl --user status mitra-coffeeshop.service mitra-coffeeshop-admin.service
curl -I https://coffeeshop.itmivhs.net
curl -I https://admin-coffeeshop.itmivhs.net/adminSetelah perubahan sudah dipush ke branch main, jalankan di server:
cd /home/it/mitra-coffeeshop
./deploy.shScript menolak working tree server yang kotor, mengambil commit terbaru dengan fast-forward, menjalankan clean install, release checks, build, restart dua service, health check, dan memastikan route admin tetap tidak tersedia dari surface publik.
Sebelum perubahan besar, backup database dan upload secara konsisten:
systemctl --user stop mitra-coffeeshop.service mitra-coffeeshop-admin.service
mkdir -p /home/it/backups
cp -a /home/it/.local/share/mitra-coffeeshop "/home/it/backups/mitra-coffeeshop-$(date +%F-%H%M%S)"
systemctl --user start mitra-coffeeshop.service mitra-coffeeshop-admin.serviceYang dipush:
- Source TypeScript/React dan asset bawaan.
package.jsonsertapackage-lock.json..env.example, service systemd,deploy.sh, dan contoh Nginx.
Yang tidak dipush:
.env,.env.local, atau secret produksi..data/, database SQLite, WAL/SHM, dan upload admin..21st/sertadesign.mdlokal..output/,dist/,node_modules/, log, private key, dan sertifikat TLS.
Lisensi: MIT.
