Bu sayfa, projeni Ai to App'e yüklenecek hale getirmek için yapay zekâ asistanının bilmesi gereken bütün kuralları içerir. Okuman gerekmez; asistanına aşağıdaki mesajı vermen yeterli.

https://aitoapp.com/tr/upload-guide adresindeki rehberi oku. Projemi bu rehbere göre Ai to App'e yüklenecek hale getir, kontrol listesini tek tek uygula ve zip dosyasını hazırla.

Ai to App, zip dosyası olarak yüklenen siteleri ve uygulamaları inceler ve yayınlar. Yüklenen dosyalar inceleme sırasında çalıştırılmaz. Sunucu uygulamaları yayında, diğer projelerden ayrı kendi kapalı alanında çalışır. Bu rehber, projenin ilk yüklemede sorunsuz geçmesi için gereken bütün kuralları içerir.

1. Projenin Türünü Belirle

Ai to App türü zip'in içindeki dosyalardan kendisi anlar. Birden fazla tür uyuyorsa aşağıdaki sıra geçerlidir; üstteki kazanır.

SıraTürNasıl tanınırZip'e ne konur
1DockerfileKökte DockerfileKaynak kod + Dockerfile
2Next.js (sunucu)package.json bağımlılıklarında nextKaynak kod
2Next.js (statik dışa aktarım)next.config.* içinde output: 'export'Build sonrası out klasörünün İÇİ
3Node.js sunucusuexpress, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.ioKaynak kod
4Derlenen sitevite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + build betiğiBuild sonrası dist klasörünün İÇİ (react-scripts için build)
5Node.js (genel)package.json'da start betiği ya da main alanıKaynak kod
6Pythonrequirements.txt, pyproject.toml, Pipfile ya da manage.pyKaynak kod
7.NETKökte .csproj / .fsprojKaynak kod
8Statik siteYalnız index.html ve HTML/CSS/JS dosyalarıDosyaların kendisi

Önemli:

  • Derlenen sitelerde (React, Vue, Vite, Angular, Svelte, Astro) önce npm run build çalıştır. Oluşan dist (ya da build) klasörünün İÇİNDEKİ dosyaları zip'le. Zip'in kökünde doğrudan index.html olmalı.
  • Go projeleri yalnız Dockerfile ile yayınlanır.
  • docker-compose desteklenmez; yalnız ana uygulama (Dockerfile) çalışır. Veritabanını Ai to App ayrıca verir (bkz. Bölüm 4).

2. Zip Kuralları

Sınırlar

KuralSınır
Zip dosyasının boyutuen fazla 50 MB
Zip'ten çıkan dosyaların toplam boyutuStatik sitede en fazla 200 MB, sunucu uygulamasında en fazla 300 MB (Ücretsiz planda 100 MB)
Tek bir dosyanın boyutuen fazla 25 MB
Dosya sayısıStatik sitede en fazla 2000, sunucu uygulamasında en fazla 5000

Klasör Yapısı

  • Proje dosyaları zip'in kökünde ya da tek bir üst klasörün içinde olmalı.
  • Statik sitede index.html zip'in kökünde ya da tek üst klasörün içinde olmalı.
  • Aynı yolda iki dosya ve ../ içeren güvensiz yollar kabul edilmez.

Zip'e KOYMA (otomatik atılır, boşuna yer kaplar)

  • Bağımlılıklar: node_modules, .venv, venv, __pycache__, bower_components, .pytest_cache, .mypy_cache
  • Araç ve sürüm kontrol klasörleri: .git, .svn, .hg, .idea, .vscode, .vs, .cache, .turbo, .parcel-cache, .gradle
  • Derleme çıktısı: .next, .nuxt, .svelte-kit. .NET'te ayrıca bin ve obj.
  • Sistem dosyaları: __MACOSX, .DS_Store, Thumbs.db, desktop.ini, *.pyc

Zip'e ASLA koyma (atılır ve saklanmaz)

  • .env dosyaları: .env, .env.local, .env.production gibi. Örnek dosyalar kalabilir: .env.example, .env.sample, .env.template. Zip'te .env varsa dosya saklanmaz; yalnız VITE_, NEXT_PUBLIC_, PUBLIC_, REACT_APP_ önekli herkese açık değerler derlemeye alınır. Gizli değerleri panele gir.
  • Anahtar ve kimlik dosyaları: *.pem, *.key, *.p12, *.pfx, *.ppk, *.jks, *.keystore, id_rsa, id_ed25519, .npmrc, .pypirc, .netrc. Bunlardan biri daha önce paylaşıldıysa anahtarı yenile.

