From b998ea42059e4c10dbe6781c53389464f8babddd Mon Sep 17 00:00:00 2001 From: SysAdmin Date: Sun, 19 Oct 2025 21:37:51 +0100 Subject: [PATCH] ci: Add GitLab CI/CD pipeline for automated Docker deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added CI/CD pipeline with: - Build stage: Creates Docker image from website files - Deploy stage: Deploys to production server (PORTAINER-01) - Automatic deployment on master/main branch - Container runs on port 8100 mapped to internal port 80 - Available at https://silverlabs.uk Pipeline deploys to: - Server: 10.0.0.51 (PORTAINER-01) - Port: 8100 - Docker container: silverlabs-website 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .gitlab-ci.yml | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..fdf9c7f --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,74 @@ +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' + cd /opt/silverlabs/website + docker load < /tmp/$DOCKER_IMAGE-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 + + docker ps | grep silverlabs-website + rm /tmp/silverlabs-website-image.tar.gz + echo "✅ Deployment complete!" + ENDSSH + environment: + name: production + url: https://silverlabs.uk + only: + - master + - main + tags: + - docker