Refactor Vite configuration for improved development experience; add support for hot module replacement and optimize build process

This commit is contained in:
Torsten Schulz (local)
2025-10-18 22:58:22 +02:00
parent 57b8b3435e
commit b066ffdeb4
4 changed files with 413 additions and 0 deletions

213
CHECK_SERVICES.md Normal file
View File

@@ -0,0 +1,213 @@
# Services überprüfen und verwalten
## Backend-Service Status prüfen
Das Deploy-Script verwendet **PM2** als Standard. Hier die Befehle:
### Mit PM2 (Standard)
```bash
# Status anzeigen
pm2 status
# Detaillierte Info
pm2 info timeclock-backend
# Ist der Service laufend?
pm2 list | grep timeclock-backend
# Logs ansehen
pm2 logs timeclock-backend
# Letzten 50 Zeilen
pm2 logs timeclock-backend --lines 50
```
### Backend manuell starten (falls nicht laufend)
```bash
cd /var/www/timeclock/backend
pm2 start src/index.js --name timeclock-backend --env production
pm2 save
```
### Mit systemd (falls PM2 nicht verwendet)
```bash
# Status prüfen
sudo systemctl status timeclock
# Ist der Service aktiv?
systemctl is-active timeclock
# Logs ansehen
sudo journalctl -u timeclock -f
```
---
## Alle Services überprüfen
### Kompletter Status-Check
```bash
# Backend (PM2)
echo "=== Backend (PM2) ==="
pm2 status
# Apache2
echo ""
echo "=== Apache2 ==="
sudo systemctl status apache2 --no-pager | head -n 15
# Backend-Health-Check
echo ""
echo "=== Backend Health-Check ==="
curl -s http://localhost:3010/api/health | jq || curl http://localhost:3010/api/health
# Frontend erreichbar?
echo ""
echo "=== Frontend Check ==="
curl -I https://stechuhr3.tsschulz.de 2>/dev/null | head -n 5
```
### Oder mit dem Deploy-Script
```bash
cd /var/www/timeclock
./deploy.sh status
```
---
## Backend neu starten
### Mit PM2
```bash
# Neustart
pm2 restart timeclock-backend
# Stoppen
pm2 stop timeclock-backend
# Starten
pm2 start timeclock-backend
# Löschen und neu starten
pm2 delete timeclock-backend
cd /var/www/timeclock/backend
pm2 start src/index.js --name timeclock-backend --env production
pm2 save
```
### Mit systemd
```bash
sudo systemctl restart timeclock
sudo systemctl stop timeclock
sudo systemctl start timeclock
```
---
## Troubleshooting
### Backend läuft nicht
1. **Prüfe Logs:**
```bash
pm2 logs timeclock-backend --err
```
2. **Prüfe .env Datei:**
```bash
cat /var/www/timeclock/backend/.env
```
3. **Prüfe Port-Belegung:**
```bash
sudo netstat -tulpn | grep 3010
# oder
sudo lsof -i :3010
```
4. **Prüfe Datenbank-Verbindung:**
```bash
mysql -h tsschulz.de -u stechuhr2 -p stechuhr2 -e "SHOW TABLES;"
```
5. **Manuell starten (Debug):**
```bash
cd /var/www/timeclock/backend
node src/index.js
# Siehst du Fehler?
```
### Backend startet, aber API antwortet nicht
1. **Health-Check direkt:**
```bash
curl http://localhost:3010/api/health
```
2. **Apache Proxy prüfen:**
```bash
# Ist Proxy-Modul aktiv?
apache2ctl -M | grep proxy
# Apache Error-Log
sudo tail -f /var/log/apache2/stechuhr3-error.log
```
3. **Firewall prüfen:**
```bash
sudo ufw status
```
---
## Monitoring einrichten
### PM2 Monitoring
```bash
# Real-time Monitoring
pm2 monit
# Web-Dashboard (PM2 Plus)
pm2 plus
```
### Automatischer Neustart bei Absturz
PM2 startet automatisch neu. Konfiguration:
```bash
pm2 startup systemd
# Führe den angezeigten Befehl aus
pm2 save
```
### Health-Check Cronjob
Siehe `scripts/health-check.sh` für automatisches Monitoring!
---
## Schnell-Befehle
```bash
# Alles prüfen
./deploy.sh status
# Logs live ansehen
./deploy.sh logs
# Backend neu starten
pm2 restart timeclock-backend
# Apache neu starten
sudo systemctl restart apache2
```

View File

