architect/arh/operations/tickets/TICKET-002-backup-and-credentials-gap.md

TICKET-002: Пробелы в системе бэкапов и хранения credentials

Дата: 2025-12-01
Приоритет: CRITICAL
Статус: RESOLVED
Закрыт: 2026-02-19
Причина закрытия: Git remote настроен, backup.sh работает, credentials в .credentials.md
Компонент: infra/backup, system/credentials


ТЕКУЩЕЕ СОСТОЯНИЕ

Git

Параметр Значение Проблема
Remote НЕТ Нет offsite копии кода
Бэкап Только Вс 04:00 Потеря до 7 дней работы
Uncommitted Накапливаются Могут потеряться при сбое

Бэкапы

Тип Расписание Проблема
Git bundle → S3 Вс 04:00 Только раз в неделю
DEV-PRO full Вс 03:00 Только раз в неделю
Marketplace DB Ежедневно (если настроено) OK

Credentials (.env файлы)

Файл Git Бэкап Статус
infra/@mail.service/.env gitignored НЕТ ОПАСНО
pirotehnika/@market.app/.env gitignored НЕТ ОПАСНО
Другие .env gitignored НЕТ ОПАСНО

НАЙДЕННЫЕ ПРОБЛЕМЫ

1. НЕТ GIT REMOTE (КРИТИЧНО)

Симптом: git remote -v возвращает пустоту

Риск:
- Весь код только на одном сервере
- При сбое диска — потеря всего

Решение: Настроить GitHub/GitLab remote


2. РЕДКИЕ БЭКАПЫ (ВЫСОКИЙ)

Симптом: Git bundle создаётся только по воскресеньям

Риск:
- Потеря до 7 дней работы
- Последний бэкап: Nov 30 03:53 (2 дня назад)

Решение: Ежедневные git бэкапы


3. CREDENTIALS В GITIGNORE (КРИТИЧНО)

Симптом: .env файлы в .gitignore

Риск:
- При пересоздании контейнера — пароли потеряны
- Нет версионирования credentials
- Пример: пароль lideravto потерян

Решение: Централизованное хранение secrets


4. UNCOMMITTED ИЗМЕНЕНИЯ (СРЕДНИЙ)

Симптом: git status показывает изменённые файлы

Текущие uncommitted:

modified:   architect/standards/CREDENTIALS.md
modified:   infra/@mail.service/README.md
modified:   lider/@lideravto.ru/CLAUDE.md
+ новые файлы (architect/knowledge/, themes/)

Риск: При сбое — изменения потеряны

Решение: Регулярные автокоммиты или напоминания


5. НЕТ БЭКАПА ВНЕШНИХ СЕРВЕРОВ (ВЫСОКИЙ)

Симптом: Beget серверы (kondurov, lideravto) не бэкапятся

Риск:
- Потеря файлов сайтов
- Потеря баз данных
- Потеря конфигураций

Решение: Настроить бэкап через SSH/rsync


6. SESSION DATA НЕ СОХРАНЯЕТСЯ (СРЕДНИЙ)

Симптом: platform/.claude/session-*.md в gitignore

Риск:
- Контекст работы теряется
- Пароли из разговоров не фиксируются

Решение: Обязательное сохранение credentials при получении


РЕКОМЕНДУЕМЫЕ ИСПРАВЛЕНИЯ

Фаза 1: Критические (сделать сейчас)

1.1 Настроить Git remote

# Создать приватный репо на GitHub
# Добавить remote
git remote add origin git@github.com:USER/claude-workspace.git

# Первый push
git push -u origin master

1.2 Централизовать credentials

Создать файл infra/SECRETS.md (или зашифрованный vault):

# SECRETS (НЕ КОММИТИТЬ В ПУБЛИЧНЫЙ РЕПО!)

## SSH Доступы

| Сервер | User | Password |
|--------|------|----------|
| kondurov.beget.tech | kondurov | см. .credentials.md |
| lideravto.beget.tech | lideravto | ??? |

## API Keys
...

Важно: Этот файл либо:
- В приватном репо (GitHub private)
- Либо зашифрован (git-crypt, sops)
- Либо хранится отдельно в S3 Hub

1.3 Сделать commit сейчас

git add .
git commit -m "chore: sync current state before backup improvements"

Фаза 2: Высокий приоритет (эта неделя)

2.1 Ежедневные git бэкапы

Обновить cron:

# Git backup to S3 ЕЖЕДНЕВНО в 04:00
0 4 * * * /opt/.../git-backup-s3.sh

2.2 Auto-commit перед бэкапом

Добавить в backup.sh:

#!/bin/bash
cd $WORKSPACE
git add -A
git commit -m "auto: daily backup $(date +%Y-%m-%d)" || true
git bundle create ...

2.3 Бэкап Beget серверов

Создать скрипт backup-beget.sh:

#!/bin/bash
# Бэкап kondurov
sshpass -p 'PASS' rsync -avz kondurov@kondurov.beget.tech:~/ $DATASPACE/projects/kondurov-backup/

# Бэкап lideravto (когда будет пароль)
# sshpass -p 'PASS' rsync -avz lideravto@lideravto.beget.tech:~/ $DATASPACE/projects/lider-backup/

Фаза 3: Улучшения (этот месяц)

3.1 Git-crypt для secrets

git-crypt init
git-crypt add-gpg-user KEY_ID
echo "infra/SECRETS.md filter=git-crypt diff=git-crypt" >> .gitattributes

3.2 Процедура сохранения credentials

При получении ЛЮБОГО пароля/ключа:
1. Сразу записать в infra/SECRETS.md или architect/standards/CREDENTIALS.md
2. Git commit с пометкой chore: add credentials for X

3.3 Мониторинг бэкапов

Создать скрипт проверки:

#!/bin/bash
# Проверить что последний бэкап < 24 часов
LAST_BACKUP=$(stat -c %Y $DATASPACE/_backup/workspace-*.bundle | sort -n | tail -1)
NOW=$(date +%s)
AGE=$(( (NOW - LAST_BACKUP) / 3600 ))

if [ $AGE -gt 48 ]; then
    echo "WARNING: Last backup is $AGE hours old!"
    # Отправить уведомление
fi

СХЕМА ЦЕЛЕВОГО СОСТОЯНИЯ

┌─────────────────────────────────────────────────────────────────────┐
│                    СИСТЕМА БЭКАПОВ (TO-BE)                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  ЕЖЕДНЕВНО (04:00):                                                 │
│  ├── Auto-commit uncommitted changes                                │
│  ├── Git bundle → S3 Hub                                            │
│  ├── Git push → GitHub (private)                                    │
│  └── Beget servers backup → S3 Hub                                  │
│                                                                      │
│  ЕЖЕНЕДЕЛЬНО (Вс 03:00):                                            │
│  ├── Full DEV-PRO backup → Яндекс.Диск                              │
│  └── Retention cleanup (>30 дней)                                   │
│                                                                      │
│  CREDENTIALS:                                                        │
│  ├── Хранятся в SECRETS.md (зашифрован git-crypt)                   │
│  ├── Версионируются в git                                           │
│  └── При получении — сразу записать + commit                        │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

ЧЕКЛИСТ ИСПРАВЛЕНИЙ

Критические (сегодня)

Высокий (эта неделя)

Средний (этот месяц)


СВЯЗАННЫЕ ТИКЕТЫ


Автор: Claude Code
Создано: 2025-12-01