🚀 Добавлен мастер-скрипт развертывания с полной автоматизацией
Some checks failed
continuous-integration/drone/push Build is failing

 Новые возможности:
- Мастер-развертывание с автоматической настройкой всех компонентов
- Генерация безопасных .env файлов с криптографически стойкими ключами
- Полная изоляция и защита PostgreSQL
- Автоматическая настройка Let's Encrypt SSL
- Система backup и мониторинга
- Comprehensive security audit для БД

🔧 Новые команды:
- make deploy - мастер-развертывание
- make pre-deploy-check - проверка готовности системы
- make security-audit - аудит безопасности PostgreSQL
- make ssl-setup - интерактивная настройка SSL
- make update-production-security - безопасное обновление в продакшене

📁 Новые файлы:
- scripts/master-deploy.sh - основной скрипт развертывания
- scripts/pre-deploy-check.sh - проверка системы
- scripts/ssl-manager.sh - управление SSL сертификатами
- scripts/audit-db-security.sh - аудит безопасности БД
- DEPLOYMENT.md - полное руководство по развертыванию
- COMMANDS.md - справочник команд
- SECURITY.md - документация по безопасности

🔒 Улучшения безопасности:
- Изоляция PostgreSQL в Docker сети (без внешних портов)
- SCRAM-SHA-256 аутентификация
- TLSv1.3 для БД соединений
- Удаление прав суперпользователя у приложения
- Детальное логирование всех операций БД
- Security headers в nginx
- Автообновление SSL сертификатов
This commit is contained in:
2025-11-04 14:07:58 +09:00
parent 735c1984f9
commit e1bb1ab90a
7 changed files with 1933 additions and 22 deletions

240
scripts/pre-deploy-check.sh Executable file
View File