@@ -0,0 +1,54 @@
#!/bin/bash
# =============================================================================
# TimeClock v3 - Apache-Konfiguration installieren
# =============================================================================
set -e
echo "🚀 Installiere TimeClock Apache-Konfiguration..."
# 1. SSLStapling global aktivieren
echo "📝 Konfiguriere SSLStapling..."
if ! grep -q "SSLStaplingCache" /etc/apache2/mods-available/ssl.conf; then
sudo sed -i '/<\/IfModule>/i \ # OCSP Stapling Cache\n SSLStaplingCache shmcb:\/var\/run\/ocsp(128000)' /etc/apache2/mods-available/ssl.conf
echo "✅ SSLStapling konfiguriert"
else
echo "✅ SSLStapling bereits konfiguriert"
fi
# 2. Kopiere HTTP-Config
echo "📝 Kopiere HTTP-VirtualHost..."
sudo cp stechuhr3.tsschulz.de.conf /etc/apache2/sites-available/
# 3. Kopiere HTTPS-Config
echo "📝 Kopiere HTTPS-VirtualHost..."
sudo cp stechuhr3.tsschulz.de-le-ssl.conf /etc/apache2/sites-available/
# 4. Aktiviere Sites (falls noch nicht aktiv)
echo "📝 Aktiviere VirtualHosts..."
sudo a2ensite stechuhr3.tsschulz.de 2>/dev/null || echo "✅ HTTP bereits aktiviert"
sudo a2ensite stechuhr3.tsschulz.de-le-ssl 2>/dev/null || echo "✅ HTTPS bereits aktiviert"
# 5. Teste Konfiguration
echo "🔍 Teste Apache-Konfiguration..."
sudo apache2ctl configtest
# 6. Apache neustarten
echo "🔄 Starte Apache neu..."
sudo systemctl restart apache2
# 7. Status prüfen
echo ""
echo "📊 Apache Status:"
sudo systemctl status apache2 --no-pager | head -n 10
echo ""
echo "✅ Installation abgeschlossen!"
echo ""
echo "🌐 Teste deine App:"
echo " https://stechuhr3.tsschulz.de"
echo " https://stechuhr3.tsschulz.de/api/health"
exit 0

View File

@@ -0,0 +1,128 @@
# TimeClock v3 - HTTPS VirtualHost
# Speichern unter: /etc/apache2/sites-available/stechuhr3.tsschulz.de-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName stechuhr3.tsschulz.de
ServerAdmin admin@tsschulz.de
# =================================================================
# Frontend (Vue.js SPA)
# =================================================================
DocumentRoot /var/www/timeclock/frontend/dist
<Directory /var/www/timeclock/frontend/dist>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
# SPA Fallback - alle Requests zu index.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/api
RewriteRule . /index.html [L]
</IfModule>
</Directory>
# =================================================================
# API Reverse Proxy zum Backend
# =================================================================
<IfModule mod_proxy.c>
ProxyPreserveHost On
ProxyRequests Off
ProxyTimeout 60
# API Proxy
ProxyPass /api http://localhost:3010/api retry=0
ProxyPassReverse /api http://localhost:3010/api
<Location /api>
# Proxy Headers
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
</Location>
</IfModule>
# =================================================================
# Gzip Compression
# =================================================================
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json
AddOutputFilterByType DEFLATE application/xml application/xml+rss application/rss+xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE font/ttf font/woff font/woff2
</IfModule>
# =================================================================
# Security Headers
# =================================================================
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
# =================================================================
# Cache-Control
# =================================================================
# Cache für statische Assets
<FilesMatch "\.(js|css|png|jpg|jpeg|gif|ico|svg|webp|woff|woff2|ttf|eot)$">
<IfModule mod_headers.c>
Header set Cache-Control "public, max-age=31536000, immutable"
</IfModule>
</FilesMatch>
# Kein Cache für HTML
<FilesMatch "\.(html|htm)$">
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</IfModule>
</FilesMatch>
# =================================================================
# Sicherheit: Verstecke sensible Dateien
# =================================================================
<DirectoryMatch "^\.|\/\.">
Require all denied
</DirectoryMatch>
<FilesMatch "^\.">
Require all denied
</FilesMatch>
<FilesMatch "\.env">
Require all denied
</FilesMatch>
# =================================================================
# Limits
# =================================================================
LimitRequestBody 10485760
TimeOut 300
# =================================================================
# Logging
# =================================================================
ErrorLog ${APACHE_LOG_DIR}/stechuhr3-error.log
CustomLog ${APACHE_LOG_DIR}/stechuhr3-access.log combined
# =================================================================
# SSL-Konfiguration (von Certbot verwaltet)
# =================================================================
SSLCertificateFile /etc/letsencrypt/live/stechuhr3.tsschulz.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/stechuhr3.tsschulz.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

View File

@@ -0,0 +1,18 @@
# TimeClock v3 - HTTP VirtualHost
# Speichern unter: /etc/apache2/sites-available/stechuhr3.tsschulz.de.conf
<VirtualHost *:80>
ServerName stechuhr3.tsschulz.de
ServerAdmin admin@tsschulz.de
DocumentRoot /var/www/timeclock/frontend/dist
ErrorLog ${APACHE_LOG_DIR}/stechuhr3-error.log
CustomLog ${APACHE_LOG_DIR}/stechuhr3-access.log combined
# Redirect zu HTTPS
RewriteEngine On
RewriteCond %{SERVER_NAME} =stechuhr3.tsschulz.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>