{"id":15063621,"url":"https://github.com/dhanak/ets","last_synced_at":"2026-02-13T23:31:24.684Z","repository":{"id":251208937,"uuid":"836723741","full_name":"dhanak/ets","owner":"dhanak","description":"Electronic Tutoring System (ETS)","archived":false,"fork":false,"pushed_at":"2024-12-11T10:28:51.000Z","size":899,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-19T17:17:33.925Z","etag":null,"topics":["apache","apache2","cms","elixir","mason","sicstus-prolog"],"latest_commit_sha":null,"homepage":"https://www.cs.bme.hu/~dhanak/hd_diploma.pdf","language":"Prolog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dhanak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-01T12:30:16.000Z","updated_at":"2024-12-11T10:29:06.000Z","dependencies_parsed_at":"2024-09-25T00:05:11.012Z","dependency_job_id":"0b688089-1a5a-4bd8-92b1-da6a57574c9c","html_url":"https://github.com/dhanak/ets","commit_stats":null,"previous_names":["dhanak/ets"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dhanak/ets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhanak%2Fets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhanak%2Fets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhanak%2Fets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhanak%2Fets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhanak","download_url":"https://codeload.github.com/dhanak/ets/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhanak%2Fets/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29423534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T22:20:51.549Z","status":"ssl_error","status_checked_at":"2026-02-13T22:20:49.838Z","response_time":78,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache","apache2","cms","elixir","mason","sicstus-prolog"],"created_at":"2024-09-25T00:04:58.514Z","updated_at":"2026-02-13T23:31:24.644Z","avatar_url":"https://github.com/dhanak.png","language":"Prolog","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Elektronikus Tanársegéd (ETS)\n\nEz a BME műszaki informatika szakon oktatott, Deklaratív Programozás című tárgy\nhallgatói információs rendszere, az ETS.\n\n\u003c!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc --\u003e\n**Tartalom**\n\n- [Elektronikus Tanársegéd (ETS)](#elektronikus-tanársegéd-ets)\n    - [Előzetes követelmények](#előzetes-követelmények)\n    - [Telepítés](#telepítés)\n        - [Futtatási környezet beállítása](#futtatási-környezet-beállítása)\n        - [Docker build és futtatás](#docker-build-és-futtatás)\n        - [Apache2 reverse proxy beállítása](#apache2-reverse-proxy-beállítása)\n    - [Backup és visszaállítás](#backup-és-visszaállítás)\n    - [Emailek a fejlesztői környezetben](#emailek-a-fejlesztői-környezetben)\n    - [Keycloak szerver a fejlesztői környezetben](#keycloak-szerver-a-fejlesztői-környezetben)\n        - [Kezdeti keycloak beállítások](#kezdeti-keycloak-beállítások)\n\n\u003c!-- markdown-toc end --\u003e\n\n## Előzetes követelmények\n\n* `docker`, `docker compose`\n  * Debian/Ubuntu: `docker-ce`, `docker-ce-cli`, `docker-compose-plugin`\n    csomagok\n  * a régebbi, v1-es `docker-compose` python csomag nem jó!\n* Apache2 web szerver konfigurált HTTPS eléréssel\n* engedélyezett OpenID Connect Provider szolgáltatás (pl. \u003chttps://idp.bme.hu\u003e)\n* érvényes SICStus Prolog licenc: a licenc paramétereit a `SICSTUS_SITENAME`,\n  `SICSTUS_LICENSE_CODE` és `SICSTUS_EXPIRATION_DATE` környezeti változókban\n  kell beállítani\n\n## Telepítés\n\nA telepítéshez és futtatáshoz `docker` szükséges. Lépések:\n\n### Futtatási környezet beállítása\n\nFejlesztői környezet futtatásához használhatod a meglévő beállításokat. Éles\nfuttatáshoz végezd el a következő lépéseket:\n\n1. Másold le az `env.develop` file-t `env.live` néven!\n\n2. A benne szereplő változóknak adj a célnak megfelelő értéket!\n\n3. `ln -s env.live .env`\n\n### Docker build és futtatás\n\n```sh\n$ source env.version\n$ docker compose build\n$ docker compose up -d\n```\n\nEzek hatására a site fut, és elérhető a docker hoston a beállított porton\n(`HTTP_EXTERNAL_PORT`, alapértelmezetten 8080).\n\n### Apache2 reverse proxy beállítása\n\nAz ETS webszerver SSL titkosítás nélkül, csak a localhoston hozzáférhető porton\n(alapértelmezetten a 8080-ason, ld. `HTTP_EXTERNAL_PORT` beállítást az env\nfile-ban) fut. Ahhoz, hogy kívülről is elérhető legyen https protokollal, be\nkell rakni egy futó Apache webszerver mögé, amiben beállítottuk az SSL elérést\nés reverse proxy-s továbbítást. Ehhez először is szükség lesz a `mod_proxy` és a\n`mod_headers` Apache modulokra:\n\n```sh\n$ sudo a2enmod headers\n$ sudo a2enmod proxy\n```\n\nTovábbá az alábbi file-ra `/etc/apache2/sites-avaiable/ets-ssl.conf` néven. Az\nETS szempontjából lényeges részek az `## ETS` és `## ETS END` sorok között\nvannak, a többi csak példa, és feltételezi a `SERVER_HOST` környezeti változó\nbeállítását arra az FQDN névre, amin a host kívülről elérhető (ez persze fixen\nki bele is írható a file-ba a `${SERVER_HOST}` előfordulásainak helyére).\n\n```conf\n\u003cVirtualHost *:443\u003e\n    ServerAdmin webmaster@localhost\n    ServerName ${SERVER_HOST}\n\n    DocumentRoot /var/www/html\n\n    ErrorLog ${APACHE_LOG_DIR}/error.log\n    CustomLog ${APACHE_LOG_DIR}/access.log combined\n\n    SSLEngine on\n\n    \u003cFilesMatch \"\\.(?:cgi|shtml|phtml|php)$\"\u003e\n        SSLOptions +StdEnvVars\n    \u003c/FilesMatch\u003e\n    \u003cDirectory /usr/lib/cgi-bin\u003e\n        SSLOptions +StdEnvVars\n    \u003c/Directory\u003e\n\n    ## ETS\n    SSLProxyEngine on\n    SSLProxyVerify none\n    SSLProxyCheckPeerCN off\n    ProxyPass /ets/redirect_uri http://localhost:8080/ets/redirect_uri\n    ProxyPass /ets http://localhost:8080\n    ProxyPassReverse /ets http://localhost:8080\n    ProxyPreserveHost on\n    RequestHeader set X-Forwarded-Proto \"https\"\n    RequestHeader set X-Forwarded-Port 443\n    ## ETS END\n\n    SSLCertificateFile /etc/letsencrypt/live/${SERVER_HOST}/fullchain.pem\n    SSLCertificateKeyFile /etc/letsencrypt/live/${SERVER_HOST}/privkey.pem\n    Include /etc/letsencrypt/options-ssl-apache.conf\n\u003c/VirtualHost\u003e\n```\n\nVégezetül engedélyezzük a frissen létrehozott site-ot:\n\n```sh\n$ sudo a2ensite ets-ssl\n```\n\n## Backup és visszaállítás\n\nElőfeltétel: fut a container. Az alábbi parancsokat a repository gyökerében kell\nfuttatni.\n\nTeljes DB backup:\n\n```sh\n$ docker compose exec mariadb mariadb-dump -uets -pets ets | \\\n    gzip \u003e ets-db-backup-$(date +%Y%m%d).sql.gz\n```\n\nVisszaállítás:\n\n```sh\n$ gunzip -c ets-db-backup-....sql.gz | \\\n    docker compose exec -T mariadb mariadb -uets -pets ets\n```\n\n## Emailek a fejlesztői környezetben\n\nFejlesztői környezetben a rendszer nem küld éles emaileket, hanem egy\n[MailCatcher](https://mailcatcher.me/) nevű beágyazott SMTP szerveren gyűjti\nössze azokat. A kiküldött emaileket egy webes felületen keresztül lehet\nmegtekinteni a docker host gépen, a 1080-as porton:\n\n```\n$ xdg-open http://localhost:1080\n```\n\n## Keycloak szerver a fejlesztői környezetben\n\nAz OpenID Connect azonosításhoz fejlesztői környezetben egy\n[keycloak](https://www.keycloak.org/) szervert futtatunk. Ebben\nalapértelmezésben be van állítva egy `ets` realm, két felhasználóval:\n\n* admin/admin (Neptun kód: ADMIN1);\n* jakab/jakab (Neptun kód: JAKAB1).\n\nAz ETS saját adatbázisába alapértelmezésben ADMIN1 fel van véve\nadminisztrátorként, így vele rögtön be tudunk lépni. JAKAB1 nincs, ezért őt\nismeretlen (vendég) felhasználóként mutatja a rendszer. Ahhoz, hogy teljes jogú\nfelhasználó legyen, az ETS adatbázisába is fel kell venni a felhasználók közé a\nJAKAB1 Neptun kódot.\n\nTovábbi felhasználók rögzíthetők a keycloak belépési oldalán a Register linkre\nklikkelve, vagy a keycloak administrációs oldalán a \u003chttp://localhost:8081\u003e\ncímen. (A külső port állítható az `OIDC_EXTERNAL_PORT` környezeti változóval.)\n\n### Kezdeti keycloak beállítások\n\nA kezdeti beállításokat (realm, admin és jakab felhasználók) az `ets-realm.json`\nfile tartalmazza. Ennek létrehozása nem teljesen magától értetődő, a következő\ntechnikát értemes használni:\n\n```\n$ docker compose run -it --rm --name keycloak-export --service-ports \\\n    --entrypoint /bin/bash keycloak\n\nbash-5.1$ /opt/keycloak/bin/kc.sh start-dev --import-realm\n...\n2024-08-14 08:39:14,281 WARN  [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.\n```\n\nEzek után a \u003chttp://localhost:8081\u003e címen állítsuk be a realm-et ízlés szerint,\nnem megfeledkezve a felhasználókról és a jelszavaikról sem. Majd a konténerben:\n\n```\n\u003cCtrl-C\u003e\n2024-08-14 08:39:39,390 INFO  [io.quarkus] (Shutdown thread) Keycloak stopped in 0.030s\n\nbash-5.1$ /opt/keycloak/bin/kc.sh export --realm ets --file /tmp/ets-realm.json\n...\n2024-08-14 08:40:02,293 INFO  [org.keycloak.services] (main) KC-SERVICES0034: Export of realm 'ets' requested.\n2024-08-14 08:40:02,293 INFO  [org.keycloak.exportimport.singlefile.SingleFileExportProvider] (main) Exporting realm 'ets' into file /tmp/ets-realm.json\n2024-08-14 08:40:03,026 INFO  [org.keycloak.services] (main) KC-SERVICES0035: Export finished successfully\n...\n2024-08-14 08:40:03,371 INFO  [io.quarkus] (main) Keycloak stopped in 0.246s\n```\n\nVégezetül egy másik terminálban (miközben még fut a konténer!):\n\n```\n$ docker compose cp keycloak-export:/tmp/ets-realm.json .\nSuccessfully copied 76.3kB to .\n```\n\nEzután kiléphetünk a futó konténerből.\n\n\u003c!-- Local Variables: --\u003e\n\u003c!-- markdown-toc-header-toc-title: **Tartalom** --\u003e\n\u003c!-- End: --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhanak%2Fets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhanak%2Fets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhanak%2Fets/lists"}