Kako instalirati Odoo 14 sustav i postaviti ga da radi preko Nginx proxy-ja?

Postavite Ubuntu/Debian linux server i povežite se na njega putem SSH root korisnika ili izvršite naredbu:

sudo su

koja će vas prebaciti na root korisnika kako bi mogli izvršavati naredbe:

apt update && sudo apt upgrade -y

Odoo koristi PostgreSQL pa ga trebamo instalirati:

apt install postgresql -y

Kako bi mogli kreirati PDF dokumente koristeći Odoo treba instalirati wkhtmltopdf, preuzmimo ga sa gita:

wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb

Zatim treba instalirati preuzet .deb paket naredbom sličnom ovoj, podesite putanju na direktorij u kojem se nalazi wkhtmltopd paket:

apt install /home/user/wkhtmltox_0.12.6-1.focal_amd64.deb

Instalacija Odoo sustava

Sada možemo preuzeti i instalirati Odoo koristeći službeni Ubuntu/Debian repozitorij kao root korisnik. Odoo će prilikom instalacije sam dohvatiti sve ostalo što mu treba:

wget -O - https://nightly.odoo.com/odoo.key | apt-key add -
echo "deb http://nightly.odoo.com/14.0/nightly/deb/ ./" >> /etc/apt/sources.list.d/odoo.list
apt-get update && apt-get install odoo

Odoo sustav se može pokretati, zaustavljati i resetirati kao servis sustava koristeći naredbe:

sudo systemctl enable odoo
sudo systemctl restart odoo
sudo systemctl stop odoo
sudo systemctl start odoo

Sada imamo Odoo sustav koji radi preko porta 8069 što znači da trebamo unijeti ip adresu servera npr. 192.168.0.1:8069 kako bi mu pristupili ili adresu ovako example.com:8069.

Postavljanje Nginx proxy-ja

Web aplikacije tipično rade preko porta 80 za http i 443 za https protokole pa treba postaviti proxy ispred Odoo sustava koji će nam omogućiti da Odoo radi preko ovih standardnih portova.

Ovo se često radi koristeći popularan i malen nginx proxy pa postavimo ga…

sudo apt install nginx

Sada treba dopuniti konfiguraciju što za većinu nije trivijalan zadatak pa krenimo polako. Prvo treba omogućiti proxy_mod u Odoo konfiguraciji:

sudo nano /etc/odoo.conf

u datoteku dodati:

proxy_mode = True

U istoj datoteci ćemo podesiti odmah i radnike (workers) kako bi omogućili longpolling port putem kojeg radi chat koji treba stalnog radnika kako bi radio. U startu konfiguracija je postavljena na 0 radnika što nije nula već automatski dodijeli i u tom načinu rada ne radi chat funkcionalnost.

Ovdije treba malo računati i planirati kako bi stvari ispravno postavili. Matematika i teorija ide ovako:

  • ako raspolažemo sa npr. 4 jezgre i 8 niti

  • želite posluživati npr. 60 korisnika istodobno

  • 60 korisnika / 6 = 10 (što je broj radnika koje trebamo teoretski imati na raspolaganju kako bi stvari radile glatko)

  • (4 * 2) + 1 = 9 (teoretski maksimalan broj radnika za Odoo s obzirom na broj jezgri s kojima raspolažemo)

  • Naime koristit ćemo 8 radnika + 1 radnik za cron zadatke i pratit potrošnju resursa koja treba biti između 7 i 7.5 ako je manje možemo dodati radnike a ako je više treba ih smanjiti.

  • Na kraju moramo znati koliko nam RAMa treba za što ćemo koristiti formulu RAM = 9 * ((0.8*150) + (0.2*1024)) što je približno 3GB RAM-a koje minimalno moramo imati samo za noramalan rad Odoo sustava.

Sada kada smo računali i smislili koliko čega možemo postaviti idemo dopuniti konfiguraciju:

[options]
limit_memory_hard = 1677721600
limit_memory_soft = 629145600
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 8

Zatim, treba postaviti proxy i dopuniti nginx konfiguraciju:

sudo nano /etc/nginx/sites-enabled/odoo.conf

Prvo treba kreirati grupe za dva važna Odoo porta. Prva je za sam sustav:

upstream odoo {
   server 127.0.0.1:8069;
}

