import { Head, Link } from '@inertiajs/react'; import { AlertTriangle, ArrowRight, Cloud, Database, Download, KeyRound, Network, Server, ShieldCheck, Terminal, Users, } from 'lucide-react'; import PublicThemeToggle from '@/components/public-theme-toggle'; const Code = ({ children }: { children: string }) => (
        {children}
    
); const Step = ({ number, children, }: { number: number; children: React.ReactNode; }) => (
  • {number}
    {children}
  • ); const vendorRows = [ [ 'MikroTik RouterOS 6/7', 'RouterOS API', '8728 / 8729', 'Port API wajib diisi. TLS mengikuti pengaturan tenant.', ], [ 'OLT ZTE C300/C320', 'SSH', '22', 'Mendukung login, enable, dan privilege perangkat. Telnet tidak dimatikan oleh RADIQ.', ], [ 'OLT HSGQ', 'SSH + Telnet', '22 + 23', 'Port dapat dibuat custom. Perintah tertentu dijalankan melalui Telnet.', ], [ 'OLT Hisfocus/Hioso', 'Telnet + WebGUI HTTP', '23 + 80', 'Port custom didukung, misalnya Telnet 8183 dan WebGUI 8182.', ], ]; export default function DeploymentDocumentation() { return ( <>
    RADIQ NDM

    RADIQ NDM

    Dokumentasi aplikasi

    PANDUAN RESMI APLIKASI

    Menjalankan RADIQ NDM di Cloud atau server milik tenant.

    RADIQ NDM memusatkan pengelolaan akun akses perangkat jaringan. Tenant Admin dapat membuat, mengubah, menonaktifkan, dan menghapus Users Perangkat pada banyak perangkat tanpa membuka perangkat satu per satu.

    1. Pilih lokasi deployment

    Cloud RADIQ

    Tenant langsung menggunakan server yang dikelola RADIQ. Cocok jika tidak ingin memelihara PHP, PostgreSQL, web server, worker, backup aplikasi, dan pembaruan sistem sendiri.

    Saat registrasi pilih{' '} Cloud RADIQ . Instalasi dibuat dengan status aktif.

    Self-hosted / Local

    Aplikasi dan database berjalan di VPS, server, komputer, atau laptop tenant. Tenant tetap tercatat dan lisensinya tetap dikelola Master Admin RADIQ.

    Saat registrasi pilih{' '} Install Local . Instalasi berstatus pending sampai pemasangan dan lisensi selesai.

    2. Persyaratan self-hosted

    {[ [ Terminal, 'PHP 8.3', 'Ekstensi Laravel, PDO PostgreSQL, OpenSSL, cURL, Mbstring, XML, dan ZIP.', ], [ Database, 'PostgreSQL', 'Database dan user khusus RADIQ NDM dengan akses ke database tersebut.', ], [ Server, 'Web & build tools', 'Nginx/Apache/IIS, Composer, Node.js dan NPM.', ], [ Network, 'Akses jaringan', 'Server harus dapat menjangkau IP dan port management perangkat.', ], ].map(([Icon, title, text]) => { const ItemIcon = Icon as typeof Server; return (

    {title as string}

    {text as string}

    ); })}
    Document root web server wajib menunjuk ke folder{' '} public, bukan ke root project.

    3. Instalasi self-hosted

    Unduh paket

    Konfigurasi minimum file .env

    {`APP_NAME="RADIQ NDM" APP_ENV=production APP_DEBUG=false APP_URL=https://ndm.domain-tenant.id DEPLOYMENT_MODE=self_hosted DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=radiq_ndm DB_USERNAME=radiq_ndm DB_PASSWORD=PASSWORD_DATABASE QUEUE_CONNECTION=database CACHE_STORE=database SESSION_DRIVER=database RADIQ_LICENSE_SERVER_URL=https://alamat-control-plane-radiq RADIQ_LICENSE_PUBLIC_KEY=PUBLIC_KEY_DARI_RADIQ`}

    URL server lisensi dan public key diberikan Master Admin RADIQ. Private signing key tidak boleh berada pada server tenant.

    Windows

      Ekstrak paket dan buka PowerShell pada folder aplikasi. Jalankan installer dengan PHP 8.3: {`powershell -ExecutionPolicy Bypass -File scripts/install-self-hosted.ps1 -Php C:\\php83\\php.exe`} Installer membuat .env, lalu berhenti agar koneksi database dapat diisi. Ketik LANJUT{' '} setelah selesai. Isi identitas ISP dan Tenant Admin. Password minimal 12 karakter dengan huruf besar/kecil, angka, dan simbol.

    Linux

      Ekstrak paket dan berikan akses folder serta storage kepada user service. Jalankan installer: {`PHP_BIN=/usr/bin/php8.3 bash scripts/install-self-hosted.sh`} Lengkapi .env, lalu ketik{' '} LANJUT. Installer menjalankan Composer, migration, seeder, pembuatan tenant, build frontend, dan optimasi. Konfigurasikan Nginx/Apache dengan HTTPS dan document root ke folder{' '} public.

    4. Proses background yang wajib hidup

    CRUD Users Perangkat dikirim ke queue. Jika perangkat offline, assignment menjadi pending dan scheduler akan mencoba kembali. Jalankan kedua proses sebagai Windows Service, Task Scheduler, systemd, atau Supervisor.

    {`# Worker sinkronisasi perangkat php artisan queue:work --queue=default --tries=1 --timeout=60 # Scheduler pekerjaan pending dan tugas berkala php artisan schedule:work`}

    Pada Windows, ganti php dengan{' '} C:\php83\php.exe. Setelah deployment jalankan php artisan optimize:clear dan{' '} php artisan queue:restart.

    5. Konfigurasi koneksi perangkat

    {[ 'Vendor', 'Protokol', 'Port default', 'Catatan', ].map((title) => ( ))} {vendorRows.map((row) => ( {row.map((cell) => ( ))} ))}
    {title}
    {cell}
    Aturan port: form perangkat berubah mengikuti vendor. Isi hanya port protokol yang tersedia. Port kosong berarti protokol tersebut tidak digunakan. Firewall server RADIQ harus dapat mencapai management network.

    6. Cara kerja Users Perangkat

      Tenant Admin mengatur Base User dan Base Password. Tambahkan perangkat dengan credential awal, lalu Cek & Aktifkan. Buat Users Perangkat, pilih perangkat tujuan dan group akses. Perangkat online langsung disinkronkan; perangkat offline berstatus pending.

    Role aplikasi tetap: Master Admin, Tenant Admin, dan Tenant User. Tenant Admin hanya mengelola Tenant User miliknya.

    7. Credential dan encryption key

    Password perangkat dienkripsi dengan tenant encryption key. Tenant key dibungkus kembali oleh application key server.

    Tenant Admin dapat membuat key otomatis atau manual. Rotasi key mengenkripsi ulang credential yang tersimpan.

    Melihat Base Password wajib memasukkan password login Tenant Admin dan dibatasi rate limit.

    Kehilangan APP_KEY atau encryption key tanpa backup yang benar dapat membuat credential tidak dapat dipulihkan.

    8. Backup dan pemeliharaan

    {[ [ 'Database PostgreSQL', 'Backup seluruh database termasuk tenant, assignment, queue, dan credential terenkripsi.', ], [ 'File rahasia', 'Backup .env dan APP_KEY secara terenkripsi, terpisah dari database dan dengan akses terbatas.', ], [ 'Uji pemulihan', 'Lakukan restore drill pada server terisolasi. Backup yang belum diuji belum dapat dianggap aman.', ], ].map(([title, text]) => (

    {title}

    {text}

    ))}
    {`# Contoh backup PostgreSQL pg_dump -Fc -U radiq_ndm -d radiq_ndm -f radiq_ndm.backup # Maintenance setelah update aplikasi php artisan migrate --force php artisan optimize php artisan queue:restart`}

    9. Migrasi Cloud ke Local

    Versi saat ini belum menyediakan ekspor–impor tenant otomatis. Migrasi harus dijadwalkan bersama Master Admin agar credential terenkripsi dan encryption key dipindahkan dengan aman.
      {[ 'Tenant Admin mengajukan migrasi dan jadwal maintenance.', 'Master Admin menyiapkan instalasi self-hosted dan lisensi tenant.', 'Pasang RADIQ NDM local dengan APP_KEY baru, tetapi jangan aktifkan worker perangkat.', 'Pindahkan data tenant dan re-enkripsi secret melalui prosedur migrasi; jangan mengekspor password sebagai plaintext.', 'Verifikasi user, perangkat, Users Perangkat, assignment, port vendor, dan status lisensi.', 'Hentikan worker Cloud sebelum menyalakan worker Local agar perintah tidak berjalan dua kali.', 'Uji satu perangkat per vendor, kemudian selesaikan cutover.', ].map((item, index) => ( {item} ))}

    Mulai dengan deployment yang sesuai

    Cloud cocok untuk penggunaan cepat. Self-hosted cocok ketika management perangkat hanya dapat diakses dari jaringan internal tenant.

    Daftar Tenant
    ); }