# Websites e APIs

## 🌐 O que é um "Site" na Discloud?

Na **Discloud**, qualquer aplicação que use uma **porta de rede** e requeira **acesso externo** é considerada um **Site**. Isso inclui:

* 🖥️ **Websites** (Estáticos ou Dinâmicos)
* 🔌 **APIs** (REST, GraphQL, etc.)
* 📊 **Dashboards** (para Bots ou independentes)
* 🤖 **Bots com Interfaces Web**

Para permitir o acesso externo, a Discloud roteia o tráfego através de um proxy para a **porta 8080** e **host 0.0.0.0** da sua aplicação usando um **subdomínio** (ex: `minhaapp.discloud.app`).

***

## ✅ Requisitos

Para hospedar um site ou API, você deve atender a estes critérios:

{% hint style="success" %}
**Plano Platinum ou Superior** – Necessário para todas as aplicações `TYPE=site`.
{% endhint %}

{% hint style="success" %}
**Porta 8080 & Host 0.0.0.0** – Sua aplicação **deve** ouvir na porta `8080` e host `0.0.0.0` para ser acessível externamente.
{% endhint %}

{% hint style="success" %}
[**Subdomínio**](https://docs.discloud.com/faq/general-questions/how-to-create-a-subdomain) – Você deve registrar um subdomínio único na Discloud.
{% endhint %}

{% hint style="success" %}
[**`discloud.config`**](https://docs.discloud.com/configurations/discloud.config) – Necessário para a maioria dos métodos de implantação. Se estiver usando o [**Quick Setup**](https://docs.discloud.com/how-to-host-using/discord-bot#quick-setup-step-by-step-guide) do Bot do Discord, o bot irá guiá-lo através da configuração.
{% endhint %}

{% hint style="success" %}
**RAM** – Um mínimo de **512MB** é recomendado para aplicações web.
{% endhint %}

***

## 🚀 Guia de Hospedagem Passo a Passo

{% stepper %}
{% step %}
**📡 Registrar um Subdomínio**

Antes de implantar, você precisa reservar seu endereço único no domínio `.discloud.app`.
{% endstep %}

{% step %}
**📝 Configurar `discloud.config`**

Seu arquivo [`discloud.config`](https://docs.discloud.com/configurations/discloud.config) diz à Discloud como lidar com seu site. Você deve definir `TYPE=site` e incluir seu `ID`.

{% hint style="info" %}
Se você estiver usando o **Quick Setup** do Bot do Discord, não precisa criar este arquivo manualmente, o bot solicitará o subdomínio e outros detalhes durante o processo.
{% endhint %}

```ini
NAME=MinhaAPIIncrivel
TYPE=site
ID=meu-subdominio-unico
MAIN=src/index.js
RAM=512
VERSION=latest
```

* **`TYPE=site`**: Identifica a aplicação como um serviço web.
* **`ID`**: O nome do seu subdomínio registrado. **Não** inclua `.discloud.app` (ex: use `minha-app`, não `minha-app.discloud.app`).
* **`MAIN`**: O ponto de entrada da sua aplicação.
* **`RAM`**: Memória alocada (mín. 512MB para sites).
  {% endstep %}

{% step %}
**🏗️ Lidando com Processos de Build**

Se a sua aplicação exigir uma etapa de build (como React, Next.js ou TypeScript), você tem duas opções:

{% tabs %}
{% tab title="Discloud Build (Recomendado)" %}
Deixe a Discloud lidar com o processo de build durante a implantação. Adicione o comando `BUILD` ao seu `discloud.config`.

```ini
BUILD=npm run build
START=npm run start
```

{% endtab %}

{% tab title="Build Local" %}
Faça o build do seu projeto localmente e envie os arquivos resultantes.

{% hint style="danger" %}
**Não use uma pasta chamada `dist`** para a saída do seu build local. A Discloud reserva o diretório `dist` para seu processo de build interno. Use um nome diferente como `build`, `out` ou `output`.
{% endhint %}

Neste caso, certifique-se de que seu `MAIN` ou `START` aponte para o ponto de entrada correto dentro da sua pasta de build.
{% endtab %}
{% endtabs %}

{% hint style="info" %}
Para aplicações Java, você **deve** fazer o build localmente e enviar o arquivo `.jar`. [Veja o guia de build Java](https://docs.discloud.com/faq/general-questions/how-to-build-and-package-a-java-application).
{% endhint %}
{% endstep %}

{% step %}
**🚀 Upload e Implantação**

Você pode enviar seu projeto usando qualquer um de nossos métodos suportados:

* 🖥️ [**Dashboard**](https://docs.discloud.com/how-to-host-using/dashboard)
* ⌨️ [**CLI**](https://docs.discloud.com/how-to-host-using/cli)
* 🟦 [**Extensão do VS Code**](https://docs.discloud.com/how-to-host-using/visual-studio-code)
* 🤖 [**Bot do Discord**](https://docs.discloud.com/how-to-host-using/discord-bot)
* 🐙 [**Integração com GitHub**](https://docs.discloud.com/api-and-integrations/github-integration)

{% hint style="info" %}
Antes de enviar, certifique-se de [comprimir seu projeto corretamente](https://docs.discloud.com/faq/general-questions/em-andamento-como-comprimir) e excluir arquivos desnecessários usando um arquivo [`.discloudignore`](https://docs.discloud.com/configurations/.discloudignore).
{% endhint %}
{% endstep %}
{% endstepper %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.discloud.com/how-to-host/websites-and-apis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
