name: Deploy Backend to Docker on: push: branches: - main paths: - 'backend/**' - 'docker-compose.yml' - '.gitea/workflows/deploy.yml' workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build backend image working-directory: backend run: docker build -t rmtpocketwatcher-backend:latest . - name: Save image to tar run: docker save rmtpocketwatcher-backend:latest -o backend-image.tar - name: Deploy via SSH to Docker host env: DOCKER_HOST: ${{ secrets.DOCKER_HOST }} DOCKER_SSH_KEY: ${{ secrets.DOCKER_SSH_KEY }} DOCKER_USER: ${{ secrets.DOCKER_USER }} run: | # Setup SSH mkdir -p ~/.ssh echo "$DOCKER_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key # Copy image to remote host scp -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ backend-image.tar ${DOCKER_USER}@${DOCKER_HOST}:/tmp/ # Copy docker-compose to remote host scp -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ docker-compose.yml ${DOCKER_USER}@${DOCKER_HOST}:/opt/rmtpocketwatcher/ # Load image and restart services ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no \ ${DOCKER_USER}@${DOCKER_HOST} << 'EOF' cd /opt/rmtpocketwatcher docker load -i /tmp/backend-image.tar docker-compose down backend docker-compose up -d backend rm /tmp/backend-image.tar EOF deploy-portainer: runs-on: ubuntu-latest if: github.event_name == 'workflow_dispatch' steps: - name: Checkout code uses: actions/checkout@v4 - name: Deploy via Portainer Webhook env: PORTAINER_WEBHOOK_URL: ${{ secrets.PORTAINER_WEBHOOK_URL }} run: | curl -X POST "$PORTAINER_WEBHOOK_URL" - name: Deploy via Portainer API env: PORTAINER_URL: ${{ secrets.PORTAINER_URL }} PORTAINER_API_KEY: ${{ secrets.PORTAINER_API_KEY }} PORTAINER_STACK_ID: ${{ secrets.PORTAINER_STACK_ID }} run: | # Pull latest from git and redeploy stack curl -X PUT \ "${PORTAINER_URL}/api/stacks/${PORTAINER_STACK_ID}/git/redeploy" \ -H "X-API-Key: ${PORTAINER_API_KEY}" \ -H "Content-Type: application/json" \ -d '{ "pullImage": true, "prune": true }'