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.