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

  1. Ein Rocky Linux 9-Server mit mindestens 2 GB RAM zur Bereitstellung des Odoo-Stacks.
  2. 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.
  3. 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.
  4. Halten Sie Ihre Systeme auf dem neuesten Stand. $ sudo dnf update
  5. Ein Nicht-Root-Benutzer mit Sudo-Rechten auf beiden Servern.
  6. Fail2Ban sollte installiert sein. Dieser Schritt ist optional. Sie können unserer Anleitung zur Installation von Fail2Ban auf Rocky Linux folgen.
  7. SELinux sollte deaktiviert sein.
  8. Einige Pakete, die Ihre Systeme benötigen. $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y Einige 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.

  1. Erstellen Sie eine neue virtualenv-Umgebung für Odoo. $ python3 -m venv odoo-env
  2. 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
  3. Aktualisieren Sie PIP, nur für den Fall. (odoo-env) $ pip3 install --upgrade pip
  4. 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://:8069 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.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.