Comparison Table
| Static | PHP | Node.js | Python | |
|---|---|---|---|---|
| Web Server | nginx | nginx + PHP-FPM 8.3 | — | — |
| Runtime | — | PHP 8.3 | Node.js 20 | Python 3.12 |
| Package Manager | — | Composer | npm | pip |
| App Port | 80 | 80 | 3000 | 8000 |
| 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 Manager | nginx (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:- A pre-built Incus image — Contains all packages pre-installed (e.g.,
instapods/nodejs) - A cloud-init configuration — Sets hostname, starts services, and configures networking
- 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 userinstapod 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.