> ## 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.

# Haz deploy de tu primera app con la CLI

> Instala la CLI de Square Cloud, inicia sesión, haz deploy de un proyecto con squarecloud upload, lee sus logs y envía cada cambio con squarecloud commit.

Esta guía lleva un proyecto de tu máquina a una aplicación en ejecución en Square Cloud y luego muestra cómo enviar un cambio. Toma unos pocos minutos.

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

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

    Comprueba que funciona con `squarecloud --version`. Si no se encuentra el comando, consulta [Instalación](/es/cli-reference/installation#verificar-la-instalación).
  </Step>

  <Step title="Inicia sesión">
    ```bash theme={"system"}
    squarecloud auth login
    ```

    La CLI muestra un código corto y abre la página de autorización en tu navegador. Escribe el código allí y aprueba. La página de [Autenticación](/es/cli-reference/authentication) cubre las API keys y el uso en CI.
  </Step>

  <Step title="Agrega un archivo de configuración">
    En la raíz de tu proyecto, crea un archivo `squarecloud.app`. Le indica a Square Cloud qué archivo ejecutar, cuánta memoria reservar y qué versión del runtime usar:

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

    Para un sitio web, agrega `SUBDOMAIN=<name>` para publicarlo en `<name>.squareweb.app`. Cada clave se explica en la [guía del archivo de configuración](/es/getting-started/config-file).
  </Step>

  <Step title="Sube el proyecto">
    Desde la carpeta del proyecto, ejecuta:

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

    La CLI comprime la carpeta, dejando fuera lo que lista [`squarecloud.ignore`](/es/getting-started/squarecloud-ignore) (además de `node_modules`, `.git` y los lockfiles por defecto), y crea una aplicación nueva:

    ```bash Salida 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>
    ```

    También escribe el ID de la nueva aplicación en tu archivo de configuración, para que los siguientes comandos sepan a qué app te refieres:

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

  <Step title="Comprueba que funciona">
    ```bash theme={"system"}
    squarecloud app status
    squarecloud app logs
    ```

    No hace falta ningún ID: los dos leen la línea `ID=`. Para seguir la salida en vivo, ejecuta `squarecloud app realtime` y presiona `Ctrl+C` para detenerlo.
  </Step>

  <Step title="Envía un cambio">
    Edita tu código y luego envía la carpeta a la misma aplicación y reiníciala:

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

    `upload` crea una aplicación nueva cada vez; `commit` actualiza la que ya tienes y conserva su ID, su dominio y su configuración.
  </Step>
</Steps>

## Cómo encuentra la CLI tu aplicación

Los comandos que actúan sobre una aplicación muestran `[appID]` en su uso: el ID es opcional. La CLI elige la aplicación en este orden:

1. **El ID que pasas.** Es el primer argumento, o `--app <appID>` en los comandos cuyos argumentos son otra cosa: `app env set`, `remove` y `replace`, todos los comandos `app file`, `app deploy webhook`, `app deploy github link` y `unlink`, y `app network domain`.
2. **La línea `ID=`** del archivo `squarecloud.app` de la carpeta actual (o `squarecloud.config`; cuando existen los dos, gana `squarecloud.app`).
3. **Un selector** con tus aplicaciones, cuando la CLI se ejecuta en una terminal. Usa las flechas y `Enter`; `Esc` cancela.

Algunos comandos funcionan de otra manera:

* `commit` nunca abre el selector. Sin un argumento ni una línea `ID=`, se detiene con código de salida 1 y pide uno.
* `app snapshot restore` siempre recibe el ID de la aplicación como primer argumento.
* Las bases de datos no tienen archivo de configuración: los comandos `db` reciben el ID de la base de datos o abren un selector con tus bases de datos.
* Los comandos `workspace` que actúan sobre un workspace siempre reciben su ID.

Para encontrar un ID, ejecuta [`squarecloud app list`](/es/cli-reference/apps#squarecloud-app-list). En scripts y CI, pasa siempre el ID o conserva la línea `ID=`: el selector necesita una terminal interactiva.

### Dónde se guarda el ID de la aplicación

`upload` escribe `ID=<appID>` solo cuando la carpeta ya tiene un archivo de configuración, que la subida necesita de todos modos. Cambia esa única línea y conserva tus demás claves y comentarios tal como están. Square Cloud ignora la línea al leer el archivo, así que puede quedarse en el zip.

Ejecutar `upload` otra vez desde la misma carpeta crea otra aplicación y apunta la línea `ID=` a ella. Para actualizar la aplicación que ya tienes, usa `commit`. Para trabajar con otra aplicación desde esta carpeta, edita o elimina la línea.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Subir y hacer commit" icon="upload" href="/es/cli-reference/deploy">
    Todos los flags de upload, commit y zip, y qué va dentro del zip.
  </Card>

  <Card title="Variables de entorno" icon="key" href="/es/cli-reference/environment-variables">
    Define variables desde la terminal o cárgalas de un archivo .env.
  </Card>

  <Card title="Deploys desde GitHub" icon="github" href="/es/cli-reference/github-deploys">
    Haz deploy en cada push con la GitHub App de Square Cloud.
  </Card>

  <Card title="Flags globales y CI" icon="terminal" href="/es/cli-reference/global-flags-and-ci">
    Salida JSON, códigos de salida y cómo ejecutar la CLI en pipelines.
  </Card>
</CardGroup>
