Container "portal" lehnt von "traefik" weitergeleitet Verbindung ab

Hallo,

ich versuche, ein Portal zum Laufen zu bekommen. Die development-Variante läuft auch, jetzt versuche ich die production-Variante.
Eigentlich bin ich mit allem so weit durch, keykcloak ist eingerichtet und läuft, Datenbank ist vorbereitet (reset_database.py, prepare_sql_tiles.py), traefik ist eingerichtet.
Wenn ich das Portal aufrufe (www.meinedomain.net), sehe ich im Log von traefik:

production034-traefik-1 | time=„2022-02-12T09:38:38Z“ level=debug msg="‚502 Bad Gateway‘ caused by: dial tcp 172.31.0.3:80: connect: connection refused"

172.31.0.3 ist die IP-Adresse des portal-containers. Routing in traefik scheint mir also richtig zu funktionieren, aber wieso lehnt das Portal die Verbindung ab? Im Log des Portals steht nichts.

Vielen Dank für ein paar Ideen.
Klaus

dial tcp 172.31.0.3:80

Je nachdem wie du den Portal-Prozess konfiguriert hast könnte der Port 80 falsch sein. In traefik kannst du hiermit den Port, zu dem proxied wird, verändern:

      - traefik.http.services.portal.loadbalancer.server.port=3000

Evtl. musst du portal darin durch deinen service namen ersetzen, und natürlich 3000 anpassen auf den container port.

Hoffe, das hilft. Ansonsten nochmal melden :wink:

1 „Gefällt mir“

Ok, danke, ich denke, ich bin einen Schritt weiter bzw. haben ein bisschen mehr kapiert. Mein Service lautet „portal“, wie in der Vorlage „source/deployment/examples/docker-compose.yaml“ . Einen bestimmten Port habe ich nicht eingestellt. Sehe aber, dass der Container auf Port 8000 lauscht.
Habe es nun hiermit

traefik.http.services.portal.loadbalancer.server.port=3000

und hiermit

traefik.http.services.portal.loadbalancer.server.port=8000

versucht, aber die Connection wird in beiden Fällen abgelehnt.

Sehe nun aber im Log des Portals und Workers jeweils ein


production034-portal-1 | File „/usr/local/lib/python3.9/site-packages/asyncpg/connect_utils.py“, line 586, in _create_ssl_connection
production034-portal-1 | tr, pr = await loop.create_connection(
production034-portal-1 | File „uvloop/loop.pyx“, line 1963, in create_connection
production034-portal-1 | socket.gaierror: [Errno -5] No address associated with hostname

Insgesamt sieht es so aus:

portal:
image: openbikesensor-portal
ports:
- „3000:8000“
build:
context: ./source
volumes:
- ./data/api-data:/data
- ./config/config.prod.py:/opt/obs/api/config.py
- ./data/tiles/:/tiles
#restart: on-failure
links:
- postgres
# if you introduce a dockerized keycloak instance within this compose also:
- keycloak
labels:
- traefik.http.routers.portal.rule=Host(www.meinedomain.net)
- traefik.http.routers.portal.entrypoints=websecure
- traefik.http.routers.portal.tls=true
- traefik.http.routers.portal.tls.certresolver=leresolver
- traefik.docker.network=gateway
- traefik.http.services.portal.loadbalancer.server.port=8000
networks:
- gateway
- backend

Das Problem hatte ich auch. Es liegt daran, dass der Portal Container nur auf 127.0.0.1:8000 lauscht und die Requests von Traefik nicht ankommen. Wenn du das bind auf 0.0.0.0 setzt in der Config.py wird es gehen.

Moin,

es gibt (noch) diverse kleine Probleme mit der Installation. Hier gibt es einen anderen Thread zu dem Thema, in welchem ich die Probleme mit der Installation beschreibe.

Ich habe bereits mit einem Pull Request begonnen, welcher das Setup vereinfachen soll.

2 „Gefällt mir“

Danke, das hilft sehr. Wenn ich den Pull Request früher gesehen hätte, hätte mir das ein paar Stunden gespart :slight_smile: So habe ich die gleichen Fehler wie du (nur nicht alle) auch gefunden.

1 „Gefällt mir“

Ich bin jetzt nochmal ganz von vorne die Anleitung aus dem Branch „dev/simplified-deployment“ durchgegangen. https://github.com/openbikesensor/portal/tree/dev/simplified-deployment/deployment Wirklich hervorragend, so funktioniert alles auf Anhieb, vielen Dank dafür. Zwei kleine Anmerkungen:

  • Für den Download der OSM-Daten in den Ordner „data/“ fehlten zumindest in meinem Fall die Rechte, da dieser Ordner von Docker angelegt wurde
  • Wenn man die Kartenposition in config.py einträgt, muss man beachten, dass in der URL erst latitude, dann longitude steht, in der config.py die Reihenfolge aber genau andersrum ist. Wenn man nicht aufpasst, trägt man es falsch ein und wundert sich dann, wieso man eine leere Karte sieht (in meinem Fall)
1 „Gefällt mir“

Das freut mich zu hören, dass das alles auf Anhieb Funktioniert hat. Die Anmerkungen übernehme ich gerne noch in den Branch.

Kleiner Hinweis: der Branch hat einen Entwicklungsstand Anfang 2022.

Zum Thema Latitude/Longitude vs. Longitude/Latitude habe ich mal diesen Artikel gefunden, der das ganz gut zusammenfasst. Nützlich immer als Referenz im Bookmark irgendwo zu haben :wink:

Das mit dem data/ Ordner ist üblich bei Docker, wenn du den Container startest ohne dass der Ordner bereits existiert. Dann müssen natürlich von Hand die Berechtigungen angepasst werden. Könnten wir in die Anleitung aufnehmen.