diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 563bfea..51a7c2f 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -10,7 +10,7 @@ on: jobs: build-and-deploy: runs-on: ubuntu-latest - # Используем контейнер act-latest для совместимости с твоим локальным раннером в Хельсинки + # Используем контейнер act-latest для стабильной работы на твоем раннере container: image: catthehacker/ubuntu:act-latest @@ -20,13 +20,13 @@ jobs: - name: Install Docker CLI run: | - # Установка Docker внутри контейнера раннера для управления хостовым Docker-демоном + # Установка Docker внутри контейнера раннера apt-get update && apt-get install -y docker.io - name: Build and Deploy run: | - # 1. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ - # Мы разделяем среды staging и production, сохраняя единство инженерного подхода. + # 1. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ + # Разделяем среды, сохраняя единство инженерного подхода. BRANCH_NAME="${{ github.ref }}" if [[ "$BRANCH_NAME" == *"production"* ]]; then @@ -41,41 +41,41 @@ jobs: TAG="stg-latest" fi - echo "Starting созидание for $NAME with tag $TAG on domain $DOMAIN" + echo "Starting созидание for $NAME with tag $TAG" # 2. СБОРКА ОБРАЗА - # Собираем свежий слой кода Jambotron - # Сборка образа с доступом к сети хоста + # Используем --network=host, чтобы избежать ошибок npm network docker build --network=host -t jambotron-app:${TAG} . - # 3. ПОДГОТОВКА СРЕДЫ (ОЧИСТКА) - # Останавливаем старый сосуд, чтобы освободить место для нового - docker stop $NAME || true - docker rm $NAME || true + # 3. БЕЗОПАСНАЯ ОЧИСТКА + # Проверяем наличие контейнера перед остановкой, чтобы не ломать билд + if [ "$(docker ps -aq -f name=^/${NAME}$)" ]; then + echo "Stopping and removing existing container: $NAME" + docker stop $NAME + docker rm $NAME + fi # 4. ЗАПУСК СИСТЕМЫ - # Здесь мы передаем все критические параметры для работы Spring Boot и Flyway. + # Формируем полное имя образа заранее для защиты от пустых аргументов + IMAGE_NAME="jambotron-app:${TAG}" + docker run -d \ - --name $NAME \ + --name "$NAME" \ --network jambotron-net \ --restart always \ - # Проброс сокета необходим для управления другими контейнерами (SaaS 2.0) -v /var/run/docker.sock:/var/run/docker.sock \ - # SPRING_PROFILES_ACTIVE=prod: - # Активирует боевой режим: отключает небезопасные stacktrace, включает кэширование - # и применяет специфичные для prod настройки пула соединений и логирования. + # Активирует боевой режим (оптимизация, безопасность, логирование) -e SPRING_PROFILES_ACTIVE=prod \ - # Настройки подключения к основной базе PostgreSQL -e SPRING_DATASOURCE_URL=jdbc:postgresql://jambo-postgres:5432/$DB_NAME \ -e SPRING_DATASOURCE_USERNAME=jambotron_admin \ -e SPRING_DATASOURCE_PASSWORD=jambo_secret_pass \ - # Настройки Flyway: исправляют PlaceholderResolutionException + # Настройки Flyway для миграции базы -e SPRING_FLYWAY_URL=jdbc:postgresql://jambo-postgres:5432/$DB_NAME \ -e SPRING_FLYWAY_USER=jambotron_admin \ -e SPRING_FLYWAY_PASSWORD=jambo_secret_pass \ - # Метки для Caddy: автоматическая прокси-магистраль и SSL + # Метки для Caddy (автоматический прокси и SSL) -l "caddy=$DOMAIN" \ -l 'caddy.reverse_proxy={{upstreams 8081}}' \ - jambotron-app:${TAG} + "$IMAGE_NAME" - echo "Созидание успешно завершено. Система активна." \ No newline at end of file + echo "Созидание $NAME успешно завершено." \ No newline at end of file