Installation von Odoo 11 CE unter Ubuntu 16.04

In dieser Anleitung zeige ich wie man Odoo 11 Community Edition aus dem Quelltext installiert. Die offizielle Installationsanleitung setzt einiges an Basiswissen voraus und behandelt nicht jedes Detail der Installation erschöpfend. Im vorliegenden Artikel zeige ich alle notwendigen Installationsschritte und versuche dabei keine Fragen offen zu lassen.

Vorbereitungen

Zunächst muss eine Reihe von Vorbereitungen getroffen werden. Das Software-Paket wkhtmltopdf wird von Odoo benötigt um Rechnungen und weitere Dokumentenarten nicht nur als HTML, sondern auch als PDF auszugeben. Außerdem müssen Ubuntu aktualisiert, die PostgreSQL Datenbank und Node.js installiert, sowie ein Linux- und Datenbank-Benutzer für Odoo erstellt werden.

wkhtmltopdf herunterladen

Inzwischen gibt es zwar eine neuere Version von wkhtmltopdf, die offizielle Quelle empfiehlt jedoch die bereits etwas ältere Version v0.12.1 zu verwenden. Um Schwierigkeiten zu vermeiden halten wir uns an diese Empfehlung.

wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb

Bitte achte darauf, dass wir den Download als regulärer Benutzer durchführen. Somit landet die Datei zunächst auch in unserem Benutzerverzeichnis, in meinem Fall unter /home/peter.

Um deinen tatsächlichen Pfad anzuzeigen, kannst du den Befehl pwd verwenden, als Ausgabe wird der Pfad angezeigt.

pwd
/home/peter

Ubuntu Update durchführen

Als nächstes bringen wir Ubuntu auf den neuesten Stand. Hierzu wechseln wir zum Benutzer root.

sudo su [sudo] Passwort für peter:

Das eigentliche Update wird mit den folgenden zwei Befehlen durchgeführt.

apt-get update
apt-get upgrade

Dieser Vorgang kann je nach Verbindungsgeschwindigkeit und Anzahl der verfügbaren Updates einige Minuten dauern.

PostgreSQL installieren

Jetzt installieren wir die von Odoo verwendete PostgreSQL Datenbank.

apt-get install postgresql

wkhtmltopdf und seine Voraussetzungen installieren

Um das zuvor heruntergeladene wkhtmltopdf installieren zu können, müssen einige Voraussetzungen erfüllt sein. Diese installieren wir wie folgt:

apt-get install fonts-freefont-ttf fonts-dejavu-core fontconfig-config fontconfig libfontconfig1 libjpeg-turbo8 libxrender1

Jetzt kann die eigentliche Installation von wkhtmltopdf erfolgen. Diese installieren wir nicht aus dem Ubuntu Repository, sondern direkt mit der herunter geladenen .deb Datei mittels dpkg. Dazu müssen wir uns in dem Verzeichnis befinden, in dem sich die herunter geladene Datei befindet (/home/peter). Im Normalfall befinden wir uns noch in diesem Verzeichnis, was man auch am Command-Prompt ablesen kann.

dpkg -i wkhtmltox-0.12.1_linux-trusty-amd64.deb

Damit diese später auch von Odoo verwendet werden können, kopieren wir die Binaries von wkhtmltopdf nach /usr/bin/

cp /usr/local/bin/wkhtmltoimage /usr/bin/
cp /usr/local/bin/wkhtmltopdf /usr/bin/

Optional: wkhtmltopdf Installationsdatei löschen

rm wkhtmltox-0.12.1_linux-trusty-amd64.deb

Linux-Benutzer odoo anlegen

Jetzt legen wir einen neuen Benutzer für Odoo an. Unter diesem Benutzer wird Odoo später ausgeführt werden. Sinngemäß nennen wir den Benutzer auch odoo.

adduser --system --home=/opt/odoo --group odoo

In diesem Zuge wird auch das Benutzerverzeichnis /opt/odoo erstellt, in diesem wird sich später die Odoo Installation befinden.

Jetzt legen wir noch das Kennwort für den Benutzer odoo fest, hier kannst du deiner Fantasie freien Lauf lassen.

passwd odoo

Gib zur Bestätigung zwei Mal das gewünschte Kennwort ein.

Node.js installieren

Als nächstes installieren wir einige weitere Voraussetzungen für Odoo: Node.js und node-less.

apt-get install npm

Damit Node.js unter Debian und dem darauf basierenden Ubuntu richtig funktioniert, muss noch folgende Verknüpfung erstellt werden

ln -s /usr/bin/nodejs /usr/bin/node

Jetzt installieren wir noch zwei npm Pakete global

npm install -g less less-plugin-clean-css

Und anschließend noch node-less

apt-get install node-less

DB-Benutzer odoo anlegen

Den Linux-Benutzer odoo haben wir in einem vorherigen Schritt bereits angelegt, jetzt muss noch ein Datenbank-Benutzer odoo erstellt werden. Zu diesem Zweck wechseln wir zum (durch die Installation von PostgreSQL) vorhandenen Linux-Benutzer postgres:

sudo su - postgres

Und legen den Datenbank-Benutzer odoo an

createuser -s odoo

Anschließend verlassen wir den Benutzer postgres wieder und wechseln mit exit zurück zum Benutzer root.

exit

git installieren

Normalerweise sollte git bereits installiert sein, falls nicht kann es mit dem folgenden Befehl installiert werden

apt-get install git

Falls git bereits installiert war, wird nichts passieren, es erscheint lediglich ein entsprechender Hinweis. Also schadet es nicht die Installation von git zu versuchen, um zu testen, ob es bereits vorhanden ist.

Damit haben wir die Vorbereitungen abgeschlossen und können zu der eigentlichen Installation von Odoo übergehen.

Installation Odoo

Zunächst wechseln wir wieder von Benutzer root zum Standard-Benutzer, in meinem Fall peter.

exit

Und anschließend zum zum Benutzer odoo

sudo su - odoo -s /bin/bash

Zu diesem Zweck wirst du ggf. nach dem Kennwort des Benutzers odoo gefragt.

Odoo git Repository klonen

Jetzt laden wir (klonen mittels git) den Quellcode von Odoo direkt von GitHub

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

Beachte den Punkt am Ende des Befehls, dieser gehört zum Befehl dazu!

Wichtig ist auch, das Klonen direkt nach dem Wechsel zu odoo durchzuführen. Andernfalls, wenn man vorher andere Befehle ausführt, wird im Benutzerverzeichnis /opt/odoo u.U. die unsichtbare Datei .bash_history erstellt und das Verzeichnis /opt/odoo ist damit nicht mehr leer. Das führt dazu, dass git sich beschwert und sich weigert in ein nicht leeres Verzeichnis zu klonen.

Das ist jedoch kein großes Problem, man muss in diesem Fall lediglich die Datei .bash_history wieder löschen. Wende folgenden Befehl also nur an, wenn git sich weigert den Quellcode zu laden.

rm .bash_history

pip3 installieren

Für die Installation der Odoo Python Voraussetzungen brauchen wir zunächst den Paketmanager pip3. Für die weitere Installation wechseln wir erneut zum Benutzer root.

sudo su

Danach sollten wir uns wieder im eigenen Benutzerverzeichnis (/home/peter) befinden.

apt-get install python3-pip

Bevor wir jetzt die eigentlichen Python Pakete installieren können, müssen vorher noch zwei Bibliotheken installiert werden.

apt-get install libldap2-dev libsasl2-dev

Dann installieren wir die Python Voraussetzungen für Odoo.

pip3 install babel decorator docutils feedparser gevent html2text Jinja2 lxml mako mock ofxparse passlib pillow psutil psycopg2 pydot pyldap pyparsing pypdf2 pyserial python-dateutil pytz pyusb pyyaml qrcode reportlab requests suds-jurko vatnumber vobject werkzeug xlsxwriter xlwt ebaysdk greenlet MarkupSafe num2words six xlrd

Installation testen

Damit sollte die Installation bereits lauffähig sein. Nun ist es an der Zeit unsere Installation zu testen. Hierzu führen wir einen manuellen Start von Odoo durch.

exit
sudo su - odoo -s /bin/bash
./odoo-bin

Wenn jetzt keine Fehler auftreten und deine Ausgabe ungefähr so aussieht, dann hat bis hierher alles geklappt:

2017-12-26 21:37:21,107 23820 INFO ? odoo: Odoo version 11.0
2017-12-26 21:37:21,107 23820 INFO ? odoo: addons paths: ['/opt/odoo/.local/share/Odoo/addons/11.0', '/opt/odoo/odoo/addons', '/opt/odoo/addons']
2017-12-26 21:37:21,107 23820 INFO ? odoo: database: default@default:default
2017-12-26 21:37:21,124 23820 INFO ? odoo.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069
2017-12-26 21:37:21,205 23820 INFO ? odoo.addons.base.ir.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf

Jetzt testen wir noch die Erreichbarkeit über den Webbrowser von einem anderen Rechner aus. Es sei denn du hast die grafische Oberfläche und einen Webbrowser auf deinem Server bereits installiert, dann kannst du narürlich auch direkt vom Server aus testen. Um den Test im Webbrowser machen zu können brauchst due die IP Adresse deines Servers. Diese kann mit dem folgenden Befehl ermittelt werden:

ip address show
1: lo: <loopback ,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <broadcast ,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:03:76:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.63/24 brd 192.168.178.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe03:76ee/64 scope link
       valid_lft forever preferred_lft forever
</broadcast></loopback>

Meine IP Adresse lautet also 192.168.178.63, daraus leite ich folgenden URL ab: http://192.168.178.63:8069

Um die IP mit dem zuvor genannten Befehl nachsehen zu können, muss Odoo vorher beendet werden (Strg + C) oder du wechselst dazu zu einen anderen Terminal z.B. mit Strg + Alt + F2.

Um den Test im Browser durchführen zu können muss Odoo, falls du es zuvor beendet hast mit

./odoo-bin

wieder gestartet werden. Der Port 8069 muss mit einem Doppelpunkt an die IP Adresse angehängt werden. Und so sollte das nach dem Aufruf des URLs im Browser aussehen.

Damit ist der Test abgeschlossen und wir beenden Odoo wieder indem wir „Strg+C“ drücken.

Einrichtung von Odoo als Dienst

Jetzt haben wir bereits eien lauffähige Odoo Installation. Das Problem ist nur, dass wir Odoo jedes Mal von Hand starten müssen. Wir wollen aber, das Odoo als Dienst automatisch mit dem Server mit startet. Dazu müssen die nachfolgenden Einrichtungen noch vorgenommen werden.

Vorarbeiten und Korrekturen

Um die Log-Datei von Odoo ein wenig von den anderen Logs zu trennen, erstellen wir einen eigenen Ordner in dem sich die Log-Datei befinden wird.

exit

Bevor wir jetzt weiter zu root wechseln, laden wir noch die folgende Datei in den Benutzerordner unseres Standardbenutzers. Diese Datei wird die Grundlage unseres Server-Scripts.

wget https://raw.githubusercontent.com/mohitg1213/odoo_scripts/master/odoo-server
sudo su

Wir erstellen das Log-Verzeichnis und übergeben odoo seinen Besitz.

mkdir /var/log/odoo
chown odoo:root /var/log/odoo/

Nun erstellen wir die Datei /etc/odoo-server.conf. Ich verwende hierzu den Editor vim, es kann aber jeder andere installierte Editor wie z.B. nano verwendet werden.

vim /etc/odoo-server.conf

Der Inhalt dieser Datei sieht folgendermaßen aus:

[options]
; This is the password that allows database operations:
; admin_passwd = admin
db_host = False
db_port = False
db_user = odoo
db_password = False
logfile = /var/log/odoo/odoo-server.log
log_level =  warn
addons_path = /opt/odoo/addons,/opt/odoo/odoo/addons

Wir passen die Attribute der Datei wie folgt an.

chown odoo: /etc/odoo-server.conf
chmod 640 /etc/odoo-server.conf

Dann verschieben wir die zuvor herunter geladene Datei odoo-server und passen auch ihre Attribute entsprechend an.

mv odoo-server /etc/init.d/
chmod 755 /etc/init.d/odoo-server
chown root: /etc/init.d/odoo-server

Jetzt bearbeiten wir die Datei noch.

vim /etc/init.d/odoo-server

Und passen die folgende Zeile (sollte Zeile 36 sein) an.

PIDFILE=/var/run/$NAME.pid # pidfile

Diese Zeile soll so geändert werden.

PIDFILE=/opt/odoo/$NAME.pid # pidfile

D.h. unser PIDFILE wird nicht wie in der ursprünglichen Fassung unter /var/run, sondern unter /opt/odoo erstellt. Der Grund ist, dass der Benutzer odoo, mit dem unsere Odoo Installation laufen wird, keinen Zugriff auf /var/run hat und somit würde ohne diese Anpassung der automatische Start des Dienstes scheitern.

Jetzt noch

update-rc.d odoo-server defaults

Wir testen den Autostart des Odoo Dienstes indem wir den Server einmal neu starten.

reboot

Nach einem Neustart des Servers hat bei mir der Autostart zunächst nicht funktioniert. Das habe ich zum einen daran gesehen, dass das Odoo-Frontend nicht lief und zum anderen, dass überhaupt keine Log-Datei erstellt worden war, /var/log/odoo war leer. Nachdem ich die beiden Dateien odoo-server und odoo-server.conf nochmal überprüft hatte und keinen Fehler entdecken konnte, habe ich den Dienst kurzerhand als root manuell gestartet

sudo su [sudo] Passwort für peter:
service odoo-server start

Der Dienst ließ sich problemlos starten und lief auch. Jetzt habe ich den Dienst sicherheitshalber nochmal registriert

update-rc.d odoo-server defaults

Und erneut den Server neu gestartet und siehe da, Odoo startet jetzt wie gewünscht mit dem Server!

Ich vermute, dass der manuelle Start des Dienstes als root etwas bewirkt hat, was zuvor noch fehlte oder aufgrund fehlender Zugriffsrechte nicht erstellt werden konnte.

Der folgende Schritt korrigiert das Encoding:

peter@u1604:~$ sudo su – postgres postgres@u1604:~$ psql postgres=# update pg_database set encoding = pg_char_to_encoding(‚UTF8‘); postgres=# \q