wheels deploy push
Deploy your Wheels application to configured servers.
Synopsis
wheels deploy:push [options]
Description
The wheels deploy:push
command builds and deploys your Wheels application to configured servers using Docker. It handles Docker image building, pushing to registry, and deploying to target servers with optional rolling deployments for zero-downtime updates.
Options
tag=<string>
- Docker image tag (defaults to timestamp format: yyyymmddHHmmss)--build
- Build Docker image locally (default: true, use --no-build to skip)--push
- Push image to registry (default: true, use --no-push to skip)--rolling
- Use rolling deployment for zero-downtime updates (default: true, use --no-rolling to disable)servers=<string>
- Deploy to specific servers (comma-separated list)destination=<string>
- Deployment destination/environmenttimeout=<number>
- Deployment timeout in seconds (default: 600)health-timeout=<number>
- Health check timeout in seconds (default: 300)
Examples
Basic deployment
wheels deploy:push
Deploy with specific tag
wheels deploy:push tag=v1.0.0
Skip building and just deploy existing image
wheels deploy:push tag=v1.0.0 --no-build
Deploy to specific servers
wheels deploy:push servers=web1.example.com,web2.example.com
Deploy without rolling updates (with downtime)
wheels deploy:push --no-rolling
Deploy with custom timeouts
wheels deploy:push timeout=900 health-timeout=600
Deployment Process
The deployment follows these steps:
Lock Acquisition: Acquire deployment lock to prevent concurrent deployments
Pre-connect Hook: Execute pre-connect lifecycle hook
Tag Generation: Generate timestamp-based tag if not provided
Pre-build Hook: Execute pre-build lifecycle hook
Docker Build: Build Docker image (if --build is enabled)
Registry Push: Push image to configured registry (if --push is enabled)
Pre-deploy Hook: Execute pre-deploy lifecycle hook
Server Deployment: Deploy to each target server
Copy environment configuration
Generate docker-compose.yml
Pull new image
Perform rolling deployment or restart
Clean up old images
Post-deploy Hook: Execute post-deploy lifecycle hook
Lock Release: Release deployment lock
Rolling Deployment
When --rolling
is enabled (default), the deployment:
Scales up the service to run old and new containers simultaneously
Waits for health checks to pass on new containers
Removes old containers only after successful health checks
Rolls back automatically if health checks fail
Health Checks
The deployment uses health checks defined in your deploy.yml configuration:
healthcheck:
path: /health
port: 3000
interval: 30
timeout: 10
retries: 3
Deployment Hooks
Lifecycle hooks are executed at various stages:
pre-connect
: Before connecting to serverspre-build
: Before building Docker imagepre-deploy
: Before deploying to serverspost-deploy
: After successful deployment
Configuration
The deployment uses configuration from config/deploy.yml
:
service: myapp
image: myapp
registry:
server: registry.example.com
username: myuser
servers:
web:
- web1.example.com
- web2.example.com
ssh:
user: deploy
env:
clear:
WHEELS_ENV: production
PORT: 3000
healthcheck:
path: /health
port: 3000
interval: 30
traefik:
enabled: true
labels:
traefik.http.routers.myapp.rule: Host(`myapp.example.com`)
Environment Variables
Environment variables are loaded from .env.deploy
file and copied to target servers.
Docker Compose Generation
The command generates a docker-compose.yml file on target servers with:
Service configuration
Environment variables
Port mappings
Volume mounts
Health checks
Traefik labels (if enabled)
Database services (if configured)
Use Cases
Production deployment with specific version
wheels deploy:push tag=v2.0.0
Deploy pre-built image from CI/CD
# Image already built and pushed by CI
wheels deploy:push tag=build-123 --no-build --no-push
Deploy to staging servers only
wheels deploy:push servers=staging1.example.com destination=staging
Emergency deployment without health checks
wheels deploy:push --no-rolling health-timeout=0
Best Practices
Use semantic versioning: Tag releases with version numbers
Test in staging first: Deploy to staging before production
Monitor deployments: Check logs and health status
Use rolling deployments: Minimize downtime with --rolling
Configure health checks: Ensure proper health check endpoints
Set appropriate timeouts: Adjust timeouts based on app startup time
Use deployment locks: Prevent concurrent deployments
See Also
deploy exec - Execute deployment after push
deploy status - Check push status
deploy rollback - Rollback pushed artifacts
Last updated
Was this helpful?