Skip to content

Instantly share code, notes, and snippets.

@vinicioslc
Last active June 5, 2024 04:07
Show Gist options
  • Save vinicioslc/f1846cbd26f1f1b8fa9e90643408f15c to your computer and use it in GitHub Desktop.
Save vinicioslc/f1846cbd26f1f1b8fa9e90643408f15c to your computer and use it in GitHub Desktop.
Como fazer deploy na digital ocean com github actions
  1. Primeiro crie uma chave ssh para deploy que será salva no github actions para ter acesso a maquina da digital ocean 1.1 Crie utilizando esses steps https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  2. Adicione ssh.publica no servidor no arquivo authorized_keys
  3. Adiciona o ssh ao repositório do github nas settings do repositório 3.1 Caso possua pacotes privados do github não esqueça de configrar o .npmrc na pasta do package.json setando token de leitura para instalação de packages do repositório do gitbub

3.3 Adicione as configurações de conexão ssh utilizando as enviroments do repositório seguindo padrão de prefixo no nome SSH SSH_HOST -> ip da maquina SSH_PORT -> porta ssh 22 SSH_KEY -> chave ssh utilizada para conectar na maquina SSH_USERNAME -> nome de usuário root

arquivo de exmeplo

# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: CI/CD Production

on:
  # Só irá rodar nas seguintes situações das seguintes branhces
  push:
    branches: [production]
  pull_request:
    branches: [production]

jobs:
  build-front:
    # qual sistema operacional vai rodar
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: client
    strategy:
      matrix:
        # Sua versão do nodejs para ser utilizada
        node-version: ["12.18.3"]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      # instala e roda build de produção
      - run: |
          npm install
          npm run build-prod

      - name: Install Zip
        uses: montudor/action-zip@v0.1.1

      # Compacta pasta dist como .zip na pasta raiz
      - name: Zip Dist as Artifact (at root /)
        run: |
          cd ./dist
          echo "Compressing these files:"
          ls -al
          zip -qq -r -T ../../omega-web.zip *

      # Salva o .zip entre os passos de deploy
      - name: Save Build Artifact
        uses: actions/upload-artifact@v2
        with:
          name: omega-web.zip
          path: omega-web.zip
          if-no-files-found: error

  deploy-web-production:
    needs: [build-front]
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: client

    steps:
      # Baixa o artefato que teve upload no passo de build
      - uses: actions/download-artifact@v2
        with:
          name: omega-web.zip

      # Faz upload de artefatos para o  VPS para o uso posterior
      - name: Upload Artifact over SSH
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          port: ${{ secrets.SSH_PORT }}
          overwrite: true
          source: "omega-web.zip"
          target: "~/artifacts"

      # Efetua descompactação do webapp na pasta de produção do servidor
      - name: Enter SSH and unzip Artifact
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            unzip -o ~/artifacts/omega-web.zip -d /var/www/omega.3ccloud.com.br/html/

  deploy-server-production:
    needs: [build-front]
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: server
    steps:
      - name: SSH PULL/INSTALL/MIGRATE/RESTART
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          port: ${{ secrets.SSH_PORT }}
          # Exporta envs para ter acesso ao nodejs
          script: |
            export PATH=/root/.nvm/versions/node/v12.19.0/bin:$PATH 
            cd ~/pm2-services/omega/source/server
            git fetch
            git checkout production
            git pull origin production
            npm install --production
            adonis migration:run --force
            pm2 startOrRestart ./ecosystem.config.js --env production
  1. Setar as credenciais para não impedir o fetch durante a conexão ssh root@bohrio:# git config --global user.name "Seu Nome" root@bohrio:# git config --global user.email "seuemail@outlook.com"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment