Frameworks – zeltro new

zeltro new <framework> <name> legt ein neues Projekt von Grund auf an, das Sie schreiben. Beide Argumente sind Pflicht und stehen an fester Position.

zeltro new laravel my-shop
zeltro new flask my-api --database sqlite
zeltro new express my-service --database postgres --version latest

Für fertige Apps von Dritten, die Sie betreiben statt schreiben, gehen Sie stattdessen zur App-Bibliothek.


Unterstützte Frameworks#

Framework Laufzeit-Image Standard-Datenbank
laravel PHP 8.3 MySQL
kavera PHP 8.3 MySQL
octobercms PHP 8.3 MySQL
drupal PHP 8.3 MySQL
wordpress PHP 8.3 MySQL
php PHP 8.3 MySQL
fastapi Python 3.12 PostgreSQL
flask Python 3.12 PostgreSQL
django Python 3.12 PostgreSQL
python Python 3.12 PostgreSQL
express Node 22 MySQL
nestjs Node 22 MySQL
fastify Node 22 MySQL
node Node 22 MySQL
nextjs Node 22 SQLite
nuxt Node 22 SQLite
sveltekit Node 22 SQLite
astro Node 22 SQLite
hono Node 22 SQLite
react Node 22 SQLite
vue Node 22 SQLite

Jede Laufzeit ist eines von Zeltros Basis-Images: canebaycomputers/cbc:nginx-php8 (PHP 8.3 hinter nginx und php-fpm), canebaycomputers/cbc:nginx-python3 (Python 3.12; Ihre App lauscht auf Port 8000, nginx leitet weiter) oder canebaycomputers/cbc:nginx-node (Node 22; Ihre App lauscht auf Port 3000, nginx leitet weiter). Jedes Projekt antwortet auf Port 80.

Fordern Sie eine Datenbank an, die das Framework nicht nutzen kann, warnt Zeltro und wechselt zu einer passenden. WordPress gibt es nur mit MySQL, und Laravel, Kavera, October CMS, Drupal und Django bekommen kein MongoDB.


Frontend-Frameworks#

nextjs, nuxt, sveltekit, astro, react und vue werden als laufende Dev-Server mit Hot Reload angelegt, über nginx auf Port 80 erreichbar. Datei bearbeiten, und die Seite aktualisiert sich – kein Build-Schritt, kein Port zum Merken.

Anders als alle anderen Frameworks hier verwenden sie standardmäßig SQLite, denn ein Frontend-Projekt sollte keinen Datenbankserver starten, den es nie abfragt. Brauchen Sie einen, fordern Sie ihn ausdrücklich an:

zeltro new nextjs my-app --database postgres

react und vue sind einfache Single-Page-Apps auf Vite, ohne Server-Rendering. hono ist ein API-Framework und kein UI-Framework und steht nur bei ihnen, weil es dasselbe Node-Basis-Image nutzt.

Hot Reload ist für Sie eingerichtet. Der eigene Port des Dev-Servers wird nie veröffentlicht. Der Browser erreicht die App über nginx auf Port 80, deshalb legen die Vite-basierten Projekte (nuxt, sveltekit, astro, react, vue) den HMR-Socket in ihrer Konfiguration auf Port 80 fest (server.ws.clientPort, das Vite 8.1 von server.hmr.clientPort umbenannt hat). Ändern Sie das, verbindet sich Hot Reload nicht mehr, während die Seite weiterhin lädt – ein verwirrender Fehler. nextjs braucht keine Port-Einstellung, weil sein Dev-Server sich über dieselbe Adresse wie die Seite zurückverbindet. Next.js 16 lehnt allerdings Hot-Reload-Verbindungen von Hosts ab, die es nicht kennt, deshalb listet die next.config.mjs des Gerüsts die privaten IPv4-Bereiche in allowedDevOrigins auf. Ergänzen Sie jeden weiteren Hostnamen, über den Sie das Projekt aufrufen.

Kavera#

Kavera ist ein Laravel-natives Website-Framework: Blade-Seiten als einfache Dateien plus dienstgestützte dynamische Inhalte (Blogger-Posts, Eventbrite-Events, Flickr-Galerien, Formular-Webhooks), die über Redis zwischengespeichert werden. Formulare bringen E-Mail, Webhooks, Spamschutz und reCAPTCHA mit; Seiten haben SEO-Titel und optional JSON-LD.

Es gibt Kavera, weil ein Agent, der Seitendateien bearbeitet, besser ist als einer, der die Admin-Oberfläche eines CMS bedient. Greifen Sie für Marketing-Websites, Firmen-Websites, Portfolios und Galerien zu Kavera statt zu einfachem Laravel – und zu einfachem Laravel, wenn Sie eine echte Anwendung mit eigenen Models und Geschäftslogik brauchen.

zeltro new kavera my-site

Die Seiten liegen in resources/views/content. Nachdem Sie eine hinzugefügt oder entfernt haben, aktualisieren Sie das Seitenregister, damit die Routen aufgelöst werden:

zeltro art app:update-content-list

October CMS und Drupal#

