# VLAN

## 🧾 Visão Geral

O recurso VLAN permite que múltiplas aplicações Discloud se comuniquem por uma rede privada isolada (container-para-container) sem expor serviços internos publicamente. Cenários típicos:

| Serviço        | Propósito                 | Exemplo                                  |
| -------------- | ------------------------- | ---------------------------------------- |
| API Backend    | Lógica de negócio         | App `api` chamando banco de dados        |
| Banco de Dados | Armazenamento persistente | Modelo ou container MongoDB / PostgreSQL |
| Cache          | Dados de baixa latência   | Instância Redis                          |

{% hint style="info" %}
O tráfego permanece dentro da infraestrutura Discloud. Nenhum ingresso público é criado para serviços acessados apenas via hostname privado.
{% endhint %}

***

## ⚙️ Configuração ([discloud.config](https://docs.discloud.com/configurations/discloud.config))

Adicione as seguintes chaves a cada aplicação que deve participar da rede privada:

<pre class="language-properties" data-title="discloud.config"><code class="lang-properties"><a data-footnote-ref href="#user-content-fn-1"># ...</a>
NAME=Meu Servidor Mongo
VLAN=true
HOSTNAME=mymongoserver
#       |      ^     |
#       |      Nome da rede privada para esta aplicação
</code></pre>

| Chave      | Obrigatório | Descrição                                                       |
| ---------- | ----------- | --------------------------------------------------------------- |
| `VLAN`     | Sim         | Habilita rede privada para a aplicação                          |
| `HOSTNAME` | Recomendado | Alias de hostname personalizado para outras apps acessarem esta |

{% hint style="warning" %}
Se duas apps definirem o mesmo HOSTNAME, o comportamento é indefinido. Mantenha hostnames únicos e em minúsculas (letras, dígitos, hífens).
{% endhint %}

***

## 🧷 Exemplo: Serviço MongoDB + Backend

App de serviço:

{% code title="discloud.config" %}

```properties
NAME=Serviço Mongo
VLAN=true
HOSTNAME=mymongoserver
```

{% endcode %}

Código de conexão do backend:

{% tabs %}
{% tab title="TypeScript" %}

```typescript
import mongoose from "mongoose";

const uri = "mongodb://mymongoserver:27017/mydatabase";
//                            ^
//                            HOSTNAME do app de serviço Mongo

async function main() {
  try {
    await mongoose.connect(uri);
    console.log("Conectado ao MongoDB com sucesso");
  } catch (error) {
    console.error("Erro de conexão MongoDB:", error);
    process.exit(1);
  }
}

main();
```

{% endtab %}

{% tab title="Node (Driver Nativo)" %}

```javascript
import { MongoClient } from "mongodb";
const uri = "mongodb://mymongoserver:27017/mydatabase";
const client = new MongoClient(uri);
await client.connect();
console.log("Ping:", await client.db().command({ ping: 1 }));
```

{% endtab %}

{% tab title="Python" %}

```python
from pymongo import MongoClient
client = MongoClient('mongodb://mymongoserver:27017/mydatabase')
print(client.admin.command('ping'))
```

{% endtab %}
{% endtabs %}

***

## 🧵 Convenções de Hostname

| Regra       | Recomendação       |
| ----------- | ------------------ |
| Caracteres  | Apenas `a-z 0-9 -` |
| Comprimento | 1–25 caracteres    |

***

## 🛡️ Notas de Segurança

| Aspecto    | Detalhe                                                            |
| ---------- | ------------------------------------------------------------------ |
| Isolamento | Apenas apps que você hospeda com VLAN habilitado podem se alcançar |
| Exposição  | Nenhuma publicação automática de porta pública                     |
| Segredos   | Ainda armazene credenciais via variáveis de ambiente               |
| Princípio  | Desabilite VLAN em apps que não precisam de acessibilidade interna |

{% hint style="success" %}
Combine VLAN com credenciais de escopo de ambiente para menor privilégio.
{% endhint %}

[^1]: **Nota:** Os **`...`** apenas indicam a continuação de outras opções anteriores ou subsequentes que não são relevantes para mencionar nesta página.


---

# 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/configurations/discloud.config/vlan.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.
