Appearance
Bootstrap VPS Ubuntu 24.04
Tahap S02.2 menyiapkan server; belum menginstal aplikasi. Pengguna akhir akan memakai wizard S02.4. Panduan ini untuk operator/pengembang integrasi launcher, bukan persyaratan terminal bagi pembeli.
Batas izin dan prasyarat
Gunakan VPS Ubuntu 24.04 dedicated khusus uji yang terotorisasi. Jangan mengambil target/password dari secret organisasi secara otomatis. Belum ada target tersebut pada baseline S02; tidak ada bootstrap production yang diotorisasi. Snapshot/backup server sebelum apply. Server harus memiliki akses keluar ke Ubuntu repositories dan Launchpad PPA ondrej/php (PHP bawaan Ubuntu 24.04 adalah 8.3). PPA pihak ketiga ini bagian dari trust boundary; kegagalan repository menghentikan script, tanpa fallback ke PHP versi lain.
Workstation operator membutuhkan Bash dan OpenSSH (ssh, scp); tidak membutuhkan sshpass. Port yang diminta adalah port SSH existing, bukan perubahan konfigurasi sshd. Password SSH/root dan sudo diminta interaktif oleh OpenSSH/sudo, mungkin beberapa kali; tidak diterima sebagai argumen, env, file, atau dicetak script. User selain root harus memiliki sudo. Verifikasi fingerprint host lewat kanal tepercaya dan enroll dengan koneksi ssh -p PORT USER@HOST sebelum bootstrap. Script memakai StrictHostKeyChecking=yes; jangan bypass saat host key berubah. Target hostname DNS/IPv4 didukung; literal IPv6 belum didukung.
Penggunaan
Dari root repo, validasi rencana tanpa network atau perubahan lokal/remote:
bash
scripts/bootstrap-vps.sh --help
scripts/bootstrap-vps.sh --host staging.example.test --user root \
--port 2222 --domain dracin.staging.example.test --dry-runHanya setelah target dedicated memperoleh otorisasi, gunakan argumen yang sama dengan --apply. Untuk sudo ganti --user root menjadi user login. Opsional --app-dir /var/www/dracin-staging (default /var/www/dracin). Satu instance Dracin per host: nama user, pool, lock, socket dan site tetap dracin; app-dir bukan mekanisme multi-instance. Jangan mengubah domain/app-dir pada rerun sebagai cara memindahkan instalasi. Domain/APP_URL existing sengaja tidak ditimpa; perubahan memerlukan prosedur konfigurasi/release terpisah.
Upload sementara di /tmp/dracin-bootstrap.* dihapus pada exit provisioning. Jika transfer atau sudo gagal sebelum script mulai, hapus direktori upload yang tercantum pada error scp setelah memeriksa kepemilikannya. Tidak ada secret dalam upload. CLI tidak mengubah firewall/sshd/DNS. Operator perlu membuka port SSH existing serta HTTP/HTTPS melalui kebijakan firewall target; pertahankan akses SSH cadangan saat mengatur firewall.
Hasil dan kontrak integrasi Deployer
- PHP CLI/FPM 8.4.x, common extensions, PDO SQLite, curl, mbstring, XML/DOM/SimpleXML/XMLWriter, ZIP dan OPcache. Script memverifikasi versi/extension CLI, konfigurasi FPM/Nginx, serta service aktif.
php8.4dipakai eksplisit, tidak mengubah defaultphpglobal. Composer/Node/vendor/frontend dibangun dalam release pipeline task berikutnya; bukan bootstrap host. Tidak memasang MySQL, Redis, Node atau Chromium tanpa fitur yang membutuhkannya. - User sistem
dracintanpa login/password; FPM pool dedicated berjalan sebagai user tersebut. Nginx mendapat akses socket, tidak akses baca shared.env. Tidak menghapus site/default pool lain. File milik script:/etc/php/8.4/fpm/pool.d/dracin.conf,/etc/nginx/sites-available/dracin, symlink/etc/nginx/sites-enabled/dracin. Jangan gunakan nama itu untuk layanan existing. Simpan backup konfigurasi sebelum apply pada host nonkosong. APP_DIR/releases,APP_DIR/shared/.env,APP_DIR/shared/storage,APP_DIR/shared/database/database.sqlite. Deployer harus membuatcurrentke release atomik, menghubungkan.envdan storage ke shared paths, serta menjalankan release dengan identitas yang dapat menulis shared data. FPM dan command aplikasi gunakan userdracin..envbaru mendapat APP_KEY acak kriptografis, production/debug=false, SQLite absolut, database session/cache/queue, mail log, APP_URL HTTPS..envexisting dipertahankan seluruhnya, termasuk APP_KEY/API setting. Jika APP_KEY hilang/kosong script gagal, tidak merotasi key. Database hanya dibuat jika belum ada; tidak truncate, migrate, seed, reset atau hapus upload. Ownership shared dinormalisasi kedracin; mode env/database 640. Rerun memakai lock nonblocking untuk mencegah provisioning bersamaan.- Site HTTP diarahkan ke
APP_DIR/current/public, hanya/index.phpdapat dieksekusi; dotfiles ditolak. Sebelum release, 404 adalah normal dan bukan health check aplikasi. HTTPS/sertifikat/domain validation merupakan gate berikutnya; jangan membuka aplikasi bagi pembeli sebelum HTTPS siap (APP_URL sudah HTTPS).
Scheduler dan worker database queue baru boleh diaktifkan setelah release dan migrations sukses: cron per menit php8.4 APP_DIR/current/artisan schedule:run, worker terkelola sebagai dracin memakai queue:work dengan restart saat deployment. S02.3 mengimplementasikan deployment lock, atomic release, shared paths, migrations/backup/restore, health check dan rollback. Bootstrap tidak menjalankan migrations, cron atau worker terhadap aplikasi yang belum ada.
Verifikasi lokal aman
bash
scripts/test-bootstrap-vps.sh
bash -n scripts/bootstrap-vps.sh scripts/provision-vps.sh scripts/lib/bootstrap-shared.shTest membutuhkan Bash, PHP 8.4 (binary php), coreutils; memakai direktori sementara. Test mengeksekusi inisialisasi shared sesungguhnya, membandingkan hash env/database/upload sebelum/sesudah rerun, memeriksa missing-key error dan input buruk. SSH/scp mock, jadi root/sudo/port hanya diverifikasi sebagai kontrak transport; dry-run membuktikan tidak memanggil transport. Tidak menjalankan apt/systemd/sudo atau full test suite Laravel.
Gate staging dan troubleshooting
Verifikasi staging live telah diselesaikan pada VPS Ubuntu 24.04 dedicated yang diotorisasi PO (host test 167.86.108.118:20700, Ubuntu 24.04.5 LTS x86_64):
- Konektivitas & Port Khusus: Akses SSH terbukti berhasil pada port non-standar 20700 dengan user root, strict host key verification terdaftar di
known_hosts. Kredensial tidak dibocorkan ke dalam repositori atau log. - Runtime & Web Stack Terpasang:
- PHP 8.4.26 (CLI & FPM) via PPA
ondrej/php. - 21 ekstensi PHP wajib terverifikasi aktif:
ctype,dom,fileinfo,filter,hash,iconv,json,libxml,mbstring,openssl,pcre,session,SimpleXML,tokenizer,PDO,pdo_sqlite,curl,xml,xmlwriter,Phar,Reflection, plus OPcache. - Nginx 1.24.0 dan SQLite 3 terpasang. Service
php8.4-fpmdannginxaktif. - Socket dedicated
/run/php/dracin.sockdibuat dengan permission0660(user/groupwww-data:www-data), pool FPM berjalan di bawah user sistemdracin(uid 999). - Integrasi FastCGI Nginx → PHP-FPM teruji live end-to-end dengan respon
DRACIN_PHP_FPM_LIVE_OK:8.4.26.
- PHP 8.4.26 (CLI & FPM) via PPA
- Bukti Idempotency Nyata:
- Script
scripts/bootstrap-vps.sh --applydijalankan ulang (rerun) pada target VPS. - Checksum SHA-256 bit-for-bit identik sebelum dan sesudah rerun untuk seluruh file persistent di
/var/www/dracin/shared:- Database SQLite (
database.sqlite, data tabellive_sentineltetap utuh). - Environment file (
.env,APP_KEYdan custom setting tetap persisten tanpa rotasi). - Storage assets (
sentinel.txtpadastorage/app/publictetap utuh).
- Database SQLite (
- Script
- Pengukuran Sizing Resource VPS Nyata:
- RAM (Total 953 MiB): Baseline bare OS: 38 MiB used. Post-bootstrap: 52 MiB used (overhead runtime hanya ~14 MiB; 901 MiB / ~94.5% memori tetap available). PHP-FPM master process ~31.8 MB RSS, worker ~12.2 MB RSS.
- Disk (Total 180 GB): Baseline bare OS: 891 MB. Post-bootstrap: 1,019 MB (overhead paket & dependencies ~128 MB; 178 GB / 99% disk available). Shared baseline
/var/www/dracin: ~20 KB. - CPU: 6 vCPU AMD EPYC, load average post-bootstrap idle ~0.3 - 0.6.
Troubleshooting prasyarat:
- Host-key error: verifikasi fingerprint, perbaiki known_hosts hanya setelah verifikasi.
- SSH/sudo gagal: cek user, password, port dan sudo policy tanpa menaruh password di command history.
- apt/PPA gagal: cek DNS/egress/repository dan lock apt; perbaiki lalu rerun. Jangan menghapus lock apt saat proses lain aktif.
- APP_KEY kosong: pulihkan shared
.envdari backup yang benar. Jangan generate key baru untuk data existing. - Nginx/FPM config gagal: baca output validasi, cek benturan site/pool bernama dracin. Service tidak direload sebelum validasi; pulihkan backup config dan validasi sebelum reload manual.
Provisioning paket bukan transaksi atomik: jika gagal, paket/konfigurasi awal mungkin sudah tersimpan. Perbaiki sebab lalu rerun; pemulihan host penuh menggunakan snapshot. Tidak ada uninstall otomatis atau penghapusan shared data. Rollback kode/database aplikasi adalah tanggung jawab prosedur Deployer, bukan rollback paket OS. Production organisasi tetap tidak berubah.