# Instalasi BereaWare terpisah BereaWare memakai Next.js untuk Backoffice/konten/form, Go untuk API, PostgreSQL 18 dan Flutter untuk jemaat. Database baru kosong; onboarding pemilik dilakukan melalui Backoffice 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,backoffice,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 | | --- | --- | --- | | Backoffice | 18380 | Backoffice 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 | Backoffice memakai `PUBLIC_ORIGIN`, sementara konten/form/jemaat memakai origins masing-masing. Publikasikan gereja dan path aktif dari Backoffice; 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 Backoffice, 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. ## Host portal source tersendiri Opsional: tambahkan `--portal-host bereaware.example.org` saat menjalankan generator. Variabel `PORTAL_HOST` menentukan `PUBLIC_OPEN_SOURCE_ORIGIN`; origin Backoffice/API/konten/form/jemaat tetap mengikuti prefix yang dipilih. Gunakan hostname berbeda dari aplikasi lain. Konfigurasi lama tanpa variabel ini tetap berlaku. Untuk instalasi KEKRASO, portal memakai `bereaware.gpdikekraso.church`; layanan aplikasi tetap memakai alamat staging masing-masing. Fragmen Caddy menambahkan pengalihan308 dari host portal bawaan ke host baru, termasuk path unduhan/dokumentasi. Operator menambahkan DNS dan meninjau/validasi/reload konfigurasi Caddy; pengubahan env sendiri belum mengaktifkan DNS atau HTTPS. Pengaturan ini tidak membuka API pada portal. ## Nama Backoffice dan instalasi lama Generator baru memakai `staging.backoffice.` untuk panel pengelola BereaWare. Nama `cms.` dapat dipakai terpisah untuk CMS landing page; tidak dibuat sebagai alias atau redirect ke Backoffice. Internal Compose service `cms`, `CMS_PORT` dan variabel `PUBLIC_ORIGIN` tetap dipertahankan agar proses upgrade kompatibel. Konfigurasi lama dengan origin tepat `https://.cms.` masih diterima sampai operator memindahkannya. Untuk migrasi, siapkan DNS/TLS Backoffice, perbarui `PUBLIC_ORIGIN` ke `https://.backoffice.`, build/jalankan layanan dengan konfigurasi tersebut, kemudian ganti hanya block Caddy milik aplikasi ini. Gunakan login pada host baru; cookie host-only dari host lama tidak dipindahkan. Koordinasikan penggunaan host CMS lama dengan pengelola landing page. Jangan mengganti nilai secret atau menyalin database untuk perubahan hostname.