Files
links/scripts/pre-deploy-check.sh
Andrey K. Choi e1bb1ab90a
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 сертификатов
2025-11-04 14:07:58 +09:00

240 lines
8.3 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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