Zum Inhalt springen

Warum Odoo kein Besucherland anzeigt und wie Sie das beheben

Ein installiertes GeoIP-Paket im falschen Format legt die Länderstatistik still lahm. Wie der Fehler entsteht, wie Sie ihn in vier Schritten eingrenzen und woher die Datenbank kommt.
12. August 2026 durch
Martin Schmid
Odoo GeoIP Website-Statistik Serverbetrieb

Warum Odoo kein Besucherland anzeigt und wie Sie das beheben

Ein installiertes GeoIP-Paket im falschen Format legt die Länderstatistik still lahm. Wie der Fehler entsteht, wie Sie ihn in vier Schritten eingrenzen und woher die Datenbank kommt.

M
Martin Schmid
2026-08-12

Ein Paket, das installiert aussieht und nichts tut

Auf dem Server lag eine GeoIP-Datenbank, der Pfad stand in der Konfiguration. Trotzdem trug jeder Besuch das Land „Unbekannt", monatelang, ohne eine einzige Zeile im Fehlerprotokoll.

Odoo liest GeoIP-Daten ausschließlich im MaxMind-DB-Format mit der Endung .mmdb. Das Linux-Paket geoip-database liefert GeoIP.dat, ein anderes und längst abgelöstes Format. Der Server meldet GeoIP als installiert und ermittelt kein einziges Land.

Das ist die unangenehmste Sorte Fehler. Er stürzt nicht ab, er schreibt nichts ins Protokoll, und sein Ergebnis sieht plausibel aus. Eine Statistik, in der bei jedem Besucher „Unbekannt" steht, liest sich wie eine Website, die eben keine Gäste aus dem Ausland hat. Erst der Abgleich mit den Server-Protokollen zeigt, dass hier überhaupt nichts ermittelt wird. Bei uns hat das Monate gedauert.

Die Angaben in diesem Beitrag beziehen sich auf Odoo 19 unter Debian Trixie, geprüft am 12. August 2026.

Warum Odoo die Datei nicht lesen kann

Odoo greift über die Bibliothek geoip2 auf die Datenbank zu. Die versteht genau ein Format. Das ältere GeoIP.dat stammt aus demselben Haus, gehört aber zur eingestellten Legacy-Reihe, für die MaxMind seit Jahren keine Daten mehr ausliefert.

Das Debian-Paket enthält in Trixie genau zwei Dateien:

/usr/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIPv6.dat

Wer apt install geoip-database ausführt und danach ins Verzeichnis schaut, findet Dateien und schließt daraus, die Sache sei erledigt. Der Paketname trägt diesen Irrtum mit.

Ein zweites Detail kostet Zeit, wenn man es nicht kennt. Odoo öffnet die Datenbank einmal beim Start eines Arbeitsprozesses und hält den Zugriff im Speicher. Tauschen Sie die Datei im laufenden Betrieb aus, ändert sich nichts. Wir haben das nachgestellt und die Datei bei geöffnetem Zugriff gelöscht. Die Abfragen liefen weiter und antworteten aus der bereits entfernten Datei. Für die Praxis heißt das: Eine Aktualisierung wirkt erst nach einem Neustart, und ein Cronjob, der die Datei wöchentlich erneuert, läuft ins Leere, solange niemand den Dienst durchstartet.

Die zweite Bedingung heißt proxy_mode

Selbst mit der richtigen Datei bleibt das Land leer, wenn Odoo hinter einem Reverse Proxy läuft und proxy_mode in der Konfiguration fehlt. Odoo sieht dann die Adresse des Proxys, meist 127.0.0.1. Für eine private Adresse liefert jede Geodatenbank ein leeres Ergebnis, völlig korrekt.

Beide Ursachen sehen im Dashboard identisch aus.

Deshalb lohnt es sich, sie getrennt zu prüfen, statt an einer Stelle zu raten.

Zwei kostenlose Quellen, beide mit Namensnennungspflicht

Keine der brauchbaren Datenbanken ist Eigenbau, und beide kosten nichts:

Quelle Konto nötig Aktualisierung Auflage
DB-IP Lite nein monatlich Namensnennung (CC BY 4.0)
MaxMind GeoLite2 ja, kostenlos wöchentlich Namensnennung (CC BY-SA 4.0)

Wir haben DB-IP Lite gegen den Aufruf getestet, den Odoo intern macht. Die Datei meldet sich als DBIP-Country-Lite und löst 8.8.8.8 nach US auf, eine deutsche IPv4-Adresse und eine deutsche IPv6-Adresse jeweils nach DE. Für eine Länderstatistik genügt das vollständig.

Die Namensnennung ist eine Lizenzpflicht. Für DB-IP lautet der Hinweis „This product includes IP2Country data from DB-IP.com", für MaxMind „This product includes GeoLite2 data created by MaxMind". Er gehört an die Stelle, an der die Auswertung veröffentlicht wird, in aller Regel ins Impressum oder in die Datenschutzerklärung.

Beide Anbieter verkaufen daneben genauere Varianten. Wer Städte, Zeitzonen oder Netzbetreiber braucht, findet die Konditionen dafür auf deren Preisseiten. Für die Frage, aus welchem Land ein Besuch kam, reichen die kostenlosen Ausgaben.

Vier Schritte, die den Fehler eingrenzen

  1. Liegt überhaupt eine .mmdb im Verzeichnis?

    bash ls -la /usr/share/GeoIP/

  2. Zeigt die Konfiguration auf diese Datei, und ist proxy_mode gesetzt?

    bash grep -E "^(geoip_country_db|proxy_mode)" /etc/odoo/odoo.conf

  3. Antwortet die Datei auf den Aufruf, den Odoo intern macht?

    bash python3 -c "import geoip2.database as d; r=d.Reader('/usr/share/GeoIP/GeoLite2-Country.mmdb'); print(r.metadata().database_type, r.country('8.8.8.8').country.iso_code)"

    Erwartet wird der Datenbanktyp und US.

  4. Tragen neue Besuche ein Land? Erst diese Prüfung schließt proxy_mode als Ursache aus.

Schritt 3 ist der entscheidende, weil er dieselbe Bibliothek auf demselben Pfad anspricht wie der Server. Antwortet er sauber und bleibt die Statistik trotzdem leer, dann kommt die Besucheradresse nicht durch.

Wenn die Installation still das Falsche tut

Das Formatproblem war nicht der einzige stille Fehler an diesem Tag. Zwei weitere Muster tauchten auf, und beide betreffen jede Art von Serverinstallation, ob im Container oder auf einer klassischen Maschine.

Das Werkzeug geoipupdate steht in Debian in der Komponente contrib. Wer eine schlanke Basis fährt, hat oft nur main aktiviert. Die Installation bricht dann mit „Package 'geoipupdate' has no installation candidate" ab, obwohl das Paket auf der Debian-Seite gelistet ist. Die Meldung führt in die Irre, denn der Name ist bekannt, nur eine installierbare Version fehlt. Ein Blick auf die Paketseite zeigt die Komponente, ein Blick in die Paketquellen zeigt, ob sie aktiviert ist.

Wir holen das Werkzeug seitdem direkt vom Hersteller, mit fester Version und geprüfter Prüfsumme. Das funktioniert auf jedem Debian-System gleich, unabhängig davon, ob die Zeilen in einem Dockerfile oder in einem Ansible-Playbook stehen:

curl -fsSLo geoipupdate.deb \
    "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_amd64.deb"
echo "6616449c83038b5a92908d0d6eee01595e594995248872ec5183c8488201f0fb  geoipupdate.deb" | sha256sum -c -
dpkg -i geoipupdate.deb

Das zweite Muster betrifft festgeschriebene Versionen. Wir hatten eine Python-Version gepinnt, die längst zwei Nachfolger hatte. Der Build lief trotzdem durch, weil alte Patch-Stände auf den Registern erhalten bleiben. Ein Pin, der bricht, meldet sich. Ein Pin, der einfach weiterläuft, altert im Stillen, und irgendwann läuft die Anwendung auf einem Unterbau, den niemand mehr bewusst gewählt hat. Wir vergleichen den festgeschriebenen Stand jetzt automatisch gegen den aktuellen der gleichen Reihe und lassen die Pipeline warnen, sobald beide auseinanderlaufen.

Die Geodatenbank selbst gehört übrigens in keine Installation eingebacken. Ihre Weitergabe ist lizenzrechtlich nicht gedeckt, und weil IP-Bereiche laufend neu vergeben werden, veraltet eine mitgelieferte Kopie ohnehin. Sie wird zur Laufzeit geladen, bevor der Serverprozess startet, und liegt auf einem dauerhaften Datenträger statt im Abbild.

Seit dem Umbau meldet unsere Einstellungsseite im Klartext, ob die Länderermittlung arbeitet, und nennt die verwendete Datenquelle. Wer das nachbauen möchte, braucht dafür kein Konto und keinen Vertrag: eine Datei von DB-IP, ein Eintrag in der Konfiguration, ein Neustart.

Archiv
Neues Modul macht Odoo-Websites für KI-Assistenten lesbar
Ein neues ownERP-Modul bereitet Odoo-Websites auf ChatGPT, Perplexity und Claude vor. Eine Vorankündigung aus der laufenden Testphase.