# Deploy



# Documentação de Deploy: Console & Control Panel

Esta documentação detalha os fluxos de trabalho e deploy para os projetos **Console** e **Control Panel**.

##### Ambientes e Acessos

<div class="horizontal-scroll-wrapper" id="bkmrk-ambiente-servidor-%28s"><table data-path-to-node="6"><thead><tr><td>**Ambiente**</td><td>**Servidor (SSH)**</td><td>**IP**</td><td>**URL**</td></tr></thead><tbody><tr><td><span data-path-to-node="6,1,0,0">**PROD (Oystr 4)**</span></td><td><span data-path-to-node="6,1,1,0">`{user}@23.239.27.38`</span></td><td><span data-path-to-node="6,1,2,0">`23.239.27.38`</span></td><td><span data-path-to-node="6,1,3,0">[console4.oystr.com.br](https://console4.oystr.com.br/)</span></td></tr><tr><td><span data-path-to-node="6,2,0,0">**DEV (Oystr 2)**</span></td><td><span data-path-to-node="6,2,1,0">`{user}@50.116.42.141`</span></td><td><span data-path-to-node="6,2,2,0">`50.116.42.141`</span></td><td><span data-path-to-node="6,2,3,0">[dev.oystr.com.br](https://www.google.com/search?q=https://dev.oystr.com.br/)</span></td></tr></tbody></table>

</div>#### **Scripts automatizados (Console)**

Foram implementados scripts para automatizar os deploys, tanto em dev quanto em prod.

##### 1. Setup

**Passo 1: Configurar informações locais**

para que os scripts funcionem é preciso adicionar os nomes de usuários para cada server em **/scripts/.local.json** *(esse arquivo está incluído no gitignore)*

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"></div>```
{
    "username_o4": "nomeusuario",
    "username_o2": "nomeusuario"
}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201"></div></div></div>**Passo 2: Script de deploy no O2 (dev)**

como o O2 possui uma verificação de senha manual, o processo não consegue ser feito totalmente fora do servidor, como no caso do O4. Após logar no O2 é preciso criar um arquivo *deploy.sh*

```
touch deploy.sh && chmod +x deploy.sh && nano deploy.sh
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--2" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201"></div></div></div></div>e colar o conteúdo a seguir:

```bash
#!/bin/bash

# Interrompe o script se qualquer comando falhar
set -e

VERSION=$1

# Validação: verifica se a versão foi passada como argumento
if [ -z "$VERSION" ]; then
    echo -e "\n[ERRO] Indique a versão/branch. Exemplo:"
    echo -e "./deploy.sh v1.2.3\n"
    exit 1
fi

IMAGE_NAME="us.gcr.io/oystr-cloud-test/oystr-console:$VERSION"
CONTAINER_NAME="oystr-console"

echo "----------------------------------------------------"
echo "🚀 Iniciando atualização local: $VERSION"
echo "----------------------------------------------------"

# 1. Baixar a imagem nova
echo "--> Baixando imagem do GCR..."
docker pull "$IMAGE_NAME"

# 2. Remover container antigo (se existir)
# O || true evita que o script pare caso o container não exista
echo "--> Removendo container antigo..."
docker rm -f "$CONTAINER_NAME" || true

# 3. Subir o novo container
echo "--> Subindo novo container na porta 3000..."
docker run --name "$CONTAINER_NAME" -d -p 3000:80 "$IMAGE_NAME"

echo -e "\n✅ Atualização concluída com sucesso!\n"
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201"></div></div></div></div>##### 2. Uso (prod)

Antes de executar o script de deploy, atualize a branch com a feature/ bugfix. E então execute o comando a seguir com a versão seguindo *semantic versioning (v0.0.0).*

```
yarn deploy {versão} {descrição}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201"></div></div></div></div>> ***exemplo de uso:** yarn deploy v4.258.0 "nova feature"*

Ações do script deploy.js:

1. cria release com **git flow**
2. formata arquivos com **prettier**
3. muda o label da versão no package.json *(verificar em prod se a versão correta aparece num console.log)*
4. atualiza o changelog *com o parâmetro {descrição} passado anteriormente*
5. faz um commit com as alterações da release no formato "version changed to {versão}"
6. faz o deploy para o O4, e altera o link simbólico

Depois de executado a nova versão já estará em produção. Há ainda um segundo script para fechar a release, que também faz o merge na master, e sobe as alterações e tags para o repositório:

```
yarn finish-release
```

##### 3. Uso (dev)

**Passo 1: local**

Antes de executar o script de deploy, atualize a branch com a feature/ bugfix. E então execute o comando a seguir com um label descritivo para a versão. O script builda e dá push na imagem docker do console.

```
yarn deploy-dev {label da versão}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--5" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201"></div></div></div></div>> ***exemplo de uso:** yarn deploy-dev feature-refactoring*

**Passo 2: O2**

Fazendo o login, executar o arquivo deploy.sh (conforme configurado anteriormente). Feito isso o Console estará atualizado no Dev.

#### **Console**

- **Desenvolvimento:** Dockerizado.
- **Produção:** Manual (Transferência de arquivos via SCP e Links Simbólicos).

##### 1. Fluxo de Produção (Manual)

Releases, features e bugfixes são gerenciados pelo **gitFlow**.

**Passo 1: Publicação e PR** Assim que iniciar a tarefa, publique e crie o PR (Draft).

*Esse comando retorna um link de atalho para a criação do Pull Request:*

```
git flow publish
```

[![image.png](https://wiki.oystr.com.br/uploads/images/gallery/2025-12/scaled-1680-/7XSimage.png)](https://wiki.oystr.com.br/uploads/images/gallery/2025-12/7XSimage.png)

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-200 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--7" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-200"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-200"></div></div></div>> **Importante:** Aponte o PR para `develop` (não master).

**Passo 2: Criar Release (Local)** Após aprovação e merge na `develop`:

1. Inicie a release seguindo [Semantic Versioning](https://semver.org/):
    
    <div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-201 ng-star-inserted"><span class="ng-tns-c3098535048-201">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-201 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-201 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201">  
    </div></div></div>```
    git flow release start v{versao}
    ```
    
    <div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-201 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-201"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-201"></div></div></div>
2. Atualize a versão no [`package.json`](https://bitbucket.org/oystrdev/console/src/master/package.json).
3. Atualize o [`changelog.md`](https://bitbucket.org/oystrdev/console/src/master/changelog.md) (Do mais recente para o mais antigo):
    
    <div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-202 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-202 ng-star-inserted"><span class="ng-tns-c3098535048-202">Markdown</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-202 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-202 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-202"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-202">  
    </div></div></div>```markdown
    ## [{data} - (v{versao})](https://bitbucket.org/oystrdev/console/commits/tag/v{versao})
    - {título da PR}
    ```
    
    <div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-202 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-202"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-202"></div></div></div>
4. Commite as alterações:
    
    <div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-203 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-203 ng-star-inserted"><span class="ng-tns-c3098535048-203">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-203 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-203 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-203"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-203">  
    </div></div></div>```
    git add . && git commit -m "v{versao}"
    ```
    
    <div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-203 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-203"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-203"></div></div></div>

**Passo 3: Build e Upload** Gere o build localmente e envie para o servidor.

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-204 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-204 ng-star-inserted"><span class="ng-tns-c3098535048-204">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-204 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-204 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-204"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-204">  
</div></div></div>```
yarn && yarn build
scp -r build {user}@23.239.27.38:/opt/oystr/console/console-v{versao}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-204 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--8" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-204"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-204"></div></div></div>*Caso ocorra erro no build, corrija, remova a pasta quebrada no servidor e repita este passo.*

**Passo 4: Ativação em Produção** Acesse o servidor via SSH e atualize o link simbólico para a nova versão.

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-205 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-205 ng-star-inserted"><span class="ng-tns-c3098535048-205">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-205 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-205 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-205"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-205">  
</div></div></div>```
ssh {user}@23.239.27.38
cd /opt/oystr/console
ln -sfn console-v{versao} use
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-205 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--9" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-205"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-205"></div></div></div>**Passo 5: Finalização (Git)** Finalize a release e suba as alterações.

##### 2. Fluxo de Desenvolvimento (Docker)

Não é necessário criar release. O deploy é feito direto da branch de feature/bugfix.

**Passo 1: Build e Push**

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-207 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-2" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-207 ng-star-inserted"><span class="ng-tns-c3098535048-207">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-207 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-207 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-207"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-207">  
</div></div></div>```
yarn && yarn build-dev
docker build -t us.gcr.io/oystr-cloud-test/oystr-console:{nome-da-branch} .
docker push us.gcr.io/oystr-cloud-test/oystr-console:{nome-da-branch}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-207 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--10" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-207"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-207"></div></div></div>**Passo 2: Atualizar Container no Servidor** Acesse o servidor de DEV e rode a nova imagem.

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-208 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-208 ng-star-inserted"><span class="ng-tns-c3098535048-208">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-208 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-208 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-208"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-208">  
</div></div></div>```
ssh {user}@50.116.42.141

# Baixar imagem nova
docker pull us.gcr.io/oystr-cloud-test/oystr-console:{nome-da-branch}

# Remover container antigo
docker rm -f oystr-console

# Subir novo container
docker run --name oystr-console -d -p 3000:80 us.gcr.io/oystr-cloud-test/oystr-console:{nome-da-branch}
```

#### **Control Panel**

O Control Panel é **totalmente dockerizado** (tanto Dev quanto Prod).

> **Atenção:** A branch de produção é a `main` (ao invés de `master`).

##### Fluxo de Build e Deploy (Dev &amp; Prod)

O processo é o mesmo, alterando apenas a tag e o servidor destino:

- **Prod:** Tag = `v{versao}` | Servidor = Oystr 4
- **Dev:** Tag = `{nome-da-branch}` | Servidor = Oystr 2

**Passo 1: Build e Push (Local)**

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-209 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-209 ng-star-inserted"><span class="ng-tns-c3098535048-209">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-209 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-209 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-209"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-209">  
</div></div></div>```
yarn && yarn build
docker build -t us.gcr.io/oystr-cloud-test/oystr-control-panel-frontend:{tag} .
docker push us.gcr.io/oystr-cloud-test/oystr-control-panel-frontend:{tag}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-209 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--11" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-209"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-209"></div></div></div>**Passo 2: Rodar no Servidor (SSH)** Acesse o servidor correspondente e execute:

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-210 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-5" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-210 ng-star-inserted"><span class="ng-tns-c3098535048-210">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-210 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-210 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-210"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-210">  
</div></div></div>```
# Atualizar imagem
gcloud docker -- pull us.gcr.io/oystr-cloud-test/oystr-control-panel-frontend:{tag}

# Reiniciar container
docker rm -f control-panel-frontend
docker run --name control-panel-frontend -d -p 3004:80 us.gcr.io/oystr-cloud-test/oystr-control-panel-frontend:{tag}
```

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-210 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--12" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-210"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-210"></div></div></div>**Passo 3: Finalização (Apenas Produção)** Se for um deploy de produção, finalize o fluxo no Git:

<div _ngcontent-ng-c3098535048="" class="code-block ng-tns-c3098535048-211 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-6" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_84b774ccb6f12bb1","c_181c2bc77d344ea6",null,"rc_514563533cf7e651",null,null,"pt",null,1,null,null,1,0]]"><div _ngcontent-ng-c3098535048="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3098535048-211 ng-star-inserted"><span class="ng-tns-c3098535048-211">Bash</span><div _ngcontent-ng-c3098535048="" class="buttons ng-tns-c3098535048-211 ng-star-inserted"><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3098535048-211 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3098535048="" class="formatted-code-block-internal-container ng-tns-c3098535048-211"><div _ngcontent-ng-c3098535048="" class="animated-opacity ng-tns-c3098535048-211">  
</div></div></div>```
git flow release finish -m v{versao}
git push && git checkout main && git push
```