GeoNetAgent, LDAPWeb, server-audit, server-connection
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

11 KiB

Rencana Migrasi: databaselist → Geonet Console

Tanggal: 2026-06-11
Target production: https://console.gisportal.id
Prinsip: tanpa downtime — stack lama tetap jalan sampai stack baru terverifikasi.


Ringkasan perubahan

Aspek Saat ini Setelah migrasi
Nama produk DatabaseList Geonet Console
Subdomain utama databaselist.gisportal.id console.gisportal.id
Folder repo lokal databaselist/ geonet-console/
Stack server /opt/stacks/databaselist/ /opt/stacks/geonet-console/
Image Docker databaselist:latest geonet-console:latest
Container app databaselist geonet-console
Container DB databaselist-audit geonet-console-audit
Port host 127.0.0.1:8091 127.0.0.1:8091 (tetap)
DB app databaselist_app geonet_console_app (opsional, lihat Fase 3)
DB audit databaselist_audit geonet_console_audit (opsional)
Volume Docker databaselist_audit_pg_data, databaselist_app_storage reuse volume lama via external: true

Subdomain lama databaselist.gisportal.id301 redirect ke console.gisportal.id (minimal 90 hari).


Diagram alur (zero-downtime)

Fase 1 — Dual hostname, satu backend
  User ──► console.gisportal.id ──┐
  User ──► databaselist.gisportal.id ──┼──► nginx ──► 127.0.0.1:8091 ──► container databaselist
                                        (keduanya hidup)

Fase 2 — Stack baru, volume sama
  nginx ──► 127.0.0.1:8091 ──► container geonet-console (volume lama di-mount)

Fase 3 — Redirect & cleanup
  databaselist.gisportal.id ──301──► console.gisportal.id
  hapus container/image lama

Fase 0 — Persiapan (lokal, tanpa sentuh production)

0.1 Backup production

