ci: Add GitLab CI/CD pipeline for automated Docker deployment

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 <noreply@anthropic.com>
This commit is contained in:
2025-10-19 21:37:51 +01:00
parent cf01a75179
commit b998ea4205

74
.gitlab-ci.yml Normal file
View File

@@ -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