So installierst du die ERP-Software Odoo 17 auf Rocky Linux 9

Odoo (früher bekannt als OpenERP) ist eine selbst gehostete Suite mit über 10.000 Open-Source-Anwendungen für verschiedene Geschäftsanforderungen, darunter CRM, eCommerce, Buchhaltung, Inventar, Projektmanagement und Point of Sale. Diese Anwendungen sind vollständig integriert und werden über eine vertraute Weboberfläche bedient.

In diesem Lernprogramm lernen wir, wie wir Odoo 16 Stack auf einem Rocky Linux 9 Server installieren.

Voraussetzungen

  1. Ein Rocky Linux 9 Server mit mindestens 2 GB RAM, um Odoo Stack zu hosten.
  2. Ein zweiter Rocky Linux 9 Server mit mindestens 2 GB RAM für das Hosting der PostgreSQL-Datenbank. Du kannst die Datenbank zwar auf demselben Server wie Odoo installieren, aber für Produktionsumgebungen wird dringend empfohlen, sie auf einem separaten Server zu installieren. Du kannst auch eine der verwalteten Datenbankoptionen von einem Anbieter deiner Wahl wählen.
  3. Die Anforderungen an den Arbeitsspeicher hängen von der Anzahl der gleichzeitigen Nutzer ab, die den Stack verwenden werden. Eine ausführliche Anleitung zur Berechnung der Systemanforderungen findest du in der Dokumentation von Odoo.
  4. Halte deine Systeme auf dem neuesten Stand.
    $ sudo dnf update
    
  5. Ein Nicht-Root-Benutzer mit sudo-Rechten auf beiden Servern.
  6. Fail2Ban sollte installiert werden. Dieser Schritt ist optional. Du kannst dafür unsere Anleitung zur Installation von Fail2Ban auf Rocky Linux befolgen.
  7. SELinux sollte deaktiviert sein.
  8. Ein paar Pakete, die dein System benötigt.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

    Einige dieser Pakete sind möglicherweise bereits auf deinem System installiert.

Schritt 1 – Firewall-Regeln konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld Firewall. Für diese Anleitung gehen wir davon aus, dass du die Firewalld Firewall auf beiden Servern installiert hast.

Überprüfe den Status der Firewall.

$ sudo firewall-cmd --state
running

Die Firewall arbeitet mit verschiedenen Zonen, wobei die öffentliche Zone die Standardzone ist, die wir verwenden werden. Liste alle aktiven Dienste und Ports der Firewall auf.

$ sudo firewall-cmd --zone=public --list-all

Es sollte die folgende Ausgabe erscheinen.

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, 80 für HTTP, 443 für HTTPS, 6010 für die Odoo-Kommunikation, 5432 für PostgreSQL und 8069 für die Odoo-Serveranwendung verwendet.

Führe 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üfe 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 wir die Ports 22, 6010 und 5432 öffnen. Öffne sie mit den folgenden Befehlen.

$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp

Setze alle Änderungen dauerhaft um und lade die Firewall neu, um die Änderungen zu aktivieren.

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Schritt 2 – Hostnamen zuweisen

Du kannst entweder die IP-Adressen der Server verwenden oder ihre Fully Qualified Domain Names (FQDN), falls vorhanden. Für unser Lernprogramm werden wir FQDNs verwenden und müssen daher auf beiden Servern Hostnamen festlegen.

Setze den Hostnamen auf dem Odoo-Server mit dem folgenden Befehl.

$ sudo hostnamectl set-hostname odoo.yourdomain.com

Setze den Hostnamen auf dem PostgreSQL-Server mit dem folgenden Befehl.

$ sudo hostnamectl set-hostname postgresql.yourdomain.com

Öffne auf dem Odoo-Server die Datei /etc/hosts.

$ sudo nano /etc/hosts

Vergewissere dich, dass sie wie die folgende aussieht.

