Odoo adalah aplikasi bisnis all-in-one paling populer di dunia. Ini menawarkan berbagai aplikasi bisnis termasuk CRM, situs web, e-Commerce, billing, akuntansi, manufaktur, gudang, manajemen proyek, inventaris, dan banyak lagi, semuanya terintegrasi menjadi satu software.

Tutorial ini mencakup langkah-langkah yang diperlukan untuk menginstal dan mengkonfigurasi Odoo 13 didalam Python virtual environment di CentOS 8. Kami akan download Odoo dari repositori Github mereka dan menggunakan Nginx sebagai reverse proxy.

Sebelum Mulai

Login ke mesin CentOS Anda sebagai user sudo dan perbarui sistem ke paket terbaru:

Install Dependencies

Instal Python 3, Git, pip, dan semua libraries serta tools yang diperlukan untuk build Odoo dari source:

sudo dnf install python3 python3-devel git gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel

Membuat user untuk Odoo

Buat user sistem baru untuk Odoo bernama odoo13 dengan direktori home /opt/odoo12 menggunakan perintah berikut:

sudo useradd -m -d /opt/odoo13 -U -r -s /bin/bash odoo13

Anda dapat menggunakan nama apa pun untuk user Odoo selama Anda membuat user PostgreSQL dengan nama yang sama.

Install dan konfigurasi PostgreSQL

Instal paket PostgreSQL 10 dari repositori default CentOS:

sudo dnf install @postgresql:10

Setelah instalasi selesai, buat cluster database PostgreSQL baru:

sudo postgresql-setup initdb

Aktifkan dan mulai PostgreSQL service:

sudo systemctl enable --now postgresql

Buat user PostgreSQL dengan nama yang sama dengan user sistem yang dibuat sebelumnya, dalam kasus kami yaitu “odoo13”:

sudo su - postgres -c "createuser -s odoo13"

Install Wkhtmltopdf

Paket wkhtmltox menyediakan seperangkat alat baris perintah open source yang dapat merender HTML ke dalam PDF dan berbagai format gambar. Untuk mencetak laporan PDF, Anda memerlukan tool wkhtmltopdf.

Versi yang direkomendasikan untuk Odoo adalah 0.12.5 yang tidak tersedia di repositori resmi CentOS 8.

Install rpm package dari Github dengan mengetik:

sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm

Install dan Konfigurasi Odoo

Sebelum mulai instalasi, pindah ke user “odoo13” dengan perintah :

sudo su - odoo13

Kemudian clone Odoo 13 source code dari repository GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 13.0 /opt/odoo13/odoo

Pindah ke direktori /opt/odoo13 dan buat virtual environment Python baru untuk instalasi Odoo:

cd /opt/odoo13python3 -m venv venv

Selanjutnya, aktifkan environment dengan perintah source :

source venv/bin/activate

Instal semua modul Python yang diperlukan dengan pip3:

pip3 install -r odoo/requirements.txt

Jika Anda menemukan kesalahan kompilasi selama instalasi, pastikan Anda menginstal semua dependensi yang diperlukan yang tercantum di bagian Sebelum mulai pada atas artikel ini.

Setelah instalasi selesai, nonaktifkan environment menggunakan perintah berikut:

deactivate

Buat direktori baru untuk custom addons:

mkdir /opt/odoo13/odoo-custom-addons

Beralih kembali ke user sudo Anda:

exit

Selanjutnya, buat file konfigurasi, buka text editor nano dan kemudian copy dan paste pengaturan berikut :

sudo nano /etc/odoo13.conf
[options]
; This is the password that allows database operations:
admin_passwd = superadmin_passwd
db_host = False
db_port = False
db_user = odoo13
db_password = False
addons_path = /opt/odoo13/odoo/addons, /opt/odoo13/odoo-custom-addons

Jangan lupa untuk mengubah superadmin_passwd dengan kata sandi yang lebih aman dan mudah di ingat.

Membuat Unit File Systemd

Untuk menjalankan Odoo sebagai service (layanan sistem), kita perlu membuat file odoo13.service.

Buka teks editor Anda dan paste konfigurasi berikut:

sudo nano /etc/systemd/system/odoo13.service

