stages: - build - deploy variables: DOCKER_IMAGE: silverlabs-website # Use Docker image image: docker:latest # Build Docker image build:website: stage: build services: - docker:dind script: - echo "Building SilverLabs Website Docker image..." - docker build -t $DOCKER_IMAGE:latest -t $DOCKER_IMAGE:${CI_COMMIT_SHORT_SHA} . - docker images tags: - docker only: - master - main # Deploy to production server (PORTAINER-01) deploy:production: stage: deploy image: docker:latest services: - docker:dind dependencies: - build:website before_script: - apk add --no-cache sshpass openssh-client script: - echo "🚀 Deploying SilverLabs Website to silverlabs.uk (PORTAINER-01)" # Build Docker image - docker build -t $DOCKER_IMAGE:latest -t $DOCKER_IMAGE:${CI_COMMIT_SHORT_SHA} . # Save and transfer image to server - docker save $DOCKER_IMAGE:latest | gzip > /tmp/$DOCKER_IMAGE-image.tar.gz - sshpass -p "Phenom12#." scp -o StrictHostKeyChecking=no /tmp/$DOCKER_IMAGE-image.tar.gz sysadmin@10.0.0.51:/tmp/ # Deploy on server - | sshpass -p "Phenom12#." ssh -o StrictHostKeyChecking=no sysadmin@10.0.0.51 << ENDSSH set -e # Load Docker image docker load < /tmp/silverlabs-website-image.tar.gz # Stop and remove old container docker stop silverlabs-website 2>/dev/null || true docker rm silverlabs-website 2>/dev/null || true # Start new container docker run -d \ --name silverlabs-website \ --restart unless-stopped \ -p 8100:80 \ silverlabs-website:latest # Verify deployment docker ps | grep silverlabs-website # Cleanup rm /tmp/silverlabs-website-image.tar.gz echo "✅ Deployment complete!" ENDSSH environment: name: production url: https://silverlabs.uk only: - master - main tags: - docker