Pular para o conteúdo principal

Deploy - Plasfran UI V2

Este documento descreve o processo de build e deploy automático do projeto Plasfran UI V2 para o ambiente de produção, utilizando GitHub Actions.


Requisitos

  • Branch de produção: main
  • Acesso SSH ao servidor
  • Secrets configuradas no repositório:
    • API_URL_PROD: URL da API usada no ambiente de PRODUÇÃO
    • FRONT_URL_PROD: URL base do frontend
    • SSH_HOST_PROD: Endereço do servidor remoto
    • SSH_USER_PROD: Usuário com permissão de escrita
    • SSH_KEY_PROD: Chave privada SSH para acesso ao servidor

Gatilhos

O pipeline é executado automaticamente quando:

  • Um push é feito para a branch main
  • Um gatilho manual é ativado via workflow_dispatch

Etapas do Workflow

1. Checkout do Código

- name: Checkout do código
uses: actions/checkout@v3

Faz o download do código-fonte do repositório.


2. Setup do Node.js

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: "18.x"

Garante que o Node.js (versão 18) esteja disponível para o build do projeto.


3. Instalação de dependências

- name: Instalar dependências
run: npm install --force

Instala os pacotes do projeto. O --force ignora conflitos e rebaixa dependências se necessário.


4. Build para Homologação

- name: Build (modo produção)
run: npm run build

Executa o build do projeto React com a configuração de produção (vite.config.js deve considerar VITE_API_URL e VITE_FRONT_URL).


5. Compactar arquivos de dist

- name: Compactar arquivos de dist
run: tar -czf dist.tar.gz -C dist .

Cria um pacote dist.tar.gz com os arquivos do build para facilitar o envio ao servidor.


6. Backup no Servidor

Conecta via SSH no servidor de produção e faz um backup da versão atual.

- name: Fazer backup
uses: appleboy/ssh-action@v1.0.0
...
script: |
mkdir -p /var/www/erp-ui-new-backup
cp -r /var/www/erp-ui-new "/var/www/erp-ui-new-backup/backup_$(date +'%Y%m%d_%H%M%S')"

7. Enviar para o servidor (via SCP)

- name: Enviar dist para servidor
uses: appleboy/scp-action@v0.1.4
with:
...
source: "dist.tar.gz"
target: "/var/www/erp-ui-new"

Transfere o dist.tar.gz para o diretório /var/www/erp-ui-new do servidor remoto.


8. Descompactar no servidor (via SSH)

- name: SSH - descompactar no servidor
uses: appleboy/ssh-action@v1.0.0
with:
...
script: |
cd /var/www/erp-ui-new
tar -xzf dist.tar.gz
rm dist.tar.gz

Acessa o servidor via SSH e descompacta o build no diretório de destino. Em seguida, remove o arquivo .tar.gz para limpeza.


Resultado Esperado

Ao final do processo:

  • Acesse o frontend via URL definida em VITE_FRONT_URL.
  • Verifique se a aplicação carrega corretamente e consome a API definida em VITE_API_URL.

Arquivo completo

name: Build and Deploy Plasfran UI - PRODUÇÃO

on:
push:
branches:
- main
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest

env:
# variáveis públicas para o build do Vite (prefixadas com VITE_)
VITE_API_URL: ${{ secrets.API_URL_PROD }}
VITE_FRONT_URL: ${{ secrets.FRONT_URL_PROD }}

steps:
- name: Checkout do código
uses: actions/checkout@v3

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: "18.x"

- name: Instalar dependências
run: npm install --force

- name: Build (modo producao)
run: npm run build

- name: Compactar arquivos de dist
run: tar -czf dist.tar.gz -C dist .

- name: Fazer backup
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SSH_HOST_PROD }}
username: ${{ secrets.SSH_USER_PROD }}
key: ${{ secrets.SSH_KEY_PROD }}
port: 22
script: |
mkdir -p /var/www/erp-ui-new-backup
cp -r /var/www/erp-ui-new "/var/www/erp-ui-new-backup/backup_$(date +'%Y%m%d_%H%M%S')"

- name: Enviar dist para servidor
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.SSH_HOST_PROD }}
username: ${{ secrets.SSH_USER_PROD }}
key: ${{ secrets.SSH_KEY_PROD }}
port: 22
source: "dist.tar.gz"
target: "/var/www/erp-ui-new"

- name: SSH - descompactar no servidor
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SSH_HOST_PROD }}
username: ${{ secrets.SSH_USER_PROD }}
key: ${{ secrets.SSH_KEY_PROD }}
port: 22
script: |
cd /var/www/erp-ui-new
tar -xzf dist.tar.gz
rm dist.tar.gz