Kurz und Knapp:
Dieser Artikel beschreibt die Vorgehensweise die Open-Source ERP Software Odoo 17 CE (on-premise) in einem Docker Container zu installieren und richtet sich an Erfahrene Nutzer.
Der Grund für dieses Thema ist das Odoo eine Vielzahl an vorgefertigten Tools bereitstellt die man sich, zum Teil kostenlos, Herunterladen kann. Angefangen von einer reinen Websiteerstellung bis hin zu einem Verwaltungssystem für kleine bis mittelgroße Unternehmen. Also eine sehr Umfangreiche ERP Anwendung die man im privaten als auch im unternehmerischen Bereich nutzen kann.
Anbei enthält Odoo auch eine Reihe an Entwickler Tools die, wie ich finde, auf jeden fall einen Blick wert sind. Und weshalb in einem Docker Container? Der Grund hierfür liegt auf der Hand. Es ist Modular und kann somit auf mehreren Servern gleichzeitig geladen werden ohne das System ändern zu müssen.
Odoo wird, im Moment, bei mir nur für den Privaten Bereich genutzt und daher werde ich mich erst einmal nur auf die reine Installation in diesem Artikel beschränken.
Kurz noch zu meinem Setup:
- Hetzner Server (AMD 4C 8GB)
- Ubuntu 22.04 LTS
- Docker 20.10.22 (compose 1.29.2)
- VS Code für Remote Arbeiten
Und jetzt viel Erfolg bei der Installation.
Voraussetzung
- Ein PC mit 4 Kernen und 8GB RAM. (Ist kein muss aber meine persönliche Empfehlung)
- Ein Linux Betriebssystem (Windows Server ist auch möglich, aber nur eingeschränkt. Siehe Odoo docs Absatz Builtin-Server).
- Vorinstallierte Docker Software.
- SSH für Remotezugriff (Falls auf einem Externen Server)
- Docker Ubuntu/Nginx Image.
- Evtl. Portainer zur besseren Verwaltung der Docker Container
Eins Vorweg
Ein Vorinstallierter Docker Container auf Basis eines Ubuntu/Nginx Image steht zum Download bereit. Wer also möchte kann sich den Anfang mit der Installation sparen und direkt mit der SSL Zertifikatserstellung weiter machen. Ich werde die Installation trotz allem hier so ausführlich wie möglich Beschreiben damit man wenigstens einen nachvollziehbaren Ansatz hat.
Getestet wurde hier nur die reine Installation von Odoo 17 mit SSL Zertifikat und externem Email Server.
Vorbereitung des Docker Image/Containers
Schritt 1/2
Das genutzte Image ist hier, wie oben schon angesprochen, ein ubuntu/nginx was über den Offiziellen Docker Hub geladen werden kann >> https://hub.docker.com/r/ubuntu/nginx
Bewerkstelligt wird das mit
docker pull ubuntu/nginx
Schritt 2/2
Jetzt erstellen wir den Nginx Container von dem ubuntu/nginx Image mit
Variante 1: Im Terminal
docker run --name yourdockercontainername
-p 80:80
-p 443:443
-v /var/lib/odoo-storage
ubuntu/nginx
Variante 2: Mit Docker-Compose
services:
erp:
image: ubuntu/nginx
ports:
- 80:80
- 443:443
volumes:
- odoo-storage:/var/lib/odoo_data
volumes:
odoo-storage:
nach der Erstellung des Containers können wir direkt in diesen wechseln.
Teil 1:
Im ubuntu/nginx Container
Zu aller erst müssen wir mit
apt update && apt upgrade
den Container auf den neuesten Stand bringen.
Um Odoo in diesem installieren zu können werden mehrere sogenannte "Dependencies" benötigt. Diese laden wir mit
apt install sudo wget systemctl nano wkhtmltopdf daemon
Sollte systemctl nicht richtig installiert sein, müssen wir mit
apt install policykit-1 && apt install systemctl
diese Abhängigkeit nochmal installieren.
Zum Schluss muss noch Certbot installiert werden, was wir mit
apt install certbot python3-certbot-nginx
realisieren damit wir später die SSL Zertifikate laden können.
Teil 2:
Odoo Installation
im ubuntu/nginx Container
Eine sehr gute Beschreibung findet sich unter
https://www.rosehosting.com/blog/how-to-install-odoo-17-on-ubuntu-22-04/
Die nachfolgende Anleitung bezieht sich auf Korrekturen.
Step 4 kann übersprungen werden da das benötigte Programm "wkhtmltopdf" schon installiert wurde.
Wenn es in dem Tutorial bei rosehosting.com Step 6 zu Problemen mit dem erstellen des Postgresql Users kommen sollte, einmal mit
pg_ctlcluster 15 main start
die Clusterinstanz starten und mit dem Befehl
su - postgres -c "createuser -s odoo17
den Nutzer erstellen. Man kann mit dem Befehl
pg_lsclusters
nachschauen ob diese geladen wurde.
Bei dem letzten Abschnitt in Step 7 wo es zur Eingabe des Befehls
sudo
kommt. Wird evtl. in dem Terminal die Fehlermeldung "odoo17 is not in the sudoers file." auftauchen, dazu einfach mit dem Befehl "exit" zu dem root user wechseln und mit dem Befehl
usermod -aG sudo odoo17
den odoo17 user zum sudoer machen. Man spricht auch von einem Systemverwalter mit erweiterten Berechtigungen.
Zum Schluss noch ein Neustart des Containers vornehmen und in diesen wechseln. Zum Testen ob alles ordnungsgemäß funktioniert alle Instanzen neu laden mit
pg_ctlcluster 15 main start && systemctl start odoo17 postgresql
Der Status kann mit
pg_lsclusters
für die Clusterinstanz und mit
systemctl status odoo17 postgresql
abgefragt werden.
SSL Zertifikat mit Certbot
Dem ein oder anderen, der Odoo schon kennt, ist vielleicht schon aufgefallen das bei dem erstellen des ubuntu/nginx Container kein Port 8069 bereit gestellt wurde. Das liegt daran das es nicht notwendig ist bzw. aus Sicherheitsgründen sogar besser ist ihn nicht bereit zu stellen da man auch auf diesen im nachhinein zugreifen könnte. Der Grund dafür ist anscheinend ein Problem mit dem sperren des Ports nach der SSL Zertifizierung. Eine Fehlerbehebung konnte ich trotz längerer Recherche nicht finden wozu ich mich entschloss den Port von Anfang an zu sperren und es so zu testen. Mit Erfolg!
Vorteile | Nachteile |
Der Port muss nicht im nachhinein gesperrt werden. | Während der Einrichtung ist es nicht möglich auf http://ihre-ip:8069 zu zugreifen. Erst nach erfolgreicher Installation des SSL Zertifikates. |
Und jetzt zur Bereitstellung der Zertifikate. Bevor diese mit Certbot erstellt werden können muss eine kleine Änderung in der "default" Datei im Ordner unter /etc/nginx/sites-available vorgenommen werden. Man muss nach der Diriktive "server_name _;" suchen und seine eigene Domain Eintragen z.B so "server_name meinedomain.de www.meinedomain.de;" und im Anschluss können wir mit Hilfe von
certbot --nginx
die Terminalanwendung starten. Jetzt nur der Anweisung im Terminal folgen.
Sollte alles soweit funktionieren können wir auch schon mit dem nächsten Schritt weiter machen.
.config Dateien
Damit wir jetzt auf Odoo zugreifen können müssen wir noch ein paar Einstellungen in den .config Dateien vornehmen.
Um genauer zu sein muss die Datei nginx.conf , die default und die zuvor erstellte Odoo17.conf angepasst werden.
In der nginx.conf [/etc/nginx/] muss der http Abschnitt um eine Ergänzung erweitert werden.
http {
proxy_redirect http://yourdomain.com/ https://yourdomain.com/; # mit einfügen
add_header 'Content-Security-Policy' 'upgrade-insecure-requests'; # mit einfügen
...
}
Die default Datei [/etc/nginx/sites-available] muss mit diesen Einstellungen erweitert/geändert werden
server {
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
server_name yourdomain.com www.yourdomain.com;
listen 443 ssl;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /longpolling {
proxy_connect_timeout 3600;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
send_timeout 3600;
proxy_pass http://127.0.0.1:8072;
}
location / {
proxy_pass http://localhost:8069;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_redirect off;
proxy_request_buffering off;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
client_max_body_size 10240m;
}
#ssl on;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RS$';
ssl_prefer_server_ciphers on;
gzip on;
gzip_min_length 1000;
}
Hier bitte wieder darauf achten das "yourdomain.com" durch ihre eigene Domain ersetzt wird!
Um zu testen das die Konfiguration in diesem Zustand übernommen wird einmal mit
nginx -t
testen.
Die Odoo17.conf [/etc/] muss die erweiterte Direktive
proxy_mode = True
beinhalten.
Sollte alles ohne Fehlermeldung geklappt haben muss der Container neugestartet werden.
Odoo 17 fertige Installation
Jetzt kann mit https://ihredomain.de auf Odoo zugegriffen werden.
Odoo17 CE in einem Docker Container installieren