Diese Seite enthält alle Regeln, die Ihr KI-Assistent braucht, um Ihr Projekt für Ai to App vorzubereiten. Sie müssen sie nicht lesen; geben Sie Ihrem Assistenten einfach die folgende Nachricht.
Lesen Sie den Leitfaden unter https://aitoapp.com/de/upload-guide. Bereiten Sie mein Projekt danach für Ai to App vor, arbeiten Sie die Checkliste Punkt für Punkt ab und erstellen Sie die ZIP-Datei.
Ai to App prüft und veröffentlicht Websites und Apps, die als ZIP-Datei hochgeladen werden. Hochgeladene Dateien werden während der Prüfung nicht ausgeführt. Serveranwendungen laufen nach der Veröffentlichung in einem eigenen, abgeschotteten Bereich, getrennt von anderen Projekten. Dieser Leitfaden enthält alle Regeln, die nötig sind, damit Ihr Projekt den ersten Upload ohne Probleme übersteht.
1. Projekttyp bestimmen
Ai to App erkennt den Typ selbst anhand der Dateien in der Zip-Datei. Passen mehrere Typen, gilt die folgende Reihenfolge; der weiter oben stehende Typ gewinnt.
| Reihenfolge | Typ | Woran er erkannt wird | Was in die Zip-Datei gehört |
|---|---|---|---|
| 1 | Dockerfile | Ein Dockerfile im Stammverzeichnis | Quellcode + Dockerfile |
| 2 | Next.js (Server) | next in den Abhängigkeiten der package.json | Quellcode |
| 2 | Next.js (statischer Export) | output: 'export' in next.config.* | Das INNERE des Ordners out nach dem Build |
| 3 | Node.js-Server | express, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.io | Quellcode |
| 4 | Gebaute Website | vite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + ein build-Skript | Das INNERE des Ordners dist nach dem Build (bei react-scripts: build) |
| 5 | Node.js (allgemein) | Ein start-Skript oder ein main-Feld in der package.json | Quellcode |
| 6 | Python | requirements.txt, pyproject.toml, Pipfile oder manage.py | Quellcode |
| 7 | .NET | Eine .csproj / .fsproj im Stammverzeichnis | Quellcode |
| 8 | Statische Website | Nur index.html und HTML/CSS/JS-Dateien | Die Dateien selbst |
Wichtig:
- Bei gebauten Websites (React, Vue, Vite, Angular, Svelte, Astro) zuerst
npm run buildausführen. Packen Sie die Dateien IM INNERN des entstandenen Ordnersdist(bzw.build) in die Zip-Datei. Im Stammverzeichnis der Zip-Datei muss direktindex.htmlliegen. - Go-Projekte werden nur mit einem
Dockerfileveröffentlicht. - docker-compose wird nicht unterstützt; nur die Hauptanwendung (Dockerfile) läuft. Die Datenbank stellt Ai to App separat bereit (siehe Abschnitt 4).
2. ZIP-Regeln
Grenzen
| Regel | Grenze |
|---|---|
| Größe der Zip-Datei | höchstens 50 MB |
| Gesamtgröße der aus der Zip-Datei entpackten Dateien | Bis zu 200 MB bei statischen Websites, bis zu 300 MB bei Server-Apps (100 MB im kostenlosen Plan) |
| Größe einer einzelnen Datei | höchstens 25 MB |
| Anzahl der Dateien | Bis zu 2000 bei statischen Websites, bis zu 5000 bei Server-Apps |
Ordnerstruktur
- Die Projektdateien müssen im Stammverzeichnis der Zip-Datei oder in genau einem übergeordneten Ordner liegen.
- Bei einer statischen Website muss
index.htmlim Stammverzeichnis der ZIP-Datei oder im einzigen übergeordneten Ordner liegen. - Zwei Dateien mit demselben Pfad sowie unsichere Pfade mit
../werden nicht akzeptiert.
NICHT in die Zip-Datei packen (wird automatisch entfernt, belegt nur unnötig Platz)
- Abhängigkeiten:
node_modules,.venv,venv,__pycache__,bower_components,.pytest_cache,.mypy_cache - Werkzeug- und Versionskontrollordner:
.git,.svn,.hg,.idea,.vscode,.vs,.cache,.turbo,.parcel-cache,.gradle - Build-Ausgabe:
.next,.nuxt,.svelte-kit. Bei .NET zusätzlichbinundobj. - Systemdateien:
__MACOSX,.DS_Store,Thumbs.db,desktop.ini,*.pyc
NIEMALS in die Zip-Datei packen (wird entfernt und nicht gespeichert)
.env-Dateien: wie.env,.env.local,.env.production. Beispieldateien dürfen bleiben:.env.example,.env.sample,.env.template. Liegt eine.envin der ZIP, wird die Datei nicht gespeichert; nur öffentliche Werte mit den PräfixenVITE_,NEXT_PUBLIC_,PUBLIC_,REACT_APP_gehen in den Build. Geheime Werte tragen Sie im Panel ein.- Schlüssel- und Zugangsdatendateien:
*.pem,*.key,*.p12,*.pfx,*.ppk,*.jks,*.keystore,id_rsa,id_ed25519,.npmrc,.pypirc,.netrc. Wurde eine davon bereits früher weitergegeben, erneuern Sie den Schlüssel.
Dateien, die den Upload stoppen
- Im Anwendungsquellcode: Windows-Skript- und Installationsdateien (
.bat,.cmd,.ps1,.vbs,.scr,.msi). Kompilierte Programmdateien (.exe,.dll,.sound Ähnliches) werden entfernt; der Server baut das Projekt aus dem Quellcode. - Bei einer statischen Website:
- Servercode und ausführbare Dateien sind verboten:
.php,.py,.rb,.pl,.cgi,.asp,.aspx,.cshtml,.jsp,.exe,.dll,.sh,.jar,.htaccess,.config. - Erlaubte Typen:
.html,.htm,.css,.js,.mjs,.json,.webmanifest,.txt,.xml,.csv,.svg,.png,.jpg,.jpeg,.gif,.webp,.avif,.ico,.bmp,.woff,.woff2,.ttf,.otf,.eot,.mp4,.webm,.mp3,.ogg,.wav,.pdf. .map- und.md-Dateien werden übersprungen.
- Servercode und ausführbare Dateien sind verboten:
3. Pflichteinstellungen für Serveranwendungen
Port und Adresse
Ai to App übergibt den Port, auf dem die Anwendung lauschen soll, über die Umgebungsvariable PORT. Die Anwendung muss sich an die Adresse 0.0.0.0 binden; localhost oder 127.0.0.1 sind von außen nicht erreichbar.
| Sprache | Richtige Verwendung |
|---|---|
| Node.js | app.listen(process.env.PORT || 3000, '0.0.0.0') |
| Python (FastAPI) | uvicorn main:app --host 0.0.0.0 --port $PORT |
| Python (Flask) | gunicorn app:app --bind 0.0.0.0:$PORT |
| Python (Django) | gunicorn config.wsgi --bind 0.0.0.0:$PORT |
| Go | ":" + os.Getenv("PORT") |
| .NET | Im Code darf KEINE Zeile UseUrls(...) stehen |
Startbefehl
- Node.js:
- Das
start-Skript in derpackage.jsonmuss den Produktionsserver starten, z. B."start": "node server.js". - Entwicklungsbefehle dürfen NICHT in
startstehen:vite,next dev,nodemon,ts-node-dev,tsx watch,webpack serve,react-scripts start,npm run dev. Diese bleiben imdev-Skript. - TypeScript: Fügen Sie
"build": "tsc"hinzu und setzen Sie"start": "node dist/index.js". TypeScript zur Laufzeit zu kompilieren ist langsam. - Legen Sie die Lock-Datei (
package-lock.json,pnpm-lock.yaml,yarn.lockoderbun.lockb) in die Zip-Datei. - Geben Sie die Node-Version über
package.json→engines.nodeoder.nvmrcan.
- Das
- Python:
- FastAPI, Flask, Django, Streamlit und Gradio werden automatisch erkannt.
- Verwenden Sie eine andere Struktur, legen Sie im Stammverzeichnis eine
Procfilean:web: <Startbefehl>. Der Befehl muss0.0.0.0und$PORTverwenden. - Flask:
gunicornmuss in derrequirements.txtstehen. - Django:
ALLOWED_HOSTSdarf nicht leer sein,DEBUG = Falsemuss gesetzt sein undSECRET_KEYmuss aus einer Umgebungsvariable gelesen werden. - Geben Sie die Python-Version über
runtime.txtoder.python-versionan.
- .NET: Im Stammverzeichnis muss eine
.csprojliegen. Ai to App baut mitdotnet publish -c Release; die Zielversion wird ausTargetFrameworkin der.csprojgelesen. - Dockerfile: Geben Sie den Port der Anwendung mit
EXPOSEan. Die Anwendung muss trotzdem die VariablePORTlesen.
4. Datenbank
Ai to App richtet die Datenbank selbst ein und übergibt die Verbindungsdaten über eine Umgebungsvariable. Schreiben Sie die Verbindungsadresse nicht in den Code; lesen Sie sie aus der folgenden Variable.
| Datenbank | Umgebungsvariable | Hinweis |
|---|---|---|
| PostgreSQL | DATABASE_URL | Ihnen werden eine eigene Datenbank und ein eigener Benutzer zugewiesen |
| MySQL | DATABASE_URL | Ihnen wird eine eigene Datenbank zugewiesen |
| MongoDB | MONGODB_URI | Ihnen wird eine eigene Datenbank zugewiesen |
| Redis | REDIS_URL | |
| SQLite | DATABASE_PATH | Die Datei wird im dauerhaften Ordner gehalten (/data/app.db) |
| SQL Server | — | Wird nicht bereitgestellt; tragen Sie die Adresse Ihres eigenen Servers als Umgebungsvariable ein oder wechseln Sie zu PostgreSQL |
| Supabase, Firebase, Neon, PlanetScale, Turso | Ihre eigenen Variablen | Tragen Sie die Verbindungsdaten im Panel als Umgebungsvariablen ein |
- Prisma: Legen Sie den Ordner
prisma/migrationsin die Zip-Datei; andernfalls werden die Tabellen möglicherweise nicht automatisch erstellt. - Alembic: Ist eine
alembic.inivorhanden, wird vor der Veröffentlichung automatischalembic upgrade headausgeführt. - SQLite-Datei: Die SQLite-Datei in der Zip-Datei wird nur bei der ersten Veröffentlichung als Startdaten verwendet; spätere Uploads überschreiben die Live-Daten nicht. Legen Sie keine Testdatenbank mit personenbezogenen Daten in die Zip-Datei.
- Aktualisierungen: Wenn Sie eine neue Version hochladen, bleiben die Daten in der Datenbank erhalten.
5. Dauerhafte Dateien
Der Datenträger des Bereichs, in dem die Anwendung läuft, ist nicht dauerhaft; er wird bei jeder neuen Veröffentlichung gelöscht. Der einzige dauerhafte Ordner ist /data.
- Speichern Sie von Besuchern hochgeladene Fotos und Dokumente, erzeugte Dateien und die SQLite-Datenbank unter
/data. - Lesen Sie den Ordnerpfad aus der Umgebungsvariable
DATA_DIR; Ai to App setzt sie für Sie auf/data.
6. Geheimnisse und Umgebungsvariablen
- Schreiben Sie Passwörter, API-Schlüssel und Tokens nicht in den Code; lesen Sie sie aus Umgebungsvariablen. Die Werte tragen Sie im Ai to App-Panel ein; sie werden verschlüsselt gespeichert.
- Öffentliche Präfixe: Variablen mit den Präfixen
VITE_,NEXT_PUBLIC_,REACT_APP_undPUBLIC_werden beim Build in den Code eingebettet und sind für jeden Besucher sichtbar. Legen Sie dort keine geheimen Werte ab. - Anmeldesystem (NextAuth / Auth.js):
NEXTAUTH_URL(oderAUTH_URL) muss die echte Adresse der Website sein undNEXTAUTH_SECRET(oderAUTH_SECRET) muss gefüllt sein. - OAuth (Google, GitHub): Tragen Sie in den Einstellungen des Anbieters die Adresse der veröffentlichten Website als autorisierte Weiterleitungs-URI ein.
- Anmeldung mit Supabase: Tragen Sie in Supabase unter Authentication > URL Configuration bei Site URL Ihre veröffentlichte Adresse ein und fügen Sie bei Redirect URLs die genaue Adresse hinzu (
https://your-app.aitoapp.com/). Sonst führen die Links in Bestätigungs- und Anmelde-E-Mails zulocalhost:3000und die Anmeldung wird nicht abgeschlossen. Für die Google-Anmeldung tragen Sie in Google Cloud Ihre veröffentlichte Adresse bei Authorized JavaScript origins undhttps://PROJECT.supabase.co/auth/v1/callbackbei Authorized redirect URIs ein. - Variablen, die Ai to App selbst bereitstellt:
PORT,HOST=0.0.0.0,DATA_DIR=/dataund die Datenbankvariablen (Abschnitt 4). Bei Node.jsNODE_ENV=production.
7. Was nicht im Code stehen darf
localhost-Adressen: Code, der Anfragen anhttp://localhost:...oderhttp://127.0.0.1:...sendet, geht nach der Veröffentlichung an den eigenen Rechner des Besuchers und funktioniert nicht. Lesen Sie die Adresse aus einer Umgebungsvariable (z. B.import.meta.env.VITE_API_URL) oder verwenden Sie, wenn sie auf demselben Server liegt, einen relativen Pfad (fetch('/api/...'))./api/...-Anfragen in einer statischen Website: Hinter einer statischen Website steht kein Server. Wird eine API benötigt, bereiten Sie das Projekt als eine einzige Serveranwendung (z. B. Express) vor, die zusammen mit ihrer API läuft.- Fester Port:
const PORT = 3000darf nicht allein stehen; verwenden Sieprocess.env.PORT || 3000. - Debug-Modus:
debug=TrueoderDEBUG = Truedarf in der Produktion nicht aktiv sein. - In den Code eingebettete Geheimnisse: Ein dort gefundener Schlüssel gilt als weitergegeben; erneuern Sie ihn.
8. Checkliste für den Assistenten
- Der Projekttyp wurde bestimmt (Abschnitt 1).
- Bei einer gebauten Website wurde der Build ausgeführt und nur das Innere des Ordners
dist/build/outgezippt;index.htmlliegt im Stammverzeichnis. - Bei einer Serveranwendung startet das
start-Skript (oder die Procfile) den Produktionsserver. - Der Port wird aus der Umgebungsvariable
PORTgelesen; der Server bindet sich an0.0.0.0. - Im Code ist keine
localhost- /127.0.0.1-Adresse mehr übrig. - Passwörter und Schlüssel wurden aus dem Code entfernt; sie werden aus Umgebungsvariablen gelesen.
- Die Datenbankverbindung wird aus
DATABASE_URL/MONGODB_URI/REDIS_URL/DATABASE_PATHgelesen. - Dauerhafte Dateien werden unter
/datageschrieben. - Eine Lock-Datei ist vorhanden (
package-lock.jsonusw.). node_modules,.git,.venv,.next,bin,obj,.envund Schlüsseldateien sind NICHT in der Zip-Datei.- Die Zip-Datei ist kleiner als 50 MB und jede einzelne Datei kleiner als 25 MB; höchstens 2000 Dateien.
9. Teilen Sie mir am Ende Folgendes mit
- Den genauen Speicherort der erstellten Zip-Datei.
- Den Typ des Projekts und die verwendete Sprache bzw. das verwendete Framework (z. B. "Node.js + Express").
- Die Liste der Umgebungsvariablen, die ich im Panel eintragen muss: der Name jeder Variable und wofür sie dient. Schreiben Sie die Werte nicht auf; die trage ich selbst ein.
- Eine kurze Zusammenfassung der von Ihnen vorgenommenen Änderungen.
Gibt es nach dem Hochladen der ZIP-Datei ein Problem, erklärt Ai to App es in einfachen Worten; fügen Sie den Text bei Ihrem Assistenten ein.
