# Architecture — Deployment Architecture > **Terakhir Diperbarui:** 2026-06-29 --- ## Topology ``` Internet / LAN │ HTTPS :443 ▼ ┌──────────────────────────────────────────────────┐ │ Nginx Reverse Proxy (10.100.1.24) │ │ /etc/nginx/conf.d/production/ │ │ - geonet-console.conf → console.gisportal.id │ │ - databaselist.conf → databaselist.gisportal.id│ │ /etc/nginx/conf.d/nas.conf │ │ - file.gisportal.id/super-apps/ → QNAP OSS │ └──────────────┬───────────────────────────────────┘ │ proxy_pass 127.0.0.1:8091 ▼ ┌──────────────────────────────┐ │ geonet-console Container │ │ PHP 8.3 + Laravel 12 │ │ PHP-FPM + Nginx (in-cont) │ │ supervisord │ │ Port: :8091 │ └──────────┬───────────────────┘ │ ┌──────────┴──────────────────┐ │ audit-postgres Container │ │ PostgreSQL 15 │ │ - databaselist_app │ │ - databaselist_audit │ └─────────────────────────────┘ External: QNAP OSS (10.100.1.10:8010) — avatar storage LDAP AD (10.100.1.40) — authentication SQL Server (10.100.1.25) — DB registry read ``` --- ## Docker Compose (geonet-console) ```yaml services: geonet-console: build: . ports: - "127.0.0.1:8091:80" env_file: .env depends_on: [audit-postgres] restart: unless-stopped volumes: - app_storage:/var/www/html/storage audit-postgres: image: postgres:15 env_file: .env restart: unless-stopped volumes: - audit_pg_data:/var/lib/postgresql/data volumes: app_storage: audit_pg_data: ``` --- ## Stack Paths di Server | Stack | Path | |-------|------| | geonet-console | `/opt/stacks/geonet-console/` | | databaselist | `/opt/stacks/databaselist/` | | sqlservercheck | `/opt/stacks/sqlservercheck/` | | my-portal | `/opt/stacks/my-portal/` | --- ## SSL HTTPS via Let's Encrypt (certbot) di Nginx 10.100.1.24. Semua domain `*.gisportal.id` di-terminate di Nginx. Port 80 redirect → 443.