На этой странице собраны все правила, которые нужны ИИ-ассистенту, чтобы подготовить проект для Ai to App. Читать её не обязательно: просто отправьте ассистенту сообщение ниже.

Прочитайте руководство по адресу https://aitoapp.com/ru/upload-guide. Подготовьте мой проект для Ai to App по этому руководству, пройдите контрольный список по пунктам и соберите zip-файл.

Ai to App проверяет и публикует сайты и приложения, загруженные в виде zip-файла. Загруженные файлы во время проверки не запускаются. Серверные приложения после публикации работают в собственной изолированной среде, отдельно от других проектов. В этом руководстве собраны все правила, необходимые для того, чтобы проект прошёл первую загрузку без проблем.

1. Определите тип проекта

Ai to App сам определяет тип проекта по файлам внутри zip. Если подходит сразу несколько типов, действует порядок ниже; побеждает тот, что выше.

ПорядокТипКак определяетсяЧто класть в zip
1DockerfileDockerfile в корнеИсходный код + Dockerfile
2Next.js (сервер)next в зависимостях package.jsonИсходный код
2Next.js (статический экспорт)output: 'export' в next.config.*СОДЕРЖИМОЕ папки out после сборки
3Сервер на Node.jsexpress, fastify, koa, hono, @nestjs/core, @hapi/hapi, restify, socket.ioИсходный код
4Собираемый сайтvite, react-scripts, vue, @angular/core, astro, @sveltejs/vite-plugin-svelte, parcel, webpack + скрипт buildСОДЕРЖИМОЕ папки dist после сборки (для react-scripts — build)
5Node.js (общий случай)Скрипт start или поле main в package.jsonИсходный код
6Pythonrequirements.txt, pyproject.toml, Pipfile или manage.pyИсходный код
7.NET.csproj / .fsproj в корнеИсходный код
8Статический сайтТолько index.html и файлы HTML/CSS/JSСами файлы

Важно:

  • Для собираемых сайтов (React, Vue, Vite, Angular, Svelte, Astro) сначала выполните npm run build. Заархивируйте файлы, находящиеся ВНУТРИ получившейся папки dist (или build). В корне zip должен лежать непосредственно index.html.
  • Проекты на Go публикуются только через Dockerfile.
  • docker-compose не поддерживается; запускается только основное приложение (Dockerfile). Базу данных Ai to App предоставляет отдельно (см. раздел 4).

2. Правила для zip

Ограничения

ПравилоОграничение
Размер zip-файлане более 50 МБ
Общий размер файлов после распаковки zipДо 200 МБ для статического сайта, до 300 МБ для серверного приложения (100 МБ на бесплатном тарифе)
Размер одного файлане более 25 МБ
Количество файловДо 2000 для статического сайта, до 5000 для серверного приложения

Структура папок

  • Файлы проекта должны лежать в корне zip или внутри одной верхней папки.
  • В статическом сайте index.html должен лежать в корне zip или внутри одной верхней папки.
  • Два файла с одинаковым путём и небезопасные пути, содержащие ../, не принимаются.

НЕ кладите в zip (удаляются автоматически, только занимают место)

  • Зависимости: node_modules, .venv, venv, __pycache__, bower_components, .pytest_cache, .mypy_cache
  • Папки инструментов и систем контроля версий: .git, .svn, .hg, .idea, .vscode, .vs, .cache, .turbo, .parcel-cache, .gradle
  • Результаты сборки: .next, .nuxt, .svelte-kit. В .NET дополнительно bin и obj.
  • Системные файлы: __MACOSX, .DS_Store, Thumbs.db, desktop.ini, *.pyc

НИКОГДА не кладите в zip (удаляются и не сохраняются)

  • Файлы .env: такие как .env, .env.local, .env.production. Файлы-примеры можно оставить: .env.example, .env.sample, .env.template. Если в zip есть .env, файл не сохраняется; в сборку идут только публичные значения с префиксами VITE_, NEXT_PUBLIC_, PUBLIC_, REACT_APP_. Секретные значения вводите в панели.
  • Файлы ключей и учётных данных: *.pem, *.key, *.p12, *.pfx, *.ppk, *.jks, *.keystore, id_rsa, id_ed25519, .npmrc, .pypirc, .netrc. Если один из них уже был где-либо опубликован, замените ключ на новый.

