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
- Ein Rocky Linux 9 Server mit mindestens 2 GB RAM, um Odoo Stack zu hosten.
- 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.
- 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.
- Halte deine Systeme auf dem neuesten Stand.
$ sudo dnf update
- Ein Nicht-Root-Benutzer mit sudo-Rechten auf beiden Servern.
- Fail2Ban sollte installiert werden. Dieser Schritt ist optional. Du kannst dafür unsere Anleitung zur Installation von Fail2Ban auf Rocky Linux befolgen.
- SELinux sollte deaktiviert sein.
- 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
.
- Erstelle eine neue
virtualenv
Umgebung für Odoo.$ python3 -m venv odoo-env
- 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
- Aktualisiere vorsichtshalber PIP.
(odoo-env) $ pip3 install --upgrade pip
- 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.