Files
aqualog/deploy-v3.sh
Nicolay Braetter a1f6a21828 Initial commit: Aquarium Logbuch React/Vite App
- React 18 + Vite Frontend
- Node.js/Express Backend
- Vollstaendige Logbuch-Funktionalitaet fuer Aquarien
- Deploy-Script fuer aqualog CT 211 (192.168.0.246)
2026-04-15 09:24:31 +02:00

109 lines
3.3 KiB
Bash

#!/bin/bash
set -e
echo "=== Aquarium Logbuch v3 Deploy ==="
# 1. Download aquascape header photo (CC0 from Pixabay)
echo "[1/7] Header-Foto herunterladen..."
mkdir -p /tmp/aquarium-deploy/app/public
wget -q --timeout=15 -O /tmp/aquarium-deploy/app/public/aquascape.jpg \
"https://cdn.pixabay.com/photo/2023/02/08/06/09/aquarium-7776393_1280.jpg" \
2>/dev/null && echo " Foto heruntergeladen." || \
wget -q --timeout=15 -O /tmp/aquarium-deploy/app/public/aquascape.jpg \
"https://cdn.pixabay.com/photo/2017/07/14/15/48/aquarium-2503350_1280.jpg" \
2>/dev/null && echo " Foto (Fallback) heruntergeladen." || \
echo " WARN: Foto-Download fehlgeschlagen, CSS-Gradient wird als Fallback genutzt."
# 2. Build frontend
echo "[2/7] Frontend bauen..."
cd /tmp/aquarium-deploy/app
npm run build >> /tmp/build-v3-full.log 2>&1
echo " Build abgeschlossen."
# 3. Deploy frontend
echo "[3/7] Frontend deployen..."
cp -r dist/* /var/www/aquarium-logbuch/
# Copy photo to webroot too if it exists
[ -f public/aquascape.jpg ] && cp public/aquascape.jpg /var/www/aquarium-logbuch/aquascape.jpg
echo " Frontend kopiert."
# 4. Install backend
echo "[4/7] Backend installieren..."
mkdir -p /var/lib/aquarium-backend
cp /tmp/backend/server.js /var/lib/aquarium-backend/server.js
cp /tmp/backend/package.json /var/lib/aquarium-backend/package.json
cd /var/lib/aquarium-backend
npm install --omit=dev >> /tmp/build-v3-full.log 2>&1
echo " Backend-Pakete installiert."
# 5. Setup data directory
echo "[5/7] Datenverzeichnis anlegen..."
mkdir -p /var/lib/aquarium
chown -R www-data:www-data /var/lib/aquarium 2>/dev/null || true
# 6. Create systemd service
echo "[6/7] Systemd-Service anlegen..."
cat > /etc/systemd/system/aquarium-api.service << 'EOF'
[Unit]
Description=Aquarium Logbuch API
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/var/lib/aquarium-backend
ExecStart=/usr/bin/node /var/lib/aquarium-backend/server.js
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=aquarium-api
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable aquarium-api
systemctl restart aquarium-api
sleep 2
systemctl is-active aquarium-api && echo " API-Service läuft." || echo " WARN: API-Service startet nicht, Logs prüfen."
# 7. Update nginx config
echo "[7/7] Nginx konfigurieren..."
cat > /etc/nginx/sites-available/aquarium.conf << 'NGINX'
server {
listen 80 default_server;
server_name _;
root /var/www/aquarium-logbuch;
index index.html;
client_max_body_size 10M;
# API proxy → Node backend
location /api {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 30s;
}
# SPA routing
location / {
try_files $uri $uri/ /index.html;
}
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 7d;
add_header Cache-Control "public, no-transform";
}
}
NGINX
nginx -t && nginx -s reload && echo " Nginx neu geladen."
echo ""
echo "=== Deploy abgeschlossen! ==="
echo "App: http://$(hostname -I | awk '{print $1}')/"
echo "Admin: aqlab / D4sP4sswortBek0mmtKe1ner!"