7.4 KiB
Deploy Production
Dokumen ini menyiapkan deploy production untuk:
- domain
abelbirdnest.id - reverse proxy
nginx - aplikasi Next.js di port
3007 - database
PostgreSQL - source code dari git
https://git.iptek.co/wirabasalamah/AbelBirdNest-Stock.git - user service khusus
abelbirdnest
1. Persiapan Server
Siapkan:
- Node.js LTS
- npm
- PostgreSQL
- nginx
- certbot / SSL Let’s Encrypt
Direktori contoh:
/var/www/abelbirdnest-web
2. Buat User Khusus Aplikasi
Jalankan sebagai root atau dengan sudo:
sudo useradd -r -m -d /var/www/abelbirdnest-web -s /bin/bash abelbirdnest
sudo mkdir -p /var/www/abelbirdnest-web
sudo chown -R abelbirdnest:abelbirdnest /var/www/abelbirdnest-web
Catatan:
- user
abelbirdnestdipakai khusus untuk menjalankan service aplikasi - jangan jalankan app production dengan user pribadi atau
root
3. Clone Repo dari Git
Masuk sebagai user aplikasi:
sudo -u abelbirdnest -H bash
cd /var/www/abelbirdnest-web
git clone https://git.iptek.co/wirabasalamah/AbelBirdNest-Stock.git .
Kalau server butuh autentikasi git internal, siapkan credential sesuai kebijakan server Git Anda.
4. Environment Production
Salin .env.production.example menjadi .env.production, lalu isi nilainya.
Yang wajib:
NODE_ENV=production
PORT=3007
APP_URL=https://abelbirdnest.id
DATABASE_URL=postgresql://...
AUTH_SECRET=...
AUTH_BOOTSTRAP=false
SMTP_HOST=...
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=...
SMTP_PASSWORD=...
SMTP_FROM=...
Catatan:
AUTH_SECRETharus random panjang.AUTH_BOOTSTRAP=falsewajib untuk production.APP_URLharus domain production final.
5. Inisialisasi Database PostgreSQL
Contoh di bawah memakai:
- database:
abelbirdnest_prod - database user:
abelbirdnest_app - host:
127.0.0.1 - port:
5432
Masuk ke PostgreSQL sebagai superuser:
sudo -u postgres psql
Buat user database:
CREATE USER abelbirdnest_app WITH PASSWORD '72ed04ddd2bb520eacae7f4b71a16b0d';
Buat database production:
CREATE DATABASE abelbirdnest_prod OWNER abelbirdnest_app;
Pastikan owner database benar:
ALTER DATABASE abelbirdnest_prod OWNER TO abelbirdnest_app;
Opsional tapi disarankan, kunci privilege default:
REVOKE ALL ON DATABASE abelbirdnest_prod FROM PUBLIC;
GRANT ALL PRIVILEGES ON DATABASE abelbirdnest_prod TO abelbirdnest_app;
Keluar dari psql:
\q
Tes koneksi:
psql "postgresql://abelbirdnest_app:72ed04ddd2bb520eacae7f4b71a16b0d@127.0.0.1:5432/abelbirdnest_prod?schema=public"
Jika koneksi berhasil, pakai URL itu di .env.production:
DATABASE_URL="postgresql://abelbirdnest_app:ganti-dengan-password-yang-kuat@127.0.0.1:5432/abelbirdnest_prod?schema=public"
6. Install Dependency, Database & Migration
Repo ini sudah disiapkan memakai migration Prisma.
Jalankan:
cd /var/www/abelbirdnest-web
npm install
npm run prisma:generate
npm run prisma:migrate:deploy
Kalau perlu isi master awal:
npm run seed:master
Data seed yang dibawa:
- grade
- bank
- currency
Urutan pertama kali untuk fresh database:
cd /var/www/abelbirdnest-web
npm install
npm run prisma:generate
npm run prisma:migrate:deploy
npm run seed:master
Catatan:
prisma:migrate:deployakan membuat seluruh tabel dari migration yang ada di reposeed:masterhanya mengisi data awalgrade,bank, dancurrency- user login production tetap harus dibuat terpisah, jangan mengandalkan akun dev/default
7. User Login Awal Production
Sistem login tidak punya user production bawaan permanen.
Di kode memang ada akun default, tetapi akun itu hanya dibuat jika:
AUTH_BOOTSTRAP=true
Jika production langsung memakai:
AUTH_BOOTSTRAP=false
maka akun login awal tidak akan ada.
Opsi yang paling praktis: bootstrap sementara
- Ubah
.env.productionsementara menjadi:
AUTH_BOOTSTRAP=true
- Build dan jalankan aplikasi:
cd /var/www/abelbirdnest-web
npm run build
sudo systemctl restart abelbirdnest-web
- Login pertama kali lewat:
- web:
https://abelbirdnest.id/login - API:
POST /api/v1/auth/login
Identity bisa memakai email atau username.
- Akun default yang akan tersedia saat bootstrap aktif:
admin/admin123owner/owner123purchasing/purchasing123warehouse/warehouse123qc/qc123sales/sales123
Email default:
admin@abelbirdnest.localowner@abelbirdnest.localpurchasing@abelbirdnest.localwarehouse@abelbirdnest.localqc@abelbirdnest.localsales@abelbirdnest.local
- Setelah berhasil login, segera buat user production final dari menu
Users.
Minimal disarankan:
- 1 user
SYSTEM_ADMINatauADMIN - 1 user
OWNER - user operasional sesuai kebutuhan:
PURCHASING,WAREHOUSE,QC,SALES
- Setelah user production final selesai dibuat dan sudah dites login:
- ubah lagi
.env.productionmenjadi:
AUTH_BOOTSTRAP=false
- restart service:
sudo systemctl restart abelbirdnest-web
- Opsional tapi sangat disarankan:
- nonaktifkan atau hapus akun default bootstrap dari menu
Users - ganti semua password default jika akun tersebut tetap dipertahankan sementara
Catatan keamanan
- Jangan biarkan
AUTH_BOOTSTRAP=trueaktif terus di production. - Jangan gunakan password default untuk operasi harian.
- Setelah bootstrap selesai, verifikasi bahwa login masih normal memakai user production yang baru dibuat.
8. Build Production
npm run build
9. Jalankan App di Port 3007
Manual:
PORT=3007 npm run start
Atau gunakan systemd dari:
deploy/systemd/abelbirdnest-web.service
Contoh setup:
sudo cp deploy/systemd/abelbirdnest-web.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable abelbirdnest-web
sudo systemctl start abelbirdnest-web
sudo systemctl status abelbirdnest-web
Autostart saat server restart terjadi karena service di-enable.
Untuk verifikasi:
sudo systemctl is-enabled abelbirdnest-web
10. Reverse Proxy Nginx
Gunakan file:
deploy/nginx/abelbirdnest.id.conf
Pasang:
sudo cp deploy/nginx/abelbirdnest.id.conf /etc/nginx/sites-available/abelbirdnest.id.conf
sudo ln -s /etc/nginx/sites-available/abelbirdnest.id.conf /etc/nginx/sites-enabled/abelbirdnest.id.conf
sudo nginx -t
sudo systemctl reload nginx
11. Health Check
Endpoint health:
GET /api/v1/health
Contoh:
curl https://abelbirdnest.id/api/v1/health
12. Update Deployment Berikutnya
Jika aplikasi sudah live dan ada update dari git:
cd /var/www/abelbirdnest-web
git pull origin main
npm install
npm run prisma:migrate:deploy
npm run build
sudo systemctl restart abelbirdnest-web
Jika branch utama nanti bukan main, sesuaikan perintah git pull.
12. Checklist Go-Live
AUTH_BOOTSTRAP=falseAUTH_SECRETsudah production-gradeAPP_URL=https://abelbirdnest.id- SSL aktif
- database backup aktif
npm run buildlulusnpm run prisma:migrate:deploylulusnpm run seed:masterselesai jika dibutuhkan- login, reset password, dan email verifikasi sudah dites
- create purchase, receipt, lot, sale sudah dites
13. Catatan Penting
- Jangan pakai
npm run db:pushuntuk production. - Jangan pakai akun default development.
- Jangan simpan
.env.productiondi repo. - Pastikan ownership file tetap
abelbirdnest:abelbirdnest.