🚀 Panduan Deployment PosPro di Home Server (Cloudflare Tunnel)
Panduan ini akan membantu Anda meng-install dan memublikasikan aplikasi PosPro di Home Server Anda (misal: Ubuntu Linux) menggunakan MySQL, PM2 (sebagai process manager), dan Cloudflare Zero Trust Tunnel agar bisa diakses publik menggunakan nama domain/subdomain tanpa perlu membuka port di router (Port Forwarding).
📋 Persyaratan Sistem (Prerequisites)
Pastikan Home Server Anda sudah terinstal:
- Node.js (v18 atau v20 ke atas) & npm.
- Git (untuk clone repositori).
- MySQL Server (versi 8+ disarankan).
- PM2 (Process Manager untuk Node.js). Install global dengan:
npm install -g pm2 - Akun Cloudflare aktif dengan domain yang sudah tertaut ke Cloudflare.
🛠️ Langkah 1: Persiapan Database MySQL
Masuk ke MySQL command line di server Anda:
sudo mysql -u root -pBuat database baru untuk PosPro (misalnya bernama pospro_db):
CREATE DATABASE pospro_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'pospro_user'@'localhost' IDENTIFIED BY '<PASSWORD_ANDA>';
GRANT ALL PRIVILEGES ON pospro_db.* TO 'pospro_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;📥 Langkah 2: Clone Repositori
Tarik (clone) kode aplikasi PosPro Anda ke dalam server:
cd ~
git clone https://github.com/tsunosora/Pos-Web-Application.git pospro
cd pospro⚙️ Langkah 3: Konfigurasi & Menjalankan Backend (NestJS)
Masuk ke folder backend dan atur environment variabelnya.
cd backend
npm install
cp .env.example .envEdit file .env (misal menggunakan nano .env) dan sesuaikan DATABASE_URL ke akun MySQL yang baru Anda buat, serta tentukan port jalan backend:
# Ubah kredensial sesuai dengan MySQL yang Anda buat di Langkah 1
DATABASE_URL="mysql://pospro_user:<PASSWORD_ANDA>@localhost:3306/pospro_db"
PORT=3001
JWT_SECRET="ganti_dengan_secret_key_yang_sangat_rumit_dan_panjang_sekali"
# Pengaturan WhatsApp Bot (Opsional direkap nanti)
WHATSAPP_REPORT_GROUP_ID=""Setelah .env sesuai, jalankan migrasi database agar tabel-tabel terbuat:
npx prisma generate
npx prisma migrate deploy(Opsional) Jika ini server baru dan tabel masih kosong, jalankan seeding data awal:
npx prisma db seed(PENTING): Build aplikasi NestJS ke versi produksi dan jalankan menggunakan PM2:
npm run build
pm2 start dist/main.js --name "pospro-backend"Aplikasi Backend sekarang berjalan di latar belakang pada port 3001 (atau sesuai isi .env). Simpan status PM2 agar otomatis jalan saat server restart:
pm2 save
pm2 startup🖥️ Langkah 4: Konfigurasi & Menjalankan Frontend (Next.js)
Sekarang pindah ke folder frontend.
cd ../frontend
npm install
cp .env.example .env.localEdit file .env.local (misal: nano .env.local). Arahkan NEXT_PUBLIC_API_URL ke domain public yang nantinya akan diarahkan ke backend (kita asumsikan Anda akan mendeploy backend di api.domainanda.com).
# URL Publik Backend yang akan dibuat di Cloudflare
NEXT_PUBLIC_API_URL="https://api.domainanda.com"Lakukan build pada Next.js (proses ini mengkompilasi file React menjadi statik & server optimal):
npm run buildJalankan Frontend Next.js dengan PM2:
pm2 start npm --name "pospro-frontend" -- start -- -p 3000Simpan lagi pengaturan PM2: pm2 save.
Saat ini:
- Backend berjalan di
localhost:3001 - Frontend berjalan di
localhost:3000
🌐 Langkah 5: Setup Cloudflare Zero Trust Tunnel
Cloudflare Tunnel (cloudflared) akan menghubungkan localhost Anda dengan domain publik tanpa harus ribet setting port di router WiFi/ISP (tidak perlu IP Statis/Public).
5.1. Buka Cloudflare Zero Trust Dashboard
- Buka one.dash.cloudflare.com
- Masuk ke menu Networks -> Tunnels
- Klik Create a tunnel.
- Pilih Cloudflared (connector).
- Beri nama tunnel (contoh:
pospro-home-server). Kemudian Save tunnel. - Cloudflare akan menampilkan perintah install
cloudflareduntuk berbagai OS. - Pilih Debian/Ubuntu (atau sesuai Linux Anda), copy perinthanya, dan paste di terminal Home Server Anda.
- Tunggu hingga di dashboard Cloudflare status koneksinya berubah menjadi Connected atau Healthy, lalu klik Next.
5.2. Routing Subdomain
Di halaman Public Hostnames, tambahkan rute agar sub-domain Anda nyambung ke port lokal yang tepat.
A. Membuat Routing untuk FRONTEND (User Akses):
- Subdomain:
pos(nantinya menjadipos.domainanda.com) - Domain: Pilih domain Anda yang aktif di Cloudflare.
- Service Type:
HTTP - URL:
localhost:3000 - Klik Save hostname
B. Membuat Routing untuk BACKEND (API Akses):
- Klik Add public hostname lagi.
- Subdomain:
api(nantinya menjadiapi.domainanda.com) - Domain: Pilih domain Anda.
- Service Type:
HTTP - URL:
localhost:3001 - Klik Save hostname
(Catatan: Pastikan NEXT_PUBLIC_API_URL di folder frontend Langkah 4 benar-benar sama dengan URL api.domainanda.com yang baru Anda buat, serta diawali dengan https://.)
🎉 Langkah 6: Selesai!
Sekarang Anda bisa mengakses aplikasi PosPro via internet melalui:
- Aplikasi Web: https://pos.domainanda.com
Semua komunikasi via domain Cloudflare tersebut sudah Otomatis HTTPS (SSL/TLS terenkripsi).
🔄 Tips Maintenance
- Melihat log (pesan error):
pm2 logs - Restart backend (misal habis ganti file):
pm2 restart pospro-backend - Restart frontend:
pm2 restart pospro-frontend
Aplikasi kini aman, online secara publik, dan berjalan live 24/7 dari Home Server Anda!