@@ -0,0 +1,240 @@
#!/bin/bash
# Pre-deployment system check for CatLink
# Проверяет готовность системы к развертыванию
set -e
# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
success() { echo -e "${GREEN}$1${NC}"; }
warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
error() { echo -e "${RED}$1${NC}"; }
info() { echo -e "${BLUE} $1${NC}"; }
ERRORS=0
WARNINGS=0
check_and_report() {
if $1; then
success "$2"
else
error "$2"
((ERRORS++))
fi
}
check_and_warn() {
if $1; then
success "$2"
else
warning "$2"
((WARNINGS++))
fi
}
echo "🔍 ===== CatLink Pre-Deployment Check ====="
echo ""
# Проверка операционной системы
info "Проверка операционной системы..."
OS=$(lsb_release -si 2>/dev/null || echo "Unknown")
VERSION=$(lsb_release -sr 2>/dev/null || echo "Unknown")
echo " OS: $OS $VERSION"
# Проверка архитектуры
ARCH=$(uname -m)
echo " Architecture: $ARCH"
# Проверка прав sudo
check_and_report "sudo -n true 2>/dev/null" "Права sudo доступны"
# Проверка свободного места
info "Проверка дискового пространства..."
DISK_SPACE=$(df / | awk 'NR==2 {print $4}')
DISK_SPACE_GB=$((DISK_SPACE / 1024 / 1024))
echo " Свободно: ${DISK_SPACE_GB}GB"
if [ $DISK_SPACE_GB -lt 5 ]; then
error "Недостаточно места на диске (минимум 5GB)"
((ERRORS++))
elif [ $DISK_SPACE_GB -lt 10 ]; then
warning "Мало места на диске (рекомендуется минимум 10GB)"
((WARNINGS++))
else
success "Достаточно места на диске"
fi
# Проверка RAM
info "Проверка оперативной памяти..."
RAM_MB=$(free -m | awk 'NR==2{print $2}')
RAM_GB=$((RAM_MB / 1024))
echo " RAM: ${RAM_GB}GB (${RAM_MB}MB)"
if [ $RAM_MB -lt 1024 ]; then
error "Недостаточно RAM (минимум 1GB)"
((ERRORS++))
elif [ $RAM_MB -lt 2048 ]; then
warning "Мало RAM (рекомендуется минимум 2GB)"
((WARNINGS++))
else
success "Достаточно RAM"
fi
# Проверка Docker
echo ""
info "Проверка Docker..."
check_and_report "command -v docker >/dev/null 2>&1" "Docker установлен"
if command -v docker >/dev/null 2>&1; then
DOCKER_VERSION=$(docker --version | cut -d' ' -f3 | cut -d',' -f1)
echo " Версия Docker: $DOCKER_VERSION"
check_and_report "docker ps >/dev/null 2>&1" "Docker daemon запущен"
check_and_report "docker info | grep -q 'Server Version'" "Docker доступен без sudo"
fi
# Проверка Docker Compose
check_and_report "command -v docker-compose >/dev/null 2>&1" "Docker Compose установлен"
if command -v docker-compose >/dev/null 2>&1; then
COMPOSE_VERSION=$(docker-compose --version | cut -d' ' -f3 | cut -d',' -f1)
echo " Версия Docker Compose: $COMPOSE_VERSION"
fi
# Проверка портов
echo ""
info "Проверка портов..."
check_port() {
! netstat -tuln 2>/dev/null | grep -q ":$1 " && ! ss -tuln 2>/dev/null | grep -q ":$1 "
}
check_and_warn "check_port 80" "Порт 80 свободен"
check_and_warn "check_port 443" "Порт 443 свободен"
check_and_warn "check_port 3000" "Порт 3000 свободен"
check_and_warn "check_port 8000" "Порт 8000 свободен"
check_and_warn "check_port 5432" "Порт 5432 свободен"
# Проверка nginx
echo ""
info "Проверка nginx..."
if command -v nginx >/dev/null 2>&1; then
NGINX_VERSION=$(nginx -v 2>&1 | cut -d' ' -f3)
success "nginx установлен ($NGINX_VERSION)"
if systemctl is-active --quiet nginx; then
warning "nginx уже запущен (может потребоваться перенастройка)"
else
success "nginx остановлен (готов к настройке)"
fi
else
warning "nginx не установлен (будет установлен автоматически)"
fi
# Проверка certbot
check_and_warn "command -v certbot >/dev/null 2>&1" "certbot установлен (будет установлен при необходимости)"
# Проверка Python
echo ""
info "Проверка Python..."
check_and_report "command -v python3 >/dev/null 2>&1" "Python 3 установлен"
if command -v python3 >/dev/null 2>&1; then
PYTHON_VERSION=$(python3 --version | cut -d' ' -f2)
echo " Версия Python: $PYTHON_VERSION"
fi
# Проверка openssl
check_and_report "command -v openssl >/dev/null 2>&1" "OpenSSL установлен"
# Проверка файлов проекта
echo ""
info "Проверка файлов проекта..."
check_and_report "[ -f 'docker-compose.yml' ]" "docker-compose.yml найден"
check_and_report "[ -f 'Makefile' ]" "Makefile найден"
check_and_report "[ -d 'backend' ]" "Директория backend найдена"
check_and_report "[ -d 'frontend' ]" "Директория frontend найдена"
# Проверка git
if [ -d ".git" ]; then
success "Git репозиторий найден"
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo " Текущая ветка: $BRANCH"
if git status --porcelain | grep -q .; then
warning "Есть неcommitted изменения"
else
success "Рабочая директория чистая"
fi
else
warning "Не Git репозиторий"
fi
# Проверка интернет соединения
echo ""
info "Проверка интернет соединения..."
check_and_report "ping -c 1 8.8.8.8 >/dev/null 2>&1" "Интернет соединение доступно"
check_and_report "ping -c 1 docker.io >/dev/null 2>&1" "Docker Hub доступен"
# Проверка DNS
if command -v nslookup >/dev/null 2>&1; then
check_and_report "nslookup google.com >/dev/null 2>&1" "DNS работает"
fi
# Проверка firewall
echo ""
info "Проверка firewall..."
if command -v ufw >/dev/null 2>&1; then
if ufw status | grep -q "Status: active"; then
warning "UFW активен (может блокировать порты)"
echo " Убедитесь что порты 80, 443 открыты"
else
info "UFW неактивен"
fi
fi
# Проверка SELinux (если есть)
if command -v getenforce >/dev/null 2>&1; then
SELINUX_STATUS=$(getenforce 2>/dev/null || echo "Unknown")
if [ "$SELINUX_STATUS" = "Enforcing" ]; then
warning "SELinux в режиме Enforcing (может блокировать Docker)"
else
info "SELinux: $SELINUX_STATUS"
fi
fi
# Итоговая сводка
echo ""
echo "📊 ===== ИТОГОВАЯ СВОДКА ====="
if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then
success "Система полностью готова к развертыванию!"
echo ""
echo "🚀 Можете запускать: make deploy"
elif [ $ERRORS -eq 0 ]; then
warning "Система готова к развертыванию с предупреждениями ($WARNINGS)"
echo ""
echo "⚡ Можете запускать: make deploy"
echo " (предупреждения будут обработаны автоматически)"
else
error "Обнаружены критические проблемы ($ERRORS ошибок, $WARNINGS предупреждений)"
echo ""
echo "🔧 Исправьте ошибки перед развертыванием:"
echo " - Установите недостающие компоненты"
echo " - Освободите дисковое пространство"
echo " - Настройте права доступа"
exit 1
fi
echo ""
echo "💡 Полезные команды:"
echo " make help - Показать все доступные команды"
echo " make deploy - Запустить полное развертывание"
echo " make security-audit - Проверить безопасность"
echo " make logs - Посмотреть логи"
exit 0