From 2373060d3f7283e78ad0cd4d173c85c10be4847c Mon Sep 17 00:00:00 2001 From: Michael Schiemer Date: Fri, 31 Oct 2025 22:08:00 +0100 Subject: [PATCH] refactor: replace Ansible deployment with direct SSH commands - Remove Ansible dependency from deployment workflow - Use direct SSH commands for Docker operations - Simplify deployment process: * SSH to production server * Docker registry login * Pull new image * Update docker-compose.yml with sed * Restart services with docker compose - Remove Ansible verification step - Simplify rollback step (only shows manual instructions) - Works with ubuntu-latest runner (no special image needed) - Fixes 'ansible: command not found' errors - Works with act for local testing --- .gitea/workflows/production-deploy.yml | 86 +++++++++++++++++++++----- 1 file changed, 71 insertions(+), 15 deletions(-) diff --git a/.gitea/workflows/production-deploy.yml b/.gitea/workflows/production-deploy.yml index c16a678a..971ffaa5 100644 --- a/.gitea/workflows/production-deploy.yml +++ b/.gitea/workflows/production-deploy.yml @@ -637,19 +637,72 @@ jobs: chmod 600 ~/.ssh/production ssh-keyscan -H ${{ env.DEPLOYMENT_HOST }} >> ~/.ssh/known_hosts - - name: Verify Ansible installation - run: ansible --version - - - name: Deploy via Ansible + - name: Deploy via SSH run: | - cd /workspace/repo/deployment/ansible - ansible-playbook -i inventory/production.yml \ - playbooks/deploy-update.yml \ - -e "image_tag=${{ needs.build.outputs.image_tag }}" \ - -e "git_commit_sha=${{ needs.build.outputs.commit_sha }}" \ - -e "deployment_timestamp=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ - -e "docker_registry_username=${{ secrets.REGISTRY_USER }}" \ - -e "docker_registry_password=${{ secrets.REGISTRY_PASSWORD }}" + set -e + + DEPLOYMENT_HOST="${{ env.DEPLOYMENT_HOST }}" + REGISTRY="${{ env.REGISTRY }}" + IMAGE_NAME="${{ env.IMAGE_NAME }}" + IMAGE_TAG="${{ needs.build.outputs.image_tag }}" + FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" + STACK_PATH="~/deployment/stacks/application" + + echo "🚀 Starting deployment..." + echo " Image: ${FULL_IMAGE}" + echo " Host: ${DEPLOYMENT_HOST}" + echo " Stack: ${STACK_PATH}" + + # SSH with proper key and execute deployment commands + ssh -i ~/.ssh/production \ + -o StrictHostKeyChecking=no \ + -o UserKnownHostsFile=/dev/null \ + deploy@${DEPLOYMENT_HOST} <