Odoo17 CE in einem Docker Container installieren

Docker Image mit Linux Ubuntu 23.04
2. Mai 2024 durch
Odoo17 CE in einem Docker Container installieren
Lars | Admin
| 1 Kommentieren

Schwierigkeitsgrad

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

Nach jedem Neustart des Containers müssen immer die 3 Instanzen pg_ctlcluster, odoo17, postgresql neugeladen werden!


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.

Bitte darauf achten das der Port 80 auf dem Server frei ist!

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
Lars | Admin 2. Mai 2024
Diesen Beitrag teilen
Stichwörter
meine Blogs
Download Bereich


Archiv
Anmelden , um einen Kommentar zu hinterlassen