OVHserver/opt/infrastructure-docs/scripts/modules/generate-databases.sh
SamoilenkoVadym c5401eb33c fix: улучшения скриптов мониторинга и backup
Исправлены критические проблемы и добавлены улучшения:

1. **server-full-report.sh**:
   - Улучшены Slack уведомления с детектором проблем
   - Добавлены автоматические рекомендации по исправлению
   - Добавлена цветная индикация статуса (good/warning/danger)
   - Улучшена структура уведомлений с приоритетами

2. **generate-summary.sh**:
   - Исправлено дублирование контента в отчетах
   - Удален незакрытый heredoc, вызывавший проблемы
   - Добавлены правильные разделители секций

3. **backup-full-enhanced.sh** v2.0.0 → v2.1.0:
   - Добавлен полный auto-discovery для всех типов БД
   - Добавлена поддержка MongoDB backup
   - Улучшена детекция PostgreSQL/MariaDB через образы
   - Автоматическое определение пользователей БД
   - Удален hardcoded список баз данных

4. **health-check-alerting.sh**:
   - Добавлена проверка наличия 'bc' перед использованием
   - Добавлен fallback на integer comparison без bc
   - Улучшена надежность проверки R2 storage

Slack уведомления теперь включают:
- Автоматическое обнаружение проблем (unhealthy, down sites, high disk)
- Конкретные команды для исправления проблем
- SSH инструкции и ссылки на admin tools
- Цветовую индикацию серьезности (danger/warning/good)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06 10:47:20 +00:00

121 lines
3.1 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Module 5: Databases
cat << 'EOF'
---
## 5⃣ DATABASES
### Database Storage
**Primary Location:** `/mnt/psql-data/`
All PostgreSQL databases are stored on a dedicated disk for performance and data isolation.
EOF
echo "### Database Directories"
echo ""
if [[ -d /mnt/psql-data ]]; then
for db_dir in /mnt/psql-data/*; do
if [[ -d "$db_dir" ]]; then
DB_NAME=$(basename "$db_dir")
DB_SIZE=$(du -sh "$db_dir" 2>/dev/null | cut -f1)
FILE_COUNT=$(find "$db_dir" -type f 2>/dev/null | wc -l)
LAST_MODIFIED=$(stat -c %y "$db_dir" 2>/dev/null | cut -d' ' -f1)
cat << DBINFO
#### 📁 **$DB_NAME**
- **Path:** \`$db_dir\`
- **Size:** $DB_SIZE
- **Files:** $FILE_COUNT
- **Last Modified:** $LAST_MODIFIED
- **Backup Command:**
\`\`\`bash
docker exec postgres-main pg_dump -U aimpress_admin -d <database_name> | \
gzip > /mnt/backups/${DB_NAME}-\$(date +%Y%m%d).sql.gz
\`\`\`
DBINFO
fi
done
else
echo "⚠️ Database directory /mnt/psql-data not found"
fi
cat << 'EOF'
### PostgreSQL Management Commands
```bash
# Connect to PostgreSQL
docker exec -it postgres-main psql -U aimpress_admin
# Inside psql:
\l # List all databases
\du # List all users
\dt # List tables in current database
\c database_name # Connect to database
\q # Exit
# Backup single database
docker exec postgres-main pg_dump -U aimpress_admin <database> | \
gzip > /mnt/backups/db-$(date +%Y%m%d).sql.gz
# Backup ALL databases
docker exec postgres-main pg_dumpall -U aimpress_admin | \
gzip > /mnt/backups/postgres-all-$(date +%Y%m%d).sql.gz
# Restore database
gunzip < /mnt/backups/backup.sql.gz | \
docker exec -i postgres-main psql -U aimpress_admin -d <database>
# Check database sizes
docker exec postgres-main psql -U aimpress_admin -c \
"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) \
FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;"
```
### Database Users
| Role | Attributes |
|------|------------|
EOF
# List database users in Markdown table format
docker exec postgres-main psql -U aimpress_admin -c "\du" --csv 2>/dev/null | tail -n +2 | while IFS=',' read -r role attrs; do
# Clean up attributes
attrs=$(echo "$attrs" | sed 's/"//g')
[[ -z "$attrs" ]] && attrs="-"
echo "| **$role** | $attrs |"
done
cat << 'EOF'
### Change Database Password
```bash
# 1. Generate strong password
NEW_PASS=$(openssl rand -base64 32)
echo "New password: $NEW_PASS"
# 2. Change in PostgreSQL
docker exec postgres-main psql -U aimpress_admin -c \
"ALTER USER <username> WITH PASSWORD '$NEW_PASS';"
# 3. Save to Vault
export VAULT_ADDR="http://127.0.0.1:8200"
export VAULT_TOKEN=$(cat /opt/00-infrastructure/vault/.vault-token)
vault kv put aimpress/postgres/<service> password="$NEW_PASS"
# 4. Update application config
cd /opt/<service-path>
nano docker-compose.yml # Update DB_PASSWORD or DATABASE_PASSWORD
# 5. Restart application
docker-compose restart
```
EOF