This commit is contained in:
@@ -47,40 +47,7 @@ jobs:
|
|||||||
chmod 600 ~/.ssh/id_ed25519
|
chmod 600 ~/.ssh/id_ed25519
|
||||||
ssh-keyscan -H alpha.mintel.me >> ~/.ssh/known_hosts
|
ssh-keyscan -H alpha.mintel.me >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
- name: Sync docker-compose file to server
|
- name: Prepare and Deploy
|
||||||
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
|
|
||||||
env:
|
env:
|
||||||
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
REGISTRY_USER: ${{ secrets.REGISTRY_USER }}
|
||||||
REGISTRY_PASS: ${{ secrets.REGISTRY_PASS }}
|
REGISTRY_PASS: ${{ secrets.REGISTRY_PASS }}
|
||||||
@@ -90,11 +57,28 @@ jobs:
|
|||||||
REDIS_URL: ${{ secrets.REDIS_URL }}
|
REDIS_URL: ${{ secrets.REDIS_URL }}
|
||||||
REDIS_KEY_PREFIX: ${{ secrets.REDIS_KEY_PREFIX }}
|
REDIS_KEY_PREFIX: ${{ secrets.REDIS_KEY_PREFIX }}
|
||||||
run: |
|
run: |
|
||||||
set +e
|
echo "Preparing deployment files..."
|
||||||
echo "Starting deployment on server..."
|
|
||||||
|
|
||||||
# Create environment file for deployment
|
COMPOSE_FILE=""
|
||||||
cat > /tmp/deploy.env << EOF
|
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
|
||||||
|
|
||||||
|
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_USER='${REGISTRY_USER}'
|
||||||
export REGISTRY_PASS='${REGISTRY_PASS}'
|
export REGISTRY_PASS='${REGISTRY_PASS}'
|
||||||
export NEXT_PUBLIC_UMAMI_WEBSITE_ID='${NEXT_PUBLIC_UMAMI_WEBSITE_ID}'
|
export NEXT_PUBLIC_UMAMI_WEBSITE_ID='${NEXT_PUBLIC_UMAMI_WEBSITE_ID}'
|
||||||
@@ -105,20 +89,14 @@ jobs:
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Create deployment script
|
# Create deployment script
|
||||||
cat > /tmp/deploy.sh << 'DEPLOY_EOF'
|
cat > /tmp/klz-deploy/deploy.sh << 'DEPLOY_EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
if [ -f /tmp/deploy.env ]; then
|
source ./deploy.env
|
||||||
source /tmp/deploy.env
|
|
||||||
else
|
|
||||||
echo "ERROR: /tmp/deploy.env not found!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo '=== Starting deployment ==='
|
echo '=== Starting deployment ==='
|
||||||
cd /home/deploy/sites/klz-cables.com || exit 1
|
|
||||||
|
|
||||||
echo '=== Creating .env ==='
|
echo '=== Creating .env ==='
|
||||||
cat > .env << EOF
|
cat > .env << EOF
|
||||||
@@ -138,85 +116,38 @@ jobs:
|
|||||||
docker network create infra || true
|
docker network create infra || true
|
||||||
fi
|
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 ==='
|
echo '=== Pulling latest image ==='
|
||||||
docker compose pull
|
docker compose pull
|
||||||
|
|
||||||
echo '=== Stopping all containers ==='
|
echo '=== Restarting containers ==='
|
||||||
docker compose down
|
docker compose down
|
||||||
|
|
||||||
echo '=== Starting all containers ==='
|
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
echo '=== Waiting for containers to be ready (30 seconds) ==='
|
echo '=== Waiting for containers (30s) ==='
|
||||||
sleep 30
|
sleep 30
|
||||||
|
|
||||||
echo '=== Verifying deployment status ==='
|
echo '=== Verifying health ==='
|
||||||
docker compose ps
|
|
||||||
|
|
||||||
echo '=== Verifying application health ==='
|
|
||||||
# Wait a bit more for the app to be fully ready
|
|
||||||
sleep 15
|
|
||||||
if curl -f -s http://localhost:80/health > /dev/null 2>&1; then
|
if curl -f -s http://localhost:80/health > /dev/null 2>&1; then
|
||||||
echo '✓ Application health check passed'
|
echo '✓ Application health check passed'
|
||||||
else
|
else
|
||||||
echo '✗ Application health check failed - checking app logs'
|
echo '✗ Application health check failed'
|
||||||
docker compose logs --tail=50 app
|
docker compose logs --tail=50 app
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo '=== Cleaning up old images ==='
|
echo '=== Cleaning up ==='
|
||||||
docker image prune -f --filter 'until=24h'
|
docker image prune -f --filter 'until=24h'
|
||||||
|
|
||||||
echo '=== Deployment completed successfully ==='
|
echo '=== Deployment completed successfully ==='
|
||||||
DEPLOY_EOF
|
DEPLOY_EOF
|
||||||
|
|
||||||
# Make script executable
|
chmod +x /tmp/klz-deploy/deploy.sh
|
||||||
chmod +x /tmp/deploy.sh
|
|
||||||
|
|
||||||
# SSH options for reliability
|
echo "Syncing and executing on server..."
|
||||||
# Removed IPQoS=0x00 as it sometimes causes "lost connection" on certain networks
|
# Use a single SSH connection to sync and execute
|
||||||
SSH_OPTS="-i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=60 -o ServerAliveInterval=15 -o ServerAliveCountMax=10 -o BatchMode=yes"
|
# 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"
|
||||||
|
|
||||||
MAX_RETRIES=3
|
echo "Deployment process finished"
|
||||||
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"
|
|
||||||
Reference in New Issue
Block a user