infra/work-center/crm-production/README.md

🚀 CRM1 Production Deployment

Пиротехника Конюхова

Версия: 1.0.0
Дата: 26 декабря 2025
Сервер: work-center (91.218.142.168)


📋 Содержание

  1. Что это
  2. Архитектура
  3. Быстрый старт
  4. Конфигурация
  5. Управление
  6. Мониторинг
  7. Troubleshooting

Что это

Production окружение для CRM системы "Пиротехника Конюхова" (CRM1).

Стек:
- MCRM (платформа)
- PiroCRM (отраслевая конфигурация)
- CRM1 (решение для бизнеса)

База клиентов:
- 4,711 контактов
- 5 сегментов (VIP, Премиум, Средний, Мелкий, Холодный)
- HLR проверено: 3,087 клиентов


Архитектура

┌─────────────────┐
│  Nginx (8444)   │  ← HTTPS entry point
└────────┬────────┘
         │
┌────────▼────────┐
│  CRM App (8092) │  ← FastAPI + MCRM + PiroCRM
└────────┬────────┘
         │
    ┌────┴────┬──────────────┬────────────┐
    │         │              │            │
┌───▼──┐  ┌──▼───┐  ┌───────▼─────┐  ┌──▼──────┐
│Redis │  │NocoDB│  │WAHA         │  │ePochta  │
│Cache │  │ DB   │  │(WhatsApp)   │  │(SMS)    │
└──────┘  └──────┘  └─────────────┘  └─────────┘

Компоненты:

Сервис Порт Назначение
nginx 8444 (HTTPS) Reverse proxy
crm-app 8092 Приложение CRM
redis 6379 Кэш и очереди

Внешние сервисы:
- NocoDB: https://data.0kt.ru:8443 (База данных)
- WAHA: http://waha:3000 (WhatsApp)
- ePochta API (SMS)


Быстрый старт

1. Первый запуск

cd /opt/claude-workspace/infra/work-center/crm-production

# Скопировать и настроить окружение
cp env/.env.example env/.env
nano env/.env

# Запустить
./scripts/start.sh

2. Проверка работы

# Статус сервисов
docker compose ps

# Логи
./scripts/logs.sh

# Проверка health
curl http://localhost:8092/health

3. Доступ


Конфигурация

Environment Variables

Файл: env/.env

Обязательные параметры:

# Database
NOCODB_URL=https://data.0kt.ru:8443
NOCODB_BASE_ID=pkxgq45k5mwsdwh
NOCODB_API_TOKEN=***  # получить из NocoDB

# WhatsApp
WAHA_URL=http://waha:3000
WAHA_API_KEY=***  # получить из WAHA

# SMS
SMS_API_KEY=***  # получить из ePochta

# Security
SECRET_KEY=***  # сгенерировать: openssl rand -hex 32
JWT_SECRET=***  # сгенерировать: openssl rand -hex 32

База данных (NocoDB)

Подключение:
- URL: https://data.0kt.ru:8443
- Base: pkxgq45k5mwsdwh
- Schema: pt7k98pv0fwi1el

Таблицы:
- crm_prj_clients (4,711 клиентов)
- crm_prj_campaigns (кампании)
- crm_prj_messages (сообщения)
- crm_prj_tasks (задачи)
- crm_app_managers (3 менеджера)

Каналы коммуникации

WhatsApp (WAHA):
- Контейнер: waha (уже запущен)
- URL: http://waha:3000
- Session: default
- Статус: ✅ Готов к работе

SMS (ePochta):
- Provider: epochta.ru
- Sender: PiroSPB
- Баланс: проверить

Email (SMTP):
- Host: smtp.yandex.ru
- From: admin@kt.ru


Управление

Основные команды

# Запуск
./scripts/start.sh

# Остановка
./scripts/stop.sh

# Перезапуск
./scripts/restart.sh

# Логи (все сервисы)
./scripts/logs.sh

# Логи конкретного сервиса
./scripts/logs.sh crm-app
./scripts/logs.sh nginx
./scripts/logs.sh redis

Docker Compose команды

# Статус
docker compose ps

# Логи
docker compose logs -f crm-app

# Перезапуск одного сервиса
docker compose restart crm-app

# Обновить образы
docker compose pull
docker compose up -d

# Полная пересборка
docker compose down
docker compose up -d --build

Масштабирование

Лимиты памяти (текущие):
- crm-app: 512MB (можно увеличить)
- redis: 128MB
- nginx: без лимитов

Для увеличения ресурсов отредактируйте docker-compose.yml:

deploy:
  resources:
    limits:
      memory: 1G  # вместо 512M

Мониторинг

Health Checks

Автоматические проверки:
- crm-app: http://localhost:8092/health (каждые 30с)
- redis: redis-cli ping (каждые 10с)

Ручная проверка:

# Приложение
curl http://localhost:8092/health

# Redis
docker compose exec redis redis-cli ping

# Nginx
curl -I http://localhost:8093

Логи

Расположение:
- Приложение: /app/logs/crm1.log (внутри контейнера)
- Nginx: Docker volume crm1-production-logs
- Redis: Stdout (docker logs)