127.0.0.1 	localhost
127.0.0.1	odoo.yourdomain.com		odoo
10.1.1.10	postgresql.yourdomain.com	postgresql

Öffne die Datei auf dem PostgreSQL-Server und vergewissere dich, dass sie wie die folgende aussieht.

127.0.0.1 	localhost
127.0.0.1	postgresql.yourdomain.com	postgresql
10.1.2.10	odoo.yourdomain.com		odoo

Drücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Schritt 3 – PostgreSQL installieren und konfigurieren

Rocky Linux 9 wird standardmäßig mit PostgreSQL 13 und PostgreSQL 15 als postgresql:15 Modulstrom ausgeliefert. Wir werden jedoch die neueste Version installieren, die zum Zeitpunkt der Erstellung dieses Tutorials verfügbar ist, PostgreSQL 16 aus dem offiziellen Repository.

Installiere 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

Deaktiviere das integrierte PostgreSQL-Modul.

$ sudo dnf -qy module disable postgresql

Installiere PostgreSQL 16.

$ sudo dnf install -y postgresql16-server postgresql16-contrib

Initialisiere die Datenbank.

$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

Aktiviere und starte den PostgreSQL-Dienst.

$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16

Überprüfe den Status des Dienstes.

$ sudo systemctl status postgresql-16

Du solltest eine ähnliche Ausgabe erhalten.

? postgresql-16.service - PostgreSQL 16 database server
     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 database server...
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 database server.

Als nächstes müssen wir einen Datenbankbenutzer odoo erstellen. Du wirst nach einem Passwort für die Rolle gefragt. Gib ein sicheres Passwort deiner Wahl ein.

$ sudo -u postgres createuser odoo -U postgres -dP

Die Option -u führt den Befehl als postgres Benutzer aus.

Die Option -U gibt den Benutzernamen an, mit dem du dich verbinden willst.

Die Option -d gibt dem Benutzer das Recht, Datenbanken zu erstellen.

Mit der Option -p wird das Passwort des neuen Benutzers abgefragt.

Host-basierte Authentifizierung konfigurieren

Wir müssen dem PostgreSQL-Dienst die Berechtigung erteilen, sich mit dem Odoo-Server zu verbinden.

Stoppe zunächst den PostgreSQL-Dienst.

$ sudo systemctl stop postgresql-16

Um herauszufinden, wo PostgreSQL die Client-Authentifizierungsdatei speichert, führe den folgenden Befehl aus, um die PostgreSQL-Shell zu starten.

$ sudo -u postgres psql

Führe die folgende Abfrage aus, um den Speicherort der Datei zu finden.

postgres=# SHOW hba_file;

Du wirst die folgende Ausgabe erhalten.

              hba_file              
------------------------------------
 /var/lib/pgsql/16/data/pg_hba.conf
(1 row)

Gib exit ein, um die Shell zu beenden.

Öffne die Datei /var/lib/pgsql/16/data/pg_hba.conf zur Bearbeitung.

$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf

Füge die folgende Zeile am Ende ein.

host		all		odoo		odoo.yourdomain.com		scram-sha-256

Diese Zeile gibt dem Benutzer odoo die Erlaubnis, sich mit allen Datenbanken dieses Servers zu verbinden. Du kannst auch den Namen der Datenbanken angeben, anstatt das Schlüsselwort all zu verwenden.

Drücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

PostgreSQL-Listening-Adresse konfigurieren

Als Nächstes müssen wir dem Datenbankserver erlauben, auf Remote-Verbindungen zu lauschen.

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;

Du wirst die folgende Ausgabe erhalten.

              config_file               
----------------------------------------
 /var/lib/pgsql/16/data/postgresql.conf
(1 row)

Gib exit ein, um die Shell zu beenden.

Öffne die Datei /var/lib/pgsql/16/data/postgresql.conf zur Bearbeitung.

