fix: update deployment script for automatic .env loading and docker compose v2
All checks were successful
Basil CI/CD Pipeline / Code Linting (push) Successful in 58s
Basil CI/CD Pipeline / API Tests (push) Successful in 1m17s
Basil CI/CD Pipeline / Web Tests (push) Successful in 1m7s
Basil CI/CD Pipeline / Shared Package Tests (push) Successful in 55s
Basil CI/CD Pipeline / Security Scanning (push) Successful in 1m10s
Basil CI/CD Pipeline / Build All Packages (push) Successful in 1m32s
Basil CI/CD Pipeline / E2E Tests (push) Has been skipped
Basil CI/CD Pipeline / Build & Push Docker Images (push) Successful in 5m15s
Basil CI/CD Pipeline / Trigger Deployment (push) Successful in 11s

Fixed multiple issues with the deployment automation:

1. Deploy script now auto-loads .env file:
   - Added automatic sourcing of .env at script start
   - Uses set -a/set +a to export all variables
   - Ensures HARBOR_PASSWORD and other vars are available

2. Updated docker-compose to docker compose (V2):
   - Changed all docker-compose commands to docker compose
   - Fixes "command not found" errors on modern Docker

3. Updated systemd service configuration:
   - Changed to use EnvironmentFile instead of hardcoded values
   - Loads variables from /srv/docker-compose/basil/.env
   - Changed user from root to pkartch for security

These changes enable successful automated deployments from CI/CD webhook
triggers, pulling images from Harbor registry and restarting containers.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-15 20:59:38 +00:00
parent 01ac9458ca
commit d1b615f62e
2 changed files with 14 additions and 11 deletions

View File

@@ -1,17 +1,13 @@
[Unit]
Description=Basil Webhook Deployment Service
Description=Basil Webhook Receiver
After=network.target docker.service
Requires=docker.service
[Service]
Type=simple
User=root
User=pkartch
WorkingDirectory=/srv/docker-compose/basil
Environment="WEBHOOK_PORT=9000"
Environment="WEBHOOK_SECRET=changeme"
Environment="DOCKER_USERNAME=your-docker-username"
Environment="DOCKER_REGISTRY=docker.io"
Environment="IMAGE_TAG=latest"
EnvironmentFile=/srv/docker-compose/basil/.env
ExecStart=/srv/docker-compose/basil/scripts/webhook-receiver.sh
Restart=always
RestartSec=10

View File

@@ -8,6 +8,13 @@ set -e # Exit on error
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
# Load environment variables from .env file if it exists
if [ -f "$PROJECT_DIR/.env" ]; then
set -a # automatically export all variables
source "$PROJECT_DIR/.env"
set +a
fi
LOG_FILE="$PROJECT_DIR/deploy.log"
BACKUP_DIR="$PROJECT_DIR/backups"
DOCKER_REGISTRY="${DOCKER_REGISTRY:-harbor.pkartchner.com}"
@@ -135,11 +142,11 @@ restart_containers() {
# Stop containers
log "Stopping containers..."
docker-compose down || warning "Failed to stop some containers"
docker compose down || warning "Failed to stop some containers"
# Start containers with new images
log "Starting containers with new images..."
docker-compose up -d || {
docker compose up -d || {
error "Failed to start containers"
exit 1
}
@@ -165,7 +172,7 @@ health_check() {
RETRY_COUNT=$((RETRY_COUNT + 1))
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
error "API health check failed after $MAX_RETRIES attempts"
docker-compose logs api
docker compose logs api
exit 1
fi
@@ -177,7 +184,7 @@ health_check() {
log "Web container is running"
else
error "Web container is not running"
docker-compose logs web
docker compose logs web
exit 1
fi