diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index cc00ffd..2dd7b4a 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - stage jobs: deploy: @@ -13,6 +14,33 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Resolve environment + run: | + set -euo pipefail + if [[ "${{ gitea.ref_name }}" == "stage" ]]; then + { + echo "ENV_NAME=stage" + echo "IMAGE_TAG=stage" + echo "CONTAINER_SUFFIX=-stage" + echo "APP_PORT=8004" + echo "POSTGRES_PORT=5433" + echo "REDIS_PORT=6380" + echo "COMPOSE_PROJECT=g2s-aggregator-stage" + echo "DEPLOY_DIR=/home/deploy/g2s-aggregator-stage" + } >> "$GITHUB_ENV" + else + { + echo "ENV_NAME=prod" + echo "IMAGE_TAG=0.1.0" + echo "CONTAINER_SUFFIX=" + echo "APP_PORT=8003" + echo "POSTGRES_PORT=5432" + echo "REDIS_PORT=6379" + echo "COMPOSE_PROJECT=g2s-aggregator" + echo "DEPLOY_DIR=/home/deploy/g2s-aggregator" + } >> "$GITHUB_ENV" + fi + - name: Build and push image run: | docker login gitea.p4r4dls.ru \ @@ -22,7 +50,7 @@ jobs: docker buildx build \ --platform linux/amd64 \ --push \ - -t gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:0.1.0 \ + -t gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:${IMAGE_TAG} \ . - name: Setup SSH @@ -46,12 +74,24 @@ jobs: value="${entry#*=}" export "$key=$value" done < <(echo "$ALL_SECRETS" | jq -j 'to_entries[] | "\(.key)=\(.value)\u0000"') - + + # Для stage подменяем базовые имена секретов на STAGE_-версии: + # STAGE_FOO -> FOO + if [[ "$ENV_NAME" == "stage" ]]; then + while IFS= read -r -d '' entry; do + key="${entry%%=*}" + value="${entry#*=}" + if [[ "$key" == STAGE_* ]]; then + export "${key#STAGE_}=$value" + fi + done < <(echo "$ALL_SECRETS" | jq -j 'to_entries[] | "\(.key)=\(.value)\u0000"') + fi + render() { local src=$1 dst=$2 vars=$(grep -oP '\$\{\K[^}]+' "$src") for var in $vars; do - if [[ -z "${!var:-}" ]]; then + if [[ -z "${!var+x}" ]]; then echo "Error: $var не задан в Gitea Secrets" >&2 exit 1 fi @@ -63,17 +103,17 @@ jobs: render docker-compose.template.yml docker-compose.rendered.yml scp -i ~/.ssh/deploy_key config.rendered.yaml \ - deploy@194.58.121.203:/home/deploy/g2s-aggregator/config.yaml + deploy@194.58.121.203:$DEPLOY_DIR/config.yaml scp -i ~/.ssh/deploy_key docker-compose.rendered.yml \ - deploy@194.58.121.203:/home/deploy/g2s-aggregator/docker-compose.yml + deploy@194.58.121.203:$DEPLOY_DIR/docker-compose.yml - name: Deploy run: | ssh -i ~/.ssh/deploy_key deploy@194.58.121.203 " - cd /home/deploy/g2s-aggregator && + cd $DEPLOY_DIR && docker login gitea.p4r4dls.ru \ -u ${{ secrets.REGISTRY_USER }} \ -p ${{ secrets.REGISTRY_TOKEN }} && - docker compose pull && - docker compose up -d + docker compose -p $COMPOSE_PROJECT pull && + docker compose -p $COMPOSE_PROJECT up -d " diff --git a/config.template.yaml b/config.template.yaml index 2aeedf5..5ce850e 100644 --- a/config.template.yaml +++ b/config.template.yaml @@ -35,8 +35,8 @@ adapter: tbank_payment: init_url: "https://securepay.tinkoff.ru/v2/Init" - notification_url: "https://aggregator.get2send.com/api/v1/delivery/tbank/notifications" - success_url: "https://aggregator.get2send.com/checkout/success" + notification_url: "${TBANK_NOTIFICATION_URL}" + success_url: "${TBANK_SUCCESS_URL}" auth: terminal_key: "${TBANK_TERMINAL_KEY}" password: "${TBANK_PASSWORD}" diff --git a/docker-compose.template.yml b/docker-compose.template.yml index 88d9047..56edf4b 100644 --- a/docker-compose.template.yml +++ b/docker-compose.template.yml @@ -1,9 +1,9 @@ services: app: - image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:0.1.0 - container_name: g2s-aggregator + image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:${IMAGE_TAG} + container_name: g2s-aggregator${CONTAINER_SUFFIX} ports: - - "8003:8000" + - "${APP_PORT}:8000" depends_on: redis: condition: service_started @@ -17,23 +17,23 @@ services: logging: driver: "json-file" options: - tag: "g2s-aggregator" + tag: "g2s-aggregator${CONTAINER_SUFFIX}" redis: image: redis:7-alpine - container_name: redis + container_name: redis${CONTAINER_SUFFIX} command: ["redis-server", "--save", "", "--appendonly", "no"] ports: - - "6379:6379" + - "${REDIS_PORT}:6379" restart: unless-stopped postgres: image: postgres:16-alpine - container_name: postgres + container_name: postgres${CONTAINER_SUFFIX} environment: POSTGRES_DB: g2s_aggregator POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - - "5432:5432" + - "${POSTGRES_PORT}:5432" volumes: - postgres:/var/lib/postgresql/data healthcheck: @@ -42,8 +42,8 @@ services: timeout: 3s retries: 10 migrations: - image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:0.1.0 - container_name: g2s-aggregator-migrations + image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:${IMAGE_TAG} + container_name: g2s-aggregator-migrations${CONTAINER_SUFFIX} depends_on: postgres: condition: service_healthy @@ -54,10 +54,10 @@ services: logging: driver: "json-file" options: - tag: "g2s-aggregator-migrations" + tag: "g2s-aggregator-migrations${CONTAINER_SUFFIX}" waybill-poller: - image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:0.1.0 - container_name: g2s-aggregator-waybill-poller + image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:${IMAGE_TAG} + container_name: g2s-aggregator-waybill-poller${CONTAINER_SUFFIX} depends_on: postgres: condition: service_healthy @@ -70,10 +70,10 @@ services: logging: driver: "json-file" options: - tag: "g2s-aggregator-waybill-poller" + tag: "g2s-aggregator-waybill-poller${CONTAINER_SUFFIX}" waybill-email-sender: - image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:0.1.0 - container_name: g2s-aggregator-waybill-email-sender + image: gitea.p4r4dls.ru/yusupal1ev/g2s-aggregator:${IMAGE_TAG} + container_name: g2s-aggregator-waybill-email-sender${CONTAINER_SUFFIX} depends_on: postgres: condition: service_healthy @@ -87,11 +87,13 @@ services: logging: driver: "json-file" options: - tag: "g2s-aggregator-waybill-email-sender" + tag: "g2s-aggregator-waybill-email-sender${CONTAINER_SUFFIX}" otel-collector: image: otel/opentelemetry-collector-contrib:latest - container_name: otel-collector + container_name: otel-collector${CONTAINER_SUFFIX} user: "0" + environment: + ENV_NAME: ${ENV_NAME} volumes: - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml - /var/lib/docker/containers:/var/lib/docker/containers:ro