Файлы, из-за которых загрузка останавливается

  • В исходном коде приложения: скрипты и установочные файлы Windows (.bat, .cmd, .ps1, .vbs, .scr, .msi). Скомпилированные программные файлы (.exe, .dll, .so и подобные) удаляются; сервер собирает проект из исходного кода.
  • В статическом сайте:
    • Серверный код и исполняемые файлы запрещены: .php, .py, .rb, .pl, .cgi, .asp, .aspx, .cshtml, .jsp, .exe, .dll, .sh, .jar, .htaccess, .config.
    • Разрешённые типы: .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 и .md пропускаются.

3. Обязательные настройки для серверных приложений

Порт и адрес

Ai to App передаёт порт, который должно слушать приложение, через переменную окружения PORT. Приложение должно привязываться к адресу 0.0.0.0; localhost или 127.0.0.1 снаружи недоступны.

ЯзыкПравильное использование
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")
.NETВ коде НЕ должно быть строки UseUrls(...)

Команда запуска

  • Node.js:
    • Скрипт start в package.json должен запускать продакшн-сервер, например "start": "node server.js".
    • Команд для разработки в start быть НЕ должно: vite, next dev, nodemon, ts-node-dev, tsx watch, webpack serve, react-scripts start, npm run dev. Оставьте их в скрипте dev.
    • TypeScript: добавьте "build": "tsc" и сделайте "start": "node dist/index.js". Компиляция TypeScript на лету медленная.
    • Добавьте в zip файл блокировки зависимостей (package-lock.json, pnpm-lock.yaml, yarn.lock или bun.lockb).
    • Укажите версию Node через package.json → engines.node или .nvmrc.
  • Python:
    • FastAPI, Flask, Django, Streamlit и Gradio определяются автоматически.
    • Если вы используете другую структуру, создайте в корне Procfile: web: <команда запуска>. Команда должна использовать 0.0.0.0 и $PORT.
    • Flask: gunicorn должен быть в requirements.txt.
    • Django: ALLOWED_HOSTS не должен быть пустым, должно быть DEBUG = False, а SECRET_KEY нужно читать из переменной окружения.
    • Укажите версию Python через runtime.txt или .python-version.
  • .NET: В корне должен быть .csproj. Ai to App собирает проект командой dotnet publish -c Release; целевая версия берётся из TargetFramework в .csproj.
  • Dockerfile: Укажите порт приложения через EXPOSE. Приложение при этом всё равно должно читать переменную PORT.

4. База данных

Ai to App сам создаёт базу данных и передаёт данные для подключения через переменную окружения. Не записывайте адрес подключения в код; читайте его из переменной ниже.

База данныхПеременная окруженияПримечание
PostgreSQLDATABASE_URLВам выделяются отдельная база данных и пользователь
MySQLDATABASE_URLВам выделяется отдельная база данных
MongoDBMONGODB_URIВам выделяется отдельная база данных
RedisREDIS_URL
SQLiteDATABASE_PATHФайл хранится в постоянной папке (/data/app.db)
SQL Server—Не предоставляется; укажите адрес собственного сервера через переменную окружения или перейдите на PostgreSQL
Supabase, Firebase, Neon, PlanetScale, Tursoваши собственные переменныеУкажите данные для подключения в панели как переменные окружения
  • Prisma: добавьте в zip папку prisma/migrations; без неё таблицы могут не создаться автоматически.
  • Alembic: если есть alembic.ini, перед публикацией автоматически выполняется alembic upgrade head.
  • Файл SQLite: SQLite-файл из zip используется как начальные данные только при первой публикации; последующие загрузки не перезаписывают рабочие данные. Не кладите в zip тестовую базу данных с персональными данными.
  • Обновления: при загрузке новой версии данные в базе данных сохраняются.

5. Постоянные файлы

Диск среды, в которой работает приложение, не является постоянным; при каждой новой публикации он очищается. Единственная постоянная папка — /data.

  • Сохраняйте в /data фотографии и документы, загруженные посетителями, создаваемые файлы и базу данных SQLite.
  • Читайте путь к папке из переменной окружения DATA_DIR; Ai to App сам задаёт для неё значение /data.

6. Секретные данные и переменные окружения

  • Не записывайте пароли, API-ключи и токены в код; читайте их из переменных окружения. Значения вы вводите в панели Ai to App; они хранятся в зашифрованном виде.
  • Публичные префиксы: переменные с префиксами VITE_, NEXT_PUBLIC_, REACT_APP_ и PUBLIC_ встраиваются в код при сборке, и их может увидеть любой посетитель. Не помещайте в них секретные значения.
  • Система входа (NextAuth / Auth.js): NEXTAUTH_URL (или AUTH_URL) должен быть реальным адресом сайта, а NEXTAUTH_SECRET (или AUTH_SECRET) должен быть заполнен.
  • OAuth (Google, GitHub): добавьте адрес опубликованного сайта в настройки провайдера как разрешённый адрес перенаправления.
  • Вход через Supabase: в Supabase в разделе Authentication > URL Configuration укажите опубликованный адрес в поле Site URL и добавьте точный адрес в Redirect URLs (https://your-app.aitoapp.com/). Иначе ссылки в письмах подтверждения и входа ведут на localhost:3000, и вход не завершается. Для входа через Google в Google Cloud добавьте опубликованный адрес в Authorized JavaScript origins, а https://PROJECT.supabase.co/auth/v1/callback — в Authorized redirect URIs.
  • Переменные, которые Ai to App задаёт сам: PORT, HOST=0.0.0.0, DATA_DIR=/data и переменные базы данных (раздел 4). Для Node.js — NODE_ENV=production.

7. Чего не должно быть в коде

  • Адреса localhost: код, который отправляет запросы на http://localhost:... или http://127.0.0.1:..., после публикации обращается к компьютеру самого посетителя и не работает. Читайте адрес из переменной окружения (например, import.meta.env.VITE_API_URL) или, если это тот же сервер, используйте относительный путь (fetch('/api/...')).
  • Запросы /api/... в статическом сайте: у статического сайта нет сервера. Если нужен API, подготовьте проект как единое серверное приложение (например, Express), работающее вместе со своим API.
  • Жёстко заданный порт: const PORT = 3000 не должно быть само по себе; используйте process.env.PORT || 3000.
  • Режим отладки: debug=True или DEBUG = True не должны быть включены в продакшне.
  • Секреты, встроенные в код: найденный ключ считается раскрытым; замените его.

8. Контрольный список для ассистента

  • Тип проекта определён (раздел 1).
  • Если это собираемый сайт, выполнена сборка, и в zip помещено только содержимое папки dist / build / out; в корне есть index.html.
  • Если это серверное приложение, скрипт start (или Procfile) запускает продакшн-сервер.
  • Порт читается из переменной окружения PORT; сервер привязан к адресу 0.0.0.0.
  • В коде не осталось адресов localhost / 127.0.0.1.
  • Пароли и ключи убраны из кода; они читаются из переменных окружения.
  • Подключение к базе данных читается из DATABASE_URL / MONGODB_URI / REDIS_URL / DATABASE_PATH.
  • Постоянные файлы записываются в /data.
  • Файл блокировки зависимостей на месте (package-lock.json и т. п.).
  • В zip НЕТ node_modules, .git, .venv, .next, bin, obj, .env и файлов ключей.
  • Zip меньше 50 МБ, отдельный файл меньше 25 МБ; не более 2000 файлов.

9. По окончании работы сообщите мне следующее

  1. Точное расположение подготовленного zip-файла.
  2. Тип проекта и используемый язык или фреймворк (например, "Node.js + Express").
  3. Список переменных окружения, которые мне нужно ввести в панели: имя каждой и для чего она нужна. Значения не пишите; я введу их сам.
  4. Краткое описание внесённых вами изменений.

Если после загрузки zip-файла возникнет проблема, Ai to App объяснит её простыми словами; вставьте этот текст в чат с ассистентом.