Files
module-custom/Install_odoo_sesion_redis.txt
T

148 lines
5.8 KiB
Plaintext

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.