Просмотр:

# Real-time logs
./scripts/logs.sh

# Последние 100 строк
docker compose logs --tail=100 crm-app

# Логи с временем
docker compose logs -t crm-app

# Логи за последний час
docker compose logs --since 1h crm-app

Метрики

Ресурсы:

# Использование ресурсов
docker stats crm1-production crm1-redis

# Размер volumes
docker volume ls | grep crm1
du -sh /var/lib/docker/volumes/crm1-*

Статистика Redis:

docker compose exec redis redis-cli info stats

Troubleshooting

Проблема: CRM не запускается

Симптомы:

ERROR: Connection refused

Решение:

# Проверить логи
./scripts/logs.sh crm-app

# Проверить окружение
docker compose exec crm-app env | grep NOCODB

# Перезапустить
./scripts/restart.sh

Проблема: NocoDB недоступен

Симптомы:

ERROR: Failed to connect to NocoDB

Проверка:

# Проверить NocoDB
curl -k https://data.0kt.ru:8443/api/v1/health

# Проверить API токен
curl -k -H "xc-token: YOUR_TOKEN" \
  https://data.0kt.ru:8443/api/v2/meta/bases/pkxgq45k5mwsdwh/tables

Решение:
- Проверить NOCODB_API_TOKEN в .env
- Убедиться, что NocoDB контейнер запущен

Проблема: WhatsApp не работает

Симптомы:

ERROR: WAHA connection failed

Проверка:

# Проверить WAHA
docker ps | grep waha

# Проверить API
curl http://localhost:3000/api/sessions

Решение:

# Перезапустить WAHA
docker restart waha

# Проверить QR код для авторизации
docker logs waha

Проблема: Высокое использование памяти

Симптомы:

OOMKilled или медленная работа

Решение:

# Проверить использование
docker stats

# Очистить Redis кэш
docker compose exec redis redis-cli FLUSHALL

# Увеличить лимиты в docker-compose.yml

Проблема: Nginx 502 Bad Gateway

Симптомы:

502 Bad Gateway

Проверка:

# Проверить CRM app
curl http://localhost:8092/health

# Проверить nginx логи
docker compose logs nginx

Решение:

# Перезапустить приложение
docker compose restart crm-app

# Подождать пока поднимется (60s)
sleep 60
curl http://localhost:8092/health

Бэкапы

База данных (NocoDB)

Бэкап уже настроен на уровне NocoDB:

/backup/nocodb_backup.sql.gz (3MB)

Application Data

# Бэкап data volume
docker run --rm \
  -v crm1-production-data:/data \
  -v /backup:/backup \
  alpine tar czf /backup/crm1-data-$(date +%Y%m%d).tar.gz /data

# Бэкап logs
docker run --rm \
  -v crm1-production-logs:/logs \
  -v /backup:/backup \
  alpine tar czf /backup/crm1-logs-$(date +%Y%m%d).tar.gz /logs

Восстановление

# Остановить приложение
./scripts/stop.sh

# Восстановить data
docker run --rm \
  -v crm1-production-data:/data \
  -v /backup:/backup \
  alpine tar xzf /backup/crm1-data-YYYYMMDD.tar.gz -C /

# Запустить
./scripts/start.sh

Обновление

Обновление кода (MCRM/PiroCRM/CRM1)

# Код монтируется read-only из /opt/claude-workspace/projects/org/
# Изменения сразу доступны после перезапуска

cd /opt/claude-workspace/projects/org/mcrm
git pull  # если есть git

# Перезапустить CRM
cd /opt/claude-workspace/infra/work-center/crm-production
./scripts/restart.sh

Обновление зависимостей

# Пересобрать контейнер
docker compose down
docker compose up -d --build

Обновление конфигурации

# Отредактировать .env
nano env/.env

# Перезапустить
./scripts/restart.sh

Security Checklist

Обязательно настроить:

Пароли и ключи:

НЕ хранить в git:
- env/.env (добавлен в .gitignore)
- SSL сертификаты
- API ключи

Ротация:
- SECRET_KEY: каждый месяц
- API токены: каждые 3 месяца
- SSL сертификаты: до истечения


Контакты

Проект: Пиротехника Конюхова
Компания: ИП Конюхов
Телефон: +79211841234
Email: admin@kt.ru

Техническая поддержка:
- CRM Issues: /opt/claude-workspace/projects/org/crm1/
- NocoDB: https://data.0kt.ru:8443
- Сервер: work-center (91.218.142.168)


Changelog

v1.0.0 (26.12.2025)
- ✅ Создан production deployment
- ✅ Docker Compose конфигурация
- ✅ Nginx reverse proxy
- ✅ Redis кэш
- ✅ Health checks
- ✅ Управляющие скрипты
- ✅ Документация

TODO:
- [ ] HTTPS сертификаты (Let's Encrypt)
- [ ] Автоматические бэкапы (cron)
- [ ] CI/CD pipeline
- [ ] Grafana dashboard
- [ ] AlertManager
- [ ] Horizontal scaling


Версия: 1.0.0
Последнее обновление: 26 декабря 2025