neonail-database/DEPLOYMENT.md
2025-08-10 18:09:07 +02:00

324 lines
6.3 KiB
Markdown
Executable File

# 🚀 NeoNail DB - Deployment Guide
## 📋 Schnellstart (5 Minuten)
### Option A: SQLite (Einfacher - Empfohlen)
- ✅ Keine MySQL-Installation nötig
- ✅ Einfache Datei-basierte Datenbank
- ✅ Perfekt für kleinere bis mittlere Anwendungen
- ✅ Einfaches Backup (nur eine Datei)
### Option B: MySQL/MariaDB
- ✅ Für größere Anwendungen
- ✅ Mehrere gleichzeitige Benutzer
- ✅ Erweiterte Datenbank-Features
---
## 🗄️ SQLite Deployment (Empfohlen)
### 1. Webspace vorbereiten
- PHP 8.1+ installiert
- SQLite3 PHP-Erweiterung aktiviert
- Composer verfügbar (falls möglich)
### 2. .env für SQLite konfigurieren
```env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ihre-domain.de
# SQLite Konfiguration
DB_CONNECTION=sqlite
DB_DATABASE=/path/to/database.sqlite
# DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD nicht nötig!
```
### 3. SQLite-Datenbank erstellen
```bash
# Auf dem Server:
touch database.sqlite
chmod 664 database.sqlite
chown www-data:www-data database.sqlite # Falls verfügbar
```
### 4. Deployment ausführen
```bash
composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan storage:link
php artisan config:cache
```
### 5. Admin-User erstellen
```bash
php artisan tinker
```
```php
use App\Models\User;
User::create([
'name' => 'Admin',
'email' => 'admin@neonail.com',
'password' => bcrypt('ihr_sicheres_passwort')
]);
```
## 🗄️ MySQL/MariaDB Deployment
### 1. Webspace vorbereiten
- PHP 8.1+ installiert
- MySQL/MariaDB Datenbank erstellt
- Composer verfügbar (falls möglich)
### 2. Dateien hochladen
```bash
# Alle Dateien außer:
# - node_modules/ (falls vorhanden)
# - vendor/ (wird auf Server installiert)
# - .git/ (nicht nötig)
```
### 3. .env konfigurieren
```env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ihre-domain.de
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=ihre_datenbank
DB_USERNAME=ihr_username
DB_PASSWORD=ihr_passwort
```
### 4. Deployment ausführen
```bash
# Falls SSH verfügbar:
chmod +x deploy.sh
./deploy.sh
# Oder manuell:
composer install --optimize-autoloader --no-dev
php artisan storage:link
php artisan migrate --force
php artisan config:cache
```
### 5. Admin-User erstellen
```bash
php artisan tinker
```
```php
use App\Models\User;
User::create([
'name' => 'Admin',
'email' => 'admin@neonail.com',
'password' => bcrypt('ihr_sicheres_passwort')
]);
```
## 🔧 Detaillierte Anleitung
### SQLite vs MySQL Vergleich
| Feature | SQLite | MySQL |
|---------|--------|-------|
| Installation | ✅ Einfach | ❌ Komplexer |
| Konfiguration | ✅ Minimal | ❌ Mehr Aufwand |
| Backup | ✅ Eine Datei | ❌ Dump nötig |
| Performance | ✅ Gut (klein/mittel) | ✅ Sehr gut (groß) |
| Gleichzeitige User | ✅ Bis ~100 | ✅ Unbegrenzt |
| Wartung | ✅ Minimal | ❌ Regelmäßig |
### Voraussetzungen prüfen
**SQLite PHP-Erweiterungen:**
```bash
php -m | grep -E "(sqlite3|pdo_sqlite)"
```
**MySQL PHP-Erweiterungen:**
```bash
php -m | grep -E "(mysql|pdo_mysql)"
```
**Composer installieren (falls nicht verfügbar):**
```bash
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
```
### Datei-Struktur (SQLite)
```
public_html/
├── public/ # Web-Root
├── storage/ # Schreibrechte erforderlich
├── bootstrap/cache/ # Schreibrechte erforderlich
├── database.sqlite # SQLite-Datenbank
└── .env # Konfiguration
```
### Datei-Struktur (MySQL)
```
public_html/
├── public/ # Web-Root
├── storage/ # Schreibrechte erforderlich
├── bootstrap/cache/ # Schreibrechte erforderlich
└── .env # Konfiguration
```
### Berechtigungen (SQLite)
```bash
chmod -R 755 storage/
chmod -R 755 bootstrap/cache/
chmod 664 database.sqlite
chmod 644 .env
```
### Berechtigungen (MySQL)
```bash
chmod -R 755 storage/
chmod -R 755 bootstrap/cache/
chmod 644 .env
```
## 🛡️ Sicherheit
### Wichtige Einstellungen
- `APP_DEBUG=false` in Produktion
- Starke Passwörter verwenden
- HTTPS aktivieren
- `.env` nicht öffentlich zugänglich
### SQLite-spezifische Sicherheit
```apache
# .htaccess - SQLite-Datei schützen
<Files "database.sqlite">
Order allow,deny
Deny from all
</Files>
```
### MySQL-spezifische Sicherheit
```apache
# .htaccess bereits konfiguriert
# Zusätzliche Sicherheit:
<Files ".env">
Order allow,deny
Deny from all
</Files>
```
## 📱 Mobile Optimierung
### PWA-Features (optional)
- Manifest.json hinzufügen
- Service Worker für Offline-Funktionalität
- App-Icons erstellen
### Performance
- Bilder komprimieren
- CDN für statische Assets
- Browser-Caching aktivieren
## 🔄 Backup-Strategie
### SQLite Backup
```bash
#!/bin/bash
# backup_sqlite.sh
DATE=$(date +%Y%m%d_%H%M%S)
cp database.sqlite backup_sqlite_$DATE.sqlite
tar -czf storage_backup_$DATE.tar.gz storage/
```
### MySQL Backup
```bash
#!/bin/bash
# backup_mysql.sh
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u username -p database > backup_mysql_$DATE.sql
tar -czf storage_backup_$DATE.tar.gz storage/
```
### Cron-Job (täglich)
```bash
0 2 * * * /path/to/backup_sqlite.sh
```
## 🐛 Troubleshooting
### SQLite-spezifische Probleme
**1. "Database is locked"**
```bash
chmod 664 database.sqlite
chown www-data:www-data database.sqlite
```
**2. "SQLite3 not found"**
```bash
# PHP-Erweiterung aktivieren
php -m | grep sqlite
```
**3. Berechtigungsfehler**
```bash
chmod 664 database.sqlite
chmod -R 755 storage/
```
### MySQL-spezifische Probleme
**1. "Class not found" Fehler**
```bash
composer dump-autoload
```
**2. Berechtigungsfehler**
```bash
chmod -R 755 storage/
chmod -R 755 bootstrap/cache/
```
**3. Datenbank-Verbindung**
- Host, Port, Credentials prüfen
- MySQL-Service läuft
**4. Bilder werden nicht angezeigt**
```bash
php artisan storage:link
```
### Logs prüfen
```bash
tail -f storage/logs/laravel.log
```
## 📞 Support
Bei Problemen:
1. Logs prüfen (`storage/logs/laravel.log`)
2. Debug-Modus temporär aktivieren
3. Browser-Entwicklertools prüfen
4. Server-Error-Logs prüfen
## 🎯 Nach dem Deployment
### Testen
- [ ] Login funktioniert
- [ ] Neuen Lack erstellen
- [ ] Bild-Upload funktioniert
- [ ] Mobile-Ansicht prüfen
- [ ] Admin-Funktionen testen
### Monitoring
- Server-Ressourcen überwachen
- Datenbank-Performance prüfen
- User-Feedback sammeln
---
**Viel Erfolg beim Deployment! 🎉**