Odoo Installation · 22 min read · Nov 17, 2025
So installieren Sie Odoo 17 ERP-Software auf Rocky Linux 9

Odoo (früher bekannt als OpenERP) ist eine selbst gehostete Suite von über 10.000 Open-Source-Anwendungen für verschiedene Geschäftsbedürfnisse, einschließlich CRM, E-Commerce, Buchhaltung, Inventar, Projektmanagement und Verkaufsstelle. Diese Anwendungen sind vollständig integriert und über eine vertraute Weboberfläche zugänglich.
Dieses Tutorial zeigt uns, wie man den Odoo 16 Stack auf einem Rocky Linux 9-Server installiert.
Voraussetzungen
- Ein Rocky Linux 9-Server mit mindestens 2 GB RAM zur Bereitstellung des Odoo-Stacks.
- Ein zweiter Rocky Linux 9-Server mit mindestens 2 GB RAM zur Bereitstellung der PostgreSQL-Datenbank. Sie können die Datenbank jedoch auch auf demselben Server wie Odoo installieren, aber für Produktionsumgebungen wird dringend empfohlen, sie auf einem separaten Server zu installieren. Sie können auch eine der verwalteten Datenbankoptionen von einem Anbieter Ihrer Wahl wählen.
- Der RAM-Bedarf hängt von der Anzahl der gleichzeitigen Benutzer ab, die den Stack verwenden. Eine detaillierte Anleitung zur Berechnung der Systemanforderungen finden Sie in der Dokumentation von Odoo.
- Halten Sie Ihre Systeme auf dem neuesten Stand.
$ sudo dnf update - Ein Nicht-Root-Benutzer mit Sudo-Rechten auf beiden Servern.
- Fail2Ban sollte installiert sein. Dieser Schritt ist optional. Sie können unserer Anleitung zur Installation von Fail2Ban auf Rocky Linux folgen.
- SELinux sollte deaktiviert sein.
- Einige Pakete, die Ihre Systeme benötigen.
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -yEinige dieser Pakete sind möglicherweise bereits auf Ihrem System installiert.
Schritt 1 - Firewall-Regeln konfigurieren
Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld-Firewall. Für dieses Tutorial nehmen wir an, dass Sie die Firewalld-Firewall auf beiden Servern installiert haben.
Überprüfen Sie den Status der Firewall.
$ sudo firewall-cmd --state
running
Die Firewall arbeitet mit verschiedenen Zonen, und die öffentliche Zone ist die Standardzone, die wir verwenden werden. Listen Sie alle Dienste und Ports auf, die in der Firewall aktiv sind.
$ sudo firewall-cmd --zone=public --list-all
Es sollte die folgende Ausgabe anzeigen.
public
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Auf dem Odoo-Server müssen die Ports 22, 80, 443, 6010, 5432 und 8069 geöffnet sein. 22 wird für SSH verwendet, 80 für HTTP, 443 für HTTPS, 6010 wird für die Odoo-Kommunikation verwendet, 5432 wird von PostgreSQL verwendet und 8069 wird für die Odoo-Serveranwendung verwendet.
Führen Sie die folgenden Befehle aus, um die erforderlichen Ports auf dem Odoo-Server zu öffnen.
$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https
Überprüfen Sie den Status der Firewall.
$ sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client http https ssh
ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Auf dem PostgreSQL-Server müssen die Ports 22, 6010 und 5432 geöffnet werden. Öffnen Sie sie mit den folgenden Befehlen.
$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp
Machen Sie alle Änderungen dauerhaft und laden Sie die Firewall neu, um die Änderungen zu aktivieren.
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload
Schritt 2 - Hostnamen zuweisen
Sie können entweder die IP-Adressen der Server verwenden oder deren vollständig qualifizierte Domainnamen (FQDN), falls verfügbar. Für unser Tutorial verwenden wir FQDNs, und dafür müssen wir die Hostnamen auf beiden Servern festlegen.
Setzen Sie den Hostnamen auf dem Odoo-Server mit dem folgenden Befehl.
$ sudo hostnamectl set-hostname odoo.yourdomain.com
Setzen Sie den Hostnamen auf dem PostgreSQL-Server mit dem folgenden Befehl.
$ sudo hostnamectl set-hostname postgresql.yourdomain.com
Öffnen Sie auf dem Odoo-Server die Datei /etc/hosts.
$ sudo nano /etc/hosts
Stellen Sie sicher, dass sie wie folgt aussieht.
127.0.0.1 localhost
127.0.0.1 odoo.yourdomain.com odoo
10.1.1.10 postgresql.yourdomain.com postgresql
Öffnen Sie auf dem PostgreSQL-Server die Datei und stellen Sie sicher, dass sie wie folgt aussieht.
127.0.0.1 localhost
127.0.0.1 postgresql.yourdomain.com postgresql
10.1.2.10 odoo.yourdomain.com odoo
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
Schritt 3 - PostgreSQL installieren und konfigurieren
Rocky Linux 9 wird standardmäßig mit PostgreSQL 13 ausgeliefert und PostgreSQL 15 als postgresql:15 Modulstream. Wir werden jedoch die zum Zeitpunkt des Schreibens dieses Tutorials neueste verfügbare Version, PostgreSQL 16 aus dem offiziellen Repository, installieren.
Installieren Sie das PostgreSQL-Repository-RPM.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Deaktivieren Sie das integrierte PostgreSQL-Modul.
$ sudo dnf -qy module disable postgresql
Installieren Sie PostgreSQL 16.
$ sudo dnf install -y postgresql16-server postgresql16-contrib
Initialisieren Sie die Datenbank.
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Aktivieren und starten Sie den PostgreSQL-Dienst.
$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16
Überprüfen Sie den Status des Dienstes.
$ sudo systemctl status postgresql-16
Sie sollten eine ähnliche Ausgabe erhalten.
? postgresql-16.service - PostgreSQL 16-Datenbankserver
Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago
Docs: https://www.postgresql.org/docs/16/static/
Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 8678 (postgres)
Tasks: 7 (limit: 10819)
Memory: 17.4M
CPU: 60ms
CGroup: /system.slice/postgresql-16.service
??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
??8679 "postgres: logger "
??8680 "postgres: checkpointer "
??8681 "postgres: background writer "
??8683 "postgres: walwriter "
??8684 "postgres: autovacuum launcher "
??8685 "postgres: logical replication launcher "
Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16-Datenbankserver...
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG: redirecting log output to logging collector process
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT: Future log output will appear in directory "log".
Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16-Datenbankserver.
Als Nächstes müssen wir einen Datenbankbenutzer odoo erstellen. Sie werden nach einem Passwort für die Rolle gefragt. Geben Sie ein sicheres Passwort Ihrer Wahl ein.
$ sudo -u postgres createuser odoo -U postgres -dP
Die Option -u führt den Befehl als Benutzer postgres aus.
Die Option -U gibt den Benutzernamen an, mit dem verbunden werden soll.
Die Option -d gewährt dem Benutzer die Berechtigung, Datenbanken zu erstellen.
Die Option -p fordert das Passwort des neuen Benutzers an.
Hostbasierte Authentifizierung konfigurieren
Wir müssen dem PostgreSQL-Dienst die Berechtigung erteilen, eine Verbindung zum Odoo-Server herzustellen.
Zuerst stoppen Sie den PostgreSQL-Dienst.
$ sudo systemctl stop postgresql-16
Um herauszufinden, wo PostgreSQL die Client-Authentifizierungsdatei speichert, führen Sie den folgenden Befehl aus, um die PostgreSQL-Shell zu starten.
$ sudo -u postgres psql
Führen Sie die folgende Abfrage aus, um den Speicherort der Datei zu finden.
postgres=# SHOW hba_file;
Sie erhalten die folgende Ausgabe.
hba_file
------------------------------------
/var/lib/pgsql/16/data/pg_hba.conf
(1 row)
Geben Sie exit ein, um die Shell zu verlassen.
Öffnen Sie die Datei /var/lib/pgsql/16/data/pg_hba.conf zur Bearbeitung.
$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf
Fügen Sie die folgende Zeile am Ende ein.
host all odoo odoo.yourdomain.com scram-sha-256
Diese Zeile gewährt dem Benutzer odoo die Berechtigung, eine Verbindung zu allen Datenbanken innerhalb dieses Servers herzustellen. Sie können auch den Namen der Datenbanken angeben, anstatt das Schlüsselwort all zu verwenden.
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
PostgreSQL-Listening-Adresse konfigurieren
Als Nächstes müssen wir dem Datenbankserver erlauben, Remote-Verbindungen zu akzeptieren.
Starten Sie die PostgreSQL-Shell und führen Sie den folgenden Befehl aus, um die PostgreSQL-Konfigurationsdatei zu finden.
$ sudo -u postgres psql
postgres=# SHOW config_file;
Sie erhalten die folgende Ausgabe.
config_file
----------------------------------------
/var/lib/pgsql/16/data/postgresql.conf
(1 row)
Geben Sie exit ein, um die Shell zu verlassen.
Öffnen Sie die Datei /var/lib/pgsql/16/data/postgresql.conf zur Bearbeitung.
$ sudo nano /var/lib/pgsql/16/data/postgresql.conf
Ändern Sie die Zeile listen_addresses von
#listen_addresses = 'localhost' # what IP address(es) to listen on;
zu.
listen_addresses = '*'
Das * bedeutet, dass es auf allen IP-Adressen hören wird. Sie können es auf die IP-Adresse Ihrer Odoo-Instanz ändern.
listen_addresses = 'localhost, '
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
PostgreSQL-Dienst aktivieren und starten
Da unsere Konfiguration abgeschlossen ist, ist es Zeit, den PostgreSQL-Dienst zu starten.
$ sudo systemctl start postgresql-16
Schritt 4 - Odoo installieren
Python 3.10 installieren
Rocky Linux 9 wird mit Python 3.9 ausgeliefert, während Odoo 17 Python 3.10 und höher benötigt. Daher müssen wir das zuerst installieren.
Sie können zuerst die aktuell verfügbare Version überprüfen.
$ python --version
Python 3.9.18
Installieren Sie die erforderlichen Abhängigkeiten für Python.
$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev
$ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel
Laden Sie den Quellcode von der Python-Website herunter. Zum Zeitpunkt des Schreibens dieses Tutorials ist die neueste verfügbare Version 3.10.x die 3.10.14, die wir verwendet haben.
$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
Entpacken Sie das Archiv.
$ tar xzf Python-3.10.14.tgz
Wechseln Sie in das entpackte Verzeichnis.
$ cd Python-3.10.14
Konfigurieren Sie den Quellcode.
$ ./configure --enable-optimizations
Installieren Sie Python 3.10.14. Der Befehl altinstall wird verwendet, damit die System-Python-Version nicht überschrieben wird.
$ sudo make altinstall
Bestätigen Sie die Installation.
$ python3.10 -V
ODER
$ python3.10 --version
Sie sollten die folgende Ausgabe erhalten.
Python 3.10.14
Als Nächstes müssen wir Python 3.10 als Standard-Python-Version festlegen. Erstellen Sie symbolische Links für jede auf Ihrem Server installierte Python-Version. Beim Erstellen der symbolischen Version sollten Sie die genaue Version von Python in Ihren Befehlen angeben. Führen Sie die folgenden Befehle aus, um die symbolischen Links zu erstellen.
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2
Um die verfügbaren Python-Versionen anzuzeigen, verwenden Sie den folgenden Befehl.
$ sudo update-alternatives --config python3
Sie sollten die folgende Ausgabe sehen.
Es gibt 2 Programme, die 'python3' bereitstellen.
Auswahl Befehl
-----------------------------------------------
1 /usr/local/bin/python3.10
*+ 2 /usr/bin/python3.9
Geben Sie ein, um die aktuelle Auswahl zu behalten[+], oder geben Sie die Auswahlnummer ein:
Wählen Sie die Nummer 1, um zu Python 3.10 zu wechseln.
Melden Sie sich ab und wieder an, um zur Python-Version zu wechseln. Sie können jetzt Python 3.10.14 direkt mit python verwenden.
Abhängigkeiten installieren und auf die Installation vorbereiten
Erstellen Sie einen neuen Systembenutzer zur Verwaltung der Odoo-Prozesse auf dem Odoo-Server mit dem Home-Verzeichnis /opt/odoo. Dies dient dazu, Sicherheitsrisiken zu vermeiden, indem es nicht unter dem Root-Benutzer ausgeführt wird.
$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo
Installieren Sie die für die Odoo 17-Installation erforderlichen Systemabhängigkeiten.
$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel
Installieren Sie Nodejs. Rocky Linux 9 wird mit Node 18.x ausgeliefert, das die aktuelle LTS-Version von Nodejs ist. Wir werden jedoch das offizielle Nodesource-Repository dafür verwenden.
Fügen Sie das Node 20-Repository hinzu.
$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
Installieren Sie Nodejs.
$ sudo dnf -y install nodejs
Bestätigen Sie die Node-Version.
$ node --version
v20.12.1
Installieren Sie das Less-CSS-Paket mit Node. Wenn Sie eine Sprache mit einer von rechts nach links gerichteten Benutzeroberfläche verwenden, installieren Sie auch das rtlcss-Paket.
$ sudo npm install -g less rtlcss
Installieren Sie wkhtmltopdf. Wir werden das RPM-Paket aus dem Wkhtmltopdf-GitHub-Paket-Repository verwenden. Die neueste Version, die zum Zeitpunkt des Schreibens dieses Tutorials verfügbar ist, ist 0.12.6.1 r3.
Laden Sie das Wkhtmltopdf-RPM herunter.
$ cd ~
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Installieren Sie die von Wkhtmltopdf benötigten Schriftarten.
$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch
Installieren Sie Wkhtmltopdf.
$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm
Überprüfen Sie die installierte Version von wkhtmltopdf.
$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (mit gepatchtem qt)
Odoo-Dateien herunterladen
Wechseln Sie zum Odoo-Systembenutzer.
$ sudo su - odoo
Klonen Sie das GitHub-Repository von Odoo auf Ihr System.
$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch
Für unsere Zwecke kopieren wir Odoo in das Verzeichnis /opt/odoo, von wo aus es installiert wird. Dies wird das Verzeichnis /opt/odoo/odoo erstellen, das wir für die Installation verwenden werden.
Virtuelle Python-Umgebung einrichten
Dieser Schritt ist optional, wird jedoch empfohlen, da eine virtuelle Python-Umgebung für Odoo hilft, Konflikte mit den Python-Modulen des Betriebssystems zu vermeiden, insbesondere bei Betriebssystem-Upgrades.
Dafür verwenden wir virtualenv.
- Erstellen Sie eine neue
virtualenv-Umgebung für Odoo.$ python3 -m venv odoo-env - Aktivieren Sie die virtuelle Umgebung. Wir erstellen eine Umgebung im Home-Verzeichnis des Systembenutzers. Sie können jeden Ort wählen, den Sie möchten.
$ source odoo-env/bin/activate - Aktualisieren Sie PIP, nur für den Fall.
(odoo-env) $ pip3 install --upgrade pip - Installieren Sie das Python-Wheel in der virtuellen Umgebung.
$ pip3 install wheel
Python-Abhängigkeiten installieren
Installieren Sie die für Odoo 17 erforderlichen Python-Abhängigkeiten.
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Die Anforderungen benötigen einige Zeit zur Installation, also haben Sie Geduld.
Überprüfen Sie, ob die Anforderungen korrekt installiert sind, indem Sie die Liste der installierten Python-Module überprüfen.
$ pip3 list
Package Version
----------------- --------
attrs 23.2.0
Babel 2.9.1
beautifulsoup4 4.12.3
cached-property 1.5.2
certifi 2024.2.2
cffi 1.16.0
chardet 4.0.0
cryptography 3.4.8
decorator 4.4.2
docopt 0.6.2
docutils 0.17
ebaysdk 2.1.5
freezegun 1.1.0
geoip2 2.9.0
gevent 21.8.0
greenlet 1.1.2
idna 2.10
isodate 0.6.1
Jinja2 3.0.3
libsass 0.20.1
lxml 4.8.0
MarkupSafe 2.0.1
maxminddb 2.6.0
num2words 0.5.10
ofxparse 0.21
passlib 1.7.4
Pillow 9.0.1
pip 24.0
platformdirs 4.2.0
polib 1.1.1
psutil 5.9.0
psycopg2 2.9.2
pyasn1 0.6.0
pyasn1_modules 0.4.0
pycparser 2.22
pydot 1.4.2
pyOpenSSL 21.0.0
pyparsing 3.1.2
PyPDF2 1.26.0
pyserial 3.5
python-dateutil 2.8.1
python-ldap 3.4.0
python-stdnum 1.17
pytz 2024.1
pyusb 1.2.1
qrcode 7.3.1
reportlab 3.6.8
requests 2.25.1
requests-file 2.0.0
requests-toolbelt 1.0.0
rjsmin 1.1.0
setuptools 65.5.0
six 1.16.0
soupsieve 2.5
urllib3 1.26.5
vobject 0.9.6.1
Werkzeug 2.0.2
wheel 0.43.0
xlrd 1.2.0
XlsxWriter 3.0.2
xlwt 1.3.0
zeep 4.1.0
zope.event 5.0
zope.interface 6.2
Verlassen Sie die Python-virtuelle Umgebung.
$ deactivate
Erstellen Sie ein Verzeichnis für 3rd-Party-Addons
$ mkdir /opt/odoo/odoo/custom-addons
Dieses Verzeichnis sollte zum Parameter addons_path hinzugefügt werden, der die Verzeichnisse definiert, in denen Odoo nach Modulen sucht. Verlassen Sie den Odoo-Systembenutzer.
$ exit
Schritt 5 - Odoo konfigurieren
Kopieren Sie die Standard-Odoo-Konfigurationsdatei, um eine neue zu erstellen.
$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf
Öffnen Sie die Datei zur Bearbeitung.
$ sudo nano /etc/odoo.conf
Bearbeiten Sie die Datei, sodass sie wie folgt aussieht.
[options]
; Dies ist das Passwort, das Datenbankoperationen erlaubt:
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
Die Option admin_passwd ist das Passwort, das administrative Operationen innerhalb der Odoo-GUI erlaubt. Stellen Sie sicher, dass Sie ein sicheres Passwort wählen.
Die Option db_host ist der FQDN oder die IP-Adresse des PostgreSQL-Servers.
Die Option db_port ist auf false gesetzt, da der Standardport 5432 von PostgreSQL verwendet wird. Wenn Sie einen anderen Port verwenden möchten, müssen Sie diesen Wert aktualisieren.
Die Option db_user ist der Name des PostgreSQL-Benutzers.
Die Option db_password ist das Passwort des PostgreSQL-Benutzers ‘odoo’, das wir zuvor auf dem PostgreSQL-Server erstellt haben.
Die Option addons_path ist der Standard-Addons-Pfad. Sie können auch einen benutzerdefinierten Pfad für Addons hinzufügen, indem Sie sie durch Kommas trennen.
Die Option xmlrpc_port ist der Port, auf dem Odoo lauscht.
Die Option default_productivity_apps stellt sicher, dass die standardmäßigen Produktivitätsanwendungen (nämlich Mitarbeiter, E-Mail-Marketing, Projekt und Umfragen) aktiviert bleiben. Diese vier Apps sind die Standardversion in der Odoo Community Edition. In der Enterprise Edition gibt es zusätzliche Produktivitätsanwendungen, die standardmäßig aktiviert werden können, nämlich Termine, Wissen, Planung und Unterschrift.
Odoo-Dienst erstellen
Um sicherzustellen, dass Odoo auch nach einem Systemneustart weiterläuft, müssen wir einen Dienst dafür erstellen.
Erstellen Sie eine Datei /lib/systemd/system/odoo-server.service und öffnen Sie sie zur Bearbeitung.
$ sudo nano /lib/systemd/system/odoo-server.service
Fügen Sie den folgenden Code ein.
[Unit]
Description=Odoo Open Source ERP und CRM
Requires=postgresql-16.service
After=network.target postgresql-16.service
[Service]
Type=simple
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
WorkingDirectory=/opt/odoo/odoo/
StandardOutput=journal+console
KillMode=mixed
[Install]
WantedBy=multi-user.target
Ersetzen Sie /home/ durch den Speicherort, den Sie für die Installation der Python-virtuellen Umgebung gewählt haben.
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
Erstellen Sie ein Protokollverzeichnis für Odoo
$ sudo mkdir /var/log/odoo
Dateiberechtigungen festlegen
Setzen Sie die Berechtigungen für die Datei odoo-server.service, sodass nur Odoo-Benutzer sie lesen oder ausführen können.
$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service
Setzen Sie die Eigentümerschaft für die Python-Umgebung, die Odoo-Installation und das Protokollverzeichnis.
$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo
Beschränken Sie die Odoo-Konfigurationsdatei.
$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf
Odoo-Server starten
Starten und aktivieren Sie den Odoo-Server.
$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server
Überprüfen Sie den Status des Servers.
$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP und CRM
Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago
Main PID: 102598 (python3)
Tasks: 4 (limit: 10736)
Memory: 69.6M
CPU: 895ms
CGroup: /system.slice/odoo-server.service
??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
Apr 09 23:59:38 odoo.yourdomain.com systemd[1]: Started Odoo Open Source ERP und CRM.
Schritt 6 - Nginx installieren und konfigurieren
Rocky Linux 9 wird mit einer älteren Version von Nginx ausgeliefert. Sie müssen das offizielle Nginx-Repository verwenden, um die neueste Version zu installieren.
Erstellen und öffnen Sie die Datei /etc/yum.repos.d/nginx.repo zur Bearbeitung.
$ sudo nano /etc/yum.repos.d/nginx.repo
Fügen Sie den folgenden Code ein.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Sobald Sie fertig sind, speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden. Wir werden die Mainline-Version von Nginx verwenden und haben daher das Mainline-Repository in der obigen Datei aktiviert, indem wir enabled=1 unter dem Mainline-Bereich anstelle des stabilen Bereichs verwendet haben. Sie können entweder eines auswählen.
Installieren Sie Nginx.
$ sudo dnf install -y nginx
Überprüfen Sie die Installation.
$ nginx -v
nginx version: nginx/1.25.4
Aktivieren und starten Sie den Nginx-Serverdienst.
$ sudo systemctl enable nginx --now
Überprüfen Sie den Dienststatus.
$ sudo systemctl status nginx
? nginx.service - nginx - Hochleistungs-Webserver
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago
Docs: http://nginx.org/en/docs/
Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 103453 (nginx)
Tasks: 3 (limit: 10736)
Memory: 3.1M
CPU: 17ms
CGroup: /system.slice/nginx.service
??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??103454 "nginx: worker process"
??103455 "nginx: worker process"
Schritt 7 - SSL installieren
Wir müssen Certbot installieren, um kostenlose SSL-Zertifikate zu generieren, die von Let’s Encrypt angeboten werden. Wir werden dafür den Snapd-Paketinstaller verwenden. Er benötigt das EPEL (Extra Packages for Enterprise Linux)-Repository, um zu funktionieren.
Installieren Sie das EPEL-Repository.
$ sudo dnf install -y epel-release
Rocky Linux 9 wird nicht mit Snapd installiert. Installieren Sie das Snapd-Paket.
$ sudo dnf install -y snapd
Aktivieren und starten Sie den Snap-Dienst.
$ sudo systemctl enable snapd --now
Installieren Sie das Snap-Core-Paket und stellen Sie sicher, dass Ihre Version von Snapd auf dem neuesten Stand ist.
$ sudo snap install core
$ sudo snap refresh core
Erstellen Sie die erforderlichen Links, damit Snapd funktioniert.
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Installieren Sie Certbot.
$ sudo snap install --classic certbot
Verwenden Sie den folgenden Befehl, um sicherzustellen, dass der Certbot-Befehl ausgeführt werden kann, indem Sie einen symbolischen Link zum Verzeichnis /usr/bin erstellen.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Überprüfen Sie, ob Certbot ordnungsgemäß funktioniert.
$ certbot --version
certbot 2.10.0
Generieren Sie das Zertifikat. Wir müssen auch ein DHParams-Zertifikat erstellen.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.yourdomain.com
Generieren Sie ein Diffie-Hellman-Schlüsselaustauschzertifikat.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Überprüfen Sie den Zeitplan des Certbot-Erneuerungsdienstes.
$ sudo systemctl list-timers
Sie finden snap.certbot.renew.service als einen der Dienste, die geplant sind.
NEXT LEFT LAST PASSED UNIT ACTIVATES
.... .... .... ...... .... ..........
Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer dnf-makecache.service
Wed 2024-04-10 19:08:00 UTC 7h left - - snap.certbot.renew.timer snap.certbot.renew.service
Thu 2024-04-11 00:00:00 UTC 12h left Wed 2024-04-10 00:00:36 UTC 11h ago logrotate.timer logrotate.service
Führen Sie einen Testlauf des Prozesses durch, um zu überprüfen, ob die SSL-Erneuerung einwandfrei funktioniert.
$ sudo certbot renew --dry-run
Wenn Sie keine Fehler sehen, sind Sie bereit. Ihr Zertifikat wird automatisch erneuert.
Schritt 8 - Nginx konfigurieren
Um es über Nginx auszuführen, müssen wir Odoo auf localhost ausführen. Um das zu ändern, stoppen Sie den Odoo-Dienst.
$ sudo systemctl stop odoo-server
Öffnen Sie die Odoo-Serverkonfigurationsdatei.
$ sudo nano /etc/odoo.conf
Fügen Sie die folgenden Zeilen hinzu.
xmlrpc_interface = 127.0.0.1
proxy_mode = True
Erstellen Sie eine Nginx-Konfigurationsdatei für Odoo.
$ sudo nano /etc/nginx/conf.d/odoo.conf
Fügen Sie den folgenden Code ein.
#odoo server
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $sent_http_content_type $content_type_csp {
default "";
~image/ "default-src 'none'";
}
# http -> https
server {
listen 80;
listen [::]:80;
server_name odoo.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
http3 on;
quic_retry on;
server_name odoo.yourdomain.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_certificate /etc/letsencrypt/live/odoo.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Redirect longpoll requests to odoo longpolling port
location /longpolling {
proxy_pass http://odoochat;
}
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_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;
proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
proxy_set_header X-Forwarded-Host $http_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;
proxy_redirect off;
proxy_pass http://odoo;
proxy_cookie_flags session_id samesite=lax secure; # requires nginx 1.19.8
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
# root and try_files both depend on your addons paths
root /opt/odoo/odoo;
try_files /opt/odoo/odoo/addons$uri @odoo;
expires 24h;
add_header Content-Security-Policy $content_type_csp;
}
}
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
Öffnen Sie die Datei /etc/nginx/nginx.conf zur Bearbeitung.
$ sudo nano /etc/nginx/nginx.conf
Fügen Sie die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; hinzu.
server_names_hash_bucket_size 64;
Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.
Testen Sie die Nginx-Konfiguration.
$ sudo nginx -t
Wenn Sie keine Fehler sehen, sind Sie bereit. Starten Sie den Nginx-Server neu.
$ sudo systemctl restart nginx
Schritt 9 - Odoo starten
Wir können den Odoo-Server wieder starten, nachdem alles eingerichtet ist.
$ sudo systemctl start odoo-server
Starten Sie Odoo in Ihrem Browser über https://odoo.yourdomain.com. Öffnen Sie in Ihrem Browser die URL http:// oder http://odoo.yourdomain.com:8069. Sie sollten den Bildschirm zur Erstellung der Odoo-Datenbank sehen, wenn alles ordnungsgemäß funktioniert.