Druga grupa je za port kojeg Odoo koristi za chat funkcionalnost:

upstream odoochat {
   server 127.0.0.1:8072;
}

Zatim želimo da sve radi putem https protokola za što trebamo imati SSL certifikat koji se može postaviti koristeći CertBot što ću preskočiti jer ako ne znate postaviti SSL onda ovo nemojte ništa ni raditi :/

# http -> https
server {
   listen 80;
   server_name example.com www.example.com;
   rewrite ^(.*) https://$host$1 permanent;
}

Nemojte zaboraviti umjesto example.com adrese unijeti vlastitu u ovom i svim ostalim primjerima koda.

Sada ide zadnji najveći blok kojeg ću prikazati u cijelosti a razložiti u daljnjem tekstu:

server {
   listen [::]:443 ssl ipv6only=on;
   listen 443 ssl http2;
   server_name example.com www.example.com;
   proxy_read_timeout 720s;
   proxy_connect_timeout 720s;
   proxy_send_timeout 720s;
   # Add Headers for odoo proxy mode
   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 on;
   ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
   ssl_certificate_key /etc/letsencrypt/example.com/privkey.pem; # managed by Certbot
   include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
   ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
   # Redirect longpoll requests to odoo longpolling port
   location /longpolling {
      proxy_pass http://odoochat;
   }
   # Redirect requests to odoo backend server
   location / {
      proxy_redirect off;
      proxy_pass http://odoo;
   }
   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;
}

Pa krenimo sa kratkim i brzim pojašnjenjem gornjeg bloka koda…

listen [::]:443 ssl ipv6only=on;
listen 443 ssl http2;
server_name example.com www.example.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;

Kako bi stvari brže radile koristimo nešto novije postvke ipv6 i http2 ako ovo prve dvije linije prave problem mogu se sažeti u jednu općenitu:

listen 443;

Ostale linije definiraju domene koje će se koristiti za rad aplikacije i ograničavaju vrijeme dostupnosti proxy veze kako bi stvari brže radile posebno ako nam se dogodi proces koji ne želi zatvoriti vezu bez limita imamo izgubljen resurs.

#Add Headers for odoo proxy mode
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;

Kako bi aplikacija radila ispravno moramo putem proxy-ja proslijeđivati i njezine headere što ovaj blok radi.

#SSL parameters
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

Ovaj blok generira CertBot automatski samo ga treba ostaviti kako je. Morate koristiti CertBot ne može se ovaj blok samo tako postaviti u konfiguracijsku datoteku jer vam neće raditi SSL.

Slijedeći blok povezuje chat funkcionalnost i proslijeđuje ga na ranije kreiranu grupu /longpolling

#Redirect longpoll requests to odoo longpolling port
location /longpolling {
   proxy_pass http://odoochat;
}

Zatim imamo blok koji povezuje Odoo sustav sa ranije kreiranom grupom:

#Redirect requests to odoo backend server
location / {
   proxy_redirect off;
   proxy_pass http://odoo;
}

Idući blok nije obavezan ali ubrzava rad i odaziv Odoo sustava te koristi nginx cache mehanizme kako bi se statične datoteke Odoo sustava brže posluživale i to s odgodom od 90 minuta:

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

Ako želite ovaj blok možete u potpunosti obrisati.

Zatim imamo blok koji omogućava sažimanje statičnih datoteka kako bi se brže posluživale i definira koje su to datoteke:

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

Ako ste sve dobro napravili imate potpuno funkcionalan Odoo sustav i možete se preseliti u administartivno sučelje Odoo sustava koje omogućava odrađivanje većine radnji i mnoštvo funkcionalnosti.

Također, Odoo sada radi putem porta 443 pa sve što treba napraviti je samo unijeti domenu ili ip bez porta.

Odoo je najbolji ERM i CRM sustav za male i srednje velike poduzetnike i nadam se da sam vam olakšao njegovo postavljanje koje na žalost nije nikada bilo jednostavno…

Više informacija pronađite na:
https://www.odoo.com/documentation/14.0/setup/install.html
https://www.odoo.com/documentation/14.0/setup/deploy.html

Ako trebate pomoć slobodno me kontaktirajte.

Kako stvoriti MySQL korisnika i dodijeliti mu dozvole u AWS RDS-u na Ubuntu linuxu?