Initial commit
This commit is contained in:
252
Docker Backend/deploy.sh
Normal file
252
Docker Backend/deploy.sh
Normal file
@@ -0,0 +1,252 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user