Nodejs basiertes Webfrontend, das es Schülern ermöglicht innerhalb des Browsers mit einer MariaDB zu arbeiten. So ist z.B. die Nutzung zu Hause oder am Smartphone ist z.B. problemlos möglich.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
pw d84ff42244 „tex/UserForm.tex“ hinzufügen 12 hours ago
scripts „scripts/createStudents.sh“ hinzufügen 12 hours ago
tex „tex/UserForm.tex“ hinzufügen 12 hours ago
.gitignore Clean up 4 months ago
LICENSE Initial commit 4 months ago
README.md „README.md“ ändern 2 months ago
TODOS.md First commit 4 months ago
app.css First commit 4 months ago
app.js Added symbol counter, started out with Golang version for a better performance 4 months ago
go.mod Added symbol counter, started out with Golang version for a better performance 4 months ago
go.sum Added symbol counter, started out with Golang version for a better performance 4 months ago
index.html Added symbol counter, started out with Golang version for a better performance 4 months ago
package.json First commit 4 months ago
server.go Added symbol counter, started out with Golang version for a better performance 4 months ago
server.js First commit 4 months ago
yarn.lock Added symbol counter, started out with Golang version for a better performance 4 months ago

README.md

SQL4School

Nodejs basiertes Webfrontend, das es Schülern ermöglicht innerhalb des Browsers mit einer MariaDB zu arbeiten. So ist z.B. die Nutzung zu Hause oder am Smartphone problemlos möglich.

Installation auf einem (Cloud-)Server

Hinweise zum Host-Server

  • Kleiner Server ausreichend (1GB RAM, 1 CPU, 10GB Speicher, somit geht dies auch auf einem Raspberry Pi 3 (aufwärts))
  • Installation von Debian (möglichst neueste Version, Stand ist aktuell 10 das Release für 11 ist in den kommenden Tagen geplant)
  • Setzen der korrekten DNS Einträge A und AAAA (sonst SSL nicht möglich)
  • Empfohlen: Installation einer Firewall, die ausschließlich HTTP, HTTPS und SSH erlaubt

Nodejs

  1. Installation:
apt install curl
curl -fsSL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt install nodejs
  1. Benutzer:
useradd -u 1111 node -s /sbin/nologin

MariaDB Datenbank-Server

  1. Installation & Härtung
apt update
apt install mariadb-server
mysql_secure_installation
  • root-Passwort: XXXXX
  • sonst immer mit Y antworten
  1. Benutzer für Schüler und Lehrer anlegen

TODO: Skript erstellen und hier beschreiben

  • Optional löschen aller Datenbanken (ist im Dev Branch hinterlegt)
  • Abfrage der Anzahl an Schülern
  • Anlegen je eines Benutzers für jeden Schüler in der DB mit einem zufälligen Passwort (ist im Dev Branch hinterlegt)
  • Anlegen je einer persönlichen Datenbank pro Schüler (mit vollen Rechten genau für diesen)
  • Anlegen einer gemeinsamen Datenbank für alle (nur mit insert, select, delete Rechten)
  • Anlegen eines Lehrer-Benutzers mit einem definierbaren Passwort (ist im Dev Branch hinterlegt, auch mehrere Lehrer mit generiertem Password sind möglich)
  • Volle Zugriffsrechte des Lehrers für alle Datenbanken (ist im Dev Branch hinterlegt)
  • Ausgabe der Benutzer und Datenbanken in druckbarer Form

Software sql4school

  1. Quellcode kopieren
cd /srv
git clone https://codeberg.org/tk100/sql4school.git
chown www-data:www-data /srv/sql4school
  1. Startskript anlegen:
nano /etc/systemd/system/sql4school.service
[Unit]
Description=SQL 4 School Service
After=network.target

[Service]
User=node
WorkingDirectory=/srv/sql4school
Type=simple
ExecStart=/usr/bin/npm start
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. Dienst einbinden
systemctl enable nginx
systemctl start nginx

SSL Zertifikat

apt-get install certbot

Als Standalone-Variante (Achtung Nginx darf nicht auf Port 80 lauschen), besser ist allerdings eine (hier nicht beschriebene) Konfiguration in der Nginx weiterlaufen kann.

sudo certbot certonly --standalone --preferred-challenges http -d <SERVER_NAME>

Nginx

apt-get install nginx
nano /etc/nginx/sites-available/sql4school
server {
    listen 80;
    listen [::]:80;
    server_name <SERVER_NAME>;
    return 301 https://<SERVER_NAME>$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name <SERVER_NAME>;
    error_log /var/log/nginx/error.log;
    access_log  /var/log/nginx/access.log;
    ssl_certificate /etc/letsencrypt/live/<SERVER_NAME>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/<SERVER_NAME>/privkey.pem;
    ssl_session_timeout  5m;

    location /sql4school {
				proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_read_timeout 300;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /web/ {
        root /srv/sql4school;
    }
}
ln -s /etc/nginx/sites-available/sql4school /etc/nginx/sites-enabled/10-sql4school
systemctl enable nginx
systemctl start nginx