https://github.com/dhanak/ets
Electronic Tutoring System (ETS)
https://github.com/dhanak/ets
apache apache2 cms elixir mason sicstus-prolog
Last synced: 4 months ago
JSON representation
Electronic Tutoring System (ETS)
- Host: GitHub
- URL: https://github.com/dhanak/ets
- Owner: dhanak
- License: mit
- Created: 2024-08-01T12:30:16.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-12-11T10:28:51.000Z (over 1 year ago)
- Last Synced: 2025-09-19T17:17:33.925Z (9 months ago)
- Topics: apache, apache2, cms, elixir, mason, sicstus-prolog
- Language: Prolog
- Homepage: https://www.cs.bme.hu/~dhanak/hd_diploma.pdf
- Size: 878 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Elektronikus Tanársegéd (ETS)
Ez a BME műszaki informatika szakon oktatott, Deklaratív Programozás című tárgy
hallgatói információs rendszere, az ETS.
**Tartalom**
- [Elektronikus Tanársegéd (ETS)](#elektronikus-tanársegéd-ets)
- [Előzetes követelmények](#előzetes-követelmények)
- [Telepítés](#telepítés)
- [Futtatási környezet beállítása](#futtatási-környezet-beállítása)
- [Docker build és futtatás](#docker-build-és-futtatás)
- [Apache2 reverse proxy beállítása](#apache2-reverse-proxy-beállítása)
- [Backup és visszaállítás](#backup-és-visszaállítás)
- [Emailek a fejlesztői környezetben](#emailek-a-fejlesztői-környezetben)
- [Keycloak szerver a fejlesztői környezetben](#keycloak-szerver-a-fejlesztői-környezetben)
- [Kezdeti keycloak beállítások](#kezdeti-keycloak-beállítások)
## Előzetes követelmények
* `docker`, `docker compose`
* Debian/Ubuntu: `docker-ce`, `docker-ce-cli`, `docker-compose-plugin`
csomagok
* a régebbi, v1-es `docker-compose` python csomag nem jó!
* Apache2 web szerver konfigurált HTTPS eléréssel
* engedélyezett OpenID Connect Provider szolgáltatás (pl. )
* érvényes SICStus Prolog licenc: a licenc paramétereit a `SICSTUS_SITENAME`,
`SICSTUS_LICENSE_CODE` és `SICSTUS_EXPIRATION_DATE` környezeti változókban
kell beállítani
## Telepítés
A telepítéshez és futtatáshoz `docker` szükséges. Lépések:
### Futtatási környezet beállítása
Fejlesztői környezet futtatásához használhatod a meglévő beállításokat. Éles
futtatáshoz végezd el a következő lépéseket:
1. Másold le az `env.develop` file-t `env.live` néven!
2. A benne szereplő változóknak adj a célnak megfelelő értéket!
3. `ln -s env.live .env`
### Docker build és futtatás
```sh
$ source env.version
$ docker compose build
$ docker compose up -d
```
Ezek hatására a site fut, és elérhető a docker hoston a beállított porton
(`HTTP_EXTERNAL_PORT`, alapértelmezetten 8080).
### Apache2 reverse proxy beállítása
Az ETS webszerver SSL titkosítás nélkül, csak a localhoston hozzáférhető porton
(alapértelmezetten a 8080-ason, ld. `HTTP_EXTERNAL_PORT` beállítást az env
file-ban) fut. Ahhoz, hogy kívülről is elérhető legyen https protokollal, be
kell rakni egy futó Apache webszerver mögé, amiben beállítottuk az SSL elérést
és reverse proxy-s továbbítást. Ehhez először is szükség lesz a `mod_proxy` és a
`mod_headers` Apache modulokra:
```sh
$ sudo a2enmod headers
$ sudo a2enmod proxy
```
Továbbá az alábbi file-ra `/etc/apache2/sites-avaiable/ets-ssl.conf` néven. Az
ETS szempontjából lényeges részek az `## ETS` és `## ETS END` sorok között
vannak, a többi csak példa, és feltételezi a `SERVER_HOST` környezeti változó
beállítását arra az FQDN névre, amin a host kívülről elérhető (ez persze fixen
ki bele is írható a file-ba a `${SERVER_HOST}` előfordulásainak helyére).
```conf
ServerAdmin webmaster@localhost
ServerName ${SERVER_HOST}
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
## ETS
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
ProxyPass /ets/redirect_uri http://localhost:8080/ets/redirect_uri
ProxyPass /ets http://localhost:8080
ProxyPassReverse /ets http://localhost:8080
ProxyPreserveHost on
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port 443
## ETS END
SSLCertificateFile /etc/letsencrypt/live/${SERVER_HOST}/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/${SERVER_HOST}/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
```
Végezetül engedélyezzük a frissen létrehozott site-ot:
```sh
$ sudo a2ensite ets-ssl
```
## Backup és visszaállítás
Előfeltétel: fut a container. Az alábbi parancsokat a repository gyökerében kell
futtatni.
Teljes DB backup:
```sh
$ docker compose exec mariadb mariadb-dump -uets -pets ets | \
gzip > ets-db-backup-$(date +%Y%m%d).sql.gz
```
Visszaállítás:
```sh
$ gunzip -c ets-db-backup-....sql.gz | \
docker compose exec -T mariadb mariadb -uets -pets ets
```
## Emailek a fejlesztői környezetben
Fejlesztői környezetben a rendszer nem küld éles emaileket, hanem egy
[MailCatcher](https://mailcatcher.me/) nevű beágyazott SMTP szerveren gyűjti
össze azokat. A kiküldött emaileket egy webes felületen keresztül lehet
megtekinteni a docker host gépen, a 1080-as porton:
```
$ xdg-open http://localhost:1080
```
## Keycloak szerver a fejlesztői környezetben
Az OpenID Connect azonosításhoz fejlesztői környezetben egy
[keycloak](https://www.keycloak.org/) szervert futtatunk. Ebben
alapértelmezésben be van állítva egy `ets` realm, két felhasználóval:
* admin/admin (Neptun kód: ADMIN1);
* jakab/jakab (Neptun kód: JAKAB1).
Az ETS saját adatbázisába alapértelmezésben ADMIN1 fel van véve
adminisztrátorként, így vele rögtön be tudunk lépni. JAKAB1 nincs, ezért őt
ismeretlen (vendég) felhasználóként mutatja a rendszer. Ahhoz, hogy teljes jogú
felhasználó legyen, az ETS adatbázisába is fel kell venni a felhasználók közé a
JAKAB1 Neptun kódot.
További felhasználók rögzíthetők a keycloak belépési oldalán a Register linkre
klikkelve, vagy a keycloak administrációs oldalán a
címen. (A külső port állítható az `OIDC_EXTERNAL_PORT` környezeti változóval.)
### Kezdeti keycloak beállítások
A kezdeti beállításokat (realm, admin és jakab felhasználók) az `ets-realm.json`
file tartalmazza. Ennek létrehozása nem teljesen magától értetődő, a következő
technikát értemes használni:
```
$ docker compose run -it --rm --name keycloak-export --service-ports \
--entrypoint /bin/bash keycloak
bash-5.1$ /opt/keycloak/bin/kc.sh start-dev --import-realm
...
2024-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.
```
Ezek után a címen állítsuk be a realm-et ízlés szerint,
nem megfeledkezve a felhasználókról és a jelszavaikról sem. Majd a konténerben:
```
2024-08-14 08:39:39,390 INFO [io.quarkus] (Shutdown thread) Keycloak stopped in 0.030s
bash-5.1$ /opt/keycloak/bin/kc.sh export --realm ets --file /tmp/ets-realm.json
...
2024-08-14 08:40:02,293 INFO [org.keycloak.services] (main) KC-SERVICES0034: Export of realm 'ets' requested.
2024-08-14 08:40:02,293 INFO [org.keycloak.exportimport.singlefile.SingleFileExportProvider] (main) Exporting realm 'ets' into file /tmp/ets-realm.json
2024-08-14 08:40:03,026 INFO [org.keycloak.services] (main) KC-SERVICES0035: Export finished successfully
...
2024-08-14 08:40:03,371 INFO [io.quarkus] (main) Keycloak stopped in 0.246s
```
Végezetül egy másik terminálban (miközben még fut a konténer!):
```
$ docker compose cp keycloak-export:/tmp/ets-realm.json .
Successfully copied 76.3kB to .
```
Ezután kiléphetünk a futó konténerből.