Runtimes disponibles
11 runtimes pré-configurés qui couvrent 95% des cas web. Pour le reste : customavec ton propre docker-compose.yml.
| Runtime | Techno | Port interne | Build 1er boot |
|---|---|---|---|
| static | nginx serving HTML/CSS/JS | 80 | ~15s |
| wordpress | PHP-FPM 8.3 + MariaDB embarquée | 80 | ~2 min |
| nextjs | Node 22 standalone SSR | 3000 | ~2-4 min |
| nextjs-ssg | next export → nginx | 80 | ~1-2 min |
| django | Python 3.12 + gunicorn | 8000 | ~2-3 min |
| rails | Ruby 3.3 + puma | 3000 | ~3-5 min |
| php-generic | PHP-FPM 8.3 + Apache | 80 | ~15s |
| node-generic | Node 22 + npm/yarn/pnpm/bun | 3000 | ~1-2 min |
| python-generic | Python 3.12 + gunicorn+uvicorn | 8000 | ~1-2 min |
| docker-image | Image DockerHub telle quelle | user-defined | temps de pull |
| custom | docker-compose.yml fourni | user-defined | dépend |
Détails par runtime
static
Site statique servi par nginx. HTML/CSS/JS/images. Aucun build.
Structure attendue : ton code dans site/. index.html à la racine.
Use cases : landing pages, sites générés (Hugo/Jekyll/11ty en local puis upload du dist).
wordpress
PHP-FPM 8.3 + MariaDB embarquée dans le compose. Volumes persistants pour wp-content/ et la DB.
Structure : le contenu WordPress vit dans wp_content/. Le core WP est monté auto.
Setup admin : après boot, visite https://<url>/wp-admin/install.php.
Credentials DB : dans .secrets.txt du site (chmod 600, admin only).
nextjs (SSR)
Next.js 15+ App Router avec output: "standalone". Node 22 alpine multi-stage build.
Requis dans next.config.mjs :
// next.config.mjsconst nextConfig = { output: 'standalone', reactStrictMode: true, }; export default nextConfig;
COPY /app/public ./public. Un dossier public/(même vide avec un .gitkeep) est requis, sinon le build échoue.nextjs-ssg
Next.js avec output: "export". Génère un site statique, servi par nginx.
Idéal pour les sites Next.js sans SSR ni API routes dynamiques.
django
Python 3.12 + gunicorn. Multi-stage build avec pip install puis collectstatic + migrate.
Convention : ton settings module s'appelle config.settings ou settings. Adapte le Dockerfile sinon.
Admin : https://<url>/admin/ (crée un superuser via exec_site admin only).
rails
Ruby 3.3 + puma. bundle install au build. Rails 7.x supporté.
Starter : Rack minimaliste. Remplace Gemfile + config.ru par ton app Rails complète.
php-generic
PHP 8.3 + Apache image officielle. Ton code dans www/ monté sur /var/www/html.
Use cases : Symfony, Laravel, WordPress custom (non embarqué), PHP legacy.
node-generic
Node 22 alpine. Auto-detect npm/yarn/pnpm lockfile. Le script npm start doit bind 0.0.0.0:3000.
// package.json (minimum){ "name": "my-app", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.19.0" } }
Le build script (si présent) est exécuté après install (utile pour tsc / esbuild).
Use cases : Express, Fastify, Hono, Koa, Bun. Pour Next.js, utilise nextjs ou nextjs-ssg.
python-generic
Python 3.12 slim + gunicorn+uvicorn workers. Convention : callable app dans main.py.
// main.py (FastAPI)from fastapi import FastAPI app = FastAPI() @app.get("/") async def home(): return {"hello": "world"}
// main.py (Flask)from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello World"
requirements.txt à côté de main.py.
docker-image
Run une image Docker Hub telle quelle. Aucun build. Idéal pour outils open-source packagés.
Params requis :
// JSON create_site payload{ "name": "umami", "runtime": "docker-image", "docker_image": { "image": "ghcr.io/umami-software/umami:postgresql-latest", "internal_port": 3000, "env": { "DATABASE_URL": "postgresql://user:pass@db-host/umami", "APP_SECRET": "..." }, "with_volume": true } }
Use cases : Ghost, Umami, Metabase, n8n, Directus, Strapi, Plausible, Vaultwarden, Uptime Kuma...
create_database+ attach_db_to_site, ou pointe vers une DB existante via env.DATABASE_URL.custom
Pour les stacks multi-container ou tout ce que les runtimes ci-dessus ne couvrent pas.
Fournis un docker-compose.yml complet en input. Substitutions supportées :
${IRIDFLOW_PORT}→ port assigné par Iridflow (bind127.0.0.1:PORT)${IRIDFLOW_SLUG}→ slug complet du site
// Exemple compose_yamlservices: web: image: mon-image:latest ports: - "127.0.0.1:${IRIDFLOW_PORT}:8080" environment: APP_NAME: ${IRIDFLOW_SLUG}