- court_document_parser.py: парсер судебных документов с извлечением ФИО, номера дела, УИД, суда - court_parser_api.py: API для вызова парсера из n8n - pdf_court_parser.py: парсер PDF документов с извлечением текста - simple_project_updater.php: обновление проектов через CRM API - simple_project_updater_v2.php: обновленная версия с прямыми SQL запросами и S3Client - update_project_from_document.php: альтернативный скрипт обновления - test_input.json: тестовые данные для парсера - README файлы с документацией для всех скриптов Скрипты поддерживают: - Поиск проектов по ФИО, номеру дела, УИД, названию суда - Создание документов в CRM с загрузкой в S3 - Привязку документов к проектам - Логирование всех операций - Работу с n8n через SSH команды
253 lines
8.0 KiB
Bash
Executable File
253 lines
8.0 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Скрипт деплоя изменений из тестовой среды в боевую
|
||
# Автор: Фёдор
|
||
# Дата: 2025-09-26
|
||
|
||
set -e # Остановка при ошибке
|
||
|
||
# Цвета для вывода
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Пути
|
||
TEST_DIR="/var/www/fastuser/data/www/crm-test.clientright.ru"
|
||
PROD_DIR="/var/www/fastuser/data/www/crm.clientright.ru"
|
||
BACKUP_DIR="/var/www/fastuser/data/backups/crm_deployments"
|
||
LOG_FILE="/var/www/fastuser/data/logs/deploy_$(date +%Y%m%d_%H%M%S).log"
|
||
|
||
# Функция логирования
|
||
log() {
|
||
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
|
||
}
|
||
|
||
error() {
|
||
echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
|
||
exit 1
|
||
}
|
||
|
||
success() {
|
||
echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE"
|
||
}
|
||
|
||
warning() {
|
||
echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"
|
||
}
|
||
|
||
# Проверка прав доступа
|
||
check_permissions() {
|
||
log "Проверка прав доступа..."
|
||
|
||
if [ ! -d "$TEST_DIR" ]; then
|
||
error "Тестовая директория не найдена: $TEST_DIR"
|
||
fi
|
||
|
||
if [ ! -d "$PROD_DIR" ]; then
|
||
error "Продакшн директория не найдена: $PROD_DIR"
|
||
fi
|
||
|
||
if [ ! -w "$PROD_DIR" ]; then
|
||
error "Нет прав на запись в продакшн директорию: $PROD_DIR"
|
||
fi
|
||
|
||
success "Права доступа проверены"
|
||
}
|
||
|
||
# Создание резервной копии
|
||
create_backup() {
|
||
log "Создание резервной копии продакшн среды..."
|
||
|
||
mkdir -p "$BACKUP_DIR"
|
||
BACKUP_NAME="crm_backup_$(date +%Y%m%d_%H%M%S).tar.gz"
|
||
BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME"
|
||
|
||
# Исключаем кеш и временные файлы из бэкапа
|
||
tar -czf "$BACKUP_PATH" \
|
||
--exclude="$PROD_DIR/cache" \
|
||
--exclude="$PROD_DIR/test/templates_c" \
|
||
--exclude="$PROD_DIR/logs" \
|
||
--exclude="$PROD_DIR/tmp" \
|
||
-C "$(dirname "$PROD_DIR")" "$(basename "$PROD_DIR")"
|
||
|
||
if [ $? -eq 0 ]; then
|
||
success "Резервная копия создана: $BACKUP_PATH"
|
||
echo "$BACKUP_PATH" > "$BACKUP_DIR/latest_backup.txt"
|
||
else
|
||
error "Ошибка создания резервной копии"
|
||
fi
|
||
}
|
||
|
||
# Синхронизация файлов
|
||
sync_files() {
|
||
log "Синхронизация файлов из тестовой среды..."
|
||
|
||
# Список файлов и директорий для синхронизации
|
||
SYNC_ITEMS=(
|
||
"crm_extensions"
|
||
"layouts/v7/skins/images"
|
||
"layouts/v7/lib"
|
||
"modules"
|
||
"libraries"
|
||
"include"
|
||
"vtlib"
|
||
"packages"
|
||
"resources"
|
||
".htaccess"
|
||
)
|
||
|
||
for item in "${SYNC_ITEMS[@]}"; do
|
||
if [ -e "$TEST_DIR/$item" ]; then
|
||
log "Синхронизация: $item"
|
||
|
||
# Создаем директорию если не существует
|
||
if [ -d "$TEST_DIR/$item" ]; then
|
||
mkdir -p "$PROD_DIR/$(dirname "$item")"
|
||
fi
|
||
|
||
# Копируем с сохранением прав
|
||
cp -r "$TEST_DIR/$item" "$PROD_DIR/$(dirname "$item")/"
|
||
|
||
if [ $? -eq 0 ]; then
|
||
success "Синхронизировано: $item"
|
||
else
|
||
warning "Ошибка синхронизации: $item"
|
||
fi
|
||
else
|
||
warning "Файл/директория не найдена в тестовой среде: $item"
|
||
fi
|
||
done
|
||
}
|
||
|
||
# Обновление прав доступа
|
||
fix_permissions() {
|
||
log "Обновление прав доступа..."
|
||
|
||
# Устанавливаем правильные права для файлов
|
||
find "$PROD_DIR" -type f -exec chmod 644 {} \;
|
||
find "$PROD_DIR" -type d -exec chmod 755 {} \;
|
||
|
||
# Специальные права для исполняемых файлов
|
||
find "$PROD_DIR" -name "*.sh" -exec chmod 755 {} \;
|
||
find "$PROD_DIR" -name "*.php" -path "*/cron/*" -exec chmod 755 {} \;
|
||
|
||
# Права для кеша и временных файлов
|
||
if [ -d "$PROD_DIR/test/templates_c" ]; then
|
||
chmod -R 777 "$PROD_DIR/test/templates_c"
|
||
fi
|
||
|
||
if [ -d "$PROD_DIR/cache" ]; then
|
||
chmod -R 777 "$PROD_DIR/cache"
|
||
fi
|
||
|
||
# Устанавливаем владельца
|
||
chown -R fastuser:fastuser "$PROD_DIR"
|
||
|
||
success "Права доступа обновлены"
|
||
}
|
||
|
||
# Проверка работоспособности
|
||
health_check() {
|
||
log "Проверка работоспособности после деплоя..."
|
||
|
||
# Проверяем доступность главной страницы
|
||
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://crm.clientright.ru)
|
||
|
||
if [ "$HTTP_CODE" = "200" ]; then
|
||
success "Главная страница доступна (HTTP $HTTP_CODE)"
|
||
else
|
||
warning "Проблема с главной страницей (HTTP $HTTP_CODE)"
|
||
fi
|
||
|
||
# Проверяем наличие ключевых файлов
|
||
KEY_FILES=(
|
||
"index.php"
|
||
"config.php"
|
||
"crm_extensions/README.md"
|
||
)
|
||
|
||
for file in "${KEY_FILES[@]}"; do
|
||
if [ -f "$PROD_DIR/$file" ]; then
|
||
success "Файл найден: $file"
|
||
else
|
||
warning "Файл не найден: $file"
|
||
fi
|
||
done
|
||
}
|
||
|
||
# Откат изменений
|
||
rollback() {
|
||
log "Выполнение отката изменений..."
|
||
|
||
if [ -f "$BACKUP_DIR/latest_backup.txt" ]; then
|
||
BACKUP_PATH=$(cat "$BACKUP_DIR/latest_backup.txt")
|
||
|
||
if [ -f "$BACKUP_PATH" ]; then
|
||
log "Восстановление из резервной копии: $BACKUP_PATH"
|
||
|
||
# Останавливаем веб-сервер
|
||
systemctl stop apache2
|
||
|
||
# Восстанавливаем файлы
|
||
tar -xzf "$BACKUP_PATH" -C "$(dirname "$PROD_DIR")"
|
||
|
||
# Запускаем веб-сервер
|
||
systemctl start apache2
|
||
|
||
success "Откат выполнен успешно"
|
||
else
|
||
error "Резервная копия не найдена: $BACKUP_PATH"
|
||
fi
|
||
else
|
||
error "Файл с информацией о последней резервной копии не найден"
|
||
fi
|
||
}
|
||
|
||
# Основная функция
|
||
main() {
|
||
log "Начало деплоя CRM из тестовой среды в продакшн"
|
||
log "Лог файл: $LOG_FILE"
|
||
|
||
case "${1:-deploy}" in
|
||
"deploy")
|
||
check_permissions
|
||
create_backup
|
||
sync_files
|
||
fix_permissions
|
||
health_check
|
||
success "Деплой завершен успешно!"
|
||
;;
|
||
"rollback")
|
||
rollback
|
||
;;
|
||
"backup")
|
||
check_permissions
|
||
create_backup
|
||
;;
|
||
"sync")
|
||
check_permissions
|
||
sync_files
|
||
fix_permissions
|
||
;;
|
||
"health")
|
||
health_check
|
||
;;
|
||
*)
|
||
echo "Использование: $0 {deploy|rollback|backup|sync|health}"
|
||
echo " deploy - Полный деплой (по умолчанию)"
|
||
echo " rollback - Откат к последней резервной копии"
|
||
echo " backup - Создание резервной копии"
|
||
echo " sync - Синхронизация файлов"
|
||
echo " health - Проверка работоспособности"
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Запуск основной функции
|
||
main "$@"
|
||
|
||
|