Docker Deployment System Overview

Last updated: February 8, 2026
Admin Tools

Docker Deployment System Overview

What is the Deployment System?

The Sampo Docker Deployment System is a comprehensive, automated deployment pipeline that ensures safe, reliable deployments to production. It includes built-in validation, testing, versioning, and rollback capabilities.

Key Features

Failure Prevention:

  • Automatic environment variable validation (8 required checks)
  • Container smoke tests (30-second verification)
  • Deployment smoke tests (6 automated checks)
  • 70% of deployment failures prevented before reaching production

Recovery Capability:

  • Image versioning with git commit tracking
  • One-command rollback (<5 minutes vs 45 minutes manual)
  • Database-safe rollback (no data loss)
  • Automatic health verification after rollback

Performance Visibility:

  • Automatic build cache tracking
  • Performance trend analysis
  • Optimization recommendations
  • Build time monitoring

Safe Operations:

  • Dry-run mode (preview deployments without executing)
  • Pre-deployment validation checklists
  • Comprehensive troubleshooting guides
  • Standard operating procedures

Deployment Workflow

Visual Workflow Diagram

┌─────────────────────────────────────────────────────────────────────────┐
│                     STANDARD DEPLOYMENT WORKFLOW                         │
└─────────────────────────────────────────────────────────────────────────┘

[Local Machine]                    [VPS Server]                [Verification]
     │                                  │                             │
     ├─ 1. Validate Environment         │                             │
     │   ├─ .env file exists            │                             │
     │   ├─ Required vars set           │                             │
     │   └─ API URL configured          │                             │
     │                                   │                             │
     ├─ 2. Type Check                   │                             │
     │   └─ TypeScript validation       │                             │
     │                                   │                             │
     ├─ 3. Build Images                 │                             │
     │   ├─ API (NestJS)                │                             │
     │   └─ Web (Next.js)               │                             │
     │                                   │                             │
     ├─ 4. Test Containers              │                             │
     │   ├─ Container starts OK         │                             │
     │   └─ Health endpoint responds    │                             │
     │                                   │                             │
     ├─ 5. Generate Version Tag ────────────────────────────────────────────┐
     │   (20260208-143022-a4c6788)      │                             │     │
     │                                   │                             │     │
     ├─ 6. Transfer Images ──────────>  │                             │     │
     │   (~1.15GB compressed)            │                             │     │
     │                                   │                             │     │
     │                                   ├─ 7. Load Images             │     │
     │                                   │   into Docker               │     │
     │                                   │                             │     │
     │                 ⚠️  MANUAL STEP REQUIRED (not automatic)          │     │
     │                                   │                             │     │
     ├─ 8. SSH to VPS ───────────────>   │                             │     │
     │   docker compose down/up          │                             │     │
     │                                   │                             │     │
     │                                   ├─ 9. Stop Old Containers     │     │
     │                                   │   (manual: compose down)    │     │
     │                                   │                             │     │
     │                                   ├─ 10. Start New Containers   │     │
     │                                   │   (manual: compose up -d)   │     │
     │                                   │                             │     │
     │                                   ├────────────────────────────>│     │
     │                                   │                             │     │
     │                                   │               ├─ 11. Health Checks│
     │                                   │               │   ✓ API /health   │
     │                                   │               │   ✓ Web homepage  │
     │                                   │               │   ✓ Database      │
     │                                   │               │   ✓ Migrations    │
     │                                   │               │   ✓ Seeds         │
     │                                   │               │   ✓ Error logs    │
     │                                   │               │                   │
     │                                   │               └─ SUCCESS or FAIL  │
     │                                   │                        │          │
     │                                   │        ┌───────────────┴───────┐  │
     │                                   │        │                       │  │
     │                                   │   [SUCCESS]               [FAIL]  │
     │                                   │        │                       │  │
     │                              ┌────┴────┐   │                  ┌────┴──┴─┐
     │                              │ Deploy  │   │                  │ Rollback│
     │                              │Complete │   │                  │ Script  │
     │                              └─────────┘   │                  └─────────┘
     │                                            │                       │
     │                                            │                       ├─ Stop New
     │                                            │                       ├─ Start Previous
     │                                            │                       └─ Verify
     │                                            │
     ├──────────────────────────────────────> [REPORT]
     │                                            │
     └─────────────────── Deployment Complete ───┘

Total Time: ~11-16 minutes (build + transfer + manual container restart + verification)
Rollback Time: <5 minutes if issues detected

Standard Deployment (3 Steps)

Step 1: Build Images (Local Machine)

./scripts/docker-audit/build-cross-platform.sh --all --amd64 \
  --api-url https://alpha.theblueline.com/api \
  --push root@23.235.204.208 \
  --smoke-tests

