Files
wiki/Catalogue-Self-Hosted/apps/app-stormkit.md
T
2026-06-09 18:40:21 +02:00

7.0 KiB


title: Stormkit created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, development, deployment, frontend, paas, ci-cd] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=Development, https://github.com/stormkit-io/stormkit-io]

💻 Stormkit

PaaS self-hosted pour le déploiement d'apps frontend — connectez un repo Git, push, et Stormkit build, optimise et déploie automatiquement votre SPA (React, Vue, Svelte, Solid, Astro…) avec CDN, preview par PR et rollback instantané.

📋 Informations Générales

Champ Valeur
Site web stormkit.io
GitHub stormkit-io/stormkit-io
License AGPL-3.0
Langage Go (backend) + TypeScript (build agents)
Étoiles GitHub 95
Catégorie Development, PaaS / Deployment
Référence selfh.st Development

📝 Description

Stormkit est un PaaS (Platform-as-a-Service) spécialisé dans le déploiement d'apps frontend : c'est le « Vercel/Netlify self-hosted » que beaucoup attendent. Vous connectez un repo GitHub/GitLab/Bitbucket, vous choisissez le framework (React, Vue, Svelte, Solid, Astro, Next, Nuxt, SvelteKit, Gatsby…), et Stormkit se charge du build, de l'optimisation, du déploiement, de la distribution CDN et des previews par Pull Request.

Le modèle serverless functions est supporté pour les runtimes Node.js, et l'infrastructure de build s'appuie sur des build agents que vous pouvez run on-prem (Docker). C'est particulièrement adapté aux agences, studios et équipes produit qui veulent proposer du « push to deploy » à leurs clients sans dépendre de Vercel (payant au-delà du hobby) ou de Netlify (verrouillage progressif).

L'alternative open source la plus connue reste Coolify (plus généraliste, supporte aussi backends, DBs, Docker apps) et Dokku (mini-Heroku en PaaS Docker). Stormkit mise sur la spécialisation frontend et la simplicité d'usage : un dashboard unique, des environnements par branche, des previews automatiques sur chaque PR, et un rollback en un clic.

⚠️ Notes importantes : Stormkit reste un projet jeune avec un nombre d'étoiles relativement faible (95). Pour un usage critique en production, évaluer la maturité du projet, la qualité de la communauté et la roadmap. La société éditrice propose une version cloud (stormkit.io) en complément du self-host, ce qui est un bon indicateur de soutenabilité.

🚀 Installation

Via Docker (recommandé)

# docker-compose.yml
version: '3.8'
services:
  stormkit-server:
    image: ghcr.io/stormkit-io/stormkit-io:latest
    container_name: stormkit-server
    restart: unless-stopped
    ports:
      - "8888:8888"
    environment:
      SK_HOST: "https://stormkit.example.com"
      SK_DATABASE_URL: "postgresql://storm:***changeme***@db:5432/stormkit"
      SK_REDIS_URL: "redis://redis:6379/0"
      SK_ENCRYPTION_KEY: "openssl-rand-hex-32"
      SK_GITHUB_CLIENT_ID: "***"
      SK_GITHUB_CLIENT_SECRET: "***"
      SK_BUILD_AGENT_TOKEN: "openssl-rand-hex-32"
    depends_on: [db, redis]
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.stormkit.rule=Host(`stormkit.example.com`)"
      - "traefik.http.routers.stormkit.entrypoints=websecure"
      - "traefik.http.routers.stormkit.tls.certresolver=letsencrypt"

  stormkit-builder:
    image: ghcr.io/stormkit-io/builder:latest
    container_name: stormkit-builder
    restart: unless-stopped
    environment:
      SK_SERVER_URL: "https://stormkit.example.com"
      SK_AGENT_TOKEN: "openssl-rand-hex-32"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock   # pour builder les images

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: stormkit
      POSTGRES_USER: storm
      POSTGRES_PASSWORD: ***changeme***
    volumes:
      - storm_db:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped

volumes:
  storm_db:

Installation manuelle

git clone https://github.com/stormkit-io/stormkit-io.git
cd stormkit-io
cp .env.example .env   # éditer SK_*
docker compose up -d

⚙️ Configuration

  1. OAuth GitHub/GitLab : créer une OAuth app sur le provider et renseigner SK_GITHUB_CLIENT_ID/SECRET.
  2. Build agent : le service stormkit-builder a besoin d'un accès au socket Docker de l'hôte pour builder les images — isolé sur un hôte dédié recommandé.
  3. Domaine et wildcard DNS : configurer un wildcard *.apps.example.com pour les previews par PR (chacune a son URL).
  4. Webhook Git : ajouter le webhook Stormkit sur chaque repo (auto via OAuth).
  5. Backups PostgreSQL : storm_db contient l'état des apps, builds, deploys — sauvegarder quotidiennement.

🔗 Alternatives

  • Vercel — Le plus populaire, excellent DX, mais cloud only et payant au-delà du hobby tier.
  • Netlify — Concurrent historique, fonctions serverless, formulaires, identité — pricing complexe.
  • Cloudflare Pages — Gratuit, CDN global, mais lié à l'écosystème Cloudflare et Workers only.
  • Coolify — Alternative self-hosted généraliste (frontends + backends + DBs), plus large que Stormkit.
  • Dokku — Mini-Heroku open source, basé sur Docker + Git push, plus DIY.
  • CapRover — PaaS self-hosted avec marketplace d'« one-click apps », plus simple que Dokku.

🔒 Sécurité

  • 🔐 HTTPS obligatoire via app-traefik : OAuth, builds et previews par PR transitent en clair sinon.
  • 🔒 SK_ENCRYPTION_KEY robuste : openssl rand -hex 32, sauvegarder hors-ligne.
  • 🛡️ Build agent isolé : le builder a accès au socket Docker — NE JAMAIS le co-poser avec d'autres apps sensibles. Idéalement sur un hôte Docker dédié.
  • 🛡️ OAuth scopes minimaux : repo (lecture) pour GitHub, jamais admin:org ou workflow.
  • 🛡️ Isolation des previews : les previews par PR sont des environnements éphémères — s'assurer qu'ils n'ont pas accès à des secrets de prod.
  • 🛡️ Backups PostgreSQL : storm_db est critique (état des apps), tester la restauration.
  • 🛡️ Logs et audit : activer les logs de déploiement (qui a push, quel commit, quel environnement).

📚 Ressources

🔗 Pages Liées