$ sudo nano /var/lib/pgsql/16/data/postgresql.conf

Ändere die Zeile listen_addresses von

#listen_addresses = 'localhost' # what IP address(es) to listen on;

zu.

listen_addresses = '*'

Das * bedeutet, dass alle IP-Adressen abgehört werden. Du kannst sie in die IP-Adresse deiner Odoo-Instanz ändern.

listen_addresses = 'localhost, <odoo_server_ip>'

Drücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Aktiviere und starte den PostgreSQL-Dienst

Da unsere Konfiguration abgeschlossen ist, ist es nun an der Zeit, den PostgreSQL-Dienst zu starten.

$ sudo systemctl start postgresql-16	

Schritt 4 – Odoo installieren

Installiere Python 3.10

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 diese Version zuerst installieren.

Du kannst zuerst die aktuell verfügbare Version überprüfen.

$ python --version
Python 3.9.18

Installiere 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

Lade den Quellcode von der Python-Website herunter. Zum Zeitpunkt des Verfassens dieser Anleitung ist die letzte verfügbare Version 3.10.x die Version 3.10.14, die wir verwendet haben.

$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz

Entpacke das Archiv.

$ tar xzf Python-3.10.14.tgz

Wechsle in das entpackte Verzeichnis.

$ cd Python-3.10.14

Konfiguriere den Quellcode.

$ ./configure --enable-optimizations

Installiere Python 3.10.14. Der Befehl altininstall wird verwendet, damit die Python-Version des Systems nicht überschrieben wird.

$ sudo make altinstall

Bestätige die Installation.

$ python3.10 -V
OR
$ python3.10 --version

Du solltest die folgende Ausgabe erhalten.

Python 3.10.14

Als Nächstes müssen wir Python 3.10 als Standard-Python-Version festlegen. Erstelle symbolische Links für jede Python-Version, die auf deinem Server installiert ist. Wenn du die symbolische Version erstellst, solltest du die genaue Python-Version in deinen Befehlen angeben. Führe 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, verwende den folgenden Befehl.

$ sudo update-alternatives --config python3

Du solltest die folgende Ausgabe sehen.

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
   1           /usr/local/bin/python3.10
*+ 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number:

Wähle die Nummer 1, um zu Python 3.10 zu wechseln.

Melde dich ab und melde dich wieder am Terminal an, um auf die Python-Version umzuschalten. Du kannst jetzt Python 3.10.14 verwenden, indem du direkt python benutzt.

Installiere die Abhängigkeiten und bereite dich auf die Installation vor

Lege einen neuen Systembenutzer für die Verwaltung der Odoo-Prozesse auf dem Odoo-Server mit dem Home-Verzeichnis /opt/odoo an. So verhinderst du ein Sicherheitsrisiko, wenn die Anwendung unter dem Root-Benutzer läuft.

$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo

Installiere die Systemabhängigkeiten, die für die Einrichtung von Odoo 17 erforderlich sind.

$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel

Installiere Nodejs. Rocky Linux 9 wird mit Node 18.x ausgeliefert, der aktuellen LTS-Version von Nodejs. Wir werden jedoch das offizielle Nodesource-Repository dafür verwenden.

Füge das Node 20 Repository hinzu.

$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -

Installiere Nodejs.

$ sudo dnf -y install nodejs

Bestätige die Node-Version.

$ node --version
v20.12.1

Installiere das Less CSS-Paket mit Node. Wenn du eine Sprache mit Rechts-nach-Links-Schnittstelle verwendest, installiere auch das Paket rtlcss.

$ sudo npm install -g less rtlcss

Installiere wkhtmltopdf. Wir werden das RPM-Paket aus dem Wkhtmltopdf GitHub-Paketdepot verwenden. Die neueste Version, die zum Zeitpunkt der Erstellung dieses Tutorials verfügbar ist, ist 0.12.6.1 r3.

Lade 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