This command:

  1. Validates environment variables
  2. Runs TypeScript type-check
  3. Builds Docker images (API + Web)
  4. Tests containers can start and run
  5. Transfers images to VPS
  6. Runs post-deployment smoke tests

Step 2: Restart Containers (VPS)

⚠️ CRITICAL: The build script transfers images but does NOT restart containers automatically.

You must manually restart containers after images are transferred:

ssh root@23.235.204.208 << 'REMOTE'
  cd /opt/sampo-alpha

  # Stop old containers
  docker compose -f docker-compose.base.yml \
    -f docker-compose.blueline-alpha.override.yml down

  # Start new containers
  docker compose -f docker-compose.base.yml \
    -f docker-compose.blueline-alpha.override.yml up -d

  # Verify (should show "Up X seconds", NOT "Up X hours")
  docker ps --filter "name=blueline-alpha"
REMOTE

Step 3: Verify Deployment

Automatic verification includes:

  • API health check (response time, status)
  • Web health check (homepage load)
  • Database connectivity
  • Migration status
  • Seed data integrity
  • Error log scanning

Emergency Rollback (<5 Minutes)

If a deployment fails or causes issues:

# Rollback to previous version
./scripts/rollback-deployment.sh root@23.235.204.208 previous

# Rollback to specific version
./scripts/rollback-deployment.sh root@23.235.204.208 20260208-143022-a4c6788

The rollback script:

  1. Lists available versions with metadata
  2. Confirms rollback target
  3. Stops current containers
  4. Starts containers with selected version
  5. Verifies deployment health
  6. Reports rollback status

Deployment Metrics

System Performance

| Metric | Before System | After System | Improvement | | ----------------------- | ------------- | ------------ | ---------------- | | Deployment failure rate | 70% | 15% | 55% reduction | | Mean time to recovery | 45 minutes | <5 minutes | 90% reduction | | Failure detection time | 15 minutes | 30 seconds | 97% reduction | | Time per deployment | ~66 minutes | ~14 minutes | 52 minutes saved |

Monthly Impact (per engineer)

  • Time saved: 7 hours/month per engineer
  • Failed deployments prevented: ~5 out of 8 deployments/month
  • Faster recovery: 40 minutes saved per incident

Version Tagging System

Format

YYYYMMDD-HHMMSS-GITSHA

Example: 20260208-143022-a4c6788
         │        │       └─ Git commit SHA (7 chars)
         │        └─────────── Timestamp (HHMMSS)
         └──────────────────── Date (YYYYMMDD)

Benefits

  • Chronological ordering: Sort versions by date/time
  • Code traceability: Link deployed image to exact code commit
  • Rollback selection: Choose any previous version
  • Audit trail: Track what was deployed when

Image Retention

  • Last 10 versions kept on VPS
  • Automatic cleanup via cron job
  • Latest version always preserved
  • Manual cleanup available if needed

Build Cache Analytics

Automatic Tracking

Every build automatically tracks:

  • Total layers vs cached layers
  • Cache hit rate percentage
  • Estimated time saved
  • Build duration and platform
  • Git commit SHA

View Performance

# Quick summary
./scripts/analyze-build-cache.sh

# Detailed per-build analysis
./scripts/analyze-build-cache.sh --detailed

# Performance trends over time
./scripts/analyze-build-cache.sh --trends

Performance Targets

| Metric | Target | Current Baseline | | ----------------------------- | ------- | --------------------------- | | Cache hit rate (code changes) | ≥70% | ~73% average | | API build time (cached) | <3 min | ~2.5 min | | Web build time (cached) | <5 min | ~4 min | | Cold build (no cache) | <10 min | ~6 min (API), ~10 min (Web) |

When to Investigate

  • Cache hit rate <50% for consecutive builds
  • Build time suddenly increases >50%
  • "CACHE" messages missing in build logs

See Build Performance Optimization article for troubleshooting.

Dry-Run Mode (Safe Preview)

Usage

./scripts/docker-audit/build-cross-platform.sh --all --amd64 \
  --api-url https://alpha.theblueline.com/api \
  --push root@23.235.204.208 \
  --dry-run

What It Shows

  1. Version tag that would be created
  2. Images that would be built (with sizes)
  3. Transfer operations to VPS
  4. Deployment steps on VPS
  5. Exact command to execute for real

When to Use

  • Before production deployments (verify what will change)
  • Testing deployment scripts after modifications
  • Communicating deployment plans to team
  • Validating environment configuration
  • Training new team members

Pre-Deployment Checklist

Before every deployment:

  • [ ] Local validation complete (pnpm type-check && pnpm test)
  • [ ] Git status clean (committed all changes)
  • [ ] Environment variables validated (./scripts/validate-deployment-env.sh)
  • [ ] Dry-run preview reviewed (--dry-run flag)
  • [ ] Recent database backup exists (if schema changes)
  • [ ] Note the build version from build output (format: YYYYMMDD-HHMMSS-GITSHA)
  • [ ] After restart, verify build version via health endpoint matches your build

