/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ópriodocker-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/
.env.example sim vão pro git, como documentação das variáveis necessárias. Detalhes em Repositório.