ssh -m hmac-sha1 root@10.100.1.24 -p 22 @"
  cd /opt/stacks/databaselist
  cp .env /opt/stacks/databaselist/.env.bak.`$(date +%Y%m%d)
  docker compose exec -T audit-postgres pg_dumpall -U audit > /tmp/databaselist-pg-backup.sql
  docker volume ls | grep databaselist
"@

Catat nama volume (biasanya):

  • databaselist_audit_pg_data
  • databaselist_app_storage

0.2 Rename folder repo lokal

cd "d:\Project\app on git\server-connection"
git mv databaselist geonet-console   # atau rename manual jika belum git commit

0.3 Perubahan file di repo (search & replace terarah)

File Perubahan
geonet-console/compose.yaml service/image/container name, komentar Dockge
geonet-console/.env.example APP_NAME, APP_URL, default DB names
geonet-console/DOCKGE.md URL, path stack
geonet-console/nginx/databaselist.conf rename → geonet-console.conf, server_name, upstream
scripts/deploy-databaselist.ps1 rename → deploy-geonet-console.ps1
readme.txt, database.txt referensi URL
server/*.txt audit docs

Jangan rename database PostgreSQL di Fase 0 — data tetap di volume lama.

0.4 Contoh compose.yaml (stack baru, volume lama)

services:
  audit-postgres:
    image: postgres:16-alpine
    container_name: geonet-console-audit
  # ... env sama ...
    volumes:
      - audit_pg_data:/var/lib/postgresql/data
      - ./docker/postgres-init:/docker-entrypoint-initdb.d:ro

  geonet-console:
    build: .
    image: geonet-console:latest
    container_name: geonet-console
    ports:
      - "127.0.0.1:8091:80"
    volumes:
      - app_storage:/var/www/html/storage
      - ./database:/var/www/html/database

volumes:
  audit_pg_data:
    external: true
    name: databaselist_audit_pg_data      # volume production yang sudah ada
  app_storage:
    external: true
    name: databaselist_app_storage

0.5 Contoh nginx baru (geonet-console/nginx/geonet-console.conf)

upstream geonet_console_backend {
    server 127.0.0.1:8091;
    keepalive 8;
}

server {
    listen 80;
    server_name console.gisportal.id;
    return 301 https://console.gisportal.id$request_uri;
}

server {
    listen 443 ssl;
    server_name console.gisportal.id;
    include /etc/nginx/conf.d/ssl.conf;
    # ... header security sama seperti databaselist.conf ...

    location / {
        proxy_pass http://geonet_console_backend;
        # ... proxy_set_header sama ...
    }
}

Fase 1 — Dual hostname (ZERO downtime, ~5 menit)

Stack Docker belum diubah. Hanya tambah nginx + env APP_URL.

1.1 Deploy nginx console.gisportal.id → backend lama (8091)

scp -o MACs=hmac-sha1 databaselist/nginx/geonet-console.conf root@10.100.1.24:/etc/nginx/conf.d/production/geonet-console.conf
ssh -m hmac-sha1 root@10.100.1.24 -p 22 "nginx -t && systemctl reload nginx"

Saat ini console.gisportal.id dan databaselist.gisportal.id sama-sama mengarah ke container databaselist.

1.2 Verifikasi

curl -sI https://console.gisportal.id/up
curl -sI https://databaselist.gisportal.id/up
# Keduanya harus 200

1.3 Update APP_URL di .env production (opsional di fase ini)

Bisa ditunda ke Fase 2 agar tidak perlu restart container.

DNS: pastikan record console.gisportal.id mengarah ke reverse proxy (sama seperti subdomain lain).


Fase 2 — Cutover stack Docker (~30 detik downtime minimal)

Strategi: stop container lama → start container baru di port yang sama dengan volume yang sama.

2.1 Upload stack baru ke path paralel

.\scripts\deploy-geonet-console.ps1 -RemoteStack /opt/stacks/geonet-console

Atau manual:

# di server
cp -a /opt/stacks/databaselist /opt/stacks/geonet-console
cd /opt/stacks/geonet-console
# ganti compose.yaml (container name + external volumes)
# update .env:
#   APP_NAME="Geonet Console"
#   APP_URL=https://console.gisportal.id

2.2 Rolling switch (urutan penting)

cd /opt/stacks/geonet-console

# 1. Build image baru
docker compose build

# 2. Stop stack LAMA (port 8091 lepas)
cd /opt/stacks/databaselist && docker compose stop databaselist audit-postgres

# 3. Start stack BARU (reuse volume, bind 8091)
cd /opt/stacks/geonet-console && docker compose up -d

# 4. Health check
curl -sf http://127.0.0.1:8091/up && echo OK
docker ps --filter name=geonet-console

Downtime: hanya selang antara step 2–3 (~15–45 detik).
Nginx tidak perlu diubah jika port tetap 8091.

2.3 Verifikasi fungsional

  • Login UI
  • List database SQL Server
  • LDAP users / groups
  • Mail settings + test send
  • API docs /api-docs
  • Audit log menulis ke PostgreSQL
  • Session/cookie HTTPS (SESSION_SECURE_COOKIE=true)
ssh -m hmac-sha1 root@10.100.1.24 -p 22 "curl -sf -o /dev/null -w '%{http_code}' https://console.gisportal.id/login"

Fase 3 — Redirect subdomain lama & rename DB (opsional)

3.1 Redirect 301 databaselistconsole

Edit /etc/nginx/conf.d/production/databaselist.conf:

server {
    listen 80;
    server_name databaselist.gisportal.id;
    return 301 https://console.gisportal.id$request_uri;
}
server {
    listen 443 ssl;
    server_name databaselist.gisportal.id;
    include /etc/nginx/conf.d/ssl.conf;
    return 301 https://console.gisportal.id$request_uri;
}
nginx -t && systemctl reload nginx

3.2 Rename database PostgreSQL (opsional, non-urgent)

Database databaselist_app / databaselist_audit tidak wajib di-rename — aplikasi tetap jalan dengan nama lama.

Jika ingin konsistensi penuh (maintenance window terpisah):

-- di dalam audit-postgres container
ALTER DATABASE databaselist_app RENAME TO geonet_console_app;
ALTER DATABASE databaselist_audit RENAME TO geonet_console_audit;

Lalu update .env dan compose.yaml, restart app container.

3.3 Update Uptime Kuma / monitoring

Ganti monitor URL dari databaselist.gisportal.id ke console.gisportal.id.


Fase 4 — Cleanup (setelah 7–14 hari stabil)

# Hapus stack lama (volume sudah dipakai stack baru — jangan docker volume rm)
cd /opt/stacks/databaselist
docker compose down --remove-orphans   # tanpa -v

# Hapus image lama
docker image rm databaselist:latest 2>/dev/null || true

# Opsional: rename folder
mv /opt/stacks/databaselist /opt/stacks/databaselist.archived

Checklist file yang harus diubah

Repo lokal

  • databaselist/geonet-console/
  • geonet-console/compose.yaml
  • geonet-console/.env.example
  • geonet-console/DOCKGE.md
  • geonet-console/nginx/geonet-console.conf (baru)
  • scripts/deploy-geonet-console.ps1 (baru)
  • readme.txt
  • database.txt
  • server/installed-applications-audit.txt
  • server/reverse-proxy-audit.txt
  • ~/.ssh/config — tambah alias Host geonet-console (opsional)

Server production (10.100.1.24)

  • /opt/stacks/geonet-console/ (stack baru)
  • /etc/nginx/conf.d/production/geonet-console.conf
  • /etc/nginx/conf.d/production/databaselist.conf (redirect 301)
  • Dockge — daftarkan stack geonet-console, arsipkan databaselist
  • Uptime Kuma monitor ID (jika ada)

Env production (.env)

APP_NAME="Geonet Console"
APP_URL=https://console.gisportal.id
# APP_DB_DATABASE / AUDIT_DB_DATABASE — biarkan nama lama atau rename Fase 3

Rollback (jika gagal di Fase 2)

cd /opt/stacks/geonet-console && docker compose stop
cd /opt/stacks/databaselist && docker compose up -d
curl -sf http://127.0.0.1:8091/up

Data aman karena volume tidak dihapus.


Urutan eksekusi disarankan

# Aksi Downtime Siapa
1 Backup .env + pg_dump 0 Ops
2 Rename repo lokal + commit 0 Dev
3 Nginx console.gisportal.id → 8091 0 Ops
4 Test dual URL 0 Ops
5 Deploy stack geonet-console (external volumes) ~30 detik Ops
6 Verifikasi semua modul 0 QA
7 Redirect 301 subdomain lama 0 Ops
8 Update monitoring & docs 0 Ops
9 Cleanup stack lama (minggu berikutnya) 0 Ops

Catatan penting

  1. Jangan docker compose down -v — akan hapus volume PostgreSQL & storage.
  2. OAuth/API clients — jika redirect URI hardcode databaselist.gisportal.id, update ke console.gisportal.id sebelum redirect 301.
  3. Laravel APP_URL — wajib diupdate agar link email, password reset, dan OAuth callback benar.
  4. SESSION / CSRF — setelah ganti domain utama, user perlu login ulang (normal).
  5. sqlservercheck — stack terpisah, tidak ikut rename.

Perintah cepat setelah migrasi selesai

# SSH alias (tambahkan ke ~/.ssh/config)
# Host geonet-console-proxy
#     HostName 10.100.1.24
#     User root
#     MACs hmac-sha1

ssh -m hmac-sha1 root@10.100.1.24 -p 22 "cd /opt/stacks/geonet-console && docker compose ps"

URL production: https://console.gisportal.id


Status migrasi

Fase Status Tanggal Catatan
0 — Repo lokal Selesai 2026-06-11 Folder geonet-console/ + script deploy; databaselist/ lama bisa dihapus manual
1 — Nginx dual hostname Selesai 2026-06-11 console.gisportal.id:8091, verified HTTP 200
2 — Cutover Docker Selesai 2026-06-12 Stack /opt/stacks/geonet-console, container geonet-console
3 — Redirect 301 Selesai 2026-06-12 databaselist.gisportal.idconsole.gisportal.id
4 — Cleanup Pending Hapus stack/image databaselist setelah stabil