Common Deployment Scenarios

Code-Only Changes (No DB Changes)

  1. Run standard build with smoke tests (transfers images to VPS)
  2. Manually restart containers (see Step 2 above - REQUIRED!)
  3. Verify deployment automatically
  4. Monitor logs for 5 minutes
  5. No seeding needed

Database Schema Changes

  1. Build and transfer images
  2. Manually restart containers (migrations run automatically on startup)
  3. Check if reference data needs updating
  4. Run seeds if needed: docker exec blueline-alpha-api pnpm db:seed:prod
  5. Verify seed data: Query database for expected counts

Seed File Changes

  1. Build and transfer images
  2. Manually restart containers (REQUIRED!)
  3. Seeds MUST be run: docker exec blueline-alpha-api pnpm db:seed:prod
  4. Verify seed data integrity

Initial Deployment (New Instance)

  1. Build and transfer images
  2. Manually restart containers (runs migrations automatically)
  3. Verify all containers healthy
  4. Run seeds: docker exec blueline-alpha-api pnpm db:seed:prod
  5. Check database initialized
  6. Test all critical features

Health Checks

API Health Endpoint

curl https://alpha.theblueline.com/health | jq

Expected response:

{
  "status": "ok",
  "timestamp": "2026-02-08T15:30:00Z",
  "version": "1.0.0",
  "buildVersion": "20260208-175451-2131d0c",
  "uptime": 63418.84,
  "environment": "production"
}

🎯 Verify Deployment Version:

Visual Verification (Recommended):

  1. Navigate to Admin Dashboard: https://alpha.theblueline.com/admin/dashboard
  2. Check build version badge in top-right corner
  3. Badge shows: GITSHA • YYYY-MM-DD
  4. Hover for full details (deployed time, commit, full version)

API Verification (Programmatic):

# Check which exact build is running
curl -s https://alpha.theblueline.com/health | jq -r '.buildVersion'

# Expected: 20260208-175451-2131d0c (YYYYMMDD-HHMMSS-GITSHA)

Use this to confirm:

  • ✅ New deployment is active (badge updates immediately)
  • ✅ Correct version deployed (commit SHA matches build output)
  • ✅ Containers restarted (timestamp changes from previous version)

### Web Health Check

```bash
curl https://alpha.theblueline.com/

Expected: HTTP 200, homepage HTML

Database Health

ssh root@23.235.204.208 'docker exec blueline-alpha-db psql -U postgres -d sampo_blueline_alpha -c "SELECT 1;"'

Expected: Returns "1"

Documentation Resources

Quick Reference

  • Quick Start: docs/operations/docker-deployment-quick-reference.md
  • Command Reference: Quick copy-paste commands

Operational Guides

  • Deployment Runbook: docs/operations/deployment-runbook.md
  • Standard Procedures: Step-by-step deployment guide
  • Emergency Procedures: Rollback and recovery

Troubleshooting

  • Troubleshooting Guide: docs/operations/deployment-troubleshooting.md
  • Issue Diagnosis: Symptom-based quick reference
  • Solutions: Copy-paste diagnostic commands

Performance

  • Build Optimization: docs/operations/build-cache-optimization.md
  • Cache Performance: Best practices and troubleshooting
  • Dockerfile Optimization: Layer ordering strategies

Implementation History

  • Week 1 Summary: docs/operations/week1-implementation-summary.md
  • Week 2-3 Summary: docs/operations/week2-week3-implementation-summary.md
  • Final Summary: docs/operations/deployment-resilience-final-summary.md

Getting Help

Self-Service

  1. Check Deployment Troubleshooting article (symptom-based diagnosis)
  2. Use diagnostic commands to gather information
  3. Follow step-by-step solutions
  4. Consult build optimization guide if cache issues

Escalation

If issue cannot be resolved:

  1. Gather diagnostic information (logs, commands, error messages)
  2. Document what was tried
  3. Escalate to DevOps team
  4. Follow incident severity levels (P0-P3)

See Deployment Troubleshooting article for escalation guidelines.

Related Articles

Getting Started

Operational Guides

Advanced Topics

  • 📄 Full documentation: docs/operations/deployment-runbook.md
  • 📊 Implementation history: docs/operations/week2-week3-implementation-summary.md

Key Takeaways

  • Automated validation prevents 70% of failures before production
  • Rollback capability reduces recovery time from 45min to <5min
  • Build cache analytics provides instant performance visibility
  • Dry-run mode allows safe deployment previews
  • Comprehensive docs enable team self-service

The deployment system is production-ready and actively prevents, detects, and recovers from deployment failures.

Was this article helpful?

Your feedback helps us improve our support content.

Still need assistance?

Our support team is ready to help you with more complex issues.

Contact Support