diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index fc01197..2c7e12a 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -10,7 +10,6 @@ on: jobs: build-and-deploy: runs-on: ubuntu-latest - # Используем контейнер act-latest для стабильной работы на твоем раннере в Хельсинки container: image: catthehacker/ubuntu:act-latest @@ -20,13 +19,11 @@ jobs: - name: Install Tools run: | - # Установка Docker и клиента Postgres для полной автоматизации процесса apt-get update && apt-get install -y docker.io postgresql-client - name: Build and Deploy run: | # 1. СТРОГОЕ ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ - # Переменные задаются один раз для предотвращения их потери в подоболочках bash. if [[ "${{ github.ref }}" == *"production"* ]]; then D_NAME="jambotron-prod"; D_DB="jambotron_prod"; D_DOMAIN="jambotron.com"; D_TAG="prod-latest" else @@ -35,23 +32,36 @@ jobs: echo "Starting созидание for $D_NAME with tag $D_TAG" - # 2. АВТОМАТИЧЕСКОЕ СОЗДАНИЕ БАЗЫ ДАННЫХ - # Команда проверяет существование БД и создает её, если нужно, делая систему автономной. + # 2. ПОДГОТОВКА ИНФРАСТРУКТУРЫ + # Создание базы данных, если она отсутствует 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" + + # ГАРАНТИЯ СУЩЕСТВОВАНИЯ ТОМА + # Создаем volume, если он еще не был создан вручную или системой + docker volume create jambotron_data || true # 3. СБОРКА ОБРАЗА - # --network=host необходим для успешного прохождения шагов npm install внутри Docker. docker build --network=host -t jambotron-app:$D_TAG . # 4. БЕЗОПАСНАЯ ОЧИСТКА - # Останавливаем и удаляем старый контейнер перед запуском нового. docker stop $D_NAME || true docker rm $D_NAME || true # 5. ЗАПУСК СИСТЕМЫ (ЛИНЕЙНАЯ КОМАНДА) - # Команда вытянута в одну строку для устранения ошибки 'docker run requires at least 1 argument'. - # Настроены: проброс сокета, профиль 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 + # В команду добавлен флаг -v для подключения тома jambotron_data к приложению. + docker run -d --name $D_NAME --network jambotron-net --restart always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v jambotron_data:/jambotron_data \ + -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 diff --git a/jambotron-ui/package.json b/jambotron-ui/package.json index acf1236..6f34f3b 100644 --- a/jambotron-ui/package.json +++ b/jambotron-ui/package.json @@ -3,7 +3,8 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve --proxy-config src/proxy.conf.json", + "start_dev_docker": "ng serve --proxy-config src/proxy.conf.docker.json", + "start_dev": "ng serve --proxy-config src/proxy.conf.json", "start_prod": "ng serve --configuration production", "build": "ng build", "watch": "ng build --watch --configuration development", @@ -55,4 +56,4 @@ "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.9.3" } -} \ No newline at end of file +} diff --git a/jambotron-ui/src/app/global-constants.ts b/jambotron-ui/src/app/global-constants.ts index 51c3407..c9d4d29 100644 --- a/jambotron-ui/src/app/global-constants.ts +++ b/jambotron-ui/src/app/global-constants.ts @@ -17,7 +17,7 @@ export class GlobalConstants { return `${environment.host_name}/api`; }else { //return `${environment.host_name}:${environment.port}/api`; - return `/api`; // in serve mode used proxy (proxy.conf.json) + return `/api`; // in serve mode used proxy (proxy.conf.docker.json) } })(); diff --git a/jambotron-ui/src/environments/environment.development.ts b/jambotron-ui/src/environments/environment.development.ts index 9a731d4..d67e962 100644 --- a/jambotron-ui/src/environments/environment.development.ts +++ b/jambotron-ui/src/environments/environment.development.ts @@ -1,6 +1,6 @@ export const environment = { default_page: 'main/tutorials/tutorials-all', - port: 8080, + port: 8081, fromWeb: false, production: false, host_name: 'http://localhost', diff --git a/jambotron-ui/src/proxy.conf.docker.json b/jambotron-ui/src/proxy.conf.docker.json new file mode 100644 index 0000000..82f6357 --- /dev/null +++ b/jambotron-ui/src/proxy.conf.docker.json @@ -0,0 +1,10 @@ +{ + "/api/**": { + "target": "http://localhost:8081", + "secure": false, + "changeOrigin": true, + "logLevel": "debug", + "pathRewrite": {"^/api" : "http://localhost:8081/api"} + + } +}