Dateien nach "/" hochladen
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# Geburtsverein Ernsthausen – Webseite mit Mitgliederbereich
|
||||
|
||||
## Was das hier ist
|
||||
|
||||
Eine PHP-Webseite mit Login-Bereich: Jedes Mitglied bekommt einen eigenen
|
||||
Zugang und kann Termine und Neuigkeiten eintragen, bearbeiten und löschen.
|
||||
Diese erscheinen automatisch auf der Startseite unter „Aktuelles".
|
||||
|
||||
Es wird **keine separate Datenbank** benötigt – die Daten werden in einer
|
||||
SQLite-Datei im Ordner `data/` gespeichert, die automatisch angelegt wird.
|
||||
Das funktioniert bei praktisch jedem PHP-Hosting (Strato, IONOS, All-Inkl,
|
||||
u.a.), auch ohne MySQL-Zugang.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- PHP 8.0 oder neuer mit aktivierter **PDO_SQLITE**-Erweiterung
|
||||
(bei den meisten Hostern standardmäßig aktiv)
|
||||
- Der Ordner `data/` muss vom Webserver **beschreibbar** sein
|
||||
(Rechte 755 oder notfalls 775)
|
||||
|
||||
## Installation
|
||||
|
||||
1. Alle Dateien und Ordner per FTP in das gewünschte Verzeichnis auf dem
|
||||
Webspace hochladen (z. B. in den Hauptordner oder einen Unterordner
|
||||
wie `/verein`).
|
||||
2. Falls vorhanden, `GeburtsvereinSatzung.pdf` und den Ordner `foto/`
|
||||
(historisches Fotoalbum) mit hochladen bzw. aus der alten Seite
|
||||
übernehmen – die Links in der Fußzeile erwarten sie im selben
|
||||
Verzeichnis.
|
||||
3. Im Browser die Seite aufrufen. Da noch kein Mitgliedskonto existiert,
|
||||
wirst du automatisch zur **Ersteinrichtung** (`setup.php`) weitergeleitet.
|
||||
4. Dort das erste Konto anlegen (z. B. für den Präsidenten). Diese Seite
|
||||
sperrt sich danach automatisch – sie ist nur sichtbar, solange noch
|
||||
kein Konto existiert.
|
||||
5. Ab jetzt können im Mitgliederbereich (`admin.php`, Link „Mitglieder-
|
||||
Login" oben rechts) weitere Vereinsmitglieder eigene Zugänge erhalten.
|
||||
|
||||
## Laufender Betrieb
|
||||
|
||||
- **Anmelden:** über den Button „Mitglieder-Login" oben rechts.
|
||||
- **Termin/Neuigkeit eintragen:** im Mitgliederbereich links das
|
||||
Formular ausfüllen und veröffentlichen.
|
||||
- **Eintrag bearbeiten/löschen:** in der Liste rechts über die
|
||||
entsprechenden Buttons.
|
||||
- **Neues Mitglied freischalten:** im Mitgliederbereich unter
|
||||
„Neues Mitglied freischalten".
|
||||
|
||||
## Betrieb per Docker (nginx + PHP-FPM)
|
||||
|
||||
nginx allein kann kein PHP ausführen – dafür ist im Ordner `docker/` ein
|
||||
fertiges Setup mit einem separaten PHP-FPM-Container dabei. Die
|
||||
`docker-compose.yml` liegt im Projekt-Hauptverzeichnis, damit alle Pfade
|
||||
(Build-Kontext, Bind-Mounts) relativ zum Projekt-Root funktionieren –
|
||||
das ist auch die Voraussetzung für den Portainer-Weg weiter unten.
|
||||
|
||||
### Lokal starten (ohne Portainer)
|
||||
|
||||
1. Docker und Docker Compose müssen installiert sein.
|
||||
2. Im Projekt-Hauptverzeichnis ausführen:
|
||||
```
|
||||
docker compose up -d --build
|
||||
```
|
||||
3. Seite ist danach unter `http://localhost:8080` erreichbar.
|
||||
4. Die SQLite-Datenbank liegt in einem Docker-Volume (`geburtsverein-data`)
|
||||
und bleibt beim Neustart der Container erhalten. Ein Backup lässt sich
|
||||
z. B. so ziehen:
|
||||
```
|
||||
docker compose cp php:/var/www/html/data/geburtsverein.sqlite ./backup.sqlite
|
||||
```
|
||||
|
||||
Hinweis: Die `.htaccess`-Datei in `data/` wirkt nur bei Apache. Unter
|
||||
nginx übernimmt das die Regel `location ^~ /data/ { deny all; }` in
|
||||
`docker/nginx/default.conf` – die ist hier bereits enthalten.
|
||||
|
||||
### Mit Portainer deployen
|
||||
|
||||
Portainer kann Compose-Stacks am zuverlässigsten aus einem
|
||||
**Git-Repository** bauen, weil dann auch das `Dockerfile` und die
|
||||
nginx-Konfiguration mit heruntergeladen werden (nicht nur die
|
||||
`docker-compose.yml`).
|
||||
|
||||
1. **Projekt in ein Git-Repository legen** (z. B. GitHub, GitLab oder ein
|
||||
selbst gehostetes Gitea) und den gesamten Ordnerinhalt dort hochladen
|
||||
– inklusive `docker/`-Ordner und `docker-compose.yml`.
|
||||
2. In Portainer: **Stacks → Add stack**.
|
||||
3. Einen Namen vergeben (z. B. `geburtsverein`).
|
||||
4. Als **Build method** „Repository" auswählen:
|
||||
- Repository URL: die Git-URL des Projekts
|
||||
- Reference: z. B. `refs/heads/main`
|
||||
- Compose path: `docker-compose.yml`
|
||||
- Bei privatem Repository: Zugangsdaten bzw. Personal Access Token
|
||||
hinterlegen
|
||||
5. **Deploy the stack** klicken. Portainer klont das Repository, baut das
|
||||
PHP-Image anhand von `docker/php.Dockerfile` und startet beide
|
||||
Container inklusive des Datenvolumes automatisch.
|
||||
6. Die Seite ist danach über `http://<server-ip>:8080` erreichbar. Läuft
|
||||
auf dem Server bereits ein Reverse Proxy (z. B. Nginx Proxy Manager
|
||||
oder Traefik, oft ebenfalls über Portainer verwaltet), lässt sich damit
|
||||
zusätzlich eine eigene Domain mit HTTPS davorschalten.
|
||||
7. **Updates ausrollen:** Änderungen ins Git-Repository pushen, dann im
|
||||
Stack in Portainer auf „Pull and redeploy" (bzw. „Update the stack" mit
|
||||
aktivierter „Re-pull image and redeploy"-Option) klicken.
|
||||
|
||||
**Alternative ohne Git:** Falls kein Git-Repository genutzt werden soll,
|
||||
lässt sich das PHP-Image auch vorab lokal bauen und in eine Registry
|
||||
(z. B. Docker Hub) pushen. Die `docker-compose.yml` würde dann statt
|
||||
`build:` einfach `image: dein-benutzername/geburtsverein-php:latest`
|
||||
verwenden. Die Projektdateien (für die Bind-Mounts) müssten in diesem
|
||||
Fall trotzdem manuell auf den Server kopiert werden, z. B. per SCP nach
|
||||
`/opt/geburtsverein`.
|
||||
|
||||
## Sicherheitshinweise
|
||||
|
||||
- Passwörter werden nur als sicherer Hash gespeichert (`password_hash`),
|
||||
nie im Klartext.
|
||||
- Der Ordner `data/` ist per `.htaccess` vor direktem Zugriff über den
|
||||
Browser geschützt. Falls der Server **nginx** statt Apache nutzt, greift
|
||||
diese `.htaccess`-Regel nicht – dann bitte den Ordner serverseitig
|
||||
zusätzlich sperren oder außerhalb des Web-Verzeichnisses ablegen
|
||||
(im Zweifel beim Hoster nachfragen).
|
||||
- Es lohnt sich, regelmäßig eine Kopie der Datei `data/geburtsverein.sqlite`
|
||||
zu sichern (z. B. per FTP herunterladen) – das ist die komplette
|
||||
Datenbank mit allen Terminen, Neuigkeiten und Mitgliedskonten.
|
||||
|
||||
## Dateiübersicht
|
||||
|
||||
```
|
||||
index.php Öffentliche Startseite (liest Aktuelles live aus der Datenbank)
|
||||
login.php Login-Formular
|
||||
logout.php Abmelden
|
||||
setup.php Einmalige Ersteinrichtung des ersten Kontos
|
||||
admin.php Mitgliederbereich: Termine/Neuigkeiten & Mitglieder verwalten
|
||||
style.css Gemeinsames Design
|
||||
includes/db.php Datenbankverbindung, legt Tabellen automatisch an
|
||||
includes/auth.php Login-/Session-Verwaltung
|
||||
includes/functions.php Hilfsfunktionen
|
||||
includes/nav.php, footer.php Wiederverwendete Kopf-/Fußzeile
|
||||
data/ Ordner für die SQLite-Datenbank (wird automatisch befüllt)
|
||||
```
|
||||
Reference in New Issue
Block a user