Bare-Metal Installation
Diese Anleitung beschreibt, wie das Projekt ohne Docker, also direkt auf einem Linux‑Server installiert und betrieben werden kann.
1. Voraussetzungen
Softwareanforderungen
Auf dem Server müssen folgende Pakete installiert sein:
- Node.js 20 (für das Frontend)
- uv (Python Package Manager von Astral)
- Postgresql 17
1. Abhängigkeiten installieren
apt install -y \
build-essential \
git \
curl \
python3-dev
2. Notwendige Tools installieren
Es werden folgende Tools benötigt. Diese sind aus den offiziellen Quellen zu installieren :
- uv (Python) → https://docs.astral.sh/uv/
- Node.js 22 → https://nodejs.org/en/download
- PostgreSQL 17 → https://www.postgresql.org/download/
2. Repository klonen
git clone https://github.com/ritmo-hsrm/mobilitaetscheck-fuer-magistratsvorlagen
3. Umgebungsvariablen konfigurieren
Erstelle eine .env Datei:
cp example.env .env
4. Frontend installieren und builden
Das Frontend basiert auf Vite und muss lokal gebaut werden.
cd frontend
npm ci
npm run build
Der Produktionsbuild befindet sich anschließend im Ordner:
frontend/dist/
Dieser Build wird später vom Backend ausgeliefert.
5. Backend installieren
Das Backend basiert auf FastAPI und verwendet uv zur Paketverwaltung.
cd /pfad/zum/root/ordner
uv sync --no-dev
Passe alle Variablen wie Domain, Datenbank‑Zugangsdaten und SMTP an deine Umgebung an.
6. Datenbank einrichten
Richte ein Postgresql-Datenbank gemäß der .env Datei ein. Nachfolgend sind die grundlegenden Befehle zur Einrichtung der Datenbank beschrieben.
sudo -u postgres createuser -P mobilitaetscheck
sudo -u postgres createdb -O mobilitaetscheck mobilitaetscheck
Prüfe, ob die PostgreSQL Enconding UTF-8 sind.
sudo -u postgres psql -c "SHOW client_encoding;"
sudo -u postgres psql -c "SHOW server_encoding;"
Falls einer der Werte SQL_ASCII ist, setze die Werte explizit auf UTF-8.
sudo -u postgres psql -c "ALTER ROLE mobilitaetscheck SET client_encoding = 'UTF8';"
sudo -u postgres psql -c "ALTER DATABASE mobilitaetscheck SET client_encoding = 'UTF8';"
7. Backend starten
Das Backend kann über uvicorn gestartet werden.
source .venv/bin/activate
cd pfad/zum/backend
fastapi run app/main.py
Der Server ist erreichbar unter:
http://localhost:8000
API Docs:
- Swagger:
http://localhost:8000/api/v1/docs - ReDoc:
http://localhost:8000/api/v1/redoc
9. Optional: systemd-Service einrichten (für Produktion)
Datei erstellen:
sudo nano /etc/systemd/system/mobilitaetscheck.service
Inhalt:
[Unit]
Description=Mobilitaetscheck
After=network.target
[Service]
WorkingDirectory=/pfad/zum/backend
EnvironmentFile=/pfad/zur/root/.env
ExecStart=/pfad/zum/backend/.venv/bin/fastapi run app/main.py
Restart=always
[Install]
WantedBy=multi-user.target
Service aktivieren:
systemctl daemon-reload
systemctl enable mobilitaetscheck
systemctl start mobilitaetscheck
Bare-Metal Update
1. Service stoppen
systemctl stop mobilitaetscheck
2. Repo aktualisieren
cd /pfad/zum/repo
git pull
3. Frontend aktualisieren
cd frontend
npm ci
npm run build
4. Backend aktualisieren
source ./.venv/bin/activate
cd /pfad/zum/backend
uv sync --no-dev
5. Datenbank migrieren
cd /pfad/zum/backend
source ./.venv/bin/activate
alembic upgrade head
6. Service starten
systemctl start mobilitaetscheck