Skip to content

Docker Deployment

Deploy vcpkg-harbor using Docker for easy container orchestration.

The recommended way to deploy vcpkg-harbor with all dependencies:

Terminal window
# Clone the repository
git clone https://github.com/rennerdo30/vcpkg-harbor.git
cd vcpkg-harbor
# Start services
docker-compose up -d

This starts:

  • vcpkg-harbor on port 15151
  • MinIO on ports 9000 (API) and 9001 (Console)
Terminal window
# Pull the image
docker pull ghcr.io/rennerdo30/vcpkg-harbor:latest
# Run with filesystem storage
docker run -d \
-p 15151:15151 \
-v vcpkg-cache:/app/cache \
-e VCPKG_STORAGE_TYPE=filesystem \
-e VCPKG_STORAGE_PATH=/app/cache \
ghcr.io/rennerdo30/vcpkg-harbor:latest

Full docker-compose.yml example:

version: '3.8'
services:
vcpkg-harbor:
image: ghcr.io/rennerdo30/vcpkg-harbor:latest
ports:
- "15151:15151"
environment:
- VCPKG_SERVER_HOST=0.0.0.0
- VCPKG_SERVER_PORT=15151
- VCPKG_STORAGE_TYPE=minio
- VCPKG_MINIO_ENDPOINT=minio:9000
- VCPKG_MINIO_ACCESS_KEY=minioadmin
- VCPKG_MINIO_SECRET_KEY=minioadmin
- VCPKG_MINIO_BUCKET=vcpkg-harbor
- VCPKG_LOG_JSON=true
volumes:
- ./logs:/app/logs
depends_on:
minio:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:15151/health"]
interval: 30s
timeout: 10s
retries: 3
minio:
image: minio/minio
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
environment:
- MINIO_ROOT_USER=minioadmin
- MINIO_ROOT_PASSWORD=minioadmin
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
volumes:
minio_data:
version: '3.8'
services:
vcpkg-harbor:
image: ghcr.io/rennerdo30/vcpkg-harbor:latest
ports:
- "15151:15151"
environment:
- VCPKG_STORAGE_TYPE=s3
- VCPKG_S3_BUCKET=my-vcpkg-cache
- VCPKG_S3_REGION=us-west-2
- VCPKG_AUTH_ENABLED=true
- VCPKG_AUTH_TYPE=token
- VCPKG_AUTH_TOKEN=${VCPKG_AUTH_TOKEN}
- VCPKG_LOG_JSON=true
restart: unless-stopped

Use a reverse proxy like nginx or Traefik:

version: '3.8'
services:
traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.websecure.address=:443"
ports:
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./certs:/certs
vcpkg-harbor:
image: ghcr.io/rennerdo30/vcpkg-harbor:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.vcpkg.rule=Host(`vcpkg-cache.example.com`)"
- "traefik.http.routers.vcpkg.entrypoints=websecure"
- "traefik.http.routers.vcpkg.tls=true"
FROM ghcr.io/rennerdo30/vcpkg-harbor:latest
# Add custom configuration
COPY .env /app/.env
# Add custom static files
COPY custom-logo.png /app/static/

The container includes a health check that verifies:

  • The HTTP server is responding
  • The /health endpoint returns success

Configure health check timing in your orchestrator as needed.