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ıra | Tür | Nasıl tanınır | Zip'e ne konur |
|---|---|---|---|
| 1 | Dockerfile | Kökte Dockerfile | Kaynak kod + Dockerfile |
| 2 | Next.js (sunucu) | package.json bağımlılıklarında next | Kaynak kod |
| 2 | Next.js (statik dışa aktarım) | next.config.* içinde output: 'export' | Build sonrası out klasörünün İÇİ |
| 3 | Node.js sunucusu | express, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.io | Kaynak kod |
| 4 | Derlenen site | vite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + build betiği | Build sonrası dist klasörünün İÇİ (react-scripts için build) |
| 5 | Node.js (genel) | package.json'da start betiği ya da main alanı | Kaynak kod |
| 6 | Python | requirements.txt, pyproject.toml, Pipfile ya da manage.py | Kaynak kod |
| 7 | .NET | Kökte .csproj / .fsproj | Kaynak kod |
| 8 | Statik site | Yalnı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şandist(ya dabuild) klasörünün İÇİNDEKİ dosyaları zip'le. Zip'in kökünde doğrudanindex.htmlolmalı. - Go projeleri yalnız
Dockerfileile 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
| Kural | Sınır |
|---|---|
| Zip dosyasının boyutu | en fazla 50 MB |
| Zip'ten çıkan dosyaların toplam boyutu | Statik sitede en fazla 200 MB, sunucu uygulamasında en fazla 300 MB (Ücretsiz planda 100 MB) |
| Tek bir dosyanın boyutu | en 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.htmlzip'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ıcabinveobj. - Sistem dosyaları:
__MACOSX,.DS_Store,Thumbs.db,desktop.ini,*.pyc
Zip'e ASLA koyma (atılır ve saklanmaz)
.envdosyaları:.env,.env.local,.env.productiongibi. Örnek dosyalar kalabilir:.env.example,.env.sample,.env.template. Zip'te.envvarsa dosya saklanmaz; yalnızVITE_,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,.sove 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. .mapve.mddosyaları atlanır.
- Sunucu kodu ve çalıştırılabilir dosya yasaktı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.
| Dil | Doğru kullanım |
|---|---|
| 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 | Kodda UseUrls(...) satırı OLMASIN |
Başlatma Komutu
- Node.js:
package.jsoniçindestartbetiğ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. Bunlardevbetiğ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.lockya dabun.lockb) zip'e ekle. - Node sürümünü
package.json→engines.nodeya da.nvmrcile belirt.
- Python:
- FastAPI, Flask, Django, Streamlit ve Gradio otomatik tanınır.
- Başka bir yapı kullanıyorsan kökte bir
Procfileoluştur:web: <başlatma komutu>. Komut0.0.0.0ve$PORTkullanmalı. - Flask:
gunicornrequirements.txt'te olmalı. - Django:
ALLOWED_HOSTSboş olmamalı,DEBUG = Falseolmalı,SECRET_KEYortam değişkeninden okunmalı. - Python sürümünü
runtime.txtya da.python-versionile belirt.
- .NET: Kökte
.csprojolmalı. Ai to Appdotnet publish -c Releaseile derler; hedef sürüm.csproj'dakiTargetFramework'ten okunur. - Dockerfile: Uygulamanın portunu
EXPOSEile belirt. Uygulama yine dePORTdeğ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şkeni | Not |
|---|---|---|
| PostgreSQL | DATABASE_URL | Sana ayrı veritabanı ve kullanıcı ayrılır |
| MySQL | DATABASE_URL | Sana ayrı veritabanı ayrılır |
| MongoDB | MONGODB_URI | Sana ayrı veritabanı ayrılır |
| Redis | REDIS_URL | |
| SQLite | DATABASE_PATH | Dosya 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, Turso | kendi değişkenlerin | Bağlantı bilgilerini panelde ortam değişkeni olarak gir |
- Prisma:
prisma/migrationsklasörünü zip'e ekle; yoksa tablolar otomatik oluşmayabilir. - Alembic:
alembic.inivarsa yayından öncealembic upgrade headotomatik ç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ı
/dataaltına kaydet. - Klasör yolunu
DATA_DIRortam değişkeninden oku; Ai to App bu değişkeni/dataolarak 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_vePUBLIC_ö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 daAUTH_URL) sitenin gerçek adresi olmalı,NEXTAUTH_SECRET(ya daAUTH_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ılarlocalhost:3000adresine gider, giriş tamamlanmaz. Google girişinde Google Cloud'daki Authorized JavaScript origins alanına yayın adresini, Authorized redirect URIs alanınahttps://PROJECT.supabase.co/auth/v1/callbackadresini yaz. - Ai to App'in kendisi verdiği değişkenler:
PORT,HOST=0.0.0.0,DATA_DIR=/datave veritabanı değişkenleri (Bölüm 4). Node.js'teNODE_ENV=production.
7. Kodda Olmaması Gerekenler
localhostadresleri:http://localhost:...ya dahttp://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 = 3000tek başına olmamalı;process.env.PORT || 3000kullan. - Hata ayıklama modu:
debug=Trueya daDEBUG = 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/outklasörünün içi zip'lendi; kökteindex.htmlvar. - Sunucu uygulamasıysa
startbetiği (ya da Procfile) üretim sunucusunu başlatıyor. - Port
PORTortam değişkeninden okunuyor; sunucu0.0.0.0adresine bağlanıyor. - Kodda
localhost/127.0.0.1adresi 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
/dataaltına yazılıyor. - Kilit dosyası var (
package-lock.jsonvb.). node_modules,.git,.venv,.next,bin,obj,.envve 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
- Hazırlanan zip dosyasının tam yeri.
- Projenin türü ve kullanılan dil ya da çatı (ör. "Node.js + Express").
- Panelde girmem gereken ortam değişkenlerinin listesi: her birinin adı ve ne işe yaradığı. Değerleri yazma; bunları ben gireceğim.
- 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.
