Odoo ist die beliebteste All-in-One-Unternehmenssoftware der Welt. Es bietet eine Reihe von Geschäftsanwendungen, darunter CRM, Website, E-Commerce, Rechnungsstellung, Buchhaltung, Fertigung, Lager, Projektmanagement, Inventar und vieles mehr, die alle nahtlos integriert sind.
Je nach gewünschtem Anwendungsfall gibt es mehrere Möglichkeiten, Odoo zu installieren. Der einfachste und schnellste Weg, Odoo zu installieren, ist die Verwendung der offiziellen APT-Repositories.
Wenn Sie mehr Flexibilität haben möchten, z. B. mehrere Odoo-Versionen auf demselben System ausführen möchten, können Sie entweder Docker und Docker Compose verwenden oder Odoo in einer virtuellen Umgebung installieren.
Diese Anleitung behandelt die notwendigen Schritte zum Installieren und Konfigurieren von Odoo für die Produktion mit Git-Quelle und virtueller Python-Umgebung auf einem Ubuntu 18.04-System.
Bevor Sie anfangen #
Melden Sie sich als sudo-Benutzer bei Ihrem Ubuntu-Computer an und aktualisieren Sie das System auf die neuesten Pakete:
sudo apt update && sudo apt upgrade
Installieren Sie Git, Pip, Node.js und die Tools, die zum Erstellen von Odoo-Abhängigkeiten erforderlich sind:
sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less
Odoo-Benutzer # erstellen
Erstellen Sie einen neuen Systembenutzer und eine neue Gruppe mit dem Home-Verzeichnis /opt/odoo
das den Odoo-Dienst ausführt.
sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
Sie können den Benutzer beliebig benennen, stellen Sie jedoch sicher, dass Sie einen Postgres-Benutzer mit demselben Namen erstellen. Installieren und konfigurieren Sie PostgreSQL #
Installieren Sie das PostgreSQL-Paket aus den Standard-Repositories von Ubuntu:
sudo apt install postgresql
Erstellen Sie nach Abschluss der Installation einen PostgreSQL-Benutzer mit demselben Namen wie der zuvor erstellte Systembenutzer, in unserem Fall odoo
:
sudo su - postgres -c "createuser -s odoo"
Installieren Sie Wkhtmltopdf #
Die wkhtmltox
Paket bietet eine Reihe von Open-Source-Befehlszeilentools, die HTML in PDF und verschiedene Bildformate rendern können. Um PDF-Berichte zu drucken, benötigen Sie wkhtmltopdf
Werkzeug. Die empfohlene Version für Odoo ist 0.12.1
die nicht in den offiziellen Ubuntu 18.04-Repositories verfügbar ist.
Laden Sie das Paket mit dem folgenden wget-Befehl herunter:
wget https://builds.wkhtmltopdf.org/0.12.1.3/wkhtmltox_0.12.1.3-1~bionic_amd64.deb
Sobald der Download abgeschlossen ist, installieren Sie das Paket, indem Sie Folgendes eingeben:
sudo apt install ./wkhtmltox_0.12.1.3-1~bionic_amd64.deb
Installieren und konfigurieren Sie Odoo #
Wir werden Odoo aus dem GitHub-Repository in einer isolierten virtuellen Python-Umgebung installieren, damit wir mehr Kontrolle über Versionen und Updates haben.
Bevor Sie mit der Installation beginnen, stellen Sie sicher, dass Sie zu odoo
wechseln Benutzer.
sudo su - odoo
Um zu bestätigen, dass Sie als odoo
angemeldet sind Benutzer können Sie den folgenden Befehl verwenden:
whoami
Jetzt können wir mit dem Installationsprozess beginnen. Klonen Sie zuerst das Odoo aus dem GitHub-Repository:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 11.0 /opt/odoo/odoo11
- Wenn Sie eine andere Odoo-Version installieren möchten, ändern Sie einfach die Versionsnummer nach dem
--branch
wechseln. - Sie können das Verzeichnis beliebig benennen, zB statt
odoo11
Sie können den Namen Ihrer Domain verwenden.
Um eine neue virtuelle Umgebung für die Odoo 11-Instanz zu erstellen, führen Sie Folgendes aus:
cd /opt/odoo
python3 -m venv odoo11-venv
Aktivieren Sie die Umgebung mit dem folgenden Befehl:
source odoo11-venv/bin/activate
und installieren Sie alle erforderlichen Python-Module mit pip3:
pip3 install wheel
pip3 install -r odoo11/requirements.txt
pip3
ist ein Tool zum Installieren und Verwalten von Python-Paketen.
Wenn während der Installation Kompilierungsfehler auftreten, vergewissern Sie sich, dass Sie alle erforderlichen Abhängigkeiten installiert haben, die im Abschnitt Before you begin
aufgeführt sind Abschnitt.
Sobald die Installation abgeschlossen ist, deaktivieren Sie die Umgebung und wechseln Sie mit den folgenden Befehlen zu Ihrem sudo-Benutzer zurück:
deactivate
exit
Wenn Sie benutzerdefinierte Module installieren möchten, ist es am besten, diese Module in einem separaten Verzeichnis zu installieren. Um ein neues Verzeichnis für unsere benutzerdefinierten Module zu erstellen, führen Sie Folgendes aus:
sudo mkdir /opt/odoo/odoo11-custom-addons
sudo chown odoo: /opt/odoo/odoo11-custom-addons
Als nächstes müssen wir eine Konfigurationsdatei erstellen, wir können entweder eine neue von Grund auf neu erstellen oder die enthaltene Konfigurationsdatei kopieren:
sudo cp /opt/odoo/odoo11/debian/odoo.conf /etc/odoo11.conf
Öffnen Sie die Datei und bearbeiten Sie sie wie folgt:
/etc/odoo11.conf[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = /opt/odoo/odoo11/addons
; If you are using custom modules
; addons_path = /opt/odoo/odoo11/addons,/opt/odoo/odoo11-custom-addons
Vergessen Sie nicht, das my_admin_passwd
zu ändern zu etwas Sichererem und passen Sie den addons_path
an wenn Sie benutzerdefinierte Module verwenden. Erstellen Sie eine systemd-Unit-Datei #
Um Odoo als Dienst auszuführen, erstellen wir einen odoo11.service
Unit-Datei in /etc/systemd/system/
Verzeichnis mit folgendem Inhalt:
[Unit]
Description=Odoo11
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo11
PermissionsStartOnly=true
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo11-venv/bin/python3 /opt/odoo/odoo11/odoo-bin -c /etc/odoo11.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
Benachrichtigen Sie systemd, dass wir eine neue Unit-Datei erstellt haben, und starten Sie den Odoo-Dienst, indem Sie Folgendes ausführen:
sudo systemctl daemon-reload
sudo systemctl start odoo11
Sie können den Dienststatus mit dem folgenden Befehl überprüfen:
sudo systemctl status odoo11
● odoo11.service - Odoo11
Loaded: loaded (/etc/systemd/system/odoo11.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2018-05-03 21:23:08 UTC; 3s ago
Main PID: 18351 (python3)
Tasks: 4 (limit: 507)
CGroup: /system.slice/odoo11.service
└─18351 /opt/odoo/odoo11-venv/bin/python3 /opt/odoo/odoo11/odoo-bin -c /etc/odoo11.conf
und wenn es keine Fehler gibt, können Sie den Odoo-Dienst so aktivieren, dass er beim Booten automatisch gestartet wird:
sudo systemctl enable odoo11
Wenn Sie die vom Odoo-Dienst protokollierten Nachrichten sehen möchten, können Sie den folgenden Befehl verwenden:
sudo journalctl -u odoo11
Testen Sie die Installation #
Öffnen Sie Ihren Browser und geben Sie Folgendes ein:http://<your_domain_or_IP_address>:8069
Vorausgesetzt, die Installation ist erfolgreich, wird ein Bildschirm ähnlich dem folgenden angezeigt:
Konfigurieren Sie Nginx als SSL-Terminierungsproxy #
Wenn Sie Nginx als SSL-Terminierungsproxy verwenden möchten, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllt haben:
- Sie haben einen Domainnamen, der auf die IP Ihres öffentlichen Servers verweist. In diesem Tutorial verwenden wir
example.com
. - Sie haben Nginx installiert, indem Sie diese Anweisungen befolgen.
- Sie haben ein SSL-Zertifikat für Ihre Domain installiert. Sie können ein kostenloses SSL-Zertifikat von Let’s Encrypt installieren, indem Sie diesen Anweisungen folgen.
Der standardmäßige Odoo-Webserver bedient Datenverkehr über HTTP. Um unsere Odoo-Bereitstellung sicherer zu machen, werden wir Nginx als SSL-Terminierungsproxy konfigurieren, der den Datenverkehr über HTTPS bedient.
Der SSL-Terminierungsproxy ist ein Proxyserver, der die SSL-Verschlüsselung/-Entschlüsselung übernimmt. Das bedeutet, dass unser Terminierungs-Proxy (Nginx) eingehende TLS-Verbindungen (HTTPS) verarbeitet und entschlüsselt und die unverschlüsselten Anfragen an unseren internen Dienst (Odoo) weiterleitet, sodass der Datenverkehr zwischen Nginx und Odoo nicht verschlüsselt wird (HTTP).
Wir müssen Odoo mitteilen, dass wir einen Proxy verwenden werden, die Konfigurationsdatei öffnen und die folgende Zeile hinzufügen:
/etc/odoo11.confproxy_mode = True
Starten Sie den Odoo-Dienst neu, damit die Änderungen wirksam werden:
sudo systemctl restart odoo11
Die Verwendung von Nginx als Proxy bietet uns mehrere Vorteile. In diesem Beispiel konfigurieren wir die SSL-Terminierung, die HTTP-zu-HTTPS-Umleitung, die WWW-zu-nicht-WWW-Umleitung, cachen die statischen Dateien und aktivieren die GZip-Komprimierung.
/etc/nginx/sites-enabled/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;
include snippets/letsencrypt.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;
}
Vergessen Sie nicht, example.com durch Ihre Odoo-Domain zu ersetzen und den richtigen Pfad zu den SSL-Zertifikatsdateien festzulegen. Die in dieser Konfiguration verwendeten Snippets werden in diesem Handbuch erstellt. Wenn Sie fertig sind, starten Sie den Nginx-Dienst neu mit:
sudo systemctl restart nginx
Ändern Sie die Bindungsschnittstelle #
Dieser Schritt ist optional, aber eine bewährte Sicherheitspraxis. Standardmäßig lauscht der Odoo-Server auf allen Schnittstellen auf Port 8069. Wenn Sie also den direkten Zugriff auf Ihre Odoo-Instanz deaktivieren möchten, können Sie entweder Port 8069 für alle öffentlichen Schnittstellen blockieren oder Odoo zwingen, nur auf der lokalen Schnittstelle zu lauschen.
In dieser Anleitung zwingen wir Odoo, nur auf 127.0.0.1
zu lauschen , öffnen Sie die Odoo-Konfiguration und fügen Sie am Ende der Datei die folgenden zwei Zeilen hinzu:
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
Speichern Sie die Konfigurationsdatei und starten Sie den Odoo-Server neu, damit die Änderungen wirksam werden:
sudo systemctl restart odoo
Multiprocessing aktivieren #
Standardmäßig arbeitet Odoo im Multithreading-Modus. Für Produktionsbereitstellungen wird empfohlen, auf den Multiprocessing-Server umzusteigen, da er die Stabilität erhöht und die Systemressourcen besser nutzt. Um Multiprocessing zu aktivieren, müssen wir die Odoo-Konfiguration bearbeiten und eine Anzahl von Worker-Prozessen ungleich Null festlegen.
Die Anzahl der Worker wird basierend auf der Anzahl der CPU-Kerne im System und dem verfügbaren RAM-Speicher berechnet.
Gemäß der offiziellen Odoo-Dokumentation verwenden wir zur Berechnung der Worker-Anzahl und der erforderlichen RAM-Speichergröße die folgenden Formeln und Annahmen:
Arbeiterzahlberechnung
- theoretische maximale Anzahl an Workern =(system_cpus * 2) + 1
- 1 Worker kann ~=6 gleichzeitige Benutzer bedienen
- Cron-Worker benötigen auch CPU
Berechnung der RAM-Speichergröße
- Wir gehen davon aus, dass 20 % aller Anfragen schwere Anfragen sind, während 80 % leichtere Anfragen sind. Schwere Anforderungen verwenden etwa 1 GB RAM, während leichtere etwa 150 MB RAM verwenden
- Benötigter Arbeitsspeicher =Anzahl_der_Arbeiter * ((Verhältnis_leichter_Arbeiter*_Schätzung_des_Arbeitsspeichers_leichter_Arbeiter) + (Verhältnis_schwerer_Arbeiter*_Schätzung_des_Arbeitsspeichers_schwerer_Arbeiter) )
Wenn Sie nicht wissen, wie viele CPUs Sie auf Ihrem System haben, können Sie den folgenden Befehl verwenden:
grep -c ^processor /proc/cpuinfo
Nehmen wir an, wir haben ein System mit 4 CPU-Kernen, 8 GB RAM-Speicher und 30 gleichzeitigen Odoo-Benutzern.
30 users / 6 = **5**
(5 ist die theoretische Anzahl der benötigten Arbeiter)(4 * 2) + 1 = **9**
(9 ist die theoretische maximale Anzahl von Arbeitern)
Basierend auf der obigen Berechnung können wir 5 Worker + 1 Worker für den Cron-Worker verwenden, was insgesamt 6 Worker sind.
Berechnen Sie den RAM-Speicherverbrauch basierend auf der Anzahl der Worker:
RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM
Die obige Berechnung zeigt uns, dass unsere Odoo-Installation etwa 2 GB RAM benötigt.
Um in den Multiprocessing-Modus zu wechseln, öffnen Sie die Konfigurationsdatei und hängen Sie die folgenden Zeilen an:
/etc/odoo11.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
Starten Sie den Odoo-Dienst neu, damit die Änderungen wirksam werden:
sudo systemctl restart odoo11
Der Rest der Systemressourcen wird von anderen Diensten verwendet, die auf unserem Computer ausgeführt werden. In dieser Anleitung haben wir Odoo zusammen mit PostgreSQL und Nginx auf demselben Server installiert und abhängig von Ihrer Einrichtung können Sie auch andere Dienste auf Ihrem Server ausführen.