Add production build optimizations to Vite configuration; set target, output directory, and minification options for improved performance
This commit is contained in:
448
APACHE2_DEPLOYMENT.md
Normal file
448
APACHE2_DEPLOYMENT.md
Normal file
@@ -0,0 +1,448 @@
|
||||
# TimeClock v3 - Apache2 Deployment Guide
|
||||
|
||||
Spezielle Anleitung für das Deployment mit **Apache2** statt Nginx auf Ubuntu 22.04.
|
||||
|
||||
## Schnellstart
|
||||
|
||||
### Automatisches Deployment mit Apache2
|
||||
|
||||
Das `deploy.sh` Script ist bereits für Apache2 konfiguriert:
|
||||
|
||||
```bash
|
||||
cd /var/www/timeclock
|
||||
./deploy.sh install
|
||||
```
|
||||
|
||||
Das Script erkennt automatisch, dass Apache2 verwendet wird (Variable `WEBSERVER="apache2"` in Zeile 45).
|
||||
|
||||
## Manuelle Apache2-Installation
|
||||
|
||||
### 1. Apache2 und Module installieren
|
||||
|
||||
```bash
|
||||
# Apache2 installieren
|
||||
sudo apt update
|
||||
sudo apt install -y apache2
|
||||
|
||||
# Benötigte Module aktivieren
|
||||
sudo a2enmod proxy proxy_http ssl rewrite headers deflate expires
|
||||
|
||||
# Apache2 neustarten
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### 2. VirtualHost konfigurieren
|
||||
|
||||
```bash
|
||||
# Konfiguration kopieren
|
||||
sudo cp /var/www/timeclock/apache2.conf /etc/apache2/sites-available/stechuhr3.tsschulz.de.conf
|
||||
|
||||
# Site aktivieren
|
||||
sudo a2ensite stechuhr3.tsschulz.de
|
||||
|
||||
# Optional: Default-Site deaktivieren
|
||||
sudo a2dissite 000-default
|
||||
|
||||
# Konfiguration testen
|
||||
sudo apache2ctl configtest
|
||||
|
||||
# Apache2 neuladen
|
||||
sudo systemctl reload apache2
|
||||
```
|
||||
|
||||
### 3. SSL mit Certbot
|
||||
|
||||
```bash
|
||||
# Certbot für Apache installieren
|
||||
sudo apt install -y certbot python3-certbot-apache
|
||||
|
||||
# Zertifikat erstellen
|
||||
sudo certbot --apache -d stechuhr3.tsschulz.de
|
||||
```
|
||||
|
||||
## Apache2-Konfiguration erklärt
|
||||
|
||||
Die `apache2.conf` enthält:
|
||||
|
||||
### Proxy-Konfiguration für Backend-API
|
||||
|
||||
```apache
|
||||
ProxyPass /api http://localhost:3010/api retry=0
|
||||
ProxyPassReverse /api http://localhost:3010/api
|
||||
```
|
||||
|
||||
Dies leitet alle `/api/*` Anfragen an das Node.js Backend auf Port 3010 weiter.
|
||||
|
||||
### SPA-Routing (Vue.js)
|
||||
|
||||
```apache
|
||||
<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>
|
||||
```
|
||||
|
||||
Dies sorgt dafür, dass alle Nicht-API-Anfragen an `index.html` geleitet werden (für Vue Router).
|
||||
|
||||
### Compression (gzip)
|
||||
|
||||
```apache
|
||||
<IfModule mod_deflate.c>
|
||||
AddOutputFilterByType DEFLATE text/html text/css application/javascript
|
||||
# ... weitere MIME-Types
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
### Caching
|
||||
|
||||
```apache
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive On
|
||||
ExpiresByType text/css "access plus 1 year"
|
||||
ExpiresByType application/javascript "access plus 1 year"
|
||||
# ... weitere Cache-Regeln
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
### Security Headers
|
||||
|
||||
```apache
|
||||
Header always set X-Frame-Options "SAMEORIGIN"
|
||||
Header always set X-Content-Type-Options "nosniff"
|
||||
Header always set Strict-Transport-Security "max-age=31536000"
|
||||
# ... weitere Security-Header
|
||||
```
|
||||
|
||||
## Wichtige Apache2-Befehle
|
||||
|
||||
### Sites verwalten
|
||||
|
||||
```bash
|
||||
# Site aktivieren
|
||||
sudo a2ensite stechuhr3.tsschulz.de
|
||||
|
||||
# Site deaktivieren
|
||||
sudo a2dissite stechuhr3.tsschulz.de
|
||||
|
||||
# Alle aktivierten Sites anzeigen
|
||||
ls -la /etc/apache2/sites-enabled/
|
||||
```
|
||||
|
||||
### Module verwalten
|
||||
|
||||
```bash
|
||||
# Modul aktivieren
|
||||
sudo a2enmod proxy
|
||||
sudo a2enmod ssl
|
||||
sudo a2enmod rewrite
|
||||
|
||||
# Modul deaktivieren
|
||||
sudo a2dismod module_name
|
||||
|
||||
# Aktivierte Module anzeigen
|
||||
apache2ctl -M
|
||||
```
|
||||
|
||||
### Apache2 steuern
|
||||
|
||||
```bash
|
||||
# Status anzeigen
|
||||
sudo systemctl status apache2
|
||||
|
||||
# Starten
|
||||
sudo systemctl start apache2
|
||||
|
||||
# Stoppen
|
||||
sudo systemctl stop apache2
|
||||
|
||||
# Neustarten (Downtime)
|
||||
sudo systemctl restart apache2
|
||||
|
||||
# Neuladen (ohne Downtime)
|
||||
sudo systemctl reload apache2
|
||||
|
||||
# Konfiguration testen
|
||||
sudo apache2ctl configtest
|
||||
# oder
|
||||
sudo apachectl -t
|
||||
```
|
||||
|
||||
### Logs anzeigen
|
||||
|
||||
```bash
|
||||
# Access-Log
|
||||
sudo tail -f /var/log/apache2/stechuhr3-access.log
|
||||
|
||||
# Error-Log
|
||||
sudo tail -f /var/log/apache2/stechuhr3-error.log
|
||||
|
||||
# Alle Apache-Logs
|
||||
sudo tail -f /var/log/apache2/*.log
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Apache startet nicht
|
||||
|
||||
```bash
|
||||
# Detaillierte Fehlerausgabe
|
||||
sudo apache2ctl configtest
|
||||
|
||||
# Systemd-Logs
|
||||
sudo journalctl -u apache2 -n 50
|
||||
|
||||
# Konfigurationsdateien prüfen
|
||||
sudo apache2ctl -S
|
||||
```
|
||||
|
||||
### Proxy funktioniert nicht
|
||||
|
||||
```bash
|
||||
# Prüfe ob Modul aktiviert ist
|
||||
apache2ctl -M | grep proxy
|
||||
|
||||
# Falls nicht aktiviert:
|
||||
sudo a2enmod proxy proxy_http
|
||||
sudo systemctl restart apache2
|
||||
|
||||
# Backend-Verfügbarkeit prüfen
|
||||
curl http://localhost:3010/api/health
|
||||
```
|
||||
|
||||
### SSL-Probleme
|
||||
|
||||
```bash
|
||||
# Zertifikat prüfen
|
||||
sudo certbot certificates
|
||||
|
||||
# Zertifikat erneuern
|
||||
sudo certbot renew --apache
|
||||
|
||||
# SSL-Modul prüfen
|
||||
apache2ctl -M | grep ssl
|
||||
|
||||
# Falls nicht aktiviert:
|
||||
sudo a2enmod ssl
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### .htaccess wird ignoriert
|
||||
|
||||
```bash
|
||||
# Stelle sicher, dass AllowOverride gesetzt ist
|
||||
# In der VirtualHost-Konfiguration:
|
||||
<Directory /var/www/timeclock/frontend/dist>
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
|
||||
# Rewrite-Modul aktivieren
|
||||
sudo a2enmod rewrite
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### Permissions-Probleme
|
||||
|
||||
```bash
|
||||
# Korrekter Besitzer
|
||||
sudo chown -R www-data:www-data /var/www/timeclock/frontend/dist
|
||||
|
||||
# Korrekte Berechtigungen
|
||||
sudo find /var/www/timeclock/frontend/dist -type f -exec chmod 644 {} \;
|
||||
sudo find /var/www/timeclock/frontend/dist -type d -exec chmod 755 {} \;
|
||||
```
|
||||
|
||||
## Performance-Optimierung
|
||||
|
||||
### EnableKeepAlive
|
||||
|
||||
Füge in `/etc/apache2/apache2.conf` hinzu:
|
||||
|
||||
```apache
|
||||
KeepAlive On
|
||||
MaxKeepAliveRequests 100
|
||||
KeepAliveTimeout 5
|
||||
```
|
||||
|
||||
### MPM-Modul optimieren
|
||||
|
||||
```bash
|
||||
# Zeige aktives MPM
|
||||
apache2ctl -V | grep MPM
|
||||
|
||||
# Für Event MPM (empfohlen):
|
||||
sudo nano /etc/apache2/mods-available/mpm_event.conf
|
||||
```
|
||||
|
||||
Beispiel-Konfiguration:
|
||||
|
||||
```apache
|
||||
<IfModule mpm_event_module>
|
||||
StartServers 2
|
||||
MinSpareThreads 25
|
||||
MaxSpareThreads 75
|
||||
ThreadLimit 64
|
||||
ThreadsPerChild 25
|
||||
MaxRequestWorkers 150
|
||||
MaxConnectionsPerChild 0
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
### HTTP/2 aktivieren
|
||||
|
||||
```bash
|
||||
# HTTP/2 Modul aktivieren
|
||||
sudo a2enmod http2
|
||||
|
||||
# In VirtualHost hinzufügen:
|
||||
# Protocols h2 http/1.1
|
||||
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### Caching verbessern
|
||||
|
||||
Aktiviere mod_cache:
|
||||
|
||||
```bash
|
||||
sudo a2enmod cache
|
||||
sudo a2enmod cache_disk
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
In der VirtualHost-Konfiguration:
|
||||
|
||||
```apache
|
||||
<IfModule mod_cache.c>
|
||||
CacheQuickHandler off
|
||||
CacheLock on
|
||||
CacheLockPath /tmp/mod_cache-lock
|
||||
CacheLockMaxAge 5
|
||||
CacheIgnoreHeaders Set-Cookie
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
|
||||
### mod_security installieren (Web Application Firewall)
|
||||
|
||||
```bash
|
||||
# Installieren
|
||||
sudo apt install -y libapache2-mod-security2
|
||||
|
||||
# Aktivieren
|
||||
sudo a2enmod security2
|
||||
|
||||
# Basis-Konfiguration
|
||||
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
|
||||
|
||||
# SecRuleEngine auf "On" setzen
|
||||
sudo nano /etc/modsecurity/modsecurity.conf
|
||||
# SecRuleEngine On
|
||||
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### mod_evasive (DDoS-Schutz)
|
||||
|
||||
```bash
|
||||
# Installieren
|
||||
sudo apt install -y libapache2-mod-evasive
|
||||
|
||||
# Konfigurieren
|
||||
sudo nano /etc/apache2/mods-available/evasive.conf
|
||||
```
|
||||
|
||||
```apache
|
||||
<IfModule mod_evasive20.c>
|
||||
DOSHashTableSize 3097
|
||||
DOSPageCount 5
|
||||
DOSSiteCount 100
|
||||
DOSPageInterval 1
|
||||
DOSSiteInterval 1
|
||||
DOSBlockingPeriod 10
|
||||
DOSEmailNotify admin@tsschulz.de
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo a2enmod evasive
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### fail2ban für Apache
|
||||
|
||||
```bash
|
||||
# Installieren
|
||||
sudo apt install -y fail2ban
|
||||
|
||||
# Apache-Jail aktivieren
|
||||
sudo nano /etc/fail2ban/jail.local
|
||||
```
|
||||
|
||||
```ini
|
||||
[apache-auth]
|
||||
enabled = true
|
||||
|
||||
[apache-badbots]
|
||||
enabled = true
|
||||
|
||||
[apache-noscript]
|
||||
enabled = true
|
||||
|
||||
[apache-overflows]
|
||||
enabled = true
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo systemctl restart fail2ban
|
||||
```
|
||||
|
||||
## Vergleich Nginx vs Apache2
|
||||
|
||||
| Feature | Nginx | Apache2 |
|
||||
|---------|-------|---------|
|
||||
| **Performance** | Sehr hoch (Event-driven) | Hoch (Process/Thread-based) |
|
||||
| **Konfiguration** | Einfacher | Komplexer, aber mächtiger |
|
||||
| **.htaccess** | Nicht unterstützt | Unterstützt |
|
||||
| **Module** | Weniger, aber effizienter | Sehr viele verfügbar |
|
||||
| **Best for** | Reverse Proxy, statische Dateien | .htaccess, komplexe Setups |
|
||||
| **Memory** | Geringer | Höher |
|
||||
|
||||
Für TimeClock ist **beides** geeignet, Apache2 bietet mehr Flexibilität, Nginx mehr Performance.
|
||||
|
||||
## Migration von Nginx zu Apache2
|
||||
|
||||
Falls du bereits Nginx installiert hast:
|
||||
|
||||
```bash
|
||||
# Nginx stoppen und deaktivieren
|
||||
sudo systemctl stop nginx
|
||||
sudo systemctl disable nginx
|
||||
|
||||
# Apache2 installieren und einrichten (siehe oben)
|
||||
|
||||
# Firewall anpassen
|
||||
sudo ufw delete allow 'Nginx Full'
|
||||
sudo ufw allow 'Apache Full'
|
||||
|
||||
# SSL-Zertifikat ist kompatibel, keine Änderung nötig
|
||||
```
|
||||
|
||||
## Nützliche Links
|
||||
|
||||
- [Apache2 Dokumentation](https://httpd.apache.org/docs/2.4/)
|
||||
- [Apache2 auf Ubuntu](https://ubuntu.com/server/docs/web-servers-apache)
|
||||
- [Let's Encrypt mit Apache](https://certbot.eff.org/instructions?ws=apache&os=ubuntufocal)
|
||||
- [Apache Security Best Practices](https://geekflare.com/apache-web-server-hardening-security/)
|
||||
|
||||
---
|
||||
|
||||
**Apache2 läuft! 🚀**
|
||||
|
||||
Bei Fragen oder Problemen: Siehe `DEPLOYMENT.md` oder prüfe die Logs!
|
||||
|
||||
Reference in New Issue
Block a user