openstead
Blueprints

Blueprint examples

Adapt working manifest patterns for monorepos, Laravel, databases, workers, and containers.

Suggest a change

These examples use supported Openstead fields. Replace application paths and commands with those in your repository. Validate before applying, and configure secrets separately.

Python API and static frontend

This repository has a Django project under backend and a static frontend under frontend. Both services inherit the Blueprint repository and branch.

services:
  - name: example-api
    type: web
    plan: free
    runtime: python
    rootDir: backend
    startCommand: gunicorn config.wsgi:application --bind 0.0.0.0:8000
    configuration:
      port: 8000
      autoDeploy: commit

  - name: example-website
    type: static
    plan: free
    runtime: node
    rootDir: frontend
    buildCommand: npm ci && npm run build
    staticPublishPath: dist
    configuration:
      autoDeploy: commit

Ensure Gunicorn is declared in the backend dependencies and the frontend build really produces dist. Set allowed hosts, API origins, and other environment variables in each service.

Laravel and MySQL

services:
  - name: example-laravel
    type: web
    plan: starter
    runtime: php
    configuration:
      autoDeploy: commit

  - name: example-mysql
    type: mysql
    plan: mysql-free
    configuration:
      sourceType: none
      databaseVersion: "8.4"
      databaseName: example_app
      databaseUser: example_app
      backupEnabled: true
      backupRetentionDays: 7

Import configuration with deployment after sync disabled. Deploy MySQL, set Laravel's DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, and DB_PASSWORD using the database's private connection details, and configure the application's APP_KEY and APP_URL.

Complete checkout for the web service before its deployment. Configure persistent uploads with a disk through the service's storage controls. This manifest does not add that disk or inject database credentials automatically.

Worker and scheduled command

services:
  - name: example-worker
    type: worker
    plan: starter
    runtime: python
    startCommand: celery -A config worker --loglevel=info

  - name: example-nightly-report
    type: cron
    plan: starter
    runtime: python
    startCommand: python manage.py send_daily_report
    schedule: "0 8 * * *"
    configuration:
      timezone: Africa/Lagos
      timeoutSeconds: 1800

Install the command dependencies in the repository. Configure the queue connection and any application credentials through variables. The scheduled command runs at 08:00 in the configured timezone, with a 30-minute timeout. Both services require paid instance terms.

Dockerfile application

services:
  - name: example-container
    type: web
    plan: free
    configuration:
      runtime: docker
      buildMethod: dockerfile
      dockerfilePath: Dockerfile
      dockerContext: .
      port: 8080

The Dockerfile supplies the startup command. Make the application listen on 0.0.0.0:8080. A Free service's filesystem is ephemeral; add a paid persistent disk if the application needs durable local writes.

Deploy a published image

services:
  - name: example-image
    type: web
    plan: starter
    configuration:
      sourceType: image
      buildMethod: image
      image: ghcr.io/example/example-api:2026-09
      port: 8000

Replace the illustrative image with one you can pull. A private image additionally needs a matching workspace registry credential through configuration.registryId. Use a real registry UUID, never the token itself.

Apply changes safely

Validate with openstead blueprints validate --file openstead.yaml or the dashboard. Review the services and plans created, configure secrets, complete any checkout, and deploy. Confirm the resulting releases individually: a successful Blueprint sync reports applied configuration, while each deployment has its own outcome.

Need a hand? Contact Openstead support.

On this page