name: CD on: workflow_dispatch: env: DEPLOY_HOST: 188.225.47.78 DEPLOY_PATH: /opt/image-gateway DEPLOY_USER: root IMAGE_TAG: latest WEB_NETWORK: web jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup variables run: | DOCKER_REGISTRY=$(echo "${{ gitea.server_url }}" | sed -E 's|^https?://||') echo "DOCKER_REGISTRY=$DOCKER_REGISTRY" >> "$GITHUB_ENV" REGISTRY_IMAGE="$DOCKER_REGISTRY/$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')" echo "REGISTRY_IMAGE=$REGISTRY_IMAGE" >> "$GITHUB_ENV" - name: Настройка SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H "${{ env.DEPLOY_HOST }}" >> ~/.ssh/known_hosts - name: Подготовка директории деплоя run: | ssh -i ~/.ssh/deploy_key "${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }}" \ "mkdir -p '${{ env.DEPLOY_PATH }}'" - name: Копирование compose-конфигурации run: | scp -i ~/.ssh/deploy_key docker-compose.yml Caddyfile \ "${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }}:${{ env.DEPLOY_PATH }}/" - name: Ручной деплой run: | ssh -i ~/.ssh/deploy_key "${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }}" bash -s <<'SCRIPT' set -euo pipefail cd '${{ env.DEPLOY_PATH }}' IMAGE='${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_TAG }}' WEB_NETWORK='${{ env.WEB_NETWORK }}' echo '${{ secrets.CR_TOKEN }}' | docker login '${{ env.DOCKER_REGISTRY }}' \ -u '${{ secrets.CR_USER }}' --password-stdin docker network inspect "$WEB_NETWORK" >/dev/null 2>&1 || docker network create "$WEB_NETWORK" WEB_NETWORK="$WEB_NETWORK" CADDY_IMAGE="$IMAGE" docker compose -f docker-compose.yml pull caddy imgproxy WEB_NETWORK="$WEB_NETWORK" CADDY_IMAGE="$IMAGE" docker compose -f docker-compose.yml up -d --no-build WEB_NETWORK="$WEB_NETWORK" CADDY_IMAGE="$IMAGE" docker compose -f docker-compose.yml ps docker image prune -f SCRIPT