Beide sind CMS mit Admin-Oberfläche und werden aus dem Quellcode installiert, damit sie Zeltros gemeinsame Datenbanken nutzen.

  • October CMS (zeltro new octobercms my-site) basiert auf Laravel. Themes und Plugins liegen im Projekt, ein Agent kann sie also bearbeiten. Der Admin-Bereich ist unter /admin (der BACKEND_URI in der .env); den Admin-Benutzer legen Sie mit zeltro art october:passwd <email> <password> an. Für die lokale Entwicklung ist es kostenlos, für den Produktivbetrieb brauchen Sie aber eine Lizenz von octobercms.com.
  • Drupal (zeltro new drupal my-site) installiert Drupal 11 mit Composer und führt dann drush site:install aus. Das Docroot ist public/ statt Drupals üblichem web/. Es ist das Framework, dessen Anlegen am längsten dauert; rechnen Sie mit mehreren Minuten. Drush starten Sie mit zeltro drush <args>.

Optionen#

Option Beschreibung Werte
--database <type> Datenbank-Engine auto (Standard: siehe Tabelle oben), mysql, postgres, mongodb, sqlite
--db-name <name> Name der Datenbank Standard: Projektname, Bindestriche → Unterstriche
--version <ver> Framework-Version Nur Laravel und WordPress: latest (Standard) oder eine Versionsnummer. Andere Frameworks ignorieren sie
--image <ref> Docker-Image überschreiben Standard: das Basis-Image des Frameworks
--no-migration Migrationen überspringen Migrationen laufen standardmäßig
--one-off Die Übergabe an die KI nach dem Anlegen überspringen
--github Ein GitHub-Repository in Ihrem Konto anlegen Erfordert gh-Anmeldung
--github-org <org> Das Repository in einer Organisation anlegen
--public / --private Sichtbarkeit des Repositorys Standard: privat
--no-storage-symlink Den Symlink public/storage überspringen Nur Laravel

Datenbanken#

SQLite#

zeltro new flask notes --database sqlite
zeltro new django blog --database sqlite
zeltro new laravel shop --database sqlite

SQLite braucht keinen gemeinsamen Dienst – es ist eine einzelne Datei. Zeltro legt sie an, trägt sie in die .env des Projekts ein und führt die Migrationen ganz normal aus.

Die Datei liegt immer im Projektverzeichnis:

Framework Pfad
Django db.sqlite3
Laravel, Kavera, October CMS database/database.sqlite
Drupal public/sites/default/files/.ht.sqlite
Alle anderen database.sqlite

Dieser Ort ist Absicht. Das Projektverzeichnis ist der einzige Pfad, der per Bind-Mount in den Container eingebunden wird. Eine Datenbank an jedem anderen Ort ginge jedes Mal verloren, wenn der Container bei zeltro up neu erstellt wird. Außerdem steht sie standardmäßig in .gitignore.

Gut für Prototypen, Werkzeuge für einen Benutzer und Test-Fixtures. Für alles mit gleichzeitigen Zugriffen nehmen Sie Postgres oder MySQL.

Gemeinsame Datenbankserver#

mysql, postgres und mongodb verbinden sich mit den Containern der gemeinsamen Dienste. Zeltro legt die Datenbank an und schreibt die Verbindungsdaten in die .env des Projekts – Zugangsdaten tragen Sie nie von Hand ein. Hostnamen und Zugangsdaten stehen unter Architektur → Gemeinsame Dienste.


Arbeiten in einem Projekt#

Führen Sie diese Befehle im Projektverzeichnis aus. Sie laufen im Container, mit der richtigen Laufzeit.

PHP#

zeltro composer install
zeltro art migrate
zeltro wp plugin list --status=active
zeltro drush status
zeltro php script.php
zeltro tinker

Python#

zeltro python -c "import sys; print(sys.version)"
zeltro pip install httpx
zeltro django manage migrate
zeltro django manage createsuperuser
zeltro shell

Python-Container stellen python3 bereit, nicht python.

Node#

zeltro npm install
zeltro npx tsc --init
zeltro node script.js
zeltro shell

Jedes Framework#

zeltro exec <cmd>              # run a command, no TTY — good for scripts and CI
zeltro exec-root <cmd>         # as root
zeltro bash                    # interactive shell
zeltro shell                   # framework-aware REPL (tinker / django shell / node / python3; bash otherwise)
zeltro supervisor restart all  # restart in-container processes
zeltro supervisor-status

Nutzen Sie zeltro supervisor, nie zeltro exec supervisorctl – Letzteres läuft als Benutzer developer und wird am supervisor-Socket abgewiesen.

Extras für Laravel#

zeltro db-refresh      # fresh migration + seed
zeltro cache-refresh   # clear all caches
zeltro phpcs app/      # static analysis
zeltro phpcbf app/     # auto-fix
zeltro phpmd app/File.php
zeltro php -l app/File.php

Ein bestehendes Projekt übernehmen#

zeltro setup my-project                          # a folder already in ~/zeltro-projects/
zeltro setup my-project --framework django       # force detection
zeltro setup my-project --overwrite-env          # repoint an existing .env at shared services
zeltro setup my-project --no-startup             # register without starting, to review the compose

Die Framework-Erkennung liest die Dateien des Projekts: artisan, manage.py, main.py, app.py, package.json, wp-config.php und eine composer.json, die drupal/core verlangt. Eine main.py oder app.py, die Flask importiert, ist Flask; jede andere main.py gilt als FastAPI. Bei Node-Projekten entscheiden die Abhängigkeiten in package.json zwischen Next.js, Nuxt, SvelteKit, Astro, Hono, Fastify, Express, NestJS, React, Vue und einfachem Node.

Einen Fehler in dieser Übersetzung gefunden? Sagen Sie es uns auf GitHub.