Wählen Sie Ihre E-Mail und Ihr Passwort, um Ihre Anmeldeinformationen zu erstellen. Das Master-Passwort ist das admin_passwd, das Sie in der Datei /etc/odoo.conf hinzugefügt haben. Füllen Sie alle verbleibenden Felder aus.
Überprüfen Sie das Feld Demo-Daten, um die Datenbank mit Beispieldaten zu füllen. Installieren Sie keine Demodaten auf öffentlich zugänglichen Servern. Datenbanken mit Demodaten enthalten Standardanmeldungen und -passwörter, die verwendet werden können, um in Ihre Systeme zu gelangen und erhebliche Probleme zu verursachen, selbst in Staging-/Entwicklungssystemen. Wir verwenden es nur zu Schulungszwecken.
Klicken Sie auf die Schaltfläche Datenbank erstellen, um mit der Installation fortzufahren. Beim ersten Erstellen einer Datenbank benötigt die Addons-Seite Zeit zum Laden, also aktualisieren Sie die Seite nicht. Sie werden automatisch zur folgenden Anmeldeseite weitergeleitet, sobald die Datenbank erstellt wurde.

Geben Sie die Anmeldeinformationen ein, die Sie im vorherigen Schritt verwendet haben, um sich bei Odoo ERP anzumelden, und Sie werden zur Dashboard-Seite weitergeleitet, wie unten gezeigt. Es wird mit Demodaten vorausgefüllt sein. Wenn Sie die Demodatenoption auf der Seite zur Erstellung der Datenbank nicht aktiviert haben, erhalten Sie ein anderes und viel saubereres Dashboard.

