Odoo versi standar secara *default* **selalu menyimpan session di dalam bentuk file (filestore)** dan tidak memiliki opsi bawaan (*built-in configuration*) untuk memindahkan session langsung ke tabel database PostgreSQL.

Jika Anda ingin menghindari penggunaan *Shared Folder/NFS* untuk session di lingkungan High Availability, ada **dua alternatif standar** yang biasa digunakan di industri:

1. **Menggunakan Modul Tambahan Odoo (`session_redis`):** Menyimpan session ke Redis (Ini adalah *best practice* yang paling direkomendasikan untuk HA Odoo).
2. **Menggunakan Modul Tambahan Odoo (`session_db`):** Menggunakan modul komunitas dari OCA (*Odoo Community Association*) agar Odoo dipaksa menyimpan session ke dalam database Postgres.

Berikut adalah pembaruan file `docker-compose.yml` menggunakan pendekatan **HA Postgres + Redis Session Store** karena jauh lebih stabil, cepat, dan efisien daripada memaksanya masuk ke database utama (PostgreSQL).

---

### File Docker Compose (`docker-compose.yml`) dengan Redis Session

Dalam konfigurasi ini, kita menambahkan satu *service* Redis. Kita juga tidak perlu lagi menyatukan folder `/var/lib/odoo` antar aplikasi Odoo untuk urusan session (namun folder ini tetap butuh dibagikan **hanya** jika Anda menyimpan dokumen/lampiran secara lokal dan tidak menggunakan Cloud Storage seperti AWS S3/MinIO).

```yaml
version: '3.8'

services:
  # -------------------------------------------------------------------
  # SESSION LAYER (Redis untuk Sinkronisasi Session App Odoo)
  # -------------------------------------------------------------------
  redis_session:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

  # -------------------------------------------------------------------
  # DATABASE LAYER (HA Postgres via Bitnami Primary/Standby + Pgpool)
  # -------------------------------------------------------------------
  pg-primary:
    image: bitnami/postgresql:15
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=primary_master_pass
      - POSTGRESQL_USERNAME=odoo
      - POSTGRESQL_PASSWORD=odoo_secure_pass
      - POSTGRESQL_DATABASE=odoo_db
      - POSTGRESQL_REPLICATION_MODE=primary
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
    volumes:
      - pg_primary_data:/bitnami/postgresql

  pg-standby:
    image: bitnami/postgresql:15
    depends_on:
      - pg-primary
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=primary_master_pass
      - POSTGRESQL_MASTER_HOST=pg-primary
      - POSTGRESQL_MASTER_PORT_NUMBER=5432
      - POSTGRESQL_REPLICATION_MODE=standby
      - POSTGRESQL_REPLICATION_USER=repl_user
      - POSTGRESQL_REPLICATION_PASSWORD=repl_password
    volumes:
      - pg_standby_data:/bitnami/postgresql

  pgpool:
    image: bitnami/pgpool:4
    ports:
      - "5432:5432"
    depends_on:
      - pg-primary
      - pg-standby
    environment:
      - PGPOOL_BACKEND_NODES=0:pg-primary:5432,1:pg-standby:5432
      - PGPOOL_SR_CHECK_USER=odoo
      - PGPOOL_SR_CHECK_PASSWORD=odoo_secure_pass
      - PGPOOL_SR_CHECK_DATABASE=odoo_db
      - PGPOOL_ENABLE_LDAP=no
      - PGPOOL_POSTGRES_USERNAME=postgres
      - PGPOOL_POSTGRES_PASSWORD=primary_master_pass
      - PGPOOL_ADMIN_USERNAME=admin
      - PGPOOL_ADMIN_PASSWORD=admin_pass

  # -------------------------------------------------------------------
  # APPLICATION LAYER (Odoo Cluster dengan Environtment Redis)
  # -------------------------------------------------------------------
  odoo_app_1:
    image: odoo:16.0
    depends_on:
      - pgpool
      - redis_session
    environment:
      - HOST=pgpool
      - PORT=5432
      - USER=odoo
      - PASSWORD=odoo_secure_pass
      # Environment tambahan parameter untuk modul Redis Session (jika modul dipasang)
      - ODOO_SESSION_REDIS=1
      - ODOO_SESSION_REDIS_HOST=redis_session
      - ODOO_SESSION_REDIS_PORT=6379
    volumes:
      - odoo_data_1:/var/lib/odoo # Tidak perlu shared volume lagi untuk session!
      - ./odoo_addons:/mnt/extra-addons

  odoo_app_2:
    image: odoo:16.0
    depends_on:
      - pgpool
      - redis_session
    environment:
      - HOST=pgpool
      - PORT=5432
      - USER=odoo
      - PASSWORD=odoo_secure_pass
      - ODOO_SESSION_REDIS=1
      - ODOO_SESSION_REDIS_HOST=redis_session
      - ODOO_SESSION_REDIS_PORT=6379
    volumes:
      - odoo_data_2:/var/lib/odoo 
      - ./odoo_addons:/mnt/extra-addons

  # -------------------------------------------------------------------
  # LOAD BALANCER LAYER (Nginx)
  # -------------------------------------------------------------------
  nginx_lb:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - odoo_app_1
      - odoo_app_2

volumes:
  pg_primary_data:
  pg_standby_data:
  redis_data:
  odoo_data_1:
  odoo_data_2:

```

---

### Langkah Tambahan Wajib (Sisi Aplikasi Odoo):

Agar Environment `ODOO_SESSION_REDIS` di atas dapat bekerja dan Odoo benar-benar menyimpan session ke Redis (bukan folder lokal), Anda harus memasukkan modul penunjang ke dalam folder `./odoo_addons`.

1. Unduh modul **`server_environment`** atau modul **`redis` / `session_redis**` dari OCA (Odoo Community Association) untuk Odoo 16.
2. Letakkan modul tersebut di folder `./odoo_addons` Anda.
3. Jalankan Odoo, masuk ke menu *Apps*, lalu instal modul tersebut.

**Bagaimana jika benar-benar ingin menggunakan Database Postgres untuk Session?**
Jika Anda bersikeras menggunakan tabel database PostgreSQL sebagai penyimpan session (meskipun performanya akan sedikit lebih lambat dibanding Redis karena operasi I/O write ke disk yang intens), jalankan struktur docker-compose di atas, tetapi ganti modulnya dengan mencari modul **`session_db`** dari OCA Odoo 16 di platform GitHub, lalu pasang di Odoo Anda.