Copy dan paste konfigurasi berikut :

[Unit]
Description=Odoo13
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo13
PermissionsStartOnly=true
User=odoo13
Group=odoo13
ExecStart=/opt/odoo13/venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Beri tahu systemd bahwa ada file unit baru dan start layanan Odoo dengan menjalankan:

sudo systemctl daemon-reload

Jalankan Odoo service dan aktifkan :

sudo systemctl enable --now odoo13

Periksa status layanan dengan perintah berikut:

sudo systemctl status odoo13
● odoo13.service - Odoo13
   Loaded: loaded (/etc/systemd/system/odoo13.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-12-11 20:04:52 UTC; 5s ago
 Main PID: 28539 (python3)
    Tasks: 4 (limit: 11524)
   Memory: 94.6M
   CGroup: /system.slice/odoo13.service
           └─28539 /opt/odoo13/venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf

Untuk melihat pesan log yang dicatat oleh Odoo service, gunakan perintah berikut:

sudo journalctl -u odoo13

Test Instalasi Odoo

Buka browser Anda dan ketik:

http://<domain_anda_atau_IP_address>:8069

Dengan asumsi instalasi berhasil, layar yang mirip dengan berikut ini akan muncul:

odoo-13

Jika Anda tidak dapat mengakses halaman, maka kemungkinan firewall Anda memblokir port 8069.

Gunakan perintah berikut untuk membuka port yang diperlukan:

sudo firewall-cmd --permanent --zone=public --add-port=8069/tcp
sudo firewall-cmd --reload

Konfigurasikan Nginx sebagai SSL Termination Proxy

Odoo web Server secara default melayani lalu lintas melalui HTTP. Untuk membuat deployment Odoo agar lebih aman, kita akan mengonfigurasi Nginx sebagai proxy terminasi SSL yang akan melayani lalu lintas melalui HTTPS.

SSL termination proxy (Proxy terminasi SSL) adalah proxy server yang menangani enkripsi / dekripsi SSL. Ini berarti bahwa proxy terminasi (Nginx) akan menangani dan mendekripsi koneksi TLS yang masuk (HTTPS), dan itu akan meneruskan permintaan yang tidak terenkripsi ke layanan internal (Odoo) sehingga lalu lintas antara Nginx dan Odoo tidak akan dienkripsi (Menggunakan HTTP).

Menggunakan reverse proxy memberi Anda banyak manfaat sepertiLoad Balancing,SSL Termination, Caching, Kompresi, Menyajikan Konten Statis yang lebih cepat, dan banyak lagi.

Pastikan Anda telah memenuhi persyaratan berikut sebelum melanjutkan dengan bagian ini:

Buka text editor dan buat konfigurasi berikut :

sudo nano /etc/nginx/conf.d/example.com

Dalam contoh ini kita akan mengkonfigurasi SSL Termination, pengalihan HTTP ke HTTPS, pengalihan WWW ke non-WWW, menyimpan file statis dan mengaktifkan kompresi GZip.

# Odoo servers
upstream odoo {
 server 127.0.0.1:8069;
}

upstream odoochat {
 server 127.0.0.1:8072;
}

# HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    # Proxy headers
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # log files
    access_log /var/log/nginx/odoo.access.log;
    error_log /var/log/nginx/odoo.error.log;

    # Handle longpoll requests
    location /longpolling {
        proxy_pass http://odoochat;
    }

    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://odoo;
    }

    # Cache static files
    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }

    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
    gzip on;
}

Jangan lupa untuk mengganti example.com dengan domain Odoo Anda dan setel jalur yang benar ke file sertifikat SSL. Snippets yang digunakan dalam konfigurasi ini dibuat dalam panduan ini.

Setelah selesai, restart layanan Nginx dengan:

sudo systemctl restart nginx

Selanjutnya, kita perlu memberi tahu Odoo bahwa kita akan menggunakan proxy. Untuk melakukannya, buka file konfigurasi dan tambahkan baris berikut:

sudo nano /etc/odoo13.conf
proxy_mode = True

Restart layanan Odoo agar perubahan diterapkan:

sudo systemctl restart odoo13

