253 lines
6.1 KiB
Bash
253 lines
6.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Skrift Backend - Deployment Script für Server
|
|
# Dieses Script automatisiert das Deployment auf dem Server
|
|
|
|
set -e # Exit bei Fehler
|
|
|
|
echo "========================================="
|
|
echo "Skrift Backend - Deployment Script"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Konfiguration
|
|
DEPLOY_USER="root"
|
|
DEPLOY_HOST=""
|
|
DEPLOY_PATH="/opt/skrift-backend"
|
|
DOCKER_IMAGE_NAME="skrift-backend"
|
|
DOCKER_HUB_USER=""
|
|
|
|
# Funktion: Hilfe anzeigen
|
|
show_help() {
|
|
echo "Verwendung: ./deploy.sh [OPTION]"
|
|
echo ""
|
|
echo "Optionen:"
|
|
echo " local - Docker Image lokal bauen und testen"
|
|
echo " push - Image zu Docker Hub pushen"
|
|
echo " server-scp - Backend per SCP zum Server kopieren"
|
|
echo " server-deploy - Auf Server deployen (via Docker Hub)"
|
|
echo " server-ssh - SSH-Verbindung zum Server öffnen"
|
|
echo " help - Diese Hilfe anzeigen"
|
|
echo ""
|
|
echo "Beispiele:"
|
|
echo " ./deploy.sh local # Lokal testen"
|
|
echo " ./deploy.sh push # Image hochladen"
|
|
echo " ./deploy.sh server-deploy # Auf Server deployen"
|
|
}
|
|
|
|
# Funktion: Konfiguration prüfen
|
|
check_config() {
|
|
if [ -z "$DEPLOY_HOST" ]; then
|
|
echo "ERROR: DEPLOY_HOST ist nicht gesetzt!"
|
|
echo "Bitte in diesem Script DEPLOY_HOST='dein-server.de' setzen"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" == "push" ] && [ -z "$DOCKER_HUB_USER" ]; then
|
|
echo "ERROR: DOCKER_HUB_USER ist nicht gesetzt!"
|
|
echo "Bitte in diesem Script DOCKER_HUB_USER='deinusername' setzen"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Funktion: Lokal bauen und testen
|
|
build_local() {
|
|
echo "Building Docker Image lokal..."
|
|
docker build -t $DOCKER_IMAGE_NAME:latest .
|
|
|
|
echo ""
|
|
echo "Image erfolgreich gebaut!"
|
|
echo ""
|
|
echo "Zum Testen:"
|
|
echo " docker run -p 4000:4000 --env-file .env -v \$(pwd)/fonts:/app/fonts:ro $DOCKER_IMAGE_NAME:latest"
|
|
echo ""
|
|
echo "Dann im Browser: http://localhost:4000/health"
|
|
}
|
|
|
|
# Funktion: Image zu Docker Hub pushen
|
|
push_dockerhub() {
|
|
check_config "push"
|
|
|
|
echo "Logging in to Docker Hub..."
|
|
docker login
|
|
|
|
echo "Tagging image..."
|
|
docker tag $DOCKER_IMAGE_NAME:latest $DOCKER_HUB_USER/$DOCKER_IMAGE_NAME:latest
|
|
|
|
echo "Pushing to Docker Hub..."
|
|
docker push $DOCKER_HUB_USER/$DOCKER_IMAGE_NAME:latest
|
|
|
|
echo ""
|
|
echo "Image erfolgreich gepusht: $DOCKER_HUB_USER/$DOCKER_IMAGE_NAME:latest"
|
|
}
|
|
|
|
# Funktion: Backend per SCP zum Server kopieren
|
|
deploy_scp() {
|
|
check_config
|
|
|
|
echo "Kopiere Backend-Dateien zum Server..."
|
|
|
|
# Temporäres Verzeichnis für saubere Dateien erstellen
|
|
echo "Erstelle sauberes Deployment-Package..."
|
|
rm -rf ./deploy-temp
|
|
mkdir -p ./deploy-temp
|
|
|
|
# Nur notwendige Dateien kopieren
|
|
rsync -av \
|
|
--exclude 'node_modules' \
|
|
--exclude 'output' \
|
|
--exclude 'cache' \
|
|
--exclude '.git' \
|
|
--exclude 'deploy-temp' \
|
|
--exclude '*.md' \
|
|
--exclude 'bruno-tests' \
|
|
--exclude 'test-*.js' \
|
|
--exclude 'generate-*.js' \
|
|
./ ./deploy-temp/
|
|
|
|
# Zum Server kopieren
|
|
echo "Uploading to $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH..."
|
|
ssh $DEPLOY_USER@$DEPLOY_HOST "mkdir -p $DEPLOY_PATH"
|
|
rsync -avz ./deploy-temp/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/
|
|
|
|
# Fonts extra kopieren
|
|
echo "Uploading fonts..."
|
|
scp ./fonts/*.svg $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/fonts/
|
|
|
|
# Cleanup
|
|
rm -rf ./deploy-temp
|
|
|
|
echo ""
|
|
echo "Dateien erfolgreich hochgeladen!"
|
|
echo ""
|
|
echo "Nächste Schritte auf dem Server:"
|
|
echo " ssh $DEPLOY_USER@$DEPLOY_HOST"
|
|
echo " cd $DEPLOY_PATH"
|
|
echo " nano .env # .env Datei erstellen!"
|
|
echo " mkdir -p /var/skrift-output"
|
|
echo " docker-compose up -d --build"
|
|
}
|
|
|
|
# Funktion: Auf Server deployen (via Docker Hub)
|
|
deploy_server() {
|
|
check_config "push"
|
|
|
|
echo "Deploying to server via Docker Hub..."
|
|
|
|
# SSH Befehle auf Server ausführen
|
|
ssh $DEPLOY_USER@$DEPLOY_HOST << ENDSSH
|
|
set -e
|
|
|
|
echo "Creating directories..."
|
|
mkdir -p $DEPLOY_PATH
|
|
mkdir -p /var/skrift-output
|
|
chmod 755 /var/skrift-output
|
|
|
|
cd $DEPLOY_PATH
|
|
|
|
echo "Checking if .env exists..."
|
|
if [ ! -f .env ]; then
|
|
echo "ERROR: .env Datei fehlt!"
|
|
echo "Bitte zuerst .env erstellen mit:"
|
|
echo " SCRIPTALIZER_LICENSE_KEY=..."
|
|
echo " SCRIPTALIZER_ERR_FREQUENCY=0"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Checking if docker-compose.yml exists..."
|
|
if [ ! -f docker-compose.yml ]; then
|
|
echo "Creating docker-compose.yml..."
|
|
cat > docker-compose.yml << 'EOF'
|
|
version: '3.8'
|
|
|
|
services:
|
|
skrift-backend:
|
|
image: $DOCKER_HUB_USER/$DOCKER_IMAGE_NAME:latest
|
|
container_name: skrift-backend
|
|
restart: unless-stopped
|
|
ports:
|
|
- "4000:4000"
|
|
environment:
|
|
- NODE_ENV=production
|
|
- PORT=4000
|
|
- SCRIPTALIZER_LICENSE_KEY=\${SCRIPTALIZER_LICENSE_KEY}
|
|
- SCRIPTALIZER_ERR_FREQUENCY=0
|
|
- BATCH_SIZE=30
|
|
- CACHE_LIFETIME_HOURS=2
|
|
- RATE_LIMIT_PER_MINUTE=2
|
|
volumes:
|
|
- ./fonts:/app/fonts:ro
|
|
- skrift-cache:/app/cache
|
|
- /var/skrift-output:/app/output
|
|
networks:
|
|
- skrift-network
|
|
|
|
volumes:
|
|
skrift-cache:
|
|
driver: local
|
|
|
|
networks:
|
|
skrift-network:
|
|
driver: bridge
|
|
EOF
|
|
fi
|
|
|
|
echo "Pulling latest image..."
|
|
docker-compose pull
|
|
|
|
echo "Starting containers..."
|
|
docker-compose up -d
|
|
|
|
echo "Waiting for container to be healthy..."
|
|
sleep 5
|
|
|
|
echo "Checking health..."
|
|
docker-compose ps
|
|
|
|
echo ""
|
|
echo "Deployment complete!"
|
|
echo "Check logs with: docker-compose logs -f"
|
|
ENDSSH
|
|
|
|
echo ""
|
|
echo "Deployment auf Server abgeschlossen!"
|
|
echo ""
|
|
echo "Health-Check:"
|
|
echo " curl http://$DEPLOY_HOST:4000/health"
|
|
}
|
|
|
|
# Funktion: SSH zum Server
|
|
ssh_server() {
|
|
check_config
|
|
echo "Connecting to $DEPLOY_USER@$DEPLOY_HOST..."
|
|
ssh $DEPLOY_USER@$DEPLOY_HOST
|
|
}
|
|
|
|
# Main Script
|
|
case "$1" in
|
|
local)
|
|
build_local
|
|
;;
|
|
push)
|
|
push_dockerhub
|
|
;;
|
|
server-scp)
|
|
deploy_scp
|
|
;;
|
|
server-deploy)
|
|
deploy_server
|
|
;;
|
|
server-ssh)
|
|
ssh_server
|
|
;;
|
|
help|--help|-h|"")
|
|
show_help
|
|
;;
|
|
*)
|
|
echo "Unbekannte Option: $1"
|
|
echo ""
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|