This commit is contained in:
@@ -47,40 +47,7 @@ jobs:
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
ssh-keyscan -H alpha.mintel.me >> ~/.ssh/known_hosts
|
||||
|
||||
- name: Sync docker-compose file to server
|
||||
run: |
|
||||
echo "Checking for docker-compose file..."
|
||||
|
||||
COMPOSE_FILE=""
|
||||
if [ -f "docker-compose.yml" ]; then
|
||||
COMPOSE_FILE="docker-compose.yml"
|
||||
elif [ -f "docker-compose.yaml" ]; then
|
||||
COMPOSE_FILE="docker-compose.yaml"
|
||||
else
|
||||
echo "ERROR: Keine docker-compose.yml oder .yaml gefunden!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Found and syncing: $COMPOSE_FILE"
|
||||
|
||||
# Create a temporary directory for files to sync
|
||||
mkdir -p /tmp/klz-deploy
|
||||
cp "$COMPOSE_FILE" /tmp/klz-deploy/
|
||||
|
||||
# Check if varnish directory exists and copy it
|
||||
if [ -d "varnish" ]; then
|
||||
echo "Syncing varnish directory..."
|
||||
cp -r varnish /tmp/klz-deploy/
|
||||
fi
|
||||
|
||||
# Use tar to bundle files and send them via SSH in a single connection
|
||||
tar czf - -C /tmp/klz-deploy . | \
|
||||
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o IPQoS=0x00 deploy@alpha.mintel.me \
|
||||
"mkdir -p /home/deploy/sites/klz-cables.com/ && tar xzf - -C /home/deploy/sites/klz-cables.com/ && echo 'Files synced successfully' && ls -la /home/deploy/sites/klz-cables.com/"
|
||||
|
||||
echo "File sync completed"
|
||||
|
||||
- name: Deploy on server
|
||||
- name: Prepare and Deploy
|
||||
env:
|
||||
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||
REGISTRY_PASS: ${{ secrets.REGISTRY_PASS }}
|
||||
@@ -90,11 +57,28 @@ jobs:
|
||||
REDIS_URL: ${{ secrets.REDIS_URL }}
|
||||
REDIS_KEY_PREFIX: ${{ secrets.REDIS_KEY_PREFIX }}
|
||||
run: |
|
||||
set +e
|
||||
echo "Starting deployment on server..."
|
||||
echo "Preparing deployment files..."
|
||||
|
||||
COMPOSE_FILE=""
|
||||
if [ -f "docker-compose.yml" ]; then
|
||||
COMPOSE_FILE="docker-compose.yml"
|
||||
elif [ -f "docker-compose.yaml" ]; then
|
||||
COMPOSE_FILE="docker-compose.yaml"
|
||||
else
|
||||
echo "ERROR: No docker-compose file found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create a temporary directory for all files to sync
|
||||
mkdir -p /tmp/klz-deploy
|
||||
cp "$COMPOSE_FILE" /tmp/klz-deploy/docker-compose.yml
|
||||
|
||||
# Create environment file for deployment
|
||||
cat > /tmp/deploy.env << EOF
|
||||
if [ -d "varnish" ]; then
|
||||
cp -r varnish /tmp/klz-deploy/
|
||||
fi
|
||||
|
||||
# Create environment file
|
||||
cat > /tmp/klz-deploy/deploy.env << EOF
|
||||
export REGISTRY_USER='${REGISTRY_USER}'
|
||||
export REGISTRY_PASS='${REGISTRY_PASS}'
|
||||
export NEXT_PUBLIC_UMAMI_WEBSITE_ID='${NEXT_PUBLIC_UMAMI_WEBSITE_ID}'
|
||||
@@ -105,20 +89,14 @@ jobs:
|
||||
EOF
|
||||
|
||||
# Create deployment script
|
||||
cat > /tmp/deploy.sh << 'DEPLOY_EOF'
|
||||
cat > /tmp/klz-deploy/deploy.sh << 'DEPLOY_EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Load environment variables
|
||||
if [ -f /tmp/deploy.env ]; then
|
||||
source /tmp/deploy.env
|
||||
else
|
||||
echo "ERROR: /tmp/deploy.env not found!"
|
||||
exit 1
|
||||
fi
|
||||
source ./deploy.env
|
||||
|
||||
echo '=== Starting deployment ==='
|
||||
cd /home/deploy/sites/klz-cables.com || exit 1
|
||||
|
||||
echo '=== Creating .env ==='
|
||||
cat > .env << EOF
|
||||
@@ -138,85 +116,38 @@ jobs:
|
||||
docker network create infra || true
|
||||
fi
|
||||
|
||||
echo '=== Checking current containers ==='
|
||||
docker compose ps
|
||||
|
||||
echo '=== Removing local image to force fresh pull ==='
|
||||
docker rmi registry.infra.mintel.me/mintel/klz-cables.com:latest || true
|
||||
|
||||
echo '=== Pulling latest image ==='
|
||||
docker compose pull
|
||||
|
||||
echo '=== Stopping all containers ==='
|
||||
echo '=== Restarting containers ==='
|
||||
docker compose down
|
||||
|
||||
echo '=== Starting all containers ==='
|
||||
docker compose up -d
|
||||
|
||||
echo '=== Waiting for containers to be ready (30 seconds) ==='
|
||||
echo '=== Waiting for containers (30s) ==='
|
||||
sleep 30
|
||||
|
||||
echo '=== Verifying deployment status ==='
|
||||
docker compose ps
|
||||
|
||||
echo '=== Verifying application health ==='
|
||||
# Wait a bit more for the app to be fully ready
|
||||
sleep 15
|
||||
echo '=== Verifying health ==='
|
||||
if curl -f -s http://localhost:80/health > /dev/null 2>&1; then
|
||||
echo '✓ Application health check passed'
|
||||
else
|
||||
echo '✗ Application health check failed - checking app logs'
|
||||
echo '✗ Application health check failed'
|
||||
docker compose logs --tail=50 app
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo '=== Cleaning up old images ==='
|
||||
echo '=== Cleaning up ==='
|
||||
docker image prune -f --filter 'until=24h'
|
||||
|
||||
echo '=== Deployment completed successfully ==='
|
||||
DEPLOY_EOF
|
||||
|
||||
chmod +x /tmp/klz-deploy/deploy.sh
|
||||
|
||||
echo "Syncing and executing on server..."
|
||||
# Use a single SSH connection to sync and execute
|
||||
# We use tar to bundle everything and pipe it to SSH
|
||||
# We use the same SSH options that worked in the previous Sync step
|
||||
tar czf - -C /tmp/klz-deploy . | \
|
||||
ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o IPQoS=0x00 deploy@alpha.mintel.me \
|
||||
"mkdir -p /home/deploy/sites/klz-cables.com/ && tar xzf - -C /home/deploy/sites/klz-cables.com/ && cd /home/deploy/sites/klz-cables.com/ && bash ./deploy.sh"
|
||||
|
||||
# Make script executable
|
||||
chmod +x /tmp/deploy.sh
|
||||
|
||||
# SSH options for reliability
|
||||
# Removed IPQoS=0x00 as it sometimes causes "lost connection" on certain networks
|
||||
SSH_OPTS="-i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=60 -o ServerAliveInterval=15 -o ServerAliveCountMax=10 -o BatchMode=yes"
|
||||
|
||||
MAX_RETRIES=3
|
||||
RETRY_COUNT=0
|
||||
SUCCESS=false
|
||||
|
||||
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
|
||||
RETRY_COUNT=$((RETRY_COUNT + 1))
|
||||
echo "Deployment attempt $RETRY_COUNT of $MAX_RETRIES..."
|
||||
|
||||
echo "Copying files to server..."
|
||||
scp $SSH_OPTS /tmp/deploy.sh /tmp/deploy.env deploy@alpha.mintel.me:/tmp/
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "✗ SCP failed."
|
||||
sleep 10
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Executing script on server..."
|
||||
ssh $SSH_OPTS deploy@alpha.mintel.me "bash /tmp/deploy.sh"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✓ Deployment successful!"
|
||||
SUCCESS=true
|
||||
break
|
||||
else
|
||||
echo "✗ SSH execution failed."
|
||||
if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
|
||||
echo "Retrying in 10 seconds..."
|
||||
sleep 10
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$SUCCESS" = false ]; then
|
||||
echo "All deployment attempts failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deployment completed"
|
||||
echo "Deployment process finished"
|
||||
Reference in New Issue
Block a user