MyCloud - это современная система биллинга VPS с мобильным приложением на React Native (Expo) и бэкендом на Node.js. Система поддерживает заказ VPS-серверов, интеграцию с платежной системой PayMe и авторизацию через Google OAuth.
- Фреймворк: React Native + Expo
- Навигация: Expo Router
- Язык: TypeScript
- UI: Custom компоненты с современным дизайном
- Состояние: React Context API
- Фреймворк: Node.js + Express
- База данных: MariaDB (MySQL)
- Авторизация: JWT + Google OAuth 2.0
- Платежи: PayMe (Узбекистан)
- Безопасность: Helmet, CORS, Rate Limiting
- Node.js 18+
- MariaDB/MySQL
- npm или yarn
cd backend
npm install
# Настройте .env файл (см. раздел Конфигурация)
cp .env.example .env
nano .env
# Запуск в режиме разработки
npm run dev
# Запуск в продакшене
npm startcd ..
npm install
echo "EXPO_PUBLIC_API_URL=https://apibilling.mycloud.uz" > .env
npm start
npm run android
Если не работают скрипты в windows то используйте команду
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
npm run ios
npm run web# База данных
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=ваш_пароль
DB_NAME=vps_billing
# Сервер
PORT=5000
NODE_ENV=production
# PayMe Integration
PAYME_MERCHANT_ID=ваш_merchant_id
PAYME_SECRET_KEY="ваш_секретный_ключ"
PAYME_URL=https://checkout.paycom.uz
PAYME_API_URL=https://checkout.paycom.uz/api
PAYME_USE_RETURN_URL=false
# Google OAuth
GOOGLE_CLIENT_ID=ваш_client_id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=ваш_client_secret
GOOGLE_REDIRECT_URI=https://apibilling.mycloud.uz/api/auth/google/callback
# JWT
JWT_SECRET=ваш_секретный_ключ_jwt
JWT_EXPIRES_IN=7d
# Frontend & CORS
FRONTEND_URL=https://billing.mycloud.uz
CORS_ORIGIN=https://billing.mycloud.uz,http://localhost:8081,exp://localhost:8081
# Production Domains
API_DOMAIN=https://apibilling.mycloud.uz
PAYME_CALLBACK_URL=https://apibilling.mycloud.uz/api/payments/payme/callback
RETURN_URL=https://billing.mycloud.uz/payment-success
# Deep Linking
APP_SCHEME=mycloud# API URL
EXPO_PUBLIC_API_URL=https://apibilling.mycloud.uz
# Для локальной разработки раскомментируйте:
# EXPO_PUBLIC_API_URL=http://localhost:5000- Перейдите в Google Cloud Console
- Создайте новый проект или выберите существующий
- Включите "Google+ API"
- Перейдите в "Credentials" → "Create Credentials" → "OAuth client ID"
- Выберите "Web application"
- Добавьте Authorized redirect URIs:
https://apibilling.mycloud.uz/api/auth/google/callbackhttp://localhost:5000/api/auth/google/callback(для разработки)
Deep linking уже настроен в app.json:
- Scheme:
mycloud:// - Universal Links:
https://billing.mycloud.uz/auth/*
- Зарегистрируйтесь на PayMe Business
- Получите
MERCHANT_IDиSECRET_KEY - Настройте Callback URL:
https://apibilling.mycloud.uz/api/payments/payme/callback - Добавьте учетные данные в
.env
# Создать тестовый заказ
curl -X POST https://apibilling.mycloud.uz/api/payments/payme \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{"order_id": 1}'POST /api/auth/register - Регистрация пользователя
POST /api/auth/login - Вход по email/паролю
GET /api/auth/google - Вход через Google
GET /api/auth/me - Получить текущего пользователя
GET /api/auth/users - Список пользователей (Admin)
GET /api/auth/users/:id - Детали пользователя
PUT /api/auth/users/:id - Обновить пользователя
GET /api/vps - Список VPS планов
GET /api/vps/:id - Детали плана
POST /api/vps-admin - Создать план (Admin)
PUT /api/vps-admin/:id - Обновить план (Admin)
DELETE /api/vps-admin/:id - Удалить план (Admin)
GET /api/orders - Список заказов пользователя
GET /api/orders/:id - Детали заказа
POST /api/orders - Создать заказ
PUT /api/orders/:id - Обновить заказ
GET /api/orders/admin/all - Все заказы (Admin)
POST /api/payments/payme - Создать PayMe checkout
POST /api/payments/payme/callback - PayMe webhook
GET /health - Проверка здоровья системы
GET /metrics - Метрики производительности
cd backend
npm run test:performancecd backend
npm run test:memory# Frontend
npm run lint
# Backend
cd backend
npm run lint
npm run lint:fix- Пользователь нажимает "Войти через Google" в приложении
- Открывается браузер с Google OAuth страницей
- Пользователь авторизуется в Google
- Google перенаправляет на
https://apibilling.mycloud.uz/api/auth/google/callback - Бэкенд создает/находит пользователя и генерирует JWT токен
- Бэкенд перенаправляет на
https://apibilling.mycloud.uz/auth-callback.html - HTML страница обрабатывает токен и перенаправляет обратно в приложение через deep link
mycloud://auth/callback - Приложение получает токен и сохраняет в AsyncStorage
- Пользователь авторизован и перенаправлен на главную страницу
# Установите зависимости
cd backend
npm install --production
# Настройте PM2 для автозапуска
npm install -g pm2
pm2 start app.js --name "vps-billing-api"
pm2 save
pm2 startup
# Настройте Nginx (см. backend/config/nginx/)
sudo cp backend/config/nginx/apibilling.mycloud.uz /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/apibilling.mycloud.uz /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx# Для продакшена используйте EAS Build
npm install -g eas-cli
eas login
eas build:configure
# Build для Android
eas build --platform android
# Build для iOS
eas build --platform ios
# Web деплой
npm run web
# Затем деплойте содержимое dist/ на ваш хостинг# Живые логи
pm2 logs vps-billing-api
# Файловые логи
tail -f backend/logs/error.log
tail -f backend/logs/warn.log
tail -f backend/logs/payme.log# Здоровье API
curl https://apibilling.mycloud.uz/health
# Метрики
curl https://apibilling.mycloud.uz/metrics# Запуск с туннелем (для тестирования на реальном устройстве)
npx expo start --tunnel
# Просмотр логов
npx expo start
# Затем нажмите 'j' чтобы открыть debugger.
├── app/ # Frontend (React Native)
│ ├── (admin)/ # Админ панель
│ ├── (user)/ # Пользовательская часть
│ ├── auth/ # Экраны авторизации
│ └── context/ # React Context
├── backend/ # Backend (Node.js)
│ ├── api/ # API маршруты
│ │ ├── auth/ # Авторизация
│ │ ├── orders/ # Заказы
│ │ ├── payments/ # Платежи
│ │ └── services/ # VPS сервисы
│ ├── core/ # Ядро приложения
│ │ ├── config/ # Конфигурация
│ │ ├── db/ # База данных
│ │ ├── middleware/ # Middleware
│ │ └── utils/ # Утилиты
│ ├── public/ # Статические файлы
│ └── scripts/ # Скрипты тестирования
├── assets/ # Изображения и ресурсы
└── config/ # Frontend конфигурация
Решение: Теперь исправлено! Бэкенд перенаправляет на статическую HTML страницу /auth-callback.html, которая обрабатывает deep linking.
Решение: Реализована оптимизация памяти:
- Пул подключений к БД
- Rate limiting
- Таймауты запросов
- Мониторинг памяти
См. подробности в OPTIMIZATION_RU.md
Решение: Добавьте ваш локальный адрес в CORS_ORIGIN в .env:
CORS_ORIGIN=https://billing.mycloud.uz,http://localhost:8081,exp://localhost:8081Проприетарное ПО - Все права защищены © 2025 MyCloud
Для вопросов и поддержки:
- Email: support@mycloud.uz
- Telegram: @mycloud_support
Последнее обновление: 2025-10-12 Версия: 1.0.0