> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Primeiro deploy com a CLI da Square Cloud

> Instale a CLI da Square Cloud, faça login, faça deploy de um projeto com squarecloud upload, leia os logs e envie cada alteração com squarecloud commit.

Este guia leva um projeto da sua máquina até uma aplicação rodando na Square Cloud e depois mostra como enviar uma alteração. Leva poucos minutos.

<Steps>
  <Step title="Instale a CLI">
    <CodeGroup>
      ```bash macOS, Linux e WSL theme={"system"}
      curl -fsSL https://cli.squarecloud.app/install | bash
      ```

      ```bash Windows (precisa do Node.js) theme={"system"}
      npm install -g @squarecloud/cli
      ```
    </CodeGroup>

    Confira se ela funciona com `squarecloud --version`. Se o comando não for encontrado, veja [Instalação](/pt-br/cli-reference/installation#verifique-a-instalação).
  </Step>

  <Step title="Faça login">
    ```bash theme={"system"}
    squarecloud auth login
    ```

    A CLI mostra um código curto e abre a página de autorização no seu navegador. Digite o código ali e aprove. A página de [Autenticação](/pt-br/cli-reference/authentication) explica as chaves de API e o uso no CI.
  </Step>

  <Step title="Adicione um arquivo de configuração">
    Na raiz do projeto, crie um arquivo `squarecloud.app`. Ele diz à Square Cloud qual arquivo executar, quanta memória reservar e qual versão do runtime usar:

    ```systemd squarecloud.app theme={"system"}
    MAIN=index.js
    MEMORY=512
    VERSION=recommended
    DISPLAY_NAME=My first app
    ```

    Para um site, adicione `SUBDOMAIN=<nome>` para publicá-lo em `<nome>.squareweb.app`. Cada chave é explicada no [guia do arquivo de configuração](/pt-br/getting-started/config-file).
  </Step>

  <Step title="Envie o projeto">
    Na pasta do projeto, execute:

    ```bash theme={"system"}
    squarecloud upload
    ```

    A CLI compacta a pasta, deixando de fora o que o [`squarecloud.ignore`](/pt-br/getting-started/squarecloud-ignore) lista (além de `node_modules`, `.git` e os lockfiles, por padrão), e cria uma nova aplicação:

    ```bash Saída theme={"system"}
    Compressing the current directory.
    Uploading the zip file to Square Cloud.

    ✓ Application uploaded to Square Cloud!
      Open it at https://squarecloud.app/dashboard/applications/<appID>
    ```

    Ela também grava o ID da nova aplicação no seu arquivo de configuração, para que os próximos comandos saibam de qual aplicação você está falando:

    ```systemd squarecloud.app theme={"system"}
    MAIN=index.js
    MEMORY=512
    VERSION=recommended
    DISPLAY_NAME=My first app
    ID=<appID>
    ```
  </Step>

  <Step title="Confira se ela está rodando">
    ```bash theme={"system"}
    squarecloud app status
    squarecloud app logs
    ```

    Nenhum ID é necessário: os dois comandos leem a linha `ID=`. Para acompanhar a saída ao vivo, execute `squarecloud app realtime` e pressione `Ctrl+C` para parar.
  </Step>

  <Step title="Envie uma alteração">
    Edite o seu código, envie a pasta para a mesma aplicação e reinicie-a:

    ```bash theme={"system"}
    squarecloud commit --restart
    ```

    O `upload` cria uma nova aplicação toda vez; o `commit` atualiza a que você já tem e mantém o ID, o domínio e as configurações dela.
  </Step>
</Steps>

## Como a CLI encontra sua aplicação

Os comandos que agem sobre uma aplicação mostram `[appID]` no uso: o ID é opcional. A CLI escolhe a aplicação nesta ordem:

1. **O ID que você passa.** Ele é o primeiro argumento, ou `--app <appID>` nos comandos cujos argumentos são outra coisa: `app env set`, `remove` e `replace`, todos os comandos `app file`, `app deploy webhook`, `app deploy github link` e `unlink`, e `app network domain`.
2. **A linha `ID=`** do arquivo `squarecloud.app` da pasta atual (ou do `squarecloud.config`; quando os dois existem, o `squarecloud.app` tem prioridade).
3. **Um seletor** com as suas aplicações, quando a CLI roda em um terminal. Use as setas e `Enter`; `Esc` cancela.

Alguns comandos funcionam de outro jeito:

* O `commit` nunca abre o seletor. Sem um argumento ou uma linha `ID=`, ele para com código de saída 1 e pede um ID.
* O `app snapshot restore` sempre recebe o ID da aplicação como primeiro argumento.
* Bancos de dados não têm arquivo de configuração: os comandos `db` recebem o ID do banco de dados ou abrem um seletor com os seus bancos de dados.
* Os comandos `workspace` que agem sobre um workspace sempre recebem o ID dele.

Para descobrir um ID, execute [`squarecloud app list`](/pt-br/cli-reference/apps#squarecloud-app-list). Em scripts e no CI, sempre passe o ID ou mantenha a linha `ID=`: o seletor precisa de um terminal interativo.

### Onde o ID da aplicação é salvo

O `upload` grava `ID=<appID>` apenas quando a pasta já tem um arquivo de configuração, que o upload exige de qualquer forma. Ele altera só essa linha e mantém as suas outras chaves e comentários como estão. A Square Cloud ignora a linha ao ler o arquivo, então ela pode continuar no zip.

Executar o `upload` de novo na mesma pasta cria outra aplicação e aponta a linha `ID=` para ela. Para atualizar a aplicação que você já tem, use o `commit`. Para trabalhar com outra aplicação a partir desta pasta, edite ou apague a linha.

## Próximos passos

<CardGroup cols={2}>
  <Card title="Upload e commit" icon="upload" href="/pt-br/cli-reference/deploy">
    Todas as flags do upload, do commit e do zip, e o que entra no zip.
  </Card>

  <Card title="Variáveis de ambiente" icon="key" href="/pt-br/cli-reference/environment-variables">
    Defina variáveis pelo terminal ou carregue-as de um arquivo .env.
  </Card>

  <Card title="Deploys pelo GitHub" icon="github" href="/pt-br/cli-reference/github-deploys">
    Faça deploy a cada push pelo GitHub App da Square Cloud.
  </Card>

  <Card title="Flags globais e CI" icon="terminal" href="/pt-br/cli-reference/global-flags-and-ci">
    Saída em JSON, códigos de saída e a CLI em pipelines.
  </Card>
</CardGroup>
