Odoo je nejpopulárnější all-in-one podnikový software na světě. Nabízí řadu podnikových aplikací, včetně CRM, webových stránek, e-commerce, fakturace, účetnictví, výroby, skladu, projektového řízení, inventáře a mnoha dalších, vše hladce integrované.
Tento tutoriál vysvětluje, jak nainstalovat Odoo13 ze zdroje ve virtuálním prostředí Pythonu na počítači CentOS 8. Stáhneme si zdroj Odoo z Github a nakonfigurujeme Nginx jako reverzní proxy.
Předpoklady #
K dokončení instalace musíte být přihlášeni jako root nebo uživatel s právy sudo.
Instalace závislostí #
Nainstalujte Python 3, Git, pip a všechny knihovny a nástroje potřebné k sestavení Odoo ze zdroje:
sudo dnf install python3 python3-devel git gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel
Vytvoření systémového uživatele #
Vytvořte nového systémového uživatele a skupinu s domovským adresářem /opt/odoo
který bude provozovat službu Odoo:
sudo useradd -m -U -r -d /opt/odoo13 -s /bin/bash odoo13
Uživatele můžete pojmenovat jakkoli chcete, jen se ujistěte, že jste vytvořili uživatele PostgreSQL se stejným jménem.
Instalace a konfigurace PostgreSQL #
PostgreSQL10 nainstalujeme ze standardních repozitářů CentOS 8:
sudo dnf install @postgresql:10
Po dokončení instalace vytvořte nový databázový cluster PostgreSQL:
sudo postgresql-setup initdb
Povolte a spusťte službu PostgreSQL:
sudo systemctl enable --now postgresql
Vytvořte uživatele PostgreSQL se stejným jménem jako dříve vytvořený systémový uživatel, v našem případě to je „odoo13“:
sudo su - postgres -c "createuser -s odoo13"
Instalace Wkhtmltopdf #
wkhtmltox
balíček poskytuje sadu nástrojů příkazového řádku s otevřeným zdrojovým kódem, které dokážou vykreslit HTML do PDF a různých obrazových formátů. Chcete-li tisknout zprávy ve formátu PDF, budete potřebovat wkhtmltopdf
nářadí. Doporučená verze pro Odoo je 0.12.5
, který není dostupný v oficiálních repozitářích CentOS 8.
Nainstalujte rpm
packagefrom Github zadáním:
sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm
Instalace a konfigurace Odoo 13 #
Před zahájením procesu instalace se změňte na uživatele „odoo13“:
sudo su - odoo13
Začněte klonováním zdrojového kódu Odoo 13 z úložiště Odoo GitHub:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 13.0 /opt/odoo13/odoo
Přejděte na /opt/odoo13
adresář a vytvořte nové virtuální prostředí Pythonu pro instalaci Odoo:
cd /opt/odoo13
python3 -m venv venv
Aktivujte prostředí pomocí source
příkaz:
source venv/bin/activate
Nainstalujte požadované moduly Pythonu:
pip3 install -r odoo/requirements.txt
Pokud během instalace narazíte na nějaké chyby při kompilaci, ujistěte se, že jste nainstalovali všechny požadované závislosti uvedené v Installing Dependencies
sekce. Po dokončení instalace deaktivujte prostředí:
deactivate
Vytvořte nový adresář pro vlastní doplňky:
mkdir /opt/odoo13/odoo-custom-addons
Přepněte zpět na uživatele sudo:
exit
Dále otevřete textový editor a vytvořte následující konfigurační soubor:
sudo nano /etc/odoo13.conf
/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
Uložte a zavřete soubor.
Nezapomeňte změnitsuperadmin_passwd
na něco bezpečnějšího. Vytváření souboru systémové jednotky #
Otevřete textový editor a vytvořte soubor s názvem odoo13.service
uvnitř /etc/systemd/system/
adresář:
sudo nano /etc/systemd/system/odoo13.service
Vložte následující obsah:
/etc/systemd/system/odoo13.service[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
Uložte soubor a zavřete editor.
Informujte Systemd, že existuje nový soubor jednotky:
sudo systemctl daemon-reload
Spusťte a povolte službu Odoo spuštěním:
sudo systemctl enable --now odoo13
Stav služby můžete zkontrolovat pomocí následujícího příkazu:
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
Chcete-li zobrazit zprávy zaznamenané službou Odoo, použijte následující příkaz:
sudo journalctl -u odoo13
Otestujte instalaci #
Otevřete prohlížeč a zadejte:http://<your_domain_or_IP_address>:8069
Za předpokladu, že instalace proběhla úspěšně, objeví se obrazovka podobná následující:
Pokud se na stránku nemůžete dostat, pravděpodobně váš firewall blokuje port 8069
.
Pomocí následujících příkazů otevřete potřebný port:
sudo firewall-cmd --permanent --zone=public --add-port=8069/tcp
sudo firewall-cmd --reload
Konfigurace Nginx jako proxy pro ukončení SSL #
Výchozí webový server Odoo obsluhuje provoz přes HTTP. Aby bylo nasazení Odoo bezpečnější, nakonfigurujeme Nginx jako ukončovací proxy SSL, který bude obsluhovat provoz přes HTTPS.
Proxy pro ukončení SSL je proxy server, který zpracovává šifrování/dešifrování SSL. To znamená, že ukončovací proxy (Nginx) zpracuje a dešifruje příchozí připojení TLS (HTTPS) a předá nešifrované požadavky interní službě (Odoo). Provoz mezi Nginx a Odoo nebude šifrován (HTTP).
Použití reverzního proxy vám poskytuje mnoho výhod, jako je vyrovnávání zátěže, ukončení SSL, ukládání do mezipaměti, komprese, poskytování statického obsahu a další.
Než budete pokračovat v této části, ujistěte se, že jste splnili následující předpoklady:
- Název domény odkazující na IP vašeho veřejného serveru. Použijeme
example.com
. - Nginx nainstalován.
- Certifikát SSL pro vaši doménu. Můžete si nainstalovat bezplatný certifikát Let’s Encrypt SSL.
Otevřete textový editor a vytvořte/upravte blok doménového serveru:
sudo nano /etc/nginx/conf.d/example.com
Následující konfigurace nastavuje ukončení SSL, přesměrování HTTP na HTTPS, přesměrování z WWW na jiné než WWW, mezipaměť statických souborů a povolení komprese GZip.
/etc/nginx/conf.d/example.com# 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;
}
Nezapomeňte nahradit example.com svou doménou Odoo a nastavit správnou cestu k souborům certifikátu SSL. Fragmenty použité v této konfiguraci jsou vytvořeny v této příručce. Až budete hotovi, restartujte službu Nginx:
sudo systemctl restart nginx
Dále musíme říci Odoo, aby používal proxy. Chcete-li tak učinit, otevřete konfigurační soubor a přidejte následující řádek:
/etc/odoo13.confproxy_mode = True
Restartujte službu Odoo, aby se změny projevily:
sudo systemctl restart odoo13
V tomto okamžiku je nakonfigurován reverzní proxy a ke své instanci Odoo můžete přistupovat na adrese:https://example.com
Změna rozhraní vazby #
Tento krok je volitelný, ale je to dobrý bezpečnostní postup.
Ve výchozím nastavení server Odoo naslouchá portu 8069
na všech rozhraních. Chcete-li zakázat přímý přístup k instanci Odoo, můžete buď zablokovat port 8069
pro všechna veřejná rozhraní nebo přinutit Odoo, aby naslouchal pouze na místním rozhraní.
Nakonfigurujeme Odoo tak, aby naslouchalo pouze na 127.0.0.1
. Otevřete konfiguraci a na konec souboru přidejte následující dva řádky:
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
Uložte konfigurační soubor a restartujte server Odoo, aby se změny projevily:
sudo systemctl restart odoo13
Povolení vícenásobného zpracování #
Ve výchozím nastavení Odoo pracuje v režimu více vláken. Pro produkční nasazení se doporučuje přejít na multiprocessingový server, protože zvyšuje stabilitu a lépe využívá systémové prostředky.
Chcete-li povolit multiprocesing, musíte upravit konfiguraci Odoo a nastavit nenulový počet pracovních procesů. Počet pracovníků se vypočítá na základě počtu jader CPU v systému a dostupné paměti RAM.
Podle oficiální dokumentace Odoo pro výpočet počtu pracovníků a požadované velikosti paměti RAM můžete použít následující vzorce a předpoklady:
Výpočet počtu pracovníků
- Teoretický maximální počet pracovníků =(system_cpus * 2) + 1
- 1 pracovník může obsluhovat ~=6 souběžných uživatelů
- Zaměstnanci Cron také vyžadují CPU
Výpočet velikosti paměti RAM
- Budeme uvažovat, že 20 % všech požadavků jsou těžké požadavky a 80 % jsou lehčí. Velké požadavky využívají přibližně 1 GB paměti RAM, zatímco ty lehčí využívají přibližně 150 MB RAM
- Potřebná RAM =
number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )
Pokud nevíte, kolik CPU máte ve svém systému, použijte následující grep
příkaz:
grep -c ^processor /proc/cpuinfo
Řekněme, že máte systém se 4 jádry CPU, 8 GB paměti RAM a 30 souběžnými uživateli Odoo.
30 users / 6 = **5**
(5 je teoretický počet potřebných pracovníků)(4 * 2) + 1 = **9**
( 9 je teoretický maximální počet pracovníků)
Na základě výše uvedeného výpočtu můžete použít 5 pracovníků + 1 pracovníka pro cron workera, což je celkem 6 pracovníků.
Vypočítejte spotřebu paměti RAM na základě počtu pracovníků:
RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM
Výpočet ukazuje, že instalace Odoo bude potřebovat přibližně 2 GB RAM.
Chcete-li přepnout do režimu multiprocessingu, otevřete konfigurační soubor a připojte vypočítané hodnoty:
/etc/odoo13.conflimit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5
Restartujte službu Odoo, aby se změny projevily:
sudo systemctl restart odoo13
Zbytek systémových prostředků využijí jiné služby, které na tomto systému běží. V této příručce jsme nainstalovali Odoo spolu s PostgreSQL a Nginx na stejný server. V závislosti na vašem nastavení mohou na vašem serveru běžet i další služby.