Yüklemeyi durduran dosyalar

  • Uygulama kaynağında: Windows betik ve kurulum dosyaları (.bat, .cmd, .ps1, .vbs, .scr, .msi). Derlenmiş program dosyaları (.exe, .dll, .so ve benzeri) atılır; sunucu projeyi kaynaktan derler.
  • Statik sitede:
    • Sunucu kodu ve çalıştırılabilir dosya yasaktır: .php, .py, .rb, .pl, .cgi, .asp, .aspx, .cshtml, .jsp, .exe, .dll, .sh, .jar, .htaccess, .config.
    • İzin verilen türler: .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 ve .md dosyaları atlanır.

3. Sunucu Uygulamaları İçin Zorunlu Ayarlar

Port ve Adres

Ai to App, uygulamanın dinleyeceği portu PORT ortam değişkeniyle verir. Uygulama 0.0.0.0 adresine bağlanmalıdır; localhost ya da 127.0.0.1 dışarıdan erişilemez.

DilDoğru kullanım
Node.jsapp.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")
.NETKodda UseUrls(...) satırı OLMASIN

Başlatma Komutu

  • Node.js:
    • package.json içinde start betiği üretim sunucusunu başlatmalı, ör. "start": "node server.js".
    • Geliştirme komutları start'ta OLMAMALI: vite, next dev, nodemon, ts-node-dev, tsx watch, webpack serve, react-scripts start, npm run dev. Bunlar dev betiğinde kalsın.
    • TypeScript: "build": "tsc" ekle ve "start": "node dist/index.js" yap. TypeScript'i çalışırken derlemek yavaştır.
    • Kilit dosyasını (package-lock.json, pnpm-lock.yaml, yarn.lock ya da bun.lockb) zip'e ekle.
    • Node sürümünü package.json → engines.node ya da .nvmrc ile belirt.
  • Python:
    • FastAPI, Flask, Django, Streamlit ve Gradio otomatik tanınır.
    • Başka bir yapı kullanıyorsan kökte bir Procfile oluştur: web: <başlatma komutu>. Komut 0.0.0.0 ve $PORT kullanmalı.
    • Flask: gunicorn requirements.txt'te olmalı.
    • Django: ALLOWED_HOSTS boş olmamalı, DEBUG = False olmalı, SECRET_KEY ortam değişkeninden okunmalı.
    • Python sürümünü runtime.txt ya da .python-version ile belirt.
  • .NET: Kökte .csproj olmalı. Ai to App dotnet publish -c Release ile derler; hedef sürüm .csproj'daki TargetFramework'ten okunur.
  • Dockerfile: Uygulamanın portunu EXPOSE ile belirt. Uygulama yine de PORT değişkenini okumalı.

4. Veritabanı

Ai to App veritabanını kendisi kurar ve bağlantı bilgisini ortam değişkeniyle verir. Bağlantı adresini koda yazma; aşağıdaki değişkenden oku.

VeritabanıOrtam değişkeniNot
PostgreSQLDATABASE_URLSana ayrı veritabanı ve kullanıcı ayrılır
MySQLDATABASE_URLSana ayrı veritabanı ayrılır
MongoDBMONGODB_URISana ayrı veritabanı ayrılır
RedisREDIS_URL
SQLiteDATABASE_PATHDosya kalıcı klasörde tutulur (/data/app.db)
SQL Server—Sağlanmaz; kendi sunucunun adresini ortam değişkeni olarak gir ya da PostgreSQL'e geç
Supabase, Firebase, Neon, PlanetScale, Tursokendi değişkenlerinBağlantı bilgilerini panelde ortam değişkeni olarak gir
  • Prisma: prisma/migrations klasörünü zip'e ekle; yoksa tablolar otomatik oluşmayabilir.
  • Alembic: alembic.ini varsa yayından önce alembic upgrade head otomatik çalışır.
  • SQLite dosyası: Zip'teki SQLite dosyası yalnız ilk yayında başlangıç verisi olarak kullanılır; sonraki yüklemeler canlı veriyi ezmez. Kişisel veri içeren deneme veritabanını zip'e koyma.
  • Güncellemeler: Yeni sürüm yüklediğinde veritabanındaki bilgiler korunur.

5. Kalıcı Dosyalar

Uygulamanın çalıştığı alanın diski kalıcı değildir; her yeni yayında silinir. Kalıcı olan tek klasör /data'dır.

  • Ziyaretçilerin yüklediği fotoğraf ve belgeleri, oluşturulan dosyaları ve SQLite veritabanını /data altına kaydet.
  • Klasör yolunu DATA_DIR ortam değişkeninden oku; Ai to App bu değişkeni /data olarak kendisi verir.

