RAILWAY_DEPLOY.md•9.34 kB
# Деплой на Railway
## Подготовка
Проект настроен для деплоя на Railway с использованием:
- **HTTP Server** (по умолчанию) - для доступа через HTTP API
- **Упрощенная версия** - по умолчанию (не требует компиляции)
- **Swiss Ephemeris** - опционально (попытка загрузки при старте)
- **Express** - HTTP wrapper для Railway
**Важно:** Сервер автоматически попытается загрузить Swiss Ephemeris. Если не получится - будет использоваться упрощенная версия.
## Быстрый старт
### 1. Создание проекта на Railway
1. Откройте [railway.app](https://railway.app)
2. Войдите или зарегистрируйтесь
3. Нажмите **"New Project"**
4. Выберите **"Deploy from GitHub repo"**
5. Выберите репозиторий: `dvvolkovv/MCP_Human_design`
### 2. Настройка деплоя
Railway автоматически:
- Определит Node.js проект
- Установит зависимости (без Swiss Ephemeris - использует упрощенную версию)
- Запустит HTTP сервер
### 3. Получение URL
После успешного деплоя:
1. Откройте ваш проект в Railway
2. Перейдите в **Settings** → **Networking**
3. Нажмите **"Generate Domain"**
4. Скопируйте URL (например: `https://your-project.up.railway.app`)
## Использование
### Health Check
```bash
curl https://your-project.up.railway.app/health
```
Ответ:
```json
{
"status": "ok",
"service": "human-design-mcp-server",
"version": "1.0.0-full",
"timestamp": "2024-01-01T00:00:00.000Z"
}
```
### Расчет Human Design
```bash
curl -X POST https://your-project.up.railway.app/api/human-design \
-H "Content-Type: application/json" \
-d '{
"birthDate": "1990-05-15",
"birthTime": "14:30",
"birthLocation": "Москва, Россия"
}'
```
Ответ:
```json
{
"success": true,
"data": {
"birthDate": "1990-05-15",
"birthTime": "14:30",
"birthLocation": "Москва, Россия",
"type": {
"name": "Generator",
"description": "Генератор"
},
"strategy": "Отвечать",
"authority": {
"name": "Sacral",
"description": "Сакральная авторитет"
},
"profile": {
"number": "3/5",
"description": "Профиль 3/5"
},
"gates": [...],
"calculationSource": "Swiss Ephemeris"
}
}
```
## Интеграция с n8n
### Вариант 1: HTTP Request Node
**URL:** `https://your-project.up.railway.app/api/human-design`
**Method:** POST
**Body:**
```json
{
"birthDate": "{{ $json.birthDate }}",
"birthTime": "{{ $json.birthTime }}",
"birthLocation": "{{ $json.birthLocation }}"
}
```
### Вариант 2: Function Node
```javascript
const response = await fetch('https://your-project.up.railway.app/api/human-design', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
birthDate: $input.item.json.birthDate,
birthTime: $input.item.json.birthTime,
birthLocation: $input.item.json.birthLocation,
}),
});
const result = await response.json();
return { json: result.data };
```
## Переменные окружения
Railway автоматически создает:
- `PORT` - порт для HTTP сервера (Railway назначает автоматически)
- `NODE_ENV=production` - окружение production
## Мониторинг
### Логи
В Railway Dashboard:
1. Откройте проект
2. Перейдите в **Deployments**
3. Нажмите на последний деплой
4. Смотрите логи в реальном времени
### Метрики
Railway предоставляет:
- **CPU usage**
- **Memory usage**
- **Network traffic**
- **Request count**
## Обновление
### Автоматический деплой
Railway автоматически деплоит при push в `main` branch.
### Ручной деплой
1. В Railway Dashboard нажмите **"Redeploy"**
2. Или сделайте push в `main`:
```bash
git push origin main
```
## Решение проблем
### Build failed: Swiss Ephemeris
**Проблема:** Ошибка компиляции Swiss Ephemeris
**Решение:** Railway автоматически установит build tools через Nixpacks. Если проблема сохраняется, проверьте `nixpacks.toml`.
### Deployment failed: Module not found
**Проблема:** Express или другие модули не найдены
**Решение:**
```bash
# Убедитесь что все зависимости в package.json
npm install express
# Commit и push
git add package.json package-lock.json
git commit -m "Add dependencies"
git push
```
### Service unavailable
**Проблема:** 503 или таймауты
**Решение:**
1. Проверьте логи в Railway
2. Убедитесь что порт настроен правильно (Railway автоматически)
3. Проверьте health check: `/health`
### Out of memory
**Проблема:** Превышен лимит памяти
**Решение:**
1. В Railway Settings увеличьте план
2. Или оптимизируйте код
3. Используйте упрощенную версию для демо
## Стоимость
### Free Tier
- $5 бесплатно в месяц
- Подходит для демо и тестирования
### Paid Plans
- Pay-as-you-go
- От $5/месяц для стабильного использования
## Альтернативы Railway
Если Railway не подходит:
### Vercel
```bash
vercel deploy
```
### Heroku
```bash
heroku create your-app-name
git push heroku main
```
### Render
```bash
# Connect GitHub repo in Render Dashboard
```
### DigitalOcean App Platform
```bash
# Use Dockerfile
```
## Docker деплой
Если хотите использовать Docker напрямую:
```bash
docker build -t human-design-server .
docker run -p 3000:3000 human-design-server
```
Railway также поддерживает Dockerfile автоматически.
## Проверка статуса
```bash
# Health check
curl https://your-project.up.railway.app/health
# API endpoint
curl https://your-project.up.railway.app/api/human-design \
-X POST \
-H "Content-Type: application/json" \
-d '{"birthDate":"1990-05-15","birthTime":"14:30","birthLocation":"Москва"}'
```
## Дополнительная информация
- **Railway Docs**: https://docs.railway.app
- **GitHub Repo**: https://github.com/dvvolkovv/MCP_Human_design
- **Support**: Создайте issue на GitHub
## Примеры использования
### JavaScript/Node.js
```javascript
const fetch = require('node-fetch');
async function calculateHumanDesign(birthDate, birthTime, birthLocation) {
const response = await fetch('https://your-project.up.railway.app/api/human-design', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ birthDate, birthTime, birthLocation }),
});
const result = await response.json();
return result.data;
}
// Использование
const hd = await calculateHumanDesign('1990-05-15', '14:30', 'Москва');
console.log(`Type: ${hd.type.ru_name}`);
console.log(`Strategy: ${hd.strategy}`);
```
### Python
```python
import requests
def calculate_human_design(birth_date, birth_time, birth_location):
url = 'https://your-project.up.railway.app/api/human-design'
response = requests.post(url, json={
'birthDate': birth_date,
'birthTime': birth_time,
'birthLocation': birth_location
})
return response.json()['data']
# Использование
hd = calculate_human_design('1990-05-15', '14:30', 'Москва')
print(f"Type: {hd['type']['ru_name']}")
print(f"Strategy: {hd['strategy']}")
```
### cURL
```bash
#!/bin/bash
API_URL="https://your-project.up.railway.app/api/human-design"
curl -X POST $API_URL \
-H "Content-Type: application/json" \
-d '{
"birthDate": "1990-05-15",
"birthTime": "14:30",
"birthLocation": "Москва, Россия"
}' | jq .
```
## Безопасность
1. **HTTPS** - Railway предоставляет автоматически
2. **Rate Limiting** - добавьте при необходимости
3. **Auth** - для production добавьте API key
4. **Validation** - валидация входных данных уже есть
## Рекомендации
- Используйте custom domain для production
- Настройте мониторинг и алерты
- Добавьте rate limiting для публичных API
- Создайте резервные копии данных
- Настройте CI/CD для автоматического тестирования