Dockerfile angepasst für templates
This commit is contained in:
parent
344da0bb48
commit
1d436836d7
7 changed files with 123 additions and 101 deletions
|
@ -6,5 +6,3 @@ UNIFI_SSL_VERIFY = True
|
||||||
UNIFI_SITE_ID = 'yourSiteID'
|
UNIFI_SITE_ID = 'yourSiteID'
|
||||||
WLAN_SSID = 'your WLAN-SSID'
|
WLAN_SSID = 'your WLAN-SSID'
|
||||||
WLAN_PASSWORD = 'your WLAN Passwort'
|
WLAN_PASSWORD = 'your WLAN Passwort'
|
||||||
LOGO_FILE = /app/custom/logo.png
|
|
||||||
WIFI_ICON = /app/custom/wifi-icon.png
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
.env
|
.env
|
||||||
|
.env-morz
|
||||||
script/__pycache__/
|
script/__pycache__/
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,10 @@ WORKDIR /app
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
RUN pip install --no-cache-dir -r requirements.txt
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
COPY script/* /app/script-dist/
|
COPY script/* /app/script-dist/
|
||||||
|
COPY script/templates/* /app/script-dist/templates/
|
||||||
|
COPY script/static/* /app/script-dist/static/
|
||||||
COPY entrypoint.sh /app/
|
COPY entrypoint.sh /app/
|
||||||
RUN chmod +x /app/entrypoint.sh
|
RUN chmod +x /app/entrypoint.sh
|
||||||
|
|
||||||
|
|
176
README.md
176
README.md
|
@ -1,12 +1,13 @@
|
||||||
# voucher.morz.de
|
# voucher.morz.de
|
||||||
|
|
||||||
## **Überblick**
|
## **Überblick**
|
||||||
Dieses Projekt stellt eine Flask-basierte Anwendung bereit, die WLAN-Voucher generiert und QR-Codes für den einfachen Zugang erstellt. Die Anwendung ist als Docker-Image verpackt und kann in einer Container-Umgebung betrieben werden.
|
Dieses Projekt stellt eine Flask-basierte Anwendung bereit, die mittels Unifi-API WLAN-Voucher generiert und QR-Codes für den einfachen Zugang erstellt, um sie dann großflächig auf dem Bildschirm anzuzeigen.
|
||||||
|
Damit ist es z.B. für Lehrkräfte möglich, Schülern und Schülerinnen einen zeitlich begrenzten WLAN-Zugang freizugeben, ohne dass die Geräte das Netz dauerhaft belasten.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **Voraussetzungen**
|
## **Voraussetzungen**
|
||||||
- Docker und Docker Compose müssen installiert sein.
|
- Ein Server mit Docker und Docker Compose müssen installiert sein.
|
||||||
- Ein funktionierender UniFi-Controller, der über die API erreichbar ist.
|
- Ein funktionierender UniFi-Controller, der über die API erreichbar ist.
|
||||||
- Ein Reverse Proxy (z. B. Nginx oder Traefik) für die Weiterleitung und HTTPS-Unterstützung.
|
- Ein Reverse Proxy (z. B. Nginx oder Traefik) für die Weiterleitung und HTTPS-Unterstützung.
|
||||||
|
|
||||||
|
@ -14,110 +15,113 @@ Dieses Projekt stellt eine Flask-basierte Anwendung bereit, die WLAN-Voucher gen
|
||||||
|
|
||||||
## **Installation**
|
## **Installation**
|
||||||
|
|
||||||
### 1. **Repository klonen**
|
### mit docker compose
|
||||||
Klonen Sie das Repository:
|
|
||||||
```bash
|
|
||||||
git clone <repository-url>
|
|
||||||
cd voucher.morz.de
|
|
||||||
|
|
||||||
### 2. .env-Datei konfigurieren
|
|
||||||
Erstellen Sie eine .env-Datei im Projektverzeichnis oder passen Sie die vorhandene Datei an. Diese Datei enthält die Konfigurationsparameter für die Anwendung.
|
|
||||||
|
|
||||||
Beispiel .env:
|
|
||||||
|
|
||||||
|
- Verzeichnis erstellen und docker-compose.yml erzeugen mit folgendem Inhalt:
|
||||||
```
|
```
|
||||||
UNIFI_HOST=wlan.morz.de
|
name: linuxmuster-voucher
|
||||||
UNIFI_USERNAME=admin
|
|
||||||
UNIFI_PASSWORD=afoilka9Z
|
services:
|
||||||
|
linuxmuster-voucher:
|
||||||
|
image: git.az-it.net/az/linuxmuster-voucher:latest
|
||||||
|
container_name: linuxmuster-voucher
|
||||||
|
ports:
|
||||||
|
- 42425:42425
|
||||||
|
volumes:
|
||||||
|
# Eigenes Logo einbinden - MUSS ein PNG sein
|
||||||
|
# - ./<dein Logo>.png:/app/script/static/logo.png:ro
|
||||||
|
|
||||||
|
working_dir: /app/script
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
restart: unless-stopped
|
||||||
|
```
|
||||||
|
- falls der Port 42425 schon belegt ist (sehr unwahrscheinlich), einen freien aussuchen.
|
||||||
|
- .env Datei erzeugen und mit folgendem (angepassten) Inhalt füllen
|
||||||
|
```
|
||||||
|
UNIFI_HOST = 'unifi.deineSchule.de'
|
||||||
|
UNIFI_USERNAME = 'admin'
|
||||||
|
UNIFI_PASSWORD = 'yourPassword'
|
||||||
UNIFI_PORT = 443
|
UNIFI_PORT = 443
|
||||||
UNIFI_SSL_VERIFY = True
|
UNIFI_SSL_VERIFY = True
|
||||||
UNIFI_SITE_ID=qfasa90u
|
UNIFI_SITE_ID = 'yourSiteID'
|
||||||
WLAN_SSID=BZZ-Gast
|
WLAN_SSID = 'your WLAN-SSID'
|
||||||
WLAN_PASSWORD=Gast-Guest-522
|
WLAN_PASSWORD = 'your WLAN Passwort'
|
||||||
DEBUG=False
|
|
||||||
```
|
```
|
||||||
|
Es wird dringend empfohlen, vernünftige SSL-Zertifikate zu verwenden. Das ist auch nicht so kompliziert umzusetzen. Wenn du noch keine Ahnung hast, wie du es bewerkstelligen sollst, schau dir mal [DNSRoboCert](https://github.com/adferrand/dnsrobocert) an.
|
||||||
|
|
||||||
### 3. **Docker-Image bauen**
|
- starten mit ```docker compose up -d```
|
||||||
Bauen Sie das Docker-Image:
|
Nach wenigen Augenblicken ist die Anwendung am Start und kann (wenn die Firewall das zulässt) schon unsicher auf http://dein.docker.server:42425 erreicht werden.
|
||||||
|
- Reverse-Proxy einrichten (z.B. für nginx wäre es eine Config mit solchem Inhalt)
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
|
||||||
|
listen [::]:443 ssl;
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name voucher.deine-schule.tld ;
|
||||||
|
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains";
|
||||||
|
ssl_certificate /etc/letsencrypt/live/deine-schule.tld/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/deube.schule.tld/privkey.pem;
|
||||||
|
ssl_session_cache builtin:1000 shared:SSL:50m;
|
||||||
|
ssl_protocols TLSv1.2;
|
||||||
|
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log ;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_pass http://127.0.0.1:42425;
|
||||||
|
proxy_read_timeout 90;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Damit wäre der Voucher-Generator (ungeschützt) unter der Domain erreichbar.
|
||||||
|
|
||||||
|
Wenn du den Generator per MDM als Web-App an die Endgeräte ausrollst, kannst du durch *security by obscurity* einen zufälligen Missbrauch verhindern, indem du die Seite nicht auf / auslieferst, sondern mit einem Pseudo-Zufalls-URI. Dazu würdest du in der nginx-config
|
||||||
|
``` location / { ```
|
||||||
|
durch ``` location /afskjhsh98zafuihjkancs98 ``` ersetzen. Der Voucher-Generator wäre dann unter https://voucher.deine-schule.de/afskjhsh98zafuihjkancs98/ erreichbar.
|
||||||
|
|
||||||
|
Wenn du dann noch mit der Firewall einschränkst, dass diese Seite nur aus dem Schul-WLAN erreichbar ist, bist du schon recht sicher - denn wer den URI kennt, muss dann, um ihn nutzen zu können schon Zugriff haben.
|
||||||
|
Sollte man dann irgendwann mitbekommen, dass die Adresse die Runde macht, ändert man einfach irgend ein Zeichen im Location-Block.
|
||||||
|
|
||||||
|
Ich selbst nutze das System hinter einem Passwortschutz mit Keycloak, das ist aber nicht *mal schnell* eingerichtet, weshalb ich hier eine niederschwelligere Version bereitstelle.
|
||||||
|
|
||||||
|
|
||||||
|
### alternativ: selber bauen
|
||||||
|
- Repo clonen und .env erstellen
|
||||||
|
```bash
|
||||||
|
git clone https://git.az-it.net/linuxmuster-voucher.git
|
||||||
|
cd linuxmuster-voucher
|
||||||
|
cp .env-dist .env
|
||||||
|
```
|
||||||
|
- .env anpassen (s.o.)
|
||||||
|
|
||||||
|
- **Docker-Image bauen**
|
||||||
```bash
|
```bash
|
||||||
docker compose build
|
docker compose build
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. **Container starten**
|
- **Container starten**
|
||||||
Starten Sie den Container:
|
|
||||||
```bash
|
```bash
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Anwendung ist unter `http://<server-ip>:42425` erreichbar.
|
Die Anwendung ist unter `http://<server-ip>:42425` erreichbar.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Reverse Proxy einrichten**
|
|
||||||
|
|
||||||
Um die Anwendung über HTTPS und eine benutzerfreundliche URL bereitzustellen, richten Sie einen Reverse Proxy ein. Hier ist ein Beispiel für die Konfiguration mit **Nginx**.
|
|
||||||
|
|
||||||
### Beispiel Nginx-Konfiguration:
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name voucher.morz.de;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://127.0.0.1:42425;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Optional: Weiterleitung auf HTTPS
|
|
||||||
return 301 https://$host$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
server_name voucher.morz.de;
|
|
||||||
|
|
||||||
ssl_certificate /etc/letsencrypt/live/voucher.morz.de/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/voucher.morz.de/privkey.pem;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://127.0.0.1:42425;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Schritte:
|
|
||||||
1. Installieren Sie Nginx:
|
|
||||||
```bash
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Konfigurieren Sie die oben genannte Datei unter `/etc/nginx/sites-available/voucher.morz.de` und aktivieren Sie sie:
|
|
||||||
```bash
|
|
||||||
sudo ln -s /etc/nginx/sites-available/voucher.morz.de /etc/nginx/sites-enabled/
|
|
||||||
sudo nginx -t
|
|
||||||
sudo systemctl reload nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Optional: Installieren Sie ein SSL-Zertifikat mit **Let's Encrypt**:
|
|
||||||
```bash
|
|
||||||
sudo apt install certbot python3-certbot-nginx
|
|
||||||
sudo certbot --nginx -d voucher.morz.de
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## **Verwendung**
|
## **Verwendung**
|
||||||
|
|
||||||
### 1. **Startseite**
|
### 1. **Startseite**
|
||||||
Rufen Sie die Startseite unter `http://voucher.morz.de` (oder der konfigurierten URL) auf. Hier können Sie Voucher für 45 oder 90 Minuten erstellen.
|
Rufe die Startseite unter `https://voucher.deine-schule.tld` (die im Reverseproxy konfigurierte URL) auf.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 2. **Voucher erstellen**
|
### 2. **Voucher erstellen**
|
||||||
- Klicken Sie auf einen der Buttons, um einen Voucher zu erstellen.
|
- Klicken Sie auf einen der Buttons, um einen Voucher zu erstellen.
|
||||||
|
|
22
docker-compose.dev.yml
Normal file
22
docker-compose.dev.yml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
name: linuxmuster-voucher
|
||||||
|
|
||||||
|
services:
|
||||||
|
linuxmuster-voucher:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: git.az-it.net/az/linuxmuster-voucher:latest
|
||||||
|
container_name: linuxmuster-voucher
|
||||||
|
ports:
|
||||||
|
- 42425:42425
|
||||||
|
volumes:
|
||||||
|
- ./script:/app/script
|
||||||
|
# - ./lmn-logo.png:/app/script/static/logo.png:ro
|
||||||
|
|
||||||
|
working_dir: /app/script
|
||||||
|
environment:
|
||||||
|
- DEV=false
|
||||||
|
- PYTHONUNBUFFERED=1
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
#restart: unless-stopped
|
|
@ -2,21 +2,15 @@ name: linuxmuster-voucher
|
||||||
|
|
||||||
services:
|
services:
|
||||||
linuxmuster-voucher:
|
linuxmuster-voucher:
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
image: git.az-it.net/az/linuxmuster-voucher:latest
|
image: git.az-it.net/az/linuxmuster-voucher:latest
|
||||||
container_name: linuxmuster-voucher
|
container_name: linuxmuster-voucher
|
||||||
ports:
|
ports:
|
||||||
- 42425:42425
|
- 42425:42425
|
||||||
volumes:
|
# volumes:
|
||||||
- ./script:/app/script
|
# Eigenes Logo einbinden - MUSS ein PNG sein
|
||||||
# - ./lmn-logo.png:/app/script/static/logo.png:ro
|
# - ./<dein Logo>.png:/app/script/static/logo.png:ro
|
||||||
|
|
||||||
working_dir: /app/script
|
working_dir: /app/script
|
||||||
environment:
|
|
||||||
- DEV=false
|
|
||||||
- PYTHONUNBUFFERED=1
|
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
#restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
BIN
script/screenshots/startseite.png
Normal file
BIN
script/screenshots/startseite.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 101 KiB |
Loading…
Add table
Reference in a new issue