6. Gizli Bilgiler ve Ortam Değişkenleri

  • Şifre, API anahtarı ve token'ları koda yazma; ortam değişkeninden oku. Değerleri Ai to App panelinde girersin; şifrelenerek saklanır.
  • Herkese açık önekler: VITE_, NEXT_PUBLIC_, REACT_APP_ ve PUBLIC_ önekli değişkenler derlemede koda gömülür ve her ziyaretçi görebilir. Bunlara gizli değer koyma.
  • Giriş sistemi (NextAuth / Auth.js): NEXTAUTH_URL (ya da AUTH_URL) sitenin gerçek adresi olmalı, NEXTAUTH_SECRET (ya da AUTH_SECRET) dolu olmalı.
  • OAuth (Google, GitHub): Sağlayıcının ayarlarına yayın adresini yetkili yönlendirme adresi olarak ekle.
  • Supabase ile giriş: Supabase'te Authentication > URL Configuration ekranında Site URL alanına yayın adresini yaz, Redirect URLs listesine tam adresi ekle (https://uygulaman.aitoapp.com/). Eklenmezse onay ve giriş e-postalarındaki bağlantılar localhost:3000 adresine gider, giriş tamamlanmaz. Google girişinde Google Cloud'daki Authorized JavaScript origins alanına yayın adresini, Authorized redirect URIs alanına https://PROJECT.supabase.co/auth/v1/callback adresini yaz.
  • Ai to App'in kendisi verdiği değişkenler: PORT, HOST=0.0.0.0, DATA_DIR=/data ve veritabanı değişkenleri (Bölüm 4). Node.js'te NODE_ENV=production.

7. Kodda Olmaması Gerekenler

  • localhost adresleri: http://localhost:... ya da http://127.0.0.1:... adreslerine istek atan kod yayında ziyaretçinin kendi bilgisayarına gider ve çalışmaz. Adresi ortam değişkeninden oku (ör. import.meta.env.VITE_API_URL) ya da aynı sunucudaysa göreli yol kullan (fetch('/api/...')).
  • Statik sitede /api/... istekleri: Statik sitenin arkasında sunucu yoktur. API gerekiyorsa projeyi API'siyle birlikte çalışan tek bir sunucu uygulaması (ör. Express) olarak hazırla.
  • Sabit port: const PORT = 3000 tek başına olmamalı; process.env.PORT || 3000 kullan.
  • Hata ayıklama modu: debug=True ya da DEBUG = True üretimde açık olmamalı.
  • Koda gömülü sırlar: Bulunan anahtar paylaşılmış sayılır; yenile.

8. Asistan İçin Kontrol Listesi

  • Proje türü belirlendi (Bölüm 1).
  • Derlenen siteyse build alındı ve yalnız dist / build / out klasörünün içi zip'lendi; kökte index.html var.
  • Sunucu uygulamasıysa start betiği (ya da Procfile) üretim sunucusunu başlatıyor.
  • Port PORT ortam değişkeninden okunuyor; sunucu 0.0.0.0 adresine bağlanıyor.
  • Kodda localhost / 127.0.0.1 adresi kalmadı.
  • Şifre ve anahtarlar koddan çıkarıldı; ortam değişkeninden okunuyor.
  • Veritabanı bağlantısı DATABASE_URL / MONGODB_URI / REDIS_URL / DATABASE_PATH'ten okunuyor.
  • Kalıcı dosyalar /data altına yazılıyor.
  • Kilit dosyası var (package-lock.json vb.).
  • node_modules, .git, .venv, .next, bin, obj, .env ve anahtar dosyaları zip'te YOK.
  • Zip 50 MB'ın, tek dosya 25 MB'ın altında; en fazla 2000 dosya.

9. İşin Sonunda Bana Şunları Söyle

  1. Hazırlanan zip dosyasının tam yeri.
  2. Projenin türü ve kullanılan dil ya da çatı (ör. "Node.js + Express").
  3. Panelde girmem gereken ortam değişkenlerinin listesi: her birinin adı ve ne işe yaradığı. Değerleri yazma; bunları ben gireceğim.
  4. Yaptığın değişikliklerin kısa bir özeti.

Zip'i yükledikten sonra bir sorun çıkarsa, Ai to App ne olduğunu sade bir dille yazar; o metni asistanına yapıştırırsın.