Deployment Pipeline

Push to your branch and Temps takes it from there — cloning the repository, building a Docker image with Nixpacks, starting the container, and routing traffic only after health checks pass. This page explains every step of the pipeline and what you can control.


What happens when you deploy

Loading diagram...

Step 1: Connect your repository

Temps clones your linked GitHub, GitLab, or other Git repository when a deployment is triggered. It inspects the source tree to detect your language and framework automatically, so you do not need to specify them in advance.

Step 2: Build your application

If your repository includes a Dockerfile, Temps uses it directly — supporting all Docker features and build arguments with layer caching for faster rebuilds. If there is no Dockerfile, Temps detects your language and generates one automatically using Nixpacks. This covers Node.js, Python, Rust, Go, Java, Ruby, PHP, and more with zero configuration.

Step 3: Configure environment

Environment variables are injected into the container at runtime. Secrets are stored encrypted and are never written to the image. You can define variables at the project level (shared across all environments) or at the environment level (scoped to dev, staging, or production). Managed database credentials are injected automatically when you attach a database.

Step 4: Deploy container

Temps starts the container with your configured environment variables and resource limits. Health checks run against your configured endpoint to confirm the application is responsive before traffic is routed. If the container fails to start, Temps retries automatically and records the failure in deployment logs.

Step 5: Set up domain and SSL

Temps assigns your app a custom domain or an auto-generated subdomain, then requests a TLS certificate from Let's Encrypt. Certificates renew automatically before expiry. Your app is live and served over HTTPS from the moment the health check passes.


What you can control

Build configuration

  • Use your Dockerfile — full control with a custom Dockerfile in your repository
  • Auto-detection — let Temps detect the language and generate a Dockerfile via Nixpacks
  • Build arguments — pass custom build-time variables in the deployment settings
  • Build logs — watch exactly what happens during the build in real-time

Environment variables

  • Project-level — variables shared across all environments
  • Environment-level — variables scoped to dev, staging, or production
  • Secrets — encrypted storage for passwords and API keys
  • Override — override variables for a specific deployment without changing the defaults

Resource limits

  • Memory — set how much RAM your app can use
  • CPU — limit CPU usage to prevent resource contention
  • Disk — storage limits for container volumes
  • Timeouts — request timeout settings for the upstream proxy

Deployment settings

  • Port configuration — which port your app listens on
  • Health check path — custom health check endpoint (defaults to /)
  • Restart policy — automatic restarts on failure
  • Rollback — instantly revert to a previous deployment

Deployment states

Your deployment goes through these states:

Loading diagram...

PENDING - Deployment queued BUILDING - Building your container BUILT - Container image created DEPLOYING - Starting the container RUNNING - Container is running ACTIVE - Receiving live traffic

If something goes wrong, the state becomes FAILED and the deployment detail page shows error details.


Rollback

If a deployment has issues:

  1. Previous deployment is still running
  2. Switch routing - Point domain back to previous version
  3. Zero downtime - Users see the working version immediately
  4. Debug - Investigate the failed deployment
  5. Delete - Remove the failed deployment when ready

Build failures

Common issues and solutions

Language detection failed

  • Solution: Provide a Dockerfile
  • Why: Temps couldn't detect your project type

Dependency installation failed

  • Solution: Check your package.json, requirements.txt, go.mod, etc.
  • Why: Missing or incorrect dependency files

Port binding failed

  • Solution: Set PORT environment variable
  • Why: App trying to use a port that's already in use

Memory exceeded

  • Solution: Increase memory limit in deployment settings
  • Why: App needs more memory than allocated

Monitoring deployments

Real-time information

  • Build logs - Watch build progress in real-time
  • Deployment logs - See application startup logs
  • Health status - Know when your app is healthy
  • Resource usage - Monitor CPU, memory, disk usage

After deployment

  • Analytics - Track request volume and performance
  • Error tracking - See errors as they happen
  • Uptime - Monitor availability
  • Performance - Track response times

Was this page helpful?