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(derBACKEND_URIin der.env); den Admin-Benutzer legen Sie mitzeltro 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 danndrush site:installaus. Das Docroot istpublic/statt Drupals üblichemweb/. Es ist das Framework, dessen Anlegen am längsten dauert; rechnen Sie mit mehreren Minuten. Drush starten Sie mitzeltro 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.