Installiere die von Wkhtmltopdf benötigten Schriftarten.

$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch

Installiere Wkhtmltopdf.

$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

Überprüfe die installierte Version von wkhtmltopdf.

$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)

Odoo-Dateien herunterladen

Wechsle zum Odoo-Systembenutzer.

$ sudo su - odoo

Klone das Github-Repository von Odoo auf dein System.

$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch

Für unseren Zweck kopieren wir Odoo in das Verzeichnis /opt/odoo, von wo aus es installiert werden soll. Dadurch wird das Verzeichnis /opt/odoo/odoo erstellt, das wir für die Installation verwenden werden.

Virtualenv Python-Umgebung einrichten

Dieser Schritt ist optional, wird aber empfohlen, da eine virtuelle Python-Umgebung für Odoo dazu beiträgt, Konflikte mit Python-Modulen des Betriebssystems zu vermeiden, insbesondere bei Betriebssystem-Upgrades.

Hierfür verwenden wir virtualenv.

  1. Erstelle eine neue virtualenv Umgebung für Odoo.
    $ python3 -m venv odoo-env
    
  2. Aktiviere die virtuelle Umgebung. Wir erstellen eine Umgebung unter dem Home-Verzeichnis des Systembenutzers. Du kannst den Ort frei wählen.
    $ source odoo-env/bin/activate
    
  3. Aktualisiere vorsichtshalber PIP.
    (odoo-env) $ pip3 install --upgrade pip
    
  4. Installiere das Python-Rad in der virtuellen Umgebung.
    $ pip3 install wheel
    

Python-Abhängigkeiten installieren

Installiere die Python-Abhängigkeiten, die für Odoo 17 benötigt werden.

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Die Installation der Anforderungen wird einige Zeit in Anspruch nehmen, habe also etwas Geduld.

Überprüfe, ob die Anforderungen korrekt installiert wurden, indem du die Liste der installierten Python-Module überprüfst.

$ 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

Beende die virtuelle Python-Umgebung.

$ deactivate

Erstelle ein Verzeichnis für 3rd-Party-Addons

$ mkdir /opt/odoo/odoo/custom-addons

Dieses Verzeichnis sollte zu dem Parameter addons_path hinzugefügt werden, der die Verzeichnisse definiert, in denen Odoo nach Modulen sucht. Beende den Odoo-Systembenutzer.

$ exit

Schritt 5 – Odoo konfigurieren

Kopiere die Standardkonfigurationsdatei von Odoo, um eine neue Datei zu erstellen.

$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf

Öffne die Datei zum Bearbeiten.

$ sudo nano /etc/odoo.conf

Bearbeite die Datei so, dass sie wie die folgende aussieht.

[options]
; This is the password that allows database operations:
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ücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Die Option admin_passwd ist das Passwort, das administrative Operationen innerhalb der Odoo-GUI ermöglicht. Achte darauf, dass du ein sicheres Passwort wählst.

Die Option db_host ist der FQDN oder die IP-Adresse des PostgreSQL-Servers.

Die Option db_port ist auf false gesetzt, da der Standard-PostgreSQL-Port 5432 verwendet wird. Wenn du einen anderen Port verwenden möchtest, musst du 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 Standardpfad für Addons. Du kannst auch einen benutzerdefinierten Pfad für Addons hinzufügen, indem du sie mit Kommas trennst.

Die Option xmlrpc_port ist der Port, auf dem Odoo lauscht.

Die Option default_productivity_apps stellt sicher, dass die Standard-Produktivitäts-Apps (nämlich Mitarbeiter, E-Mail-Marketing, Projekt und Umfragen) aktiviert bleiben. Diese vier Apps sind die Standardanwendungen der Odoo Community Edition. In der Enterprise Edition gibt es weitere Produktivitäts-Apps, 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.

Erstelle eine Datei /lib/systemd/system/odoo-server.service und öffne sie zur Bearbeitung.