ada poin ini, server Anda sudah dikonfigurasikan dan dapat mengakses instance Odoo Anda di: https://example.com

Ubah binding interface

Langkah ini opsional, tetapi ini merupakan praktik keamanan yang baik.

Secara default, server Odoo mendengarkan port 8069 di semua antarmuka. Jika Anda ingin menonaktifkan akses langsung ke instance Odoo Anda, Anda dapat memblokir port 8069 untuk semua interface publik atau memaksa Odoo hanya listen pada interface lokal.

Dalam panduan ini, kita akan mengonfigurasi Odoo hanya untuk listen pada127.0.0.1. Buka konfigurasi, tambahkan dua baris berikut di akhir file:

sudo nano /etc/odoo13.conf
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1

Simpan file konfigurasi dan restart Odoo server agar perubahan diterapkan:

sudo systemctl restart odoo13

Aktifkan Multiprocessing

Secara default, Odoo bekerja dalam mode multithreading. Untuk deployment lingkungan produksi, disarankan untuk beralih ke server multiprosesing karena meningkatkan stabilitas, dan membuat penggunaan sumber daya sistem yang lebih baik. Untuk mengaktifkan multiprocessing, kita perlu mengedit konfigurasi Odoo dan mengatur jumlah proses worker agar lebih optimal

Jumlah workers dihitung berdasarkan jumlah CPU cores dalam sistem dan memori RAM yang tersedia.

Menurut dokumentasi resmi Odoo, untuk menghitung jumlah worker dan ukuran memori RAM yang diperlukan, kita akan menggunakan rumus dan asumsi berikut:

Perhitungan jumlah Worker

  • Jumlah maksimal worker secara teoritis = (system_cpu * 2) + 1
  • 1 worker dapat melayani kurang lebih 6 users secara bersamaan
  • Cron workers juga membutuhkan sumber daya CPU

RAM memory size calculation

  • Kita akan mempertimbangkan bahwa 20% dari semua requests adalah requests “berat”, sedangkan 80% requests lebih ringan. Requests berat menggunakan sekitar 1 GB RAM sedangkan yang lebih ringan menggunakan sekitar 150 MB RAM
  • RAM yang dibutuhkan = jumlah_workers * ((rasio_request_ringan * estimasi_RAM_request_ringan) + (rasio_request_berat *estimasi_RAM_request_berat))

Jika Anda tidak tahu berapa banyak CPU yang Anda miliki di sistem yang berjalan, Anda dapat menggunakan perintah grep berikut:

grep -c ^processor /proc/cpuinfo

Katakanlah kita memiliki sistem dengan 4 core CPU, 8 GB memori RAM dan 30 user Odoo bersamaan.

  • 30 users / 6 = **5** (5 adalah jumlah teoritis worker yang dibutuhkan )
  • (4 * 2) + 1 = **9** ( 9 adalah jumlah teoritis worker maksimal)

Berdasarkan perhitungan di atas kita dapat menggunakan 5 workers + 1 worker untuk cron yang totalnya 6 worker.

Hitung konsumsi memori RAM berdasarkan jumlah workers:

  • RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

Perhitungan di atas menunjukkan bahwa instalasi Odoo akan membutuhkan sekitar 2GB RAM.

Untuk beralih ke mode multiprocessing, buka file konfigurasi dan tambahkan baris berikut:

sudo nano /etc/odoo13.conf
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5

Restart layanan Odoo agar perubahan diterapkan:

sudo systemctl restart odoo13

Sisa sumber daya sistem akan digunakan oleh layanan lain yang berjalan di sistem. Dalam panduan ini kami memasang Odoo bersama PostgreSQL dan Nginx di server yang sama dan tergantung pada pengaturan Anda, Anda mungkin juga memiliki layanan lain yang berjalan di server Anda.

Kesimpulan

Tutorial ini memandu Anda melalui instalasi Odoo 13 di CentOS 8 menggunakan Nginx sebagai reverse proxy. Anda juga belajar cara mengaktifkan multiprosesing dan mengoptimalkan Odoo untuk lingkungan produksi.

Anda juga mungkin ingin memeriksa tutorial kami tentang cara membuat backup harian secara otomatis database Odoo.