From 769e54b8b2a2c90ba47cab61be9722dd1b487f01 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 5 Jul 2025 08:12:34 +0300 Subject: [PATCH] update sh --- docker-compose.production.yml | 1 + setup_production_server.sh | 133 ++++++++++++++++++++++++++++------ 2 files changed, 112 insertions(+), 22 deletions(-) diff --git a/docker-compose.production.yml b/docker-compose.production.yml index 6bd3bd1..889528a 100644 --- a/docker-compose.production.yml +++ b/docker-compose.production.yml @@ -121,6 +121,7 @@ services: build: context: ./modules/web2-client dockerfile: Dockerfile + profiles: ["main-node"] # Only build for main nodes container_name: my-web2-client restart: unless-stopped depends_on: diff --git a/setup_production_server.sh b/setup_production_server.sh index fc6e5a2..a923639 100644 --- a/setup_production_server.sh +++ b/setup_production_server.sh @@ -823,9 +823,31 @@ if ! check_and_skip "docker_build" "Сборка и запуск"; then log "Используется $COMPOSE_FILE" - # Сборка образов от имени пользователя сервиса - log "Сборка основного приложения..." - sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" build + # Сборка образов от имени пользователя сервиса с учетом типа ноды + log "Сборка приложения для типа ноды: $NODE_TYPE..." + + if [ "$NODE_TYPE" = "main" ]; then + # Для основной ноды пытаемся собрать с профилем main-node (включая web2-client) + if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then + if sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" --profile main-node build 2>/dev/null; then + log_success "Сборка основной ноды (с web2-client) завершена" + else + log_warning "Сборка с web2-client не удалась, собираем без него..." + sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" build app postgres redis converter 2>/dev/null || \ + sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" build app postgres redis + fi + else + # Для обычного docker-compose.yml собираем все доступные сервисы + sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" build + fi + else + # Для обычной ноды собираем только основные сервисы + if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then + sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" build app postgres redis converter + else + sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" build app postgres redis indexer ton_daemon license_index convert_process + fi + fi # Сборка converter image (если есть профиль build-only) log "Сборка converter image..." @@ -835,15 +857,21 @@ if ! check_and_skip "docker_build" "Сборка и запуск"; then log "Запуск приложения..." if [ "$NODE_TYPE" = "main" ]; then - # Для основной ноды запускаем все сервисы включая web2-client + # Для основной ноды пытаемся запустить с профилем main-node if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then - sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" up -d app postgres redis web2-client nginx prometheus grafana loki promtail + if sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" --profile main-node up -d 2>/dev/null; then + log "🚀 Запущены все сервисы основной ноды (включая web2-client)" + else + log_warning "Запуск с web2-client не удался, запускаем основные сервисы..." + sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" up -d app postgres redis + log "🚀 Запущены основные сервисы (web2-client пропущен)" + fi else sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" up -d + log "🚀 Запущены все доступные сервисы для основной ноды" fi - log "🚀 Запущены все сервисы для основной ноды" else - # Для обычной ноды запускаем только основные сервисы без web2-client + # Для обычной ноды запускаем только основные сервисы if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then sudo -u "$SERVICE_USER" docker-compose -f "$COMPOSE_FILE" up -d app postgres redis else @@ -911,11 +939,20 @@ if ! check_and_skip "final_check" "Финальная проверка"; then cat > "$MAIN_PROJECT_DIR/start.sh" << EOF #!/bin/bash cd $MAIN_PROJECT_DIR +echo "🚀 Запуск MY Uploader Bot (тип ноды: $NODE_TYPE)..." if [ "$NODE_TYPE" = "main" ]; then if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then - docker-compose -f $COMPOSE_FILE up -d app postgres redis web2-client nginx prometheus grafana loki promtail + # Пытаемся запустить с профилем main-node (включая web2-client) + if docker-compose -f $COMPOSE_FILE --profile main-node up -d 2>/dev/null; then + echo "✅ Запущены все сервисы основной ноды (включая web2-client)" + else + echo "⚠️ Web2-client недоступен, запускаем основные сервисы..." + docker-compose -f $COMPOSE_FILE up -d app postgres redis + echo "✅ Запущены основные сервисы (web2-client пропущен)" + fi else docker-compose -f $COMPOSE_FILE up -d + echo "✅ Запущены все доступные сервисы для основной ноды" fi else if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then @@ -923,8 +960,10 @@ else else docker-compose -f $COMPOSE_FILE up -d app postgres redis indexer ton_daemon license_index convert_process fi + echo "✅ Запущены основные сервисы для обычной ноды" fi -echo "✅ MY Uploader Bot запущен (тип ноды: $NODE_TYPE)" +echo "" +echo "📊 Статус контейнеров:" docker-compose -f $COMPOSE_FILE ps EOF @@ -966,12 +1005,41 @@ EOF cat > "$MAIN_PROJECT_DIR/rebuild.sh" << EOF #!/bin/bash cd $MAIN_PROJECT_DIR -echo "🔄 Пересборка и перезапуск..." +echo "🔄 Остановка сервисов..." docker-compose -f $COMPOSE_FILE down -docker-compose -f $COMPOSE_FILE build + +echo "🔧 Пересборка образов для типа ноды: $NODE_TYPE..." if [ "$NODE_TYPE" = "main" ]; then if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then - docker-compose -f $COMPOSE_FILE up -d app postgres redis web2-client nginx prometheus grafana loki promtail + # Пытаемся собрать с профилем main-node + if docker-compose -f $COMPOSE_FILE --profile main-node build 2>/dev/null; then + echo "✅ Сборка основной ноды (с web2-client) завершена" + else + echo "⚠️ Сборка с web2-client не удалась, собираем основные сервисы..." + docker-compose -f $COMPOSE_FILE build app postgres redis converter 2>/dev/null || \ + docker-compose -f $COMPOSE_FILE build app postgres redis + fi + else + docker-compose -f $COMPOSE_FILE build + fi +else + if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then + docker-compose -f $COMPOSE_FILE build app postgres redis converter + else + docker-compose -f $COMPOSE_FILE build app postgres redis indexer ton_daemon license_index convert_process + fi +fi + +echo "🚀 Запуск сервисов..." +if [ "$NODE_TYPE" = "main" ]; then + if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then + if docker-compose -f $COMPOSE_FILE --profile main-node up -d 2>/dev/null; then + echo "✅ Запущены все сервисы основной ноды (включая web2-client)" + else + echo "⚠️ Web2-client недоступен, запускаем основные сервисы..." + docker-compose -f $COMPOSE_FILE up -d app postgres redis + echo "✅ Запущены основные сервисы (web2-client пропущен)" + fi else docker-compose -f $COMPOSE_FILE up -d fi @@ -982,7 +1050,9 @@ else docker-compose -f $COMPOSE_FILE up -d app postgres redis indexer ton_daemon license_index convert_process fi fi -echo "✅ Пересборка завершена" +echo "✅ Пересборка и перезапуск завершены" +echo "" +echo "📊 Статус контейнеров:" docker-compose -f $COMPOSE_FILE ps EOF @@ -992,22 +1062,41 @@ EOF # Настройка автозапуска log "Настройка автозапуска..." - if [ "$NODE_TYPE" = "main" ]; then - if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then - SERVICE_EXEC_START="/usr/local/bin/docker-compose -f $COMPOSE_FILE up -d app postgres redis web2-client nginx prometheus grafana loki promtail" + # Создаем обертку скрипта для systemd service (учитывает профили Docker Compose) + cat > "$MAIN_PROJECT_DIR/systemd_start.sh" << EOF +#!/bin/bash +cd $MAIN_PROJECT_DIR +if [ "$NODE_TYPE" = "main" ]; then + if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then + # Пытаемся запустить с профилем main-node + if docker-compose -f $COMPOSE_FILE --profile main-node up -d 2>/dev/null; then + echo "✅ Запущены все сервисы основной ноды (включая web2-client)" else - SERVICE_EXEC_START="/usr/local/bin/docker-compose -f $COMPOSE_FILE up -d" + echo "⚠️ Web2-client недоступен, запускаем основные сервисы..." + docker-compose -f $COMPOSE_FILE up -d app postgres redis fi + else + docker-compose -f $COMPOSE_FILE up -d + fi +else + if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then + docker-compose -f $COMPOSE_FILE up -d app postgres redis + else + docker-compose -f $COMPOSE_FILE up -d app postgres redis indexer ton_daemon license_index convert_process + fi +fi +EOF + chmod +x "$MAIN_PROJECT_DIR/systemd_start.sh" + chown "$SERVICE_USER:$SERVICE_USER" "$MAIN_PROJECT_DIR/systemd_start.sh" + + if [ "$NODE_TYPE" = "main" ]; then SERVICE_DESCRIPTION="MY Uploader Bot (Main Node)" else - if [ "$COMPOSE_FILE" = "docker-compose.production.yml" ]; then - SERVICE_EXEC_START="/usr/local/bin/docker-compose -f $COMPOSE_FILE up -d app postgres redis" - else - SERVICE_EXEC_START="/usr/local/bin/docker-compose -f $COMPOSE_FILE up -d app postgres redis indexer ton_daemon license_index convert_process" - fi SERVICE_DESCRIPTION="MY Uploader Bot (Regular Node)" fi + SERVICE_EXEC_START="$MAIN_PROJECT_DIR/systemd_start.sh" + cat > /etc/systemd/system/my-uploader-bot.service << EOF [Unit] Description=$SERVICE_DESCRIPTION