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 сертификатов
240 lines
8.3 KiB
Bash
Executable File
240 lines
8.3 KiB
Bash
Executable File
#!/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 |