$ sudo nano /lib/systemd/system/odoo-server.service

Füge den folgenden Code in die Datei ein.

[Unit]
Description=Odoo Open Source ERP and 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

Ersetze /home/<username> durch den Ort, den du für die Installation der virtuellen Python-Umgebung gewählt hast.

Drücke Strg + X, um den Editor zu schließen und drücke Y, wenn du aufgefordert wirst, die Datei zu speichern.

Erstelle ein Log-Verzeichnis für Odoo

$ sudo mkdir /var/log/odoo

Dateiberechtigungen festlegen

Lege die Berechtigungen für die Datei odoo-server.service so fest, dass 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

Lege die Eigentumsrechte für die Python-Umgebung, die Odoo-Installation und das Log-Verzeichnis fest.

$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo

Schränke die Konfigurationsdatei von Odoo ein.

$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf

Starten Sie den Odoo-Server

Starte und aktiviere den Odoo-Server.

$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server

Überprüfe den Status des Servers.

$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP and 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 and CRM.

Schritt 6 – Nginx installieren und konfigurieren

Rocky Linux 9 wird mit einer älteren Version von Nginx ausgeliefert. Du musst das offizielle Nginx-Repository verwenden, um die neueste Version zu installieren.

Erstelle und öffne die Datei /etc/yum.repos.d/nginx.repo zum Bearbeiten.

$ sudo nano /etc/yum.repos.d/nginx.repo

Füge den folgenden Code in die Datei 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

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Wir werden die Mainline-Version von Nginx verwenden und haben daher in der obigen Datei das Mainline-Repositorium aktiviert, indem wir enabled=1 unter dem Mainline-Abschnitt statt dem Stable-Abschnitt verwenden. Du kannst eine der beiden Versionen wählen.

Installiere Nginx.

$ sudo dnf install -y nginx

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.25.4

Aktiviere und starte den Nginx-Serverdienst.

$ sudo systemctl enable nginx --now

Überprüfe den Status des Dienstes.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     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 die von Let’s Encrypt angebotenen kostenlosen SSL-Zertifikate zu generieren. Dazu verwenden wir den Snapd-Paketinstaller. Er benötigt das EPEL (Extra Packages for Enterprise Linux) Repository, um zu funktionieren.

Installiere das EPEL-Repository.

$ sudo dnf install -y epel-release

Auf Rocky Linux 9 ist Snapd noch nicht installiert. Installiere das Snapd-Paket.

$ sudo dnf install -y snapd

Aktiviere und starte den Snap-Dienst.

$ sudo systemctl enable snapd --now

Installiere das Snap-Kernpaket und stelle sicher, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core
$ sudo snap refresh core

Erstelle die notwendigen 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

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfe, ob Certbot richtig funktioniert.

$ certbot --version
certbot 2.10.0

Erstelle 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@yourdomain.com -d odoo.yourdomain.com

Erstelle ein Diffie-Hellman Key-exchange Zertifikat.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Überprüfe den Certbot-Erneuerungszeitplanungsdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen 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ühre einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 8 – Nginx konfigurieren

Um den Prozess über Nginx laufen zu lassen, muss Odoo auf localhost laufen. Um das zu ändern, stoppst du den Odoo-Dienst.

$ sudo systemctl stop odoo-server

Öffne die Konfigurationsdatei des Odoo-Servers.

$ sudo nano /etc/odoo.conf

Füge die folgenden Zeilen hinzu.

xmlrpc_interface = 127.0.0.1
proxy_mode = True

Erstelle eine Nginx-Konfigurationsdatei für Odoo.

$ sudo nano /etc/nginx/conf.d/odoo.conf

Füge den unten stehenden 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ücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf zum Bearbeiten.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size 64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Teste die Nginx-Konfiguration.

$ sudo nginx -t

Wenn du keine Fehler siehst, bist du startklar. Starte den Nginx-Server neu.

