Fix: Remove dev files, add auto-migration entrypoint, update Dockerfile/README
All checks were successful
Docker Build & Push / build-and-push (push) Successful in 1m44s

This commit is contained in:
Gemini Bot
2025-12-08 02:02:01 +00:00
parent 6ae4a1cb9b
commit 8c9a40780a
7 changed files with 162 additions and 46336 deletions

2
.gitignore vendored
View File

@@ -4,5 +4,7 @@ vendor/
*.log
.DS_Store
Thumbs.db
docker-compose.yml
db-init/
src/uploads/*
!src/uploads/.gitkeep

View File

@@ -1,12 +1,14 @@
FROM php:8.2-apache
# Install system dependencies and PHP extensions
# mariadb-client added for auto-migration script
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
zip \
unzip \
mariadb-client \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd mysqli pdo pdo_mysql \
&& a2enmod rewrite
@@ -24,5 +26,12 @@ COPY src/ /var/www/html/
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html
# Copy and setup entrypoint
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# Expose port 80
EXPOSE 80
# Set Entrypoint
ENTRYPOINT ["docker-entrypoint.sh"]

View File

@@ -15,19 +15,15 @@ Cazubu ist eine moderne Webanwendung zur Verwaltung und Überwachung deiner Cann
## Installation & Betrieb 🛠️
Dieses Projekt ist für den Betrieb als Docker-Container ausgelegt.
Dieses Projekt ist für den Betrieb als Docker-Container ausgelegt. Es bietet eine **automatische Datenbank-Initialisierung** beim ersten Start.
### 1. Voraussetzungen
* Docker Engine
* Eine laufende MySQL/MariaDB Datenbank (extern)
* Eine laufende MySQL/MariaDB Datenbank (extern oder als separater Container)
### 2. Datenbank vorbereiten
Importiere die Struktur in deine Datenbank:
```bash
mysql -u dein_user -p deine_db < src/database/install.sql
```
### 2. Container starten (Docker CLI)
### 3. Container starten (Docker CLI)
Der Container prüft beim Start automatisch, ob die Datenbanktabellen existieren. Wenn nicht, wird die Struktur angelegt und ein Standard-Benutzer erstellt.
Verwende diesen Befehl, um den Container zu starten. Passe die Werte für `DB_SERVER`, `DB_USERNAME`, `DB_PASSWORD` und `DB_NAME` an deine Umgebung an.
@@ -59,18 +55,16 @@ docker run -d \
## Bedienung 📖
* **Login:** `testnutzer` / `Start123!` (Bitte sofort ändern!)
* **Erste Schritte:**
1. Inventar -> Zonen anlegen.
2. Samen -> Samen erfassen.
3. Startseite -> Neue Pflanze.
* **Login:** `testnutzer` / `Start123!` (Wird automatisch bei Erstinstallation erstellt)
* **Passwort ändern:** Bitte ändere das Passwort sofort nach dem ersten Login unter "Profil".
---
### Sensoren verbinden 🌡️
## Sensoren integrieren 🌡️
Jeder Benutzer hat einen eigenen API-Key (siehe "Profil").
Sende Sensordaten per HTTP GET Request an:
Sende Daten per HTTP GET (z.B. vom ESP32):
`http://DEINE-IP/api.php?apikey=DEIN_KEY&pflanze=ID&sensor=temp&wert=24.5`
```
http://DEINE-IP/api.php?apikey=DEIN_KEY&pflanze=ID&sensor=temp&wert=24.5
```
*(API-Key findest du im Profil, Pflanzen-ID in der Detailansicht)*

File diff suppressed because it is too large Load Diff

View File

@@ -1,55 +0,0 @@
version: '3.8'
services:
app:
build: .
container_name: cazubu-app
ports:
- "8090:80"
volumes:
- ./src:/var/www/html
environment:
- DB_SERVER=db
- DB_USERNAME=cazubu
- DB_PASSWORD=dev_secret
- DB_NAME=cazubu
depends_on:
- db
networks:
- cazubu-net
db:
image: mariadb:10.11
container_name: cazubu-db
environment:
- MYSQL_ROOT_PASSWORD=root_secret
- MYSQL_DATABASE=cazubu
- MYSQL_USER=cazubu
- MYSQL_PASSWORD=dev_secret
volumes:
- db_data:/var/lib/mysql
- ./db-init:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
networks:
- cazubu-net
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: cazubu-pma
environment:
- PMA_HOST=db
- PMA_USER=cazubu
- PMA_PASSWORD=dev_secret
ports:
- "8081:80"
depends_on:
- db
networks:
- cazubu-net
volumes:
db_data:
networks:
cazubu-net:

45
docker-entrypoint.sh Normal file
View File

@@ -0,0 +1,45 @@
#!/bin/bash
set -e
# Funktion zum Warten auf MySQL
wait_for_db() {
echo "Warte auf Datenbank-Verbindung zu $DB_SERVER..."
# Max 30 Sekunden warten
for i in {1..30}; do
if mysql -h"$DB_SERVER" -u"$DB_USERNAME" -p"$DB_PASSWORD" -e "SELECT 1" >/dev/null 2>&1; then
echo "Datenbank ist erreichbar!"
return 0
fi
sleep 1
done
echo "Fehler: Datenbank nicht erreichbar nach 30 Sekunden."
return 1
}
# Wenn DB_SERVER gesetzt ist, versuchen wir die Migration
if [ ! -z "$DB_SERVER" ]; then
if wait_for_db; then
echo "Prüfe Datenbank-Schema..."
# Prüfen ob 'users' Tabelle existiert
if ! mysql -h"$DB_SERVER" -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_NAME" -e "SELECT 1 FROM users LIMIT 1" >/dev/null 2>&1; then
echo "Initialisiere Datenbank-Struktur..."
mysql -h"$DB_SERVER" -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_NAME" < /var/www/html/database/install.sql
# Standard-User anlegen (testnutzer / Start123!)
echo "Lege Standard-Benutzer an..."
# Hash für 'Start123!'
HASH='$2y$10$Ov7qzHnk4EKYdDNLNP073ecsrRJM5VtK4iWcMKBFBosEc6kaFbC.y'
mysql -h"$DB_SERVER" -u"$DB_USERNAME" -p"$DB_PASSWORD" "$DB_NAME" -e "INSERT INTO users (username, password_hash) VALUES ('testnutzer', '$HASH')"
echo "Datenbank erfolgreich initialisiert."
else
echo "Datenbank ist bereits initialisiert."
fi
fi
else
echo "Warnung: DB_SERVER nicht gesetzt. Überspringe Datenbank-Check."
fi
# Apache starten
exec apache2-foreground

File diff suppressed because it is too large Load Diff