Skip to main content
A preset defines the software stack pre-installed in your pod. Each preset uses a pre-built image, so pod creation takes just 1–2 seconds.

Comparison Table

StaticPHPNode.jsPython
Web Servernginxnginx + PHP-FPM 8.3
RuntimePHP 8.3Node.js 20Python 3.12
Package ManagerComposernpmpip
App Port808030008000
App Root/home/instapod/app/home/instapod/app/home/instapod/app/home/instapod/app
Public Root/home/instapod/app/home/instapod/app/public/home/instapod/app/home/instapod/app
Process Managernginx (system)nginx + php-fpm (system)systemd (app service)systemd (app service)

How Presets Work

Presets are stored in the database and seeded from code on startup. Each preset maps to:
  1. A pre-built Incus image — Contains all packages pre-installed (e.g., instapods/nodejs)
  2. A cloud-init configuration — Sets hostname, starts services, and configures networking
  3. A runtime definition — Defines available capabilities (log paths, reload commands, etc.)

Choosing a Preset

  • Static — Best for HTML/CSS/JS sites, single-page apps, documentation sites. Files are served directly by nginx.
  • PHP — Best for PHP applications, Laravel, WordPress alternatives. nginx handles HTTP, PHP-FPM processes PHP files.
  • Node.js — Best for Express, Fastify, Next.js, or any Node application. Managed by systemd.
  • Python — Best for Django, Flask, FastAPI, or any Python application. Managed by systemd with built-in venv.

File Structure

All presets create a default user instapod with the app directory at /home/instapod/app. This is where you deploy your code. For PHP, the public root is /home/instapod/app/public — place your index.php there. Other files (like configuration, vendor directory) go in /home/instapod/app.