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

6.3 KiB
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

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

# Auf dem Server:
touch database.sqlite
chmod 664 database.sqlite
chown www-data:www-data database.sqlite  # Falls verfügbar

4. Deployment ausführen

composer install --optimize-autoloader --no-dev
php artisan migrate --force
php artisan storage:link
php artisan config:cache

5. Admin-User erstellen

php artisan tinker
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

# Alle Dateien außer:
# - node_modules/ (falls vorhanden)
# - vendor/ (wird auf Server installiert)
# - .git/ (nicht nötig)

3. .env konfigurieren

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

# 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

php artisan tinker
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:

php -m | grep -E "(sqlite3|pdo_sqlite)"

MySQL PHP-Erweiterungen:

php -m | grep -E "(mysql|pdo_mysql)"

Composer installieren (falls nicht verfügbar):

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)

chmod -R 755 storage/
chmod -R 755 bootstrap/cache/
chmod 664 database.sqlite
chmod 644 .env

Berechtigungen (MySQL)

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

# .htaccess - SQLite-Datei schützen
<Files "database.sqlite">
    Order allow,deny
    Deny from all
</Files>

MySQL-spezifische Sicherheit

# .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

#!/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

#!/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)

0 2 * * * /path/to/backup_sqlite.sh

🐛 Troubleshooting

SQLite-spezifische Probleme

1. "Database is locked"

chmod 664 database.sqlite
chown www-data:www-data database.sqlite

2. "SQLite3 not found"

# PHP-Erweiterung aktivieren
php -m | grep sqlite

3. Berechtigungsfehler

chmod 664 database.sqlite
chmod -R 755 storage/

MySQL-spezifische Probleme

1. "Class not found" Fehler

composer dump-autoload

2. Berechtigungsfehler

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

php artisan storage:link

Logs prüfen

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! 🎉