> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.squarecloud.app/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Cómo alojar una aplicación FastAPI

## 1. Requisitos previos

* **Cuenta en Square Cloud:** Crea tu cuenta vía [Página de Registro](https://squarecloud.app/pt-br/signup) (correo o GitHub).
* **Plan Activo:** Es necesario un plan de pago para alojar. Consulta los [precios aquí](https://squarecloud.app/pt-br/pricing).

---

## 2. Configuración de Red

Para que tu API sea accesible externamente, el webserver debe estar configurado para operar en el puerto **80**. A diferencia de los entornos locales (donde usamos 8000), Square Cloud utiliza el puerto 80 para el enrutamiento público.

### Ejemplo de estructura de código (`app/main.py`)
```python
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"status": "online", "framework": "FastAPI"}
```

---

## 3. Realizando el Deploy

1.  **Limpieza del proyecto:** Elimina carpetas de caché como `__pycache__` o carpetas de entornos virtuales (`.venv`).
2.  **Compresión:** Crea un archivo `.zip` que contenga la carpeta de tu código (ej.: `app/`) y el archivo `requirements.txt`.
3.  **Upload:** En el Dashboard de Square Cloud, sube el archivo `.zip`.
4.  **Publicación Web:** Durante el envío, localiza y marca la opción **"Publicar en la Web"**.
5.  **Subdominio:** Define el nombre de tu subdominio gratuito (ej.: `mi-api.squareweb.app`).
6. **Comando de inicio para producción:** FastAPI ahora cuenta con un comando CLI integrado que facilita la ejecución en producción, garantizando que el servidor utilice los workers de forma eficiente y escuche en el puerto correcto.
En el momento del envío o en tu archivo `squarecloud.app`, define el comando de inicio como:
```bash
python -m fastapi run app/main.py --port 80
```
* **`run`**: Comando optimizado para ejecución en producción.
* **`app/main.py`**: La ruta al archivo donde está tu instancia FastAPI.
* **`--port 80`**: Define el puerto obligatorio para el funcionamiento en Square Cloud.

---

## 5. Dominios personalizados (Plan Standard+)

Si utilizas el plan **Standard o superior**, puedes configurar un dominio profesional (ej.: `api.tudominio.com`):
* La configuración se hace en la pestaña **Network** del Dashboard.
* El **SSL (HTTPS)** se genera automáticamente, garantizando que tu API sea segura por defecto.

---

## 6. Consejos de rendimiento

* **Validación automática:** FastAPI utiliza Pydantic para la validación de datos. Asegúrate de definir los schemas para ganar rendimiento en la serialización de JSON.
* **Variables de entorno:** Usa la pestaña **ENV** en el Dashboard para gestionar claves de seguridad y conexiones de base de datos, accediendo a ellas vía `os.getenv()`.
* **Monitoreo:** Sigue los logs en tiempo real desde el Dashboard para verificar la carga de los workers del servidor.