From 1b518aa46823450aeaa138bf487ba4f3fc62ec67 Mon Sep 17 00:00:00 2001 From: Tiago Yamamoto Date: Sat, 27 Dec 2025 22:54:37 -0300 Subject: [PATCH] feat: configure backend dev deployment workflow --- .github/workflows/deploy.yaml | 39 +++++++++++++++++++ docker-compose.yml | 73 +++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 .github/workflows/deploy.yaml create mode 100644 docker-compose.yml diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..ce21e51 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,39 @@ +name: Deploy Backend (Dev) + +on: + push: + branches: + - dev # O deploy só será disparado quando você enviar código para a branch 'dev' + paths: + - 'backend/**' # O deploy só dispara se houver mudança especificamente na pasta do backend + +jobs: + deploy-backend-dev: + runs-on: ubuntu-latest + steps: + - name: Executar Deploy via SSH na Apolo (Ambiente Dev) + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + key: ${{ secrets.SSH_KEY }} + port: ${{ secrets.PORT || 22 }} + script: | + # 1. Navega até a pasta onde está o código + cd /mnt/data/gohorsejobs + + # 2. Garante que está na branch dev e atualiza o código + git fetch origin + git checkout dev + git pull origin dev + + # 3. Build isolado da imagem do backend + # O comando aponta para a subpasta './backend' conforme sua estrutura de arquivos + podman build -t gohorsejobs-backend-dev ./backend + + # 4. Reinicia o serviço específico de desenvolvimento + # Recomendado ter um serviço/container separado para dev (ex: gohorsejobs-backend-dev) + sudo systemctl restart gohorsejobs-backend-dev + + # 5. Limpeza de imagens antigas + podman image prune -f \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1474f7f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,73 @@ +version: '3.8' + +services: + backend: + build: + context: ./backend + dockerfile: Dockerfile + ports: + - "8080:8080" + environment: + - DB_HOST=db + - DB_PORT=5432 + - DB_USER=${DB_USER:-postgres} + - DB_PASSWORD=${DB_PASSWORD:-postgres} + - DB_NAME=${DB_NAME:-gohorsejobs} + - JWT_SECRET=${JWT_SECRET:-secret} + - FRONTEND_URL=${FRONTEND_URL:-http://localhost:3000} + depends_on: + - db + restart: unless-stopped + networks: + - app-network + + backoffice: + build: + context: ./backoffice + dockerfile: Dockerfile + ports: + - "3001:3001" + environment: + - DB_HOST=db + - DB_PORT=5432 + - DB_USERNAME=${DB_USER:-postgres} + - DB_PASSWORD=${DB_PASSWORD:-postgres} + - DB_DATABASE=${DB_NAME:-gohorsejobs} + - JWT_SECRET=${JWT_SECRET:-secret} + depends_on: + - db + restart: unless-stopped + networks: + - app-network + + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + args: + - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-http://localhost:8080} + ports: + - "3000:3000" + depends_on: + - backend + restart: unless-stopped + networks: + - app-network + + db: + image: postgres:15-alpine + environment: + - POSTGRES_USER=${DB_USER:-postgres} + - POSTGRES_PASSWORD=${DB_PASSWORD:-postgres} + - POSTGRES_DB=${DB_NAME:-gohorsejobs} + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - app-network + +volumes: + postgres_data: + +networks: + app-network: + driver: bridge