12 KiB
12 KiB
🚀 Deployment Guide - NakamaSpace
Инструкция по деплою NakamaSpace на production серверы.
📋 Требования
Backend
- Node.js 16+
- MongoDB 5+ (или MongoDB Atlas)
- Redis (опционально, для кэширования)
- HTTPS сертификат
Frontend
- Node.js 16+ (для сборки)
- Статический хостинг или CDN
🌐 Рекомендуемые платформы
Backend + MongoDB
- Railway (самый простой) ⭐
- Render (бесплатный tier)
- Heroku (платный)
- DigitalOcean App Platform
- AWS Elastic Beanstalk
- Google Cloud Run
Frontend
- Vercel (оптимально для Vite) ⭐
- Netlify
- Cloudflare Pages
- GitHub Pages (с настройкой)
MongoDB
- MongoDB Atlas (бесплатный M0 tier) ⭐
- DigitalOcean Managed Database
- AWS DocumentDB
Redis (опционально)
- Upstash (serverless, бесплатный tier)
- Redis Cloud
- Railway Redis
🚂 Railway Deployment (Рекомендуется)
Backend
- Установить Railway CLI:
npm i -g @railway/cli
railway login
- Создать проект:
cd /Users/glpshchn/Desktop/nakama
railway init
- Добавить MongoDB плагин:
railway add mongodb
- Настроить переменные окружения:
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
- Деплой:
railway up
- Получить URL:
railway domain
Frontend
- Установить Vercel CLI:
npm i -g vercel
- Настроить .env.production:
cd frontend
echo "VITE_API_URL=https://your-railway-app.railway.app/api" > .env.production
- Деплой:
vercel --prod
- Настроить Telegram Bot:
- Откройте @BotFather
/mybots→ Ваш бот → Bot Settings → Menu Button- Укажите URL:
https://your-vercel-app.vercel.app
☁️ MongoDB Atlas Setup
-
Создать аккаунт:
- Зайдите на https://www.mongodb.com/cloud/atlas
- Создайте бесплатный M0 cluster
-
Настроить доступ:
- Database Access → Add User
- Network Access → Add IP (0.0.0.0/0 для всех)
-
Получить Connection String:
- Cluster → Connect → Connect your application
- Скопируйте URI:
mongodb+srv://...
-
Добавить в переменные:
railway variables set MONGODB_URI="mongodb+srv://user:pass@cluster.mongodb.net/nakama"
🐳 Docker Deployment
Dockerfile для Backend
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
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
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
- Enable Redis caching:
railway variables set REDIS_URL=redis://...
- Увеличить rate limits для production:
railway variables set RATE_LIMIT_GENERAL=1000
railway variables set RATE_LIMIT_POSTS=50
- Configure MongoDB indexes: MongoDB индексы уже настроены в моделях, но проверьте их создание:
db.posts.getIndexes()
Frontend
-
Enable Vercel Edge Network:
- Автоматически включается при деплое на Vercel
-
Configure caching headers: Создайте
vercel.json:
{
"headers": [
{
"source": "/assets/(.*)",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000, immutable"
}
]
}
]
}
🔄 CI/CD Setup
GitHub Actions (Railway)
Создайте .github/workflows/deploy.yml:
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
- Настроить Menu Button:
/mybots → Выбрать бота → Bot Settings → Menu Button
URL: https://your-vercel-app.vercel.app
Text: Открыть NakamaSpace
- Настроить Description:
/mybots → Выбрать бота → Edit Bot → Edit Description
"NakamaSpace - мини-социальная сеть для Furry и Anime сообщества"
- Добавить команды:
/mybots → Выбрать бота → Edit Bot → Edit Commands
start - Запустить NakamaSpace
help - Помощь
profile - Мой профиль
🧪 Testing Production
После деплоя проверьте:
- Health check:
curl https://your-api.railway.app/health
- API доступность:
curl https://your-api.railway.app/api
- WebSocket:
const socket = io('https://your-api.railway.app')
socket.on('connect', () => console.log('Connected!'))
- Frontend:
- Откройте
https://your-app.vercel.app - Проверьте что API запросы работают
- Проверьте авторизацию через Telegram
- Telegram Mini App:
- Откройте бота в Telegram
- Нажмите Menu Button
- Проверьте что приложение загружается
🐛 Troubleshooting
CORS Errors
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
railway logs
MongoDB Atlas Monitoring
- Atlas Dashboard → Metrics
- Отслеживайте: Connections, Operations, Storage
Uptime Monitoring
Используйте:
- UptimeRobot (бесплатно)
- Pingdom
- StatusCake
Мониторьте endpoints:
https://your-api.railway.app/healthhttps://your-frontend.vercel.app
🔄 Updates
Backend Update
git push origin main
# Railway автоматически задеплоит
Frontend Update
cd frontend
vercel --prod
Database Migration
Если изменились модели:
# Подключиться к MongoDB
mongo "mongodb+srv://..."
# Выполнить миграцию
db.posts.createIndex({ content: "text", hashtags: "text" })
🌍 Доступность для пользователей из РФ
Проксирование изображений
NakamaSpace автоматически проксирует изображения с e621 и gelbooru через ваш сервер, что обеспечивает доступность контента для пользователей из РФ, где эти сайты могут быть заблокированы.
Как это работает:
- API запросы к e621 и gelbooru выполняются с вашего сервера
- URL изображений автоматически заменяются на прокси-URL вашего сервера
- Изображения стримятся через эндпоинт
/api/search/proxy/:encodedUrl - Добавлено кэширование (24 часа) для оптимизации производительности
Поддерживаемые домены:
e621.netstatic1.e621.netgelbooru.comstatic1.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
Проблемы при деплое? Проверьте:
- SETUP.md - подробная инструкция
- QUICKSTART.md - быстрый старт
- GitHub Issues - создайте issue с описанием проблемы