# Instalasi BereaWare terpisah BereaWare memakai Next.js untuk CMS/konten/form, Go untuk API, PostgreSQL 18 dan Flutter untuk jemaat. Database baru kosong; onboarding pemilik dilakukan melalui CMS dengan setup token. Tidak ada akun demo otomatis. Jangan memakai data jemaat nyata untuk staging. Prasyarat: Linux x86-64, Docker Engine dengan Compose v2, Node.js 24 untuk utilitas operasional, Caddy sebagai reverse proxy HTTPS, dan enam host DNS yang Anda kuasai. Alokasikan memori untuk sistem dan layanan lain; total batas container steady state sekitar 2.1 GiB, belum termasuk cache/build. Build Next/Flutter dapat memerlukan lebih banyak RAM; bangun serial atau pada mesin terpisah. Tidak ada script yang memasang Docker atau mengganti Caddy sistem otomatis. Dari source atau arsip yang telah diperiksa SHA-256: ```sh node deploy/configure.mjs --domain example.org --prefix staging --project bereaware-staging --out /private/bereaware-staging node deploy/configure.mjs --check /private/bereaware-staging/staging.env sh deploy/staging.sh /private/bereaware-staging/staging.env validate sh deploy/staging.sh /private/bereaware-staging/staging.env build sh deploy/staging.sh /private/bereaware-staging/staging.env start node deploy/smoke.mjs /private/bereaware-staging/staging.env ``` Gunakan direktori privat yang belum ada dan parent yang sudah tersedia. Generator menolak overwrite. Berkas `.env` dan fragmen Caddy bermode 0600, direktori 0700. Simpan di luar source/release dan backup terenkripsi. Jangan memakai `docker compose config` tanpa `--quiet`: output memuat secrets. Semua origins HTTPS harus sesuai generator; project name memisahkan network dan volume. Pada host yang sama, setiap instalasi gereja/organisasi wajib memakai `--project` dan direktori konfigurasi yang berbeda; jangan memakai ulang project name atau volume instalasi lain. Port default hanya loopback 18380–18385 dan tidak dapat diubah menjadi `0.0.0.0`. Akses database hanya melalui network Compose. Build member memakai commit SDK Flutter 3.41.6 yang dipin (`db50e20168db8fee486b9abf32fc912de3bc5b6a`, lihat Dockerfile.member); konfigurasi tidak boleh berisi `NEXT_PUBLIC_SITE_PROXY_KEY` atau secret build Flutter. `FORMS_ORIGIN` dan `CONTENT_ORIGIN` adalah URL publik dan diterapkan saat build, sementara kunci proxy hanya tersedia pada runtime server. Generator menghasilkan enam blok HTTPS `staging.{api,cms,forms,content,jemaat,open-source}.example.org`. Fragmen tidak diaktifkan otomatis. Operator harus membuat DNS host eksplisit, membandingkan hash konfigurasi Caddy yang sedang aktif, membuat backup, menambahkan include/fragmen, lalu menjalankan `caddy validate` sebelum reload. Pastikan placeholder `{remote_host}` didukung Caddy 2.6.2 yang ada. Caddy menimpa dua header proxy dengan secret dan IP koneksi aktual; jangan memakai IP dari header X-Forwarded-For pengguna. Jangan menjalankan Caddy kedua pada 80/443. DNS/TLS nama bertingkat membutuhkan sertifikat host eksplisit; wildcard satu tingkat tidak mencakupnya. | Host | Port loopback | Permukaan | | --- | --- | --- | | CMS | 18380 | CMS dan API manajemen berautentikasi | | API | 18381 | `/api/health` saja | | Konten | 18382 | Next `APP_SURFACE=public`, path gereja | | Forms | 18383 | Next `APP_SURFACE=forms`, form publik | | Jemaat | 18384 | Flutter, `/api/public/*`, `/api/member/*` | | Open source | 18385 | Dokumen statis; tidak ada API | CMS memakai `PUBLIC_ORIGIN`, sementara konten/form/jemaat memakai origins masing-masing. Publikasikan gereja dan path aktif dari CMS; contoh path manusiawi bukan identitas database. Cookie sesi harus host-only, HttpOnly dan Secure pada HTTPS. Signup tidak berarti persetujuan keanggotaan. Staging mengirim `noindex, nofollow`; ini bukan mekanisme autentikasi. Compose ini berdiri sendiri. Jangan gabungkan dengan `compose.yaml` atau `compose.production.yaml`, jangan jalankan `down -v`, dan jangan tunjuk ke database instalasi lain. Rilis ini tidak mencakup SMTP, data Alkitab berlisensi, atau store/signing native. Uji operasional dan device/UAT merupakan bukti terpisah dari tes source dan validasi konfigurasi. Untuk verifikasi domain kustom dari CMS, sertakan `--public-ip ALAMAT_IP_VM` saat membuat konfigurasi. Nilai tersebut opsional untuk penggunaan host/path bersama, dan diteruskan sebagai `PUBLIC_IP` ke API. Gunakan alamat VM instalasi sendiri; contoh dokumentasi tidak mengarahkan domain ke server gereja lain. Aplikasi Flutter web memerlukan browser modern yang mendukung `BroadcastChannel`. Perubahan sesi antar-tab memakai sinyal tetap tanpa token atau data identitas. Setelah upgrade, muat ulang tab yang masih menjalankan bundle lama; tab lama tidak menerima kode baru secara retroaktif. Uji penerimaan dua tab harus memastikan logout/pergantian akun menghilangkan detail dan kartu akun sebelumnya pada tab lain. Client native tetap memakai penyimpanan sesi platformnya sendiri.