Deploy Laravel on Your Own Server

Deploy Laravel applications with managed PostgreSQL, Redis, Nginx + PHP-FPM, and queue workers. Artisan commands and migrations run automatically.


Quickstart

From your project root, deploy with your preferred package manager:

npx @temps-sdk/cli up

Temps detects your composer.json, runs composer install, runs migrations, and starts Nginx + PHP-FPM. Your app is live in about 2 minutes.


What Temps Handles Automatically

FeatureHow Temps handles it
Installcomposer install --no-dev --optimize-autoloader
Migrationsphp artisan migrate --force on every deploy
Cachephp artisan config:cache && route:cache && view:cache
Web serverNginx + PHP-FPM
HTTPSLet's Encrypt, auto-renewed
PortBinds to port 8080 by default
Health checksHTTP health check on /

Environment Variables

npx @temps-sdk/cli environments vars set APP_ENV production -e production

npx @temps-sdk/cli environments vars set APP_KEY "$(php artisan key:generate --show)" -e production

npx @temps-sdk/cli environments vars set APP_URL "https://yourdomain.com" -e production

Temps injects DATABASE_URL and REDIS_URL when managed services are attached.


Queue Workers and Scheduler

Add a Procfile to run queue workers alongside your web process:

web: nginx-unit
worker: php artisan queue:work --sleep=3 --tries=3
scheduler: php artisan schedule:work

Laravel Horizon

For Horizon, add it to your Procfile:

web: nginx-unit
horizon: php artisan horizon

Set the QUEUE_CONNECTION=redis environment variable and attach a Redis service.


Managed Services

Add PostgreSQL and Redis from Project → Services → Add Service. Connection strings are injected automatically.


Platform behavior

These rules apply to every app deployed on Temps, regardless of framework.

Health checks

After your container starts, Temps sends HTTP GET requests to verify it is healthy before routing traffic to it.

  • Path: / (the root of your application)
  • Success: 2 consecutive responses with a 2xx or 3xx status code
  • Timeout: 300 seconds (5 minutes) for the app to become healthy
  • Retry interval: every 5 seconds

Connection errors while the app is still starting are retried without penalty. If the app returns 4xx or 5xx errors for 60 consecutive seconds, the deployment fails. Customize the check by adding a .temps.yaml to your repository root:

.temps.yaml
health:
  path: /health
  status: 200
  interval: 30
  timeout: 5
  retries: 3

Auto-injected environment variables

Temps injects these variables into every deployment automatically:

VariableValueDescription
PORTResolved portThe port your app must listen on
HOST0.0.0.0Bind address
SENTRY_DSNAuto-generatedError tracking endpoint
TEMPS_API_URLYour Temps URLPlatform API endpoint
TEMPS_API_TOKENDeployment tokenAuthentication for Temps SDKs
OTEL_EXPORTER_OTLP_ENDPOINTYour Temps OTLP URLOpenTelemetry trace collection
OTEL_SERVICE_NAMEProject nameService identifier for traces

You do not need to configure these manually. They are available in process.env (Node.js), os.environ (Python), os.Getenv (Go), and the equivalent in other languages.


Next Steps

Was this page helpful?