Sie können Odoo ab hier verwenden, um Ihr Geschäft zu verwalten.
Schritt 10 - Odoo aktualisieren
Stoppen Sie den Odoo-Server.
$ sudo systemctl stop odoo-server
Wechseln Sie zum Odoo-Systembenutzer.
$ sudo su - odoo
Holen Sie sich den neuesten Quellcode von GitHub.
$ git fetch
$ git rebase --autostash
Der zweite Befehl kann auf Quellcode-Konflikte stoßen, wenn Sie den Quellcode manuell ändern. Ihnen wird die Liste der konfliktbehafteten Dateien angezeigt. Sie müssen alle Dateien manuell ändern und den Befehl erneut ausführen, um die Probleme zu beheben.
Wenn Sie die konfliktbehafteten Änderungen verwerfen möchten, können Sie den folgenden Befehl ausführen, um den Quellcode zurückzusetzen.
$ git reset --hard
Aktivieren Sie die Python-virtuelle Umgebung.
$ source odoo-env/bin/activate
Installieren Sie die Python-Abhängigkeiten.
$ pip3 install -r /opt/odoo/odoo/requirements.txt
Verlassen Sie die Python-virtuelle Umgebung.
$ deactivate
Starten Sie den Odoo-Server.
$ sudo systemctl start odoo-server
Schritt 11 - Odoo mit Fail2Ban sichern
Dieser Schritt ist optional, aber wenn Sie Fail2Ban installiert haben, können Sie eine Konfiguration für Odoo hinzufügen, um es zu schützen.
Erstellen und öffnen Sie die Datei odoo-login.conf zur Bearbeitung.
$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf
Fügen Sie den folgenden Code ein.
[odoo-login]
enabled = true
port = http,https
bantime = 900 ; 15 min ban
maxretry = 10 ; if 10 attempts
findtime = 60 ; within 1 min /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log ; set the actual odoo log path here
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
Erstellen und öffnen Sie die Filterdatei odoo-login.conf zur Bearbeitung.
$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf
Fügen Sie den folgenden Code ein.
[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from
ignoreregex =
Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.
Starten Sie Fail2Ban neu.
$ sudo systemctl restart fail2ban
Fazit
Damit endet unser Tutorial zur Installation und Konfiguration von Odoo auf dem Rocky Linux 9-Server. Wenn Sie Fragen haben, stellen Sie diese bitte in den Kommentaren unten.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.