# Architecture — Storage > **Terakhir Diperbarui:** 2026-06-29 --- ## QNAP OSS — Object Storage (Avatar) | Item | Nilai | |------|-------| | Provider | QNAP QuObjects (S3-compatible) | | Host | `10.100.1.10:8010` | | Bucket | `super-apps` | | ACL | `public-read` | | URL Publik | `https://file.gisportal.id/super-apps/` | | Laravel Disk | `oss` (`config/filesystems.php`) | | Driver | `s3` dengan `use_path_style_endpoint=true` | ### Cara Kerja Avatar ``` PUT /api/v1/me/avatar {data: base64} → decode base64 → Storage::disk('oss')->put('avatars/', $content) → simpan path relatif 'avatars/' di ldap_user_meta.avatar → return {avatar_url: 'https://file.gisportal.id/super-apps/avatars/'} ``` ### Nginx Proxy OSS `/etc/nginx/conf.d/nas.conf`: ```nginx location /super-apps/ { proxy_pass http://10.100.1.10:8010/v1/AUTH_super-apps/super-apps/; } ``` --- ## Docker Volume — App Storage | Volume | Mount | Isi | |--------|-------|-----| | `app_storage` | `/var/www/html/storage` | Session, logs, OAuth keys | | `audit_pg_data` | `/var/lib/postgresql/data` | PostgreSQL data | > OAuth keys (`oauth-private.key`, `oauth-public.key`) di-generate otomatis saat container pertama kali start, disimpan di `app_storage`. --- ## NAS QNAP SMB (Fase 4 — Project Search) | Share | Path | Dipakai Untuk | |-------|------|---------------| | `\\10.100.1.10\project` | `/mnt/qnap/project` | Indexer crawl project files | | `\\10.100.1.10\Marketing` | `/mnt/qnap/marketing` | Indexer (future) | Indexer di Ollama VM (10.100.1.26) mount SMB → crawl → embed → simpan ke pgvector.