Diese Anleitung beschreibt die Installation von Odoo 19 auf Ubuntu in zwei Schritten: zuerst die Community Edition, danach die Einbindung der Enterprise Edition. Dabei wird der Community-Code per Git auf den Server geladen, während der Quellcode der Enterprise Edition lokal heruntergeladen und per FileZilla als .tar.gz nach /tmp übertragen wird. Für Linux, PostgreSQL und den Odoo-Dienst wird einheitlich der Benutzer odoo verwendet. Nur der Name der eigentlichen Odoo-Datenbank bleibt individuell.
Die Anleitung ist auf einen Betrieb mit diesen Rahmenbedingungen ausgelegt:
Vor der eigentlichen Installation wird das System vollständig aktualisiert.
sudo apt update
sudo apt upgrade -y
sudo reboot
Nach dem Neustart erneut am Server anmelden.
Da der Enterprise-Code später mit FileZilla per SFTP hochgeladen wird, muss auf Ubuntu zunächst ein OpenSSH-Server installiert und gestartet werden.
sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
sudo systemctl status ssh
Prüfen, ob SSH auf Port 22 lauscht:
sudo ss -tulpen | grep :22
Falls ufw aktiv ist, SSH freigeben:
sudo ufw allow OpenSSH
sudo ufw reload
sudo ufw status
Die lokale IP-Adresse des Servers anzeigen:
hostname -I
In FileZilla wird SFTP verwendet, nicht FTP.
Trage dort ein:
SFTP - SSH File Transfer Protocol22Verwende nicht
rootfür den FileZilla-Zugriff.
Falls noch kein normaler Benutzer vorhanden ist, kann einer angelegt werden. Beispiel:
sudo adduser alex
sudo usermod -aG sudo alex
groups alex
Optional die SSH-Konfiguration prüfen:
sudo nano /etc/ssh/sshd_config
Sinnvolle Werte:
PasswordAuthentication yes
PermitRootLogin no
Danach SSH neu starten:
sudo systemctl restart ssh
odoo anlegenFür Odoo wird ein eigener Linux-Benutzer angelegt. Dieser Benutzer wird später Eigentümer der Odoo-Verzeichnisse und zugleich Dienstbenutzer des Odoo-Services.
sudo adduser --system --home=/opt/odoo --group odoo
sudo mkdir -p /opt/odoo
Prüfen, ob der Benutzer angelegt wurde:
getent passwd odoo
odooDamit Odoo später sauber arbeiten kann, werden die Besitzrechte für das Odoo-Verzeichnis bereits früh gesetzt.
sudo chown -R odoo:odoo /opt/odoo
Bevor das Odoo-Repository eingebunden wird, sollten die benötigten Grundpakete installiert werden.
sudo apt update
sudo apt install -y gnupg wget ca-certificates git
Optional prüfen:
gpg --version
git --version
Odoo verwendet PostgreSQL als Datenbanksystem. Installiert wird PostgreSQL hier direkt inklusive postgresql-contrib, damit Werkzeuge wie createuser zuverlässig vorhanden sind.
sudo apt update
sudo apt install -y postgresql postgresql-client postgresql-contrib
sudo systemctl status postgresql
odoo anlegenFür PostgreSQL wird derselbe Benutzername verwendet wie unter Linux: odoo.
sudo -u postgres createuser -d -R -S odoo
sudo -u postgres psql -c "ALTER USER odoo WITH PASSWORD 'SICHERES_PASSWORT';"
createuser nicht gefunden wirdsudo apt update
sudo apt install -y postgresql postgresql-client postgresql-contrib
Alternativ direkt per SQL anlegen:
sudo -u postgres psql -c "CREATE USER odoo WITH CREATEDB LOGIN PASSWORD 'SICHERES_PASSWORT';"
odoo bereits existiertsudo -u postgres psql -c "ALTER ROLE odoo WITH CREATEDB LOGIN PASSWORD 'SICHERES_PASSWORT';"
Vorhandene Rollen prüfen:
sudo -u postgres psql -c "\du"
Nur der Name der Odoo-Datenbank bleibt individuell.
Für die Community Edition wird das offizielle Odoo-Repository eingebunden.
sudo mkdir -p /usr/share/keyrings
wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor --yes -o /usr/share/keyrings/odoo-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/19.0/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
sudo apt update
Jetzt wird Odoo Community über die Paketverwaltung installiert.
sudo apt install -y odoo
sudo systemctl enable odoo
sudo systemctl restart odoo
sudo systemctl status odoo
Prüfen, ob Odoo auf Port 8069 lauscht:
ss -tulpen | grep 8069
Falls ufw aktiv ist:
sudo ufw allow 8069/tcp
sudo ufw reload
Danach sollte Odoo unter http://SERVER-IP:8069 erreichbar sein.
python3-phonenumbers installierenZusätzlich wird python3-phonenumbers installiert.
sudo apt install -y python3-phonenumbers
Für den späteren Enterprise-Teil ist es sinnvoll, die bekannten System- und Build-Abhängigkeiten frühzeitig zu installieren.
sudo apt update
sudo apt install -y \
python3-pip \
python3-venv \
python3-dev \
build-essential \
libldap2-dev \
libpq-dev \
libsasl2-dev \
libxml2-dev \
libxslt1-dev \
libffi-dev \
libssl-dev \
zlib1g-dev \
libjpeg-dev \
liblcms2-dev \
libblas-dev \
libatlas-base-dev \
npm
rtlcss installieren:
sudo npm install -g rtlcss
wkhtmltopdf installierenFür korrekte PDF-Ausgaben mit Header und Footer wird wkhtmltopdf manuell installiert.
Architektur prüfen:
dpkg --print-architecture
Für amd64:
cd /tmp
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb
wkhtmltopdf --version
Für die Enterprise Edition wird nur der Enterprise-Code per FileZilla hochgeladen.
Lade mit FileZilla die Datei
DEINE_ENTERPRISE_DATEI.tar.gz
nach
/tmp
hoch.
Bevor mit der Enterprise-Erweiterung weitergearbeitet wird, sollte sichergestellt werden, dass die zusätzlichen Python- und Systemabhängigkeiten vorhanden sind.
Prüfen:
python3 --version
pip3 --version
Optional kritische Pakete erneut nachinstallieren:
sudo apt update
sudo apt install -y \
python3-pip \
python3-venv \
python3-dev \
build-essential \
libldap2-dev \
libpq-dev \
libsasl2-dev \
libxml2-dev \
libxslt1-dev \
libffi-dev \
libssl-dev \
zlib1g-dev \
libjpeg-dev \
liblcms2-dev \
libblas-dev \
libatlas-base-dev \
npm
venvFür die Enterprise-Quellenbasis wird eine virtuelle Python-Umgebung unter /opt/odoo/venv angelegt.
Zuerst den Community-Code per Git nach /opt/odoo/community laden:
sudo -u odoo -H bash -c "cd /opt/odoo && git clone https://github.com/odoo/odoo.git -b 19.0 --depth 1 community"
Danach die virtuelle Umgebung anlegen und die Python-Abhängigkeiten installieren:
sudo -u odoo -H bash
cd /opt/odoo
python3 -m venv venv
source /opt/odoo/venv/bin/activate
pip install --upgrade pip wheel setuptools
cd /opt/odoo/community
sudo ./setup/debinstall.sh
pip install -r requirements.txt
deactivate
exit
Für die Enterprise-Erweiterung wird die Verzeichnisstruktur vorbereitet:
sudo mkdir -p /opt/odoo/enterprise
sudo mkdir -p /opt/odoo/custom-addons
sudo mkdir -p /var/lib/odoo
sudo mkdir -p /var/log/odoo
Die Zielstruktur lautet:
/opt/odoo/community
/opt/odoo/enterprise
/opt/odoo/custom-addons
/var/lib/odoo
/var/log/odoo
/etc/odoo.conf
Jetzt wird die per FileZilla nach /tmp hochgeladene Enterprise-.tar.gz nach /opt/odoo/enterprise entpackt:
sudo tar -xzf /tmp/DEINE_ENTERPRISE_DATEI.tar.gz -C /opt/odoo/enterprise --strip-components=1
ls -lah /opt/odoo/enterprise
Alle Odoo-relevanten Verzeichnisse sollen dem Linux-Benutzer odoo gehören:
sudo chown -R odoo:odoo /opt/odoo
sudo chown -R odoo:odoo /var/lib/odoo
sudo chown -R odoo:odoo /var/log/odoo
Enterprise wird über den addons_path eingebunden. Da Odoo in dieser Umgebung hinter Nginx Proxy Manager läuft, wird proxy_mode direkt aktiviert. Zusätzlich werden 2 Worker und der Websocket-/Gevent-Port 8072 berücksichtigt.
Datei bearbeiten:
sudo nano /etc/odoo.conf
Inhalt:
[options]
admin_passwd = SUPERADMIN_PASSWORT
db_host = False
db_port = False
db_user = odoo
db_password = SICHERES_PASSWORT
addons_path = /opt/odoo/enterprise,/opt/odoo/community/addons,/opt/odoo/custom-addons
data_dir = /var/lib/odoo
logfile = /var/log/odoo/odoo.log
http_port = 8069
proxy_mode = True
workers = 2
max_cron_threads = 1
gevent_port = 8072
limit_memory_soft = 629145600
limit_memory_hard = 1677721600
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
Rechte setzen:
sudo chown odoo:odoo /etc/odoo.conf
sudo chmod 640 /etc/odoo.conf
Ports prüfen:
ss -tulpen | grep 8069
ss -tulpen | grep 8072
Für den Quellenbetrieb wird ein eigener systemd-Dienst eingerichtet. Gestartet wird der Server aus dem Community-Code; Enterprise wird über den addons_path ergänzt.
Datei erstellen:
sudo nano /etc/systemd/system/odoo.service
Inhalt:
[Unit]
Description=Odoo 19
Documentation=https://www.odoo.com
After=network.target postgresql.service
[Service]
Type=simple
User=odoo
Group=odoo
ExecStart=/opt/odoo/venv/bin/python3 /opt/odoo/community/odoo-bin -c /etc/odoo.conf
WorkingDirectory=/opt/odoo/community
Restart=always
RestartSec=5s
KillMode=mixed
[Install]
WantedBy=multi-user.target
Danach:
sudo systemctl daemon-reload
sudo systemctl enable odoo
sudo systemctl restart odoo
sudo systemctl status odoo
Logs prüfen:
sudo journalctl -u odoo -n 100 --no-pager
web_enterprise installierenDamit eine bestehende Datenbank auf Enterprise umgestellt wird, muss das Modul web_enterprise auf der gewünschten Odoo-Datenbank installiert werden.
Zuerst den Dienst stoppen:
sudo systemctl stop odoo
Dann web_enterprise auf der gewünschten Datenbank installieren:
sudo -u odoo /opt/odoo/venv/bin/python3 /opt/odoo/community/odoo-bin \
-c /etc/odoo.conf \
-d DEINE_DATENBANK \
-i web_enterprise \
--stop-after-init
Danach Odoo wieder starten:
sudo systemctl restart odoo
sudo systemctl status odoo
Nur der Datenbankname bleibt individuell. Alles andere bleibt beim einheitlichen Benutzer
odoo.
Nach dem Neustart kannst du dich in Odoo anmelden und den Enterprise-Subscription-Code im Hinweisbanner eintragen.
Da Odoo hinter Nginx Proxy Manager läuft, übernimmt Nginx Proxy Manager die öffentliche Erreichbarkeit, SSL-Verschlüsselung und die Weiterleitung an den internen Odoo-Server.
Intern läuft Odoo auf:
80698072Die Odoo-Konfiguration mit proxy_mode = True, workers = 2 und gevent_port = 8072 ist dafür bereits vorbereitet.
Lege in Nginx Proxy Manager einen Proxy Host für deine Odoo-Domain an.
http8069/websocket/Da Odoo mit Workern läuft, muss der Pfad /websocket/ an den Gevent-Port weitergeleitet werden.
Lege in Nginx Proxy Manager eine Custom Location an:
/websocket/http8072Wenn in deiner NPM-Version für diese Location eine Websocket-Option vorhanden ist, aktiviere sie.
Wenn Websocket-Verbindungen trotz aktivierter Optionen nicht sauber funktionieren, ergänze in der Custom Location oder im Proxy Host eine zusätzliche benutzerdefinierte Nginx-Konfiguration:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_upgrade;
proxy_read_timeout 720s;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Nach jeder Änderung an Odoo oder Nginx Proxy Manager prüfen:
sudo systemctl restart odoo
sudo systemctl status odoo
sudo journalctl -u odoo -n 100 --no-pager
Im Browser prüfen:
Wenn die normale Oberfläche funktioniert, aber Live-Updates oder Chat nicht, liegt die Ursache meist bei der /websocket/-Weiterleitung oder am Upgrade-Handling im Proxy.
Diese Anleitung enthält bereits die im Verlauf aufgetretenen Praxisfälle:
gpg wurde nicht gefunden → Grundpakete vor dem Repository-Schritt ergänztcreateuser wurde nicht gefunden → PostgreSQL direkt mit postgresql-contrib ergänztodoo existierte bereits → sauberer Weg über ALTER ROLErootpip install -r requirements.txt.tar.gz per FileZilla nach /tmp → danach Entpacken nach /opt/odoo/enterpriseproxy_mode = True, 2 Worker, Websocket über 8072Mit dieser Anleitung ist Odoo 19 auf Ubuntu in einer Form aufgebaut, die zu deinem Setup passt:
odoo für Linux, PostgreSQL und Dienst