Add install_odoo_sessionDB.txt
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
Untuk menggunakan modul **`session_db`** (menyimpan session langsung ke dalam database PostgreSQL), kita tidak memerlukan layanan tambahan seperti Redis. Namun, karena modul ini merubah cara bawaan Odoo bekerja, Anda memerlukan sedikit penyesuaian pada file konfigurasi Odoo (`odoo.conf`) agar Odoo memuat modul tersebut sejak awal (*bootstrap*), serta struktur Docker Compose yang tepat.
|
||||
|
||||
Modul `session_db` yang populer untuk Odoo 16 biasanya membutuhkan parameter `server_wide_modules` agar diaktifkan sebelum database utama dipilih oleh pengguna.
|
||||
|
||||
Berikut adalah konfigurasi lengkapnya:
|
||||
|
||||
### 1. Struktur Folder Projek
|
||||
|
||||
Pastikan struktur folder Anda seperti ini:
|
||||
|
||||
```text
|
||||
mini-ha-odoo/
|
||||
├── docker-compose.yml
|
||||
├── nginx.conf
|
||||
├── odoo.conf
|
||||
└── odoo_addons/
|
||||
└── session_db/ <-- Tempatkan source code modul session_db di sini
|
||||
|
||||
```
|
||||
|
||||
> *Catatan: Anda perlu mengunduh modul `session_db` untuk Odoo 16 (misalnya dari repositori OCA atau developer komunitas di GitHub) dan mengekstraknya ke dalam folder `odoo_addons`.*
|
||||
|
||||
---
|
||||
|
||||
### 2. File Konfigurasi Odoo (`odoo.conf`)
|
||||
|
||||
Buat file `odoo.conf` di folder utama. File ini akan dibaca oleh kedua *instance* Odoo. Kunci utamanya ada pada baris `server_wide_modules`.
|
||||
|
||||
```ini
|
||||
[options]
|
||||
# Konfigurasi Database (akan di-override oleh env docker, tapi aman untuk ditulis)
|
||||
db_host = pgpool
|
||||
db_port = 5432
|
||||
db_user = odoo
|
||||
db_password = odoo_secure_pass
|
||||
|
||||
# Lokasi Addons (termasuk folder custom addons kita)
|
||||
addons_path = /usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons
|
||||
|
||||
# WAJIB: Memaksa Odoo memuat modul session_db sejak awal sistem menyala
|
||||
server_wide_modules = base,web,session_db
|
||||
|
||||
# Optimasi Multiprocessing (Sangat disarankan untuk HA)
|
||||
workers = 2
|
||||
longpolling_port = 8072
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. File Docker Compose (`docker-compose.yml`)
|
||||
|
||||
Pada konfigurasi ini, volume Odoo 1 dan Odoo 2 dibuat terpisah (`odoo_data_1` dan `odoo_data_2`) karena session tidak lagi disimpan di sana, melainkan langsung dikirim ke cluster PostgreSQL melalui `pgpool`.
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# -------------------------------------------------------------------
|
||||
# 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 Konfigurasi session_db)
|
||||
# -------------------------------------------------------------------
|
||||
odoo_app_1:
|
||||
image: odoo:16.0
|
||||
depends_on:
|
||||
- pgpool
|
||||
volumes:
|
||||
- ./odoo.conf:/etc/odoo/odoo.conf:ro # Me-mount file konfigurasi odoo.conf
|
||||
- ./odoo_addons:/mnt/extra-addons # Me-mount folder tempat modul session_db berada
|
||||
- odoo_data_1:/var/lib/odoo
|
||||
# Menggunakan perintah menjalankan odoo dengan menunjuk odoo.conf secara eksplisit
|
||||
command: odoo -c /etc/odoo/odoo.conf
|
||||
|
||||
odoo_app_2:
|
||||
image: odoo:16.0
|
||||
depends_on:
|
||||
- pgpool
|
||||
volumes:
|
||||
- ./odoo.conf:/etc/odoo/odoo.conf:ro
|
||||
- ./odoo_addons:/mnt/extra-addons
|
||||
- odoo_data_2:/var/lib/odoo
|
||||
command: odoo -c /etc/odoo/odoo.conf
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# 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:
|
||||
odoo_data_1:
|
||||
odoo_data_2:
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. File `nginx.conf` (Tetap Sama)
|
||||
|
||||
Gunakan file `nginx.conf` yang telah kita buat pada jawaban pertama. Nginx akan mendistribusikan *traffic* secara adil (*Round Robin*) ke `odoo_app_1` dan `odoo_app_2`. Karena session dibaca langsung dari database bersama, user tidak akan ter-log out meskipun dilempar antar-kontainer Odoo.
|
||||
|
||||
### Cara Menjalankan & Verifikasi:
|
||||
|
||||
1. Pastikan modul `session_db` sudah ada di dalam `./odoo_addons/session_db/`.
|
||||
2. Jalankan perintah: `docker compose up -d`
|
||||
3. Saat pertama kali membuat database baru di Odoo, modul OCA `session_db` biasanya otomatis membuat tabel baru (misal: `session_db_session` atau sejenisnya tergantung pembuat modul) di database PostgreSQL Anda.
|
||||
4. Anda bisa melakukan tes dengan mematikan salah satu kontainer odoo (`docker compose stop odoo_app_1`), dan Anda akan tetap *login* saat me-refresh halaman karena `odoo_app_2` dapat membaca session Anda dari database utama.
|
||||
Reference in New Issue
Block a user