Projekt Setup
This commit is contained in:
commit
cd08781954
41
.gitignore
vendored
Normal file
41
.gitignore
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
|
||||||
|
# Env / secrets
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
container-logs/
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
._*
|
||||||
|
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
db/
|
||||||
|
pgdata/
|
||||||
|
assets/
|
||||||
|
data/
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
# OpenProject / Gitea persistent data
|
||||||
|
infra/openproject/pgdata/
|
||||||
|
infra/openproject/assets/
|
||||||
|
infra/gitea/data/
|
||||||
|
|
||||||
|
# Flask runtime
|
||||||
|
app/flask-postgres/files/uploads/
|
||||||
|
app/flask-postgres/files/runtime/
|
||||||
|
|
||||||
|
# Synology
|
||||||
|
@eaDir/
|
||||||
23
Dockerfile
Normal file
23
Dockerfile
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 👉 SYSTEM LIBRARIES für WeasyPrint
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libpango-1.0-0 \
|
||||||
|
libpangoft2-1.0-0 \
|
||||||
|
libcairo2 \
|
||||||
|
libgdk-pixbuf-2.0-0 \
|
||||||
|
libffi-dev \
|
||||||
|
shared-mime-info \
|
||||||
|
fonts-dejavu-core \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--access-logfile", "/logs/gunicorn-access.log", "--error-logfile", "/logs/gunicorn-error.log", "app:app"]
|
||||||
32
README.md
Normal file
32
README.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Projekt HebammeKrystyna
|
||||||
|
|
||||||
|
Startgerüst für eine Flask-Anwendung mit:
|
||||||
|
|
||||||
|
Statische Website für Krystyna
|
||||||
|
|
||||||
|
## Start lokal
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
export FLASK_APP=app.py
|
||||||
|
flask run --host=0.0.0.0 --port=5000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Wichtiger Hinweis zum Admin-User
|
||||||
|
|
||||||
|
In `schema.sql` wird der initiale Admin-User mit Passwort `topsecret` als Klartext in `passwort_hash` angelegt, genau wie von dir gewünscht.
|
||||||
|
In `app.py` ist dafür bereits eine kleine Sonderlogik enthalten: Beim **ersten Login** mit `topsecret` wird dieser Wert automatisch in einen echten Passwort-Hash umgewandelt. Danach läuft der Login normal über Hash-Prüfung.
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
Eine Beispiel-Datei liegt in `docker-compose.example.yaml`.
|
||||||
|
|
||||||
|
## Nächste sinnvolle Ausbaustufen
|
||||||
|
|
||||||
|
- echte CRUD-Formulare im Admin-Bereich
|
||||||
|
- E-Mail-Template für Aktivierung und Ergebnisversand
|
||||||
|
- Validierung / CSRF-Schutz
|
||||||
|
- Pagination / Verlauf früherer Assessments
|
||||||
|
- bessere Rollenprüfung im Menü
|
||||||
72
deploy_flask.sh
Normal file
72
deploy_flask.sh
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SRC_ROOT="/Volumes/MacBook SD/Projekte/hebammekrystyna"
|
||||||
|
DST_ROOT="/Volumes/docker/flask-postgres/app-hebammekrystyna"
|
||||||
|
|
||||||
|
NAS_USER="BKolb"
|
||||||
|
NAS_HOST="192.168.0.10"
|
||||||
|
CONTAINER_NAME="flask_hebammekrystyna"
|
||||||
|
|
||||||
|
echo "Starte Deployment..."
|
||||||
|
|
||||||
|
[ -d "$SRC_ROOT" ] || { echo "Quelle fehlt: $SRC_ROOT"; exit 1; }
|
||||||
|
[ -d "$DST_ROOT" ] || { echo "Ziel fehlt: $DST_ROOT"; exit 1; }
|
||||||
|
|
||||||
|
echo "Synchronisiere Projektdateien ..."
|
||||||
|
rsync -av --delete \
|
||||||
|
--exclude '.DS_Store' \
|
||||||
|
--exclude '._*' \
|
||||||
|
--exclude '__pycache__/' \
|
||||||
|
--exclude '*.pyc' \
|
||||||
|
--exclude '*.pyo' \
|
||||||
|
--exclude '*.log' \
|
||||||
|
--exclude '.git/' \
|
||||||
|
--exclude '.venv/' \
|
||||||
|
--exclude 'venv/' \
|
||||||
|
--exclude 'node_modules/' \
|
||||||
|
--exclude 'files/' \
|
||||||
|
--exclude 'images/' \
|
||||||
|
--exclude 'styles/' \
|
||||||
|
"$SRC_ROOT/" "$DST_ROOT/"
|
||||||
|
|
||||||
|
echo "Synchronisiere images/ ..."
|
||||||
|
if [ -d "$SRC_ROOT/images" ]; then
|
||||||
|
mkdir -p "$DST_ROOT/images"
|
||||||
|
rsync -av --delete \
|
||||||
|
--exclude '.DS_Store' \
|
||||||
|
--exclude '._*' \
|
||||||
|
--exclude 'videos/' \
|
||||||
|
"$SRC_ROOT/images/" "$DST_ROOT/images/"
|
||||||
|
else
|
||||||
|
echo "Hinweis: $SRC_ROOT/images nicht gefunden, übersprungen."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Synchronisiere styles/ ..."
|
||||||
|
if [ -d "$SRC_ROOT/styles" ]; then
|
||||||
|
mkdir -p "$DST_ROOT/styles"
|
||||||
|
rsync -av --delete \
|
||||||
|
--exclude '.DS_Store' \
|
||||||
|
--exclude '._*' \
|
||||||
|
"$SRC_ROOT/styles/" "$DST_ROOT/styles/"
|
||||||
|
else
|
||||||
|
echo "Hinweis: $SRC_ROOT/styles nicht gefunden, übersprungen."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Synchronisiere templates/ ..."
|
||||||
|
if [ -d "$SRC_ROOT/templates" ]; then
|
||||||
|
mkdir -p "$DST_ROOT/templates"
|
||||||
|
rsync -av --delete \
|
||||||
|
--exclude '.DS_Store' \
|
||||||
|
--exclude '._*' \
|
||||||
|
"$SRC_ROOT/templates/" "$DST_ROOT/templates/"
|
||||||
|
else
|
||||||
|
echo "Hinweis: $SRC_ROOT/templates nicht gefunden, übersprungen."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "files/ wird bewusst nicht angefasst."
|
||||||
|
|
||||||
|
echo "Container manuell neu starten oder neu bauen falls requirements/Dockerfile geändert wurden."
|
||||||
|
# ssh "${NAS_USER}@${NAS_HOST}" "/usr/bin/docker restart ${CONTAINER_NAME}"
|
||||||
|
|
||||||
|
echo "Deployment abgeschlossen."
|
||||||
16
requirements.txt
Normal file
16
requirements.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Flask==3.1.0
|
||||||
|
psycopg2-binary==2.9.10
|
||||||
|
Werkzeug==3.1.3
|
||||||
|
itsdangerous==2.2.0
|
||||||
|
matplotlib==3.10.1
|
||||||
|
gunicorn==23.0.0
|
||||||
|
|
||||||
|
weasyprint==60.2
|
||||||
|
pydyf==0.8.0
|
||||||
|
cairocffi==1.6.1
|
||||||
|
|
||||||
|
Pillow==10.4.0
|
||||||
|
qrcode==7.4.2
|
||||||
|
|
||||||
|
pytest==8.3.2
|
||||||
|
python-json-logger==2.0.7
|
||||||
Loading…
Reference in New Issue
Block a user