App Recipes

Recipes are reusable application blueprints that let you define an app configuration once and deploy instances of it to any server with a single click. Instead of manually configuring the same settings each time, a recipe captures the app type, runtime versions, Git repository, database requirements, environment variables, and post-deploy commands into a template.

Creating a Recipe

Navigate to Recipes in the sidebar and click Create Recipe. The recipe builder walks you through these steps:

  1. Name & Description — Give your recipe a recognizable name and optional description.
  2. App Type — Choose from WordPress, Laravel, Node.js, Python, Docker, or Static Site.
  3. App Configuration — Set runtime versions (PHP, Node, Python), port, Git repository, build/deploy commands, or Docker image and template.
  4. Database — Optionally provision a standalone database (PostgreSQL, MariaDB, or MongoDB) alongside the app. WordPress and Laravel deployments already create their own databases automatically, so this step is mainly for Node.js, Python, Docker, and Static apps that need a separate database.
  5. Environment Variables — Define default .env key-value pairs. Users can override values at deploy time.
  6. Post-Deploy Commands — Commands that run after the app is fully deployed, such as database migrations or seed scripts.
  7. Review — Confirm your settings and save the recipe.

Deploying a Recipe Instance

From a recipe's detail page, click Deploy Instance. The deploy wizard has three steps:

  1. Select Server — Pick the target server from your connected servers.
  2. Configure — Enter the domain for this instance and optionally override any environment variables defined in the recipe.
  3. Review & Deploy — Confirm settings and deploy. You'll see real-time progress as the app is provisioned.

Once deployment completes, you can click View App to go to the app's detail page.

Managing Instances

Each recipe tracks all deployed instances. From the recipe's detail page you can:

  • View the linked app for any instance
  • Destroy an instance, which deletes the app and any standalone database created by the recipe from the server

Editing & Deleting Recipes

  • Click Edit on a recipe to update its name, description, or configuration. Existing instances are not affected by changes to the recipe.
  • Click Delete Recipe in the Danger Zone. All instances must be destroyed first before a recipe can be deleted.

Recipe Config Reference

The recipe configuration is stored as JSON and supports these fields:

Field Required Description
type Yes App type: wordpress, laravel, nodejs, python, docker, static
php_version No PHP version (WordPress/Laravel): 8.1, 8.2, 8.3, 8.4
node_version No Node.js version: 18, 20, 22
python_version No Python version: 3.10, 3.11, 3.12
port No Application port (Node.js/Python/Docker)
git_repo_url No Git repository URL
git_branch No Git branch (default: main)
build_command No Build command (e.g. npm install && npm run build)
deploy_command No Deploy command (Laravel: composer install —no-dev && php artisan migrate —force)
docker_image No Docker image (e.g. nginx:latest)
docker_template No Predefined Docker template key
docker_internal_port No Container-internal port
docker_compose_dir No Subdirectory containing docker-compose.yml
database.type No Database engine: postgresql, mariadb, mongodb
database.name_suffix No Database name prefix (final name: {suffix}_{system_user})
env_template No Array of {"key": "...", "value": "..."} pairs
post_deploy_commands No Array of shell commands to run after deployment

Example: Node.js API with PostgreSQL

Create a recipe with:

  • Type: Node.js
  • Node Version: 20
  • Port: 3000
  • Git Repo: https://github.com/your-org/api-server.git
  • Branch: main
  • Build Command: npm install
  • Database: PostgreSQL, suffix apidb
  • Env Template: NODE_ENV=production, PORT=3000
  • Post-Deploy: npm run migrate

Then deploy instances to different servers with unique domains — each gets its own app, database, and environment.