$ sudo systemctl restart nginx

Schritt 9 – Odoo starten

Nachdem alles eingerichtet ist, können wir den Odoo-Server erneut starten.

$ sudo systemctl start odoo-server

Starte Odoo in deinem Browser über https://odoo.yourdomain.com. Öffne in deinem Browser die URL http://<yourIPaddress>:8069 oder http://odoo.yourdomain.com:8069. Wenn alles richtig funktioniert, solltest du den Bildschirm zur Erstellung der Odoo-Datenbank sehen.

Wähle deine E-Mail und dein Passwort, um deine Anmeldedaten zu erstellen. Das Master-Passwort ist das admin_passwd, das du in der Datei /etc/odoo.conf hinzugefügt hast. Fülle alle übrigen Felder aus.

Aktiviere das Feld Demo Data, um die Datenbank mit Beispieldaten aufzufüllen. Installiere keine Demodaten auf Servern, die mit dem Internet verbunden sind. Datenbanken mit Demodaten enthalten Standard-Logins und Passwörter, mit denen du in deine Systeme eindringen und erhebliche Probleme verursachen kannst, selbst auf Staging-/Dev-Systemen. Wir verwenden sie nur zu Übungszwecken.

Klicke auf die Schaltfläche Datenbank erstellen, um die Installation abzuschließen. Wenn du zum ersten Mal eine Datenbank erstellst, dauert es eine Weile, bis die Addons-Seite geladen ist. Sobald die Datenbank erstellt ist, wirst du automatisch zur folgenden Anmeldeseite weitergeleitet.

Gib die Anmeldedaten ein, die du im vorherigen Schritt verwendet hast, um dich bei Odoo ERP anzumelden. Sie ist bereits mit den Demodaten ausgefüllt. Wenn du die Option Demodaten auf der Seite zur Erstellung der Datenbank nicht aktiviert hast, siehst du ein anderes, viel übersichtlicheres Dashboard.

Von hier an kannst du Odoo für die Verwaltung deines Unternehmens nutzen.

Schritt 10 – Odoo aktualisieren

Beende den Odoo-Server.

$ sudo systemctl stop odoo-server

Wechsle zum Odoo-Systembenutzer.

$ sudo su - odoo

Ziehe den neuesten Quellcode von GitHub.

$ git fetch
$ git rebase --autostash

Der zweite Befehl kann auf Quellcodekonflikte stoßen, wenn du den Quellcode manuell änderst. Du erhältst eine Liste der konfliktbehafteten Dateien. Du musst alle Dateien manuell ändern und den Befehl erneut ausführen, um die Probleme zu beheben.

Wenn du die widersprüchlichen Änderungen verwerfen willst, kannst du den folgenden Befehl ausführen, um den Quellcode zurückzusetzen.

$ git reset --hard

Aktiviere die virtuelle Python-Umgebung.

$ source odoo-env/bin/activate

Installiere die Python-Abhängigkeiten.

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Beende die virtuelle Python-Umgebung.

$ deactivate

Starte den Odoo-Server.

$ sudo systemctl start odoo-server

Schritt 11 – Odoo mit Fail2Ban sichern

Dieser Schritt ist optional, aber wenn du Fail2Ban installiert hast, kannst du die Konfiguration für Odoo hinzufügen, um es zu schützen.

Erstelle und öffne die Datei odoo-login.conf zum Bearbeiten.

$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf

Füge den folgenden Code in die Datei 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ücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Erstelle die Datei odoo-login.conf und öffne sie zur Bearbeitung.

$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf

Füge den folgenden Code in die Datei ein.

[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from <HOST>
ignoreregex =

Drücke Strg + X, um den Editor zu schließen, und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Starte Fail2Ban neu.

$ sudo systemctl restart fail2ban

Fazit

Damit ist unser Tutorium zur Installation und Konfiguration von Odoo auf dem Rocky Linux 9 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …