Aleksis im Docker

Hallo zusammen,

ich bin gerade dabei Aleksis im Docker an das LDAP anzubinden. Hat das jemand schon erfolgreich hinbekommen? Soweit ich das verstehe muss ich in der docker-compose.yml folgende Ergänzungen machen:
- ALEKSIS_ldap__uri='ldap://10.190.1.1:389'
- ALEKSIS_ldap__bind='{ dn = "CN=aleksis-binduser,OU=Management,OU=default-school,OU=SCHOOLS,DC=mydomain,DC=schule", password = "***" }'

Sobald ich aber auch nur den uri-Parameter setze, bekomme ich vom Aleksis.app-Container keinerlei Meldung mehr beim Starten. Entferne ich den uri-Parameter, dann startet der Aleksis.app-Container korrekt.

Der Server ist unter dem Port aus dem Docker Container erreichbar.
Dass so gar keine Ausgabe kommt ist etwas komisch.

Lieben Gruß

Raphael

Hallo Raphael,

ich bin mir nicht sicher, ob unser ldap auf ldap Anfragen antwortet: ich
würde ldaps nehmen mit Port 636

LG

Holger

Hallo Holger,

ich hab jetzt komplett umgestellt auf let’s encrypt Zertifikate.
Verbindung via ldaps auf Port 636 hilft leider auch nicht weiter.

Ich vermute, dass was an dem Docker-Container nicht stimmt. Evtl. hat der Docker gar keinen ldap-Support (evtl. läuft da nur Aleksis Core).

Lieben Gruß

Raphael

Das müsstest du selber ja am besten wissen…

Also: Welcher Container? Welches Image? Konfiguration insgesamt?

Hi,

ich hab mich an die Anleitung (AlekSIS Handbook, Release 2022.6 „Cohn“, S. 44) gehalten:

git clone AlekSIS® / Official / AlekSIS · GitLab

Der Docker-Container verwendet die AlekSIS Version 2022.6.1:
app: image: registry.edugit.org/aleksis/official/aleksis:${ALEKSIS_IMAGE_TAG:-2022.6.1}
worker: image: registry.edugit.org/aleksis/official/aleksis:${ALEKSIS_IMAGE_TAG:-2022.6.1}
scheduler: image: registry.edugit.org/aleksis/official/aleksis:${ALEKSIS_IMAGE_TAG:-2022.6.1}

ich hab lediglich via .env-Datei ein POSTGRES_PASSWORD gesetzt.

Zusätzlich habe ich wie oben erwähnt die Werte für ALEKSIS_ldap__uri und ALEKSIS_ldap__bind im docker-compose.yml gesetzt. Sobald ich auch nur ALEKSIS_ldap__uri setze, hängt der Aleksis.app-Container

Lieben Gruß

Raphael

Hallo,
ich habe versucht AlekSIS in Docker zu installieren und das docker-compose läuft auch korrekt durch und die 4 Services laufen. Versuche ich jedoch über den Browser auf localhost zu browsen erhalte ich diese Fehlermeldung:

Fehler: Verbindung unterbrochen
Die Verbindung zum Server wurde zurückgesetzt, während die Seite geladen wurde.

Ich habe dann in den docker logs nachgeschaut und diese sind leer.
Anschließend habe ich versucht in den Container zu excen und habe dort in den Logs gesucht aber dort wurde auch kein Log erstellt oder geschrieben.
Wie kann ich hier weiter vorgehen und AlekSIS zum laufen zu bekommen?

Viele Grüße
Emanuel

Hallo Emanuel,

ich kann dir zwar nicht ganz die Lösung sagen, aber habe beim Versuch AlekSis aufzusetzen, weil mein altes verloren gegangen ist folgenden Error bekommen:

db-1         | 2024-06-05 08:58:16.516 UTC [37] ERROR:  relation "django_migrations" does not exist at character 22
db-1         | 2024-06-05 08:58:16.516 UTC [37] STATEMENT:  SELECT 1 AS "a" FROM "django_migrations" WHERE ("django_migrations"."app" = 'core' AND "django_migrations"."name" = '0046_add_room_model') LIMIT 1

Die Lösung habe ich aber leider nicht. Du könntest docker compose ohne -d ausführen, sodass du den Output siehst.

Grüße,
Tin

Hallo,

ich nehme ja immer gerne
lazydocker
… weil ich faul bin…

LG
Holger

Hallo Holger,

was für Vorteile birgt das denn in diesem Fall? Das ist ja nur ein Frontend. :slight_smile:
Ansonsten nutze ich aber auch Portainer.

Grüße,
Tin

Hallo zusammen,

es freut mich, dass ic hhier so shcnelll eine Antwort bekomme.
Mit docker-copose up ohne das -d erhalte ich folgende ausgabe:
aleksis-db-1 |
aleksis-db-1 | 2024-06-05 09:44:05.064 UTC [1] LOG: starting PostgreSQL 14.12 (Debian 14.12-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
aleksis-db-1 | 2024-06-05 09:44:05.090 UTC [1] LOG: listening on IPv4 address „0.0.0.0“, port 5432
aleksis-db-1 | 2024-06-05 09:44:05.090 UTC [1] LOG: listening on IPv6 address „::“, port 5432
aleksis-db-1 | 2024-06-05 09:44:05.092 UTC [1] LOG: listening on Unix socket „/var/run/postgresql/.s.PGSQL.5432“
aleksis-db-1 | 2024-06-05 09:44:05.114 UTC [60] LOG: database system was shut down at 2024-06-05 09:44:04 UTC
aleksis-db-1 | 2024-06-05 09:44:05.155 UTC [1] LOG: database system is ready to accept connections
aleksis-worker-1 | Waiting for database.
aleksis-scheduler-1 | Waiting for database.
aleksis-db-1 | 2024-06-05 09:44:21.455 UTC [69] ERROR: relation „django_migrations“ does not exist at character 22
aleksis-db-1 | 2024-06-05 09:44:21.455 UTC [69] STATEMENT: SELECT 1 AS „a“ FROM „django_migrations“ WHERE („django_migrations“.„app“ = ‚core‘ AND „django_migrations“.„name“ = ‚0046_add_room_model‘) LIMIT 1
aleksis-db-1 | 2024-06-05 09:44:21.964 UTC [70] ERROR: relation „django_migrations“ does not exist at character 22
aleksis-db-1 | 2024-06-05 09:44:21.964 UTC [70] STATEMENT: SELECT 1 AS „a“ FROM „django_migrations“ WHERE („django_migrations“.„app“ = ‚core‘ AND „django_migrations“.„name“ = ‚0046_add_room_model‘) LIMIT 1
aleksis-db-1 | 2024-06-05 09:44:34.007 UTC [71] ERROR: relation „django_migrations“ does not exist at character 22
aleksis-db-1 | 2024-06-05 09:44:34.007 UTC [71] STATEMENT: SELECT 1 AS „a“ FROM „django_migrations“ WHERE („django_migrations“.„app“ = ‚core‘ AND „django_migrations“.„name“ = ‚0046_add_room_model‘) LIMIT 1
aleksis-db-1 | 2024-06-05 09:44:34.499 UTC [72] ERROR: relation „django_migrations“ does not exist at character 22

Die letzte Zeile wiederholt sich nun bis in alle Ewigkeit :smiley:
ich habe davor extra alle Volumes entfernt, also ist auch die Postgres DB leer gewesen.
Es sieht für mich so aus, als ob die Migration im Django hier einen Fehler hat.

VG
Emanuel

1 „Gefällt mir“

Hallo Tin,

ich kann dem container beim booten zuschauen und hab danach direkten Einblick in ide logs… ich find das schon praktisch um mal schnell zu sehen, ob der Container überhaupt läuft …

LG

Holger

1 „Gefällt mir“

Hallo Holger,

ich habe das ja auch getan als ich den Container ohne -d hochgefahren habe und ich erhalte immer diesen Fehler mit der Migration. Ist dieser Fehler bekannt?

Viele Grüße
Emanuel

1 „Gefällt mir“

Hi,

Achso danke - ja mit Portainer kann ich ja ähnliches, im Web!

Notfalls teste ich halt den Schulmanager, hab auf der LearnTec nen Sportbeutel von denen bekommen… (offensichtlich ironisch gemeint) :laughing:

Grüße,
Tin

Hi,

es scheint etwas geupdatet worden zu sein, wie ich im Release-Note feststelle. Habe es nun erneut probiert und bin an dem Datenbankfehler (siehe oben) vorbei gekommen. Nun werde ich von dem hier verfolgt:

app-1        | The above exception was the direct cause of the following exception:
app-1        |
app-1        | Traceback (most recent call last):
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/core/handlers/wsgi.py", line 124, in __call__
app-1        |     response = self.get_response(request)
app-1        |                ^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/core/handlers/base.py", line 140, in get_response
app-1        |     response = self._middleware_chain(request)
app-1        |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/core/handlers/exception.py", line 57, in inner
app-1        |     response = response_for_exception(request, exc)
app-1        |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/core/handlers/exception.py", line 140, in response_for_exception
app-1        |     response = handle_uncaught_exception(
app-1        |                ^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/core/handlers/exception.py", line 185, in handle_uncaught_exception
app-1        |     return callback(request)
app-1        |            ^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/aleksis/core/views.py", line 1401, in server_error
app-1        |     return HttpResponseServerError(template.render(context))
app-1        |                                    ^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/backends/django.py", line 61, in render
app-1        |     return self.template.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 175, in render
app-1        |     return self._render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 167, in _render
app-1        |     return self.nodelist.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 1005, in render
app-1        |     return SafeString("".join([node.render_annotated(context) for node in self]))
app-1        |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 1005, in <listcomp>
app-1        |     return SafeString("".join([node.render_annotated(context) for node in self]))
app-1        |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 966, in render_annotated
app-1        |     return self.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/loader_tags.py", line 157, in render
app-1        |     return compiled_parent._render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 167, in _render
app-1        |     return self.nodelist.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 1005, in render
app-1        |     return SafeString("".join([node.render_annotated(context) for node in self]))
app-1        |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 1005, in <listcomp>
app-1        |     return SafeString("".join([node.render_annotated(context) for node in self]))
app-1        |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 966, in render_annotated
app-1        |     return self.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/loader_tags.py", line 208, in render
app-1        |     return template.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 177, in render
app-1        |     return self._render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 167, in _render
app-1        |     return self.nodelist.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 1005, in render
app-1        |     return SafeString("".join([node.render_annotated(context) for node in self]))
app-1        |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 1005, in <listcomp>
app-1        |     return SafeString("".join([node.render_annotated(context) for node in self]))
app-1        |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/base.py", line 966, in render_annotated
app-1        |     return self.render(context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/template/library.py", line 237, in render
app-1        |     output = self.func(*resolved_args, **resolved_kwargs)
app-1        |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/favicon/templatetags/favtags.py", line 21, in place_favicon
app-1        |     fav = Favicon.on_site.filter(isFavicon=True).first()
app-1        |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/models/query.py", line 1057, in first
app-1        |     for obj in queryset[:1]:
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/models/query.py", line 398, in __iter__
app-1        |     self._fetch_all()
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/models/query.py", line 1881, in _fetch_all
app-1        |     self._result_cache = list(self._iterable_class(self))
app-1        |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/models/query.py", line 91, in __iter__
app-1        |     results = compiler.execute_sql(
app-1        |               ^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/cachalot/monkey_patch.py", line 37, in inner
app-1        |     return original(compiler, *args, **kwargs)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/cachalot/monkey_patch.py", line 96, in inner
app-1        |     return _get_result_or_execute_query(
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/cachalot/monkey_patch.py", line 64, in _get_result_or_execute_query
app-1        |     result = execute_query_func()
app-1        |              ^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/cachalot/monkey_patch.py", line 80, in <lambda>
app-1        |     execute_query_func = lambda: original(compiler, *args, **kwargs)
app-1        |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/models/sql/compiler.py", line 1562, in execute_sql
app-1        |     cursor.execute(sql, params)
app-1        |   File "/usr/local/lib/python3.11/dist-packages/cachalot/monkey_patch.py", line 137, in inner
app-1        |     return original(cursor, sql, *args, **kwargs)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 67, in execute
app-1        |     return self._execute_with_wrappers(
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
app-1        |     return executor(sql, params, many, context)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 84, in _execute
app-1        |     with self.db.wrap_database_errors:
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/utils.py", line 91, in __exit__
app-1        |     raise dj_exc_value.with_traceback(traceback) from exc_value
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django/db/backends/utils.py", line 89, in _execute
app-1        |     return self.cursor.execute(sql, params)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        |   File "/usr/local/lib/python3.11/dist-packages/django_prometheus/db/common.py", line 69, in execute
app-1        |     return super().execute(*args, **kwargs)
app-1        |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app-1        | django.db.utils.ProgrammingError: relation "favicon_favicon" does not exist
app-1        | LINE 1: ...on"."isFavicon", "favicon_favicon"."site_id" FROM "favicon_f...
app-1        |                                                              ^

Grüße!

Edit:
Die Datenbank spuckt folgendes aus:

2024-06-06 16:01:24.296 UTC [177] ERROR:  relation "favicon_favicon" does not exist at character 157
2024-06-06 16:01:24.296 UTC [177] STATEMENT:  SELECT "favicon_favicon"."id", "favicon_favicon"."title", "favicon_favicon"."faviconImage", "favicon_favicon"."isFavicon", "favicon_favicon"."site_id" FROM "favicon_favicon" WHERE ("favicon_favicon"."site_id" = 1 AND "favicon_favicon"."isFavicon") ORDER BY "favicon_favicon"."id" ASC LIMIT 1