diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index b47b611..8c875b9 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,3 +1,7 @@ +# Jambotron Deployment Workflow +# Этот файл реализует монолитный код существования системы Jambotron. +# Он обеспечивает автоматизированное созидание инфраструктуры при каждом пуше. + name: Jambotron Deploy on: push: @@ -6,6 +10,7 @@ on: jobs: build-and-deploy: runs-on: ubuntu-latest + # Используем контейнер act-latest для стабильной работы на твоем раннере в Хельсинки container: image: catthehacker/ubuntu:act-latest @@ -14,45 +19,48 @@ jobs: uses: actions/checkout@v3 - name: Install Tools - run: apt-get update && apt-get install -y docker.io postgresql-client + run: | + # Установка Docker и клиента Postgres для автоматизации инфраструктуры + apt-get update && apt-get install -y docker.io postgresql-client - name: Build and Deploy run: | - # 1. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ + # 1. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ + # Мы разделяем среды staging и production, сохраняя единство инженерного подхода. if [[ "${{ github.ref }}" == *"production"* ]]; then - export D_NAME="jambotron-prod" - export D_DB="jambotron_prod" - export D_DOMAIN="jambotron.com" - export D_TAG="prod-latest" + D_NAME="jambotron-prod" + D_DB="jambotron_prod" + D_DOMAIN="jambotron.com" + D_TAG="prod-latest" else - export D_NAME="jambotron-staging" - export D_DB="jambotron_stg" - export D_DOMAIN="staging.jambotron.com" - export D_TAG="stg-latest" + D_NAME="jambotron-staging" + D_DB="jambotron_stg" + D_DOMAIN="staging.jambotron.com" + D_TAG="stg-latest" fi - # 2. АВТО-СОЗДАНИЕ БАЗЫ + echo "Starting созидание for $D_NAME with tag $D_TAG" + + # 2. АВТОМАТИЧЕСКОЕ СОЗДАНИЕ БАЗЫ ДАННЫХ + # Подключаемся к контейнеру jambo-postgres и создаем БД, если её нет. Это делает билд автономным. docker exec jambo-postgres psql -U jambotron_admin -d postgres -tc "SELECT 1 FROM pg_database WHERE datname = '$D_DB'" | grep -q 1 || \ docker exec jambo-postgres psql -U jambotron_admin -d postgres -c "CREATE DATABASE $D_DB" - # 3. СБОРКА С СЕТЬЮ ХОСТА (для NPM) - docker build --network=host -t jambotron-app:${D_TAG} . + # 3. СБОРКА ОБРАЗА + # Используем --network=host, чтобы избежать проблем с доступом npm к репозиториям. + docker build --network=host -t jambotron-app:$D_TAG . - # 4. ОЧИСТКА + # 4. БЕЗОПАСНАЯ ОЧИСТКА + # Проверяем наличие старого контейнера перед удалением, чтобы не ломать билд. if [ "$(docker ps -aq -f name=^/${D_NAME}$)" ]; then - docker stop $D_NAME && docker rm $D_NAME + echo "Cleaning up old container: $D_NAME" + docker stop $D_NAME || true + docker rm $D_NAME || true fi - # 5. ЗАПУСК С ПОДДЕРЖКОЙ WILDCARD - docker run -d \ - --name "$D_NAME" \ - --network jambotron-net \ - --restart always \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -e SPRING_PROFILES_ACTIVE=prod \ - -e SPRING_DATASOURCE_URL=jdbc:postgresql://jambo-postgres:5432/$D_DB \ - -e SPRING_FLYWAY_URL=jdbc:postgresql://jambo-postgres:5432/$D_DB \ - # Метки Caddy для управления всеми уровнями поддоменов - -l "caddy=${D_DOMAIN}, *.${D_DOMAIN}, *.*.${D_DOMAIN}" \ - -l 'caddy.reverse_proxy={{upstreams 8081}}' \ - "jambotron-app:${D_TAG}" \ No newline at end of file + # 5. ЗАПУСК СИСТЕМЫ (ЛИНЕЙНАЯ КОМАНДА) + # Команда склеена в одну строку, чтобы исключить ошибки интерпретации аргументов в bash. + # Здесь прописаны: доступ к Docker-сокету, профиль prod, настройки БД и Wildcard-метки для Caddy. + docker run -d --name $D_NAME --network jambotron-net --restart always -v /var/run/docker.sock:/var/run/docker.sock -e SPRING_PROFILES_ACTIVE=prod -e SPRING_DATASOURCE_URL=jdbc:postgresql://jambo-postgres:5432/$D_DB -e SPRING_FLYWAY_URL=jdbc:postgresql://jambo-postgres:5432/$D_DB -e SPRING_DATASOURCE_USERNAME=jambotron_admin -e SPRING_DATASOURCE_PASSWORD=jambo_secret_pass -e SPRING_FLYWAY_USER=jambotron_admin -e SPRING_FLYWAY_PASSWORD=jambo_secret_pass -l "caddy=$D_DOMAIN, *.$D_DOMAIN, *.*.$D_DOMAIN" -l 'caddy.reverse_proxy={{upstreams 8081}}' jambotron-app:$D_TAG + + echo "Созидание $D_NAME успешно завершено. Система активна." \ No newline at end of file