name: Build and Deploy Backend on: push: tags: - '*' workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest container: docker.io/catthehacker/ubuntu:act-latest steps: # 1. Клонируем код - name: Checkout code uses: actions/checkout@v4 # 2. Настраиваем Docker Buildx - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 # 3. Логинимся в Container Registry Gitea - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: git.uvpn.shop username: ${{ gitea.repository_owner }} password: ${{ secrets.ACCESS_TOKEN }} # 4. Собираем и пушим образ - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . push: true tags: | git.uvpn.shop/uvpn/backend:latest git.uvpn.shop/uvpn/backend:${{ gitea.sha }} - name: Create Gitea Release uses: https://gitea.com/actions/release-action@main with: # Файлы, которые прикрепятся к релизу (можно использовать маски файлов) files: |- /* # Токен доступа, который мы сохранили в секретах api_key: '${{ secrets.RELEASE_TOKEN }}' # 5. Устанавливаем SSH-ключ для деплоя - name: Install SSH key uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }} # 6. Деплой на сервер - name: Deploy on server run: | ssh -o StrictHostKeyChecking=no ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} << 'EOF' # Переходим в папку с проектом (где лежит docker-compose.yml) cd /opt/uvpn.shop/backend # Логинимся в реестр Gitea (чтобы docker pull мог скачать образ) echo "${{ secrets.ACCESS_TOKEN }}" | docker login git.uvpn.shop -u ${{ gitea.repository_owner }} --password-stdin # Скачиваем свежий образ docker compose pull # Перезапускаем контейнер с новым образом docker compose down || true # Если контейнер не запущен — игнорируем ошибку docker compose up -d # Очищаем неиспользуемые образы docker image prune -f EOF