# 🚀 Deployment Guide - NakamaSpace Инструкция по деплою NakamaSpace на production серверы. ## 📋 Требования ### Backend - Node.js 16+ - MongoDB 5+ (или MongoDB Atlas) - Redis (опционально, для кэширования) - HTTPS сертификат ### Frontend - Node.js 16+ (для сборки) - Статический хостинг или CDN --- ## 🌐 Рекомендуемые платформы ### Backend + MongoDB 1. **Railway** (самый простой) ⭐ 2. **Render** (бесплатный tier) 3. **Heroku** (платный) 4. **DigitalOcean App Platform** 5. **AWS Elastic Beanstalk** 6. **Google Cloud Run** ### Frontend 1. **Vercel** (оптимально для Vite) ⭐ 2. **Netlify** 3. **Cloudflare Pages** 4. **GitHub Pages** (с настройкой) ### MongoDB 1. **MongoDB Atlas** (бесплатный M0 tier) ⭐ 2. **DigitalOcean Managed Database** 3. **AWS DocumentDB** ### Redis (опционально) 1. **Upstash** (serverless, бесплатный tier) 2. **Redis Cloud** 3. **Railway Redis** --- ## 🚂 Railway Deployment (Рекомендуется) ### Backend 1. **Установить Railway CLI:** ```bash npm i -g @railway/cli railway login ``` 2. **Создать проект:** ```bash cd /Users/glpshchn/Desktop/nakama railway init ``` 3. **Добавить MongoDB плагин:** ```bash railway add mongodb ``` 4. **Настроить переменные окружения:** ```bash railway variables set NODE_ENV=production railway variables set JWT_SECRET=$(openssl rand -base64 32) railway variables set TELEGRAM_BOT_TOKEN=your_token_here railway variables set FRONTEND_URL=https://your-frontend.vercel.app ``` 5. **Деплой:** ```bash railway up ``` 6. **Получить URL:** ```bash railway domain ``` ### Frontend 1. **Установить Vercel CLI:** ```bash npm i -g vercel ``` 2. **Настроить .env.production:** ```bash cd frontend echo "VITE_API_URL=https://your-railway-app.railway.app/api" > .env.production ``` 3. **Деплой:** ```bash vercel --prod ``` 4. **Настроить Telegram Bot:** - Откройте @BotFather - `/mybots` → Ваш бот → Bot Settings → Menu Button - Укажите URL: `https://your-vercel-app.vercel.app` --- ## ☁️ MongoDB Atlas Setup 1. **Создать аккаунт:** - Зайдите на https://www.mongodb.com/cloud/atlas - Создайте бесплатный M0 cluster 2. **Настроить доступ:** - Database Access → Add User - Network Access → Add IP (0.0.0.0/0 для всех) 3. **Получить Connection String:** - Cluster → Connect → Connect your application - Скопируйте URI: `mongodb+srv://...` 4. **Добавить в переменные:** ```bash railway variables set MONGODB_URI="mongodb+srv://user:pass@cluster.mongodb.net/nakama" ``` --- ## 🐳 Docker Deployment ### Dockerfile для Backend ```dockerfile FROM node:18-alpine WORKDIR /app # Установить зависимости COPY package*.json ./ RUN npm ci --only=production # Скопировать код COPY backend ./backend # Создать папку для uploads RUN mkdir -p backend/uploads EXPOSE 3000 CMD ["node", "backend/server.js"] ``` ### Dockerfile для Frontend ```dockerfile FROM node:18-alpine AS builder WORKDIR /app # Установить зависимости COPY frontend/package*.json ./ RUN npm ci # Скопировать код COPY frontend ./ # Собрать RUN npm run build # Production образ FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` ### docker-compose.yml ```yaml version: '3.8' services: backend: build: context: . dockerfile: Dockerfile.backend ports: - "3000:3000" environment: - NODE_ENV=production - MONGODB_URI=mongodb://mongo:27017/nakama - JWT_SECRET=${JWT_SECRET} - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} depends_on: - mongo - redis restart: unless-stopped frontend: build: context: . dockerfile: Dockerfile.frontend ports: - "80:80" depends_on: - backend restart: unless-stopped mongo: image: mongo:6 volumes: - mongo_data:/data/db restart: unless-stopped redis: image: redis:7-alpine restart: unless-stopped volumes: mongo_data: ``` --- ## 🔧 Environment Variables Checklist ### Backend (.env.production) - ✅ `NODE_ENV=production` - ✅ `MONGODB_URI` - MongoDB connection string - ✅ `PORT` - Порт сервера (обычно 3000) - ✅ `JWT_SECRET` - Случайная строка (openssl rand -base64 32) - ✅ `TELEGRAM_BOT_TOKEN` - Токен от @BotFather - ✅ `FRONTEND_URL` - URL frontend приложения - ✅ `CORS_ORIGIN` - Разрешённые origins (через запятую) - ⚙️ `REDIS_URL` - (опционально) Redis connection string ### Frontend (.env.production) - ✅ `VITE_API_URL` - URL backend API --- ## 🔐 Security Checklist Перед деплоем проверьте: - [ ] JWT_SECRET изменён на случайную строку - [ ] MongoDB доступ ограничен (не 0.0.0.0/0 в prod) - [ ] CORS настроен правильно (не '*' в prod) - [ ] Rate limiting включён - [ ] HTTPS настроен (обязательно для Telegram Mini App) - [ ] Переменные окружения не закоммичены в Git - [ ] MongoDB Atlas IP whitelist настроен - [ ] Telegram Bot webhook настроен правильно --- ## 📊 Performance Optimization ### Backend 1. **Enable Redis caching:** ```bash railway variables set REDIS_URL=redis://... ``` 2. **Увеличить rate limits для production:** ```bash railway variables set RATE_LIMIT_GENERAL=1000 railway variables set RATE_LIMIT_POSTS=50 ``` 3. **Configure MongoDB indexes:** MongoDB индексы уже настроены в моделях, но проверьте их создание: ```bash db.posts.getIndexes() ``` ### Frontend 1. **Enable Vercel Edge Network:** - Автоматически включается при деплое на Vercel 2. **Configure caching headers:** Создайте `vercel.json`: ```json { "headers": [ { "source": "/assets/(.*)", "headers": [ { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } ] } ] } ``` --- ## 🔄 CI/CD Setup ### GitHub Actions (Railway) Создайте `.github/workflows/deploy.yml`: ```yaml name: Deploy to Railway on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Railway run: npm i -g @railway/cli - name: Deploy run: railway up env: RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }} ``` --- ## 📱 Telegram Bot Setup 1. **Настроить Menu Button:** ``` /mybots → Выбрать бота → Bot Settings → Menu Button URL: https://your-vercel-app.vercel.app Text: Открыть NakamaSpace ``` 2. **Настроить Description:** ``` /mybots → Выбрать бота → Edit Bot → Edit Description "NakamaSpace - мини-социальная сеть для Furry и Anime сообщества" ``` 3. **Добавить команды:** ``` /mybots → Выбрать бота → Edit Bot → Edit Commands start - Запустить NakamaSpace help - Помощь profile - Мой профиль ``` --- ## 🧪 Testing Production После деплоя проверьте: 1. **Health check:** ```bash curl https://your-api.railway.app/health ``` 2. **API доступность:** ```bash curl https://your-api.railway.app/api ``` 3. **WebSocket:** ```javascript const socket = io('https://your-api.railway.app') socket.on('connect', () => console.log('Connected!')) ``` 4. **Frontend:** - Откройте `https://your-app.vercel.app` - Проверьте что API запросы работают - Проверьте авторизацию через Telegram 5. **Telegram Mini App:** - Откройте бота в Telegram - Нажмите Menu Button - Проверьте что приложение загружается --- ## 🐛 Troubleshooting ### CORS Errors ```bash railway variables set CORS_ORIGIN=https://your-frontend.vercel.app ``` ### Telegram Init Data Invalid - Проверьте что TELEGRAM_BOT_TOKEN правильный - Проверьте что используется HTTPS ### MongoDB Connection Failed - Проверьте MONGODB_URI - Проверьте IP whitelist в Atlas - Проверьте что пароль не содержит специальных символов (URL encode) ### Redis Connection Failed - Это нормально, приложение работает без Redis - Для включения: настройте REDIS_URL ### WebSocket не подключается - Проверьте CORS_ORIGIN - Проверьте что используется wss:// (не ws://) для HTTPS --- ## 📈 Monitoring ### Railway Logs ```bash railway logs ``` ### MongoDB Atlas Monitoring - Atlas Dashboard → Metrics - Отслеживайте: Connections, Operations, Storage ### Uptime Monitoring Используйте: - **UptimeRobot** (бесплатно) - **Pingdom** - **StatusCake** Мониторьте endpoints: - `https://your-api.railway.app/health` - `https://your-frontend.vercel.app` --- ## 🔄 Updates ### Backend Update ```bash git push origin main # Railway автоматически задеплоит ``` ### Frontend Update ```bash cd frontend vercel --prod ``` ### Database Migration Если изменились модели: ```bash # Подключиться к MongoDB mongo "mongodb+srv://..." # Выполнить миграцию db.posts.createIndex({ content: "text", hashtags: "text" }) ``` --- ## 🌍 Доступность для пользователей из РФ ### Проксирование изображений NakamaSpace автоматически проксирует изображения с e621 и gelbooru через ваш сервер, что обеспечивает доступность контента для пользователей из РФ, где эти сайты могут быть заблокированы. **Как это работает:** 1. API запросы к e621 и gelbooru выполняются с вашего сервера 2. URL изображений автоматически заменяются на прокси-URL вашего сервера 3. Изображения стримятся через эндпоинт `/api/search/proxy/:encodedUrl` 4. Добавлено кэширование (24 часа) для оптимизации производительности **Поддерживаемые домены:** - `e621.net` - `static1.e621.net` - `gelbooru.com` - `static1.gelbooru.com` **Важно:** - Убедитесь, что ваш сервер имеет доступ к этим доменам - Рекомендуется использовать сервер вне РФ для надежного доступа к источникам - Проксирование происходит автоматически, никаких дополнительных настроек не требуется --- ## 💰 Costs Estimate ### Free Tier (Starter) - **Railway**: $5/month credits (достаточно для старта) - **MongoDB Atlas**: Free M0 (512MB) - **Vercel**: Free (100GB bandwidth) - **Total**: ~$0-5/month ### Production Tier - **Railway**: ~$10-20/month - **MongoDB Atlas**: M2 $9/month (2GB) - **Redis**: Upstash $10/month или Railway $5/month - **Vercel**: Pro $20/month (больше bandwidth) - **Total**: ~$30-60/month --- ## 🎉 Ready! После выполнения всех шагов у вас будет: - ✅ Backend на Railway с MongoDB Atlas - ✅ Frontend на Vercel - ✅ HTTPS для обоих - ✅ Telegram Bot настроен - ✅ Monitoring включён **Ваш NakamaSpace готов к использованию!** 🚀 --- ## 📞 Support Проблемы при деплое? Проверьте: 1. [SETUP.md](SETUP.md) - подробная инструкция 2. [QUICKSTART.md](QUICKSTART.md) - быстрый старт 3. GitHub Issues - создайте issue с описанием проблемы