Referência rápida de toda a estrutura.

/opt/server/

/opt/server/
├── .gitignore     # exclui .env, dados, certificados, projetos
├── README.md      # capa do repositório no GitHub
├── infra/         # serviços compartilhados (Docker) — versionado
├── projetos/      # código dos projetos individuais — só placeholder versionado
└── docs/          # esta documentação (Mintlify) — versionado

/opt/server/infra/

infra/
├── .env.example           # TZ, DOMAIN_BASE (versionável)
├── .env                   # vars reais (gerado pelo bootstrap, não versionar)
├── bootstrap.sh           # prepara ambiente: cria rede + gera segredos
├── backup.sh              # backup semanal (postgres, n8n, npm, envs)

├── npm/                   # Nginx Proxy Manager
│   ├── docker-compose.yml
│   ├── data/              # DB SQLite interno do NPM, config
│   └── letsencrypt/       # certificados TLS

├── postgres/              # Postgres 16
│   ├── docker-compose.yml
│   ├── .env.example       # POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB
│   ├── .env               # valores reais (gerado)
│   ├── create-db.sh       # script para criar DB+user de projeto
│   ├── data/              # PGDATA
│   └── secrets/           # credenciais geradas pelo create-db.sh (modo 600)
│       └── <projeto>.env

├── redis/                 # Redis 7
│   ├── docker-compose.yml
│   ├── .env.example       # REDIS_PASSWORD
│   ├── .env
│   └── data/              # AOF, RDB

├── n8n/                   # n8n
│   ├── docker-compose.yml
│   ├── .env.example       # N8N_HOST, DB_POSTGRESDB_*, N8N_ENCRYPTION_KEY
│   ├── .env
│   └── data/              # workflows, credenciais, estado do n8n

└── docs/                  # nginx servindo build estático das docs
    ├── docker-compose.yml
    ├── nginx.conf         # gzip, cache imutável em _next/static, try_files
    ├── build.sh           # mint export + extrai zip pra ./site/
    └── site/              # HTML + chunks JS/CSS (gerado, não versionado)

/opt/server/docs/

docs/
├── docs.json              # config Mintlify (navegação, cores, etc.)
├── introduction.mdx       # página inicial
├── architecture.mdx       # diagrama e fluxo do tráfego
├── conventions.mdx        # padrões (rede, envs, volumes, portas)

├── infra/
│   ├── overview.mdx
│   ├── bootstrap.mdx
│   ├── nginx-proxy-manager.mdx
│   ├── postgres.mdx
│   ├── redis.mdx
│   └── n8n.mdx

├── operations/
│   ├── repository.mdx
│   ├── dns-setup.mdx
│   ├── first-deploy.mdx
│   ├── creating-databases.mdx
│   ├── adding-a-service.mdx
│   ├── backups.mdx
│   └── publishing-docs.mdx

├── projects/
│   ├── standards.mdx      # contrato pra projetos rodarem no server-stack
│   └── laravel.mdx        # gotchas e padrões stack-specific

└── reference/
    └── file-tree.mdx      # esta página

/opt/server/templates/

templates/
├── README.md             # índice dos templates disponíveis
└── project/
    └── laravel/          # esqueleto pra projeto Laravel novo ou migração
        ├── README.md     # explica fluxo A (novo) e fluxo B (existente)
        ├── Dockerfile
        ├── docker-compose.yml
        ├── .dockerignore
        ├── .env.example
        └── CLAUDE.md

/opt/server/projetos/

Vazia por enquanto. Cada projeto vira uma subpasta com seu próprio docker-compose.yml e conecta na server_net. Se for Laravel, comece pelo template em templates/project/laravel/.
projetos/
├── blog/
│   ├── docker-compose.yml
│   └── ...
└── outroapp/
    ├── docker-compose.yml
    └── ...

Arquivos não versionados

/opt/server/ já é um repositório git. O .gitignore exclui:
.env
.env.local
infra/*/data/
infra/docs/site/
infra/docs/*.zip
infra/npm/letsencrypt/
infra/postgres/secrets/
projetos/* (exceto projetos/.gitkeep)
node_modules/, .next/, .cache/
.DS_Store, Thumbs.db, *.swp, .vscode/, .idea/
Os .env.example sim vão pro git, como documentação das variáveis necessárias. Detalhes em Repositório.