MkDocs¶
O MkDocs é o sistema que gera e publica esta documentação operacional da VPS.
A interface utiliza o tema Material for MkDocs e os documentos são escritos em Markdown. O site é disponibilizado externamente pelo Traefik.
Informações desta VPS¶
| Item | Valor |
|---|---|
| Stack | /opt/stacks/mkdocs/compose.yml |
| Serviço Compose | mkdocs |
| Container | mkdocs |
| Imagem | squidfunk/mkdocs-material:latest |
| MkDocs | 1.6.1 |
| Material for MkDocs | 9.7.7 |
| PyMdown Extensions | 11.0.1 |
| Pygments | 2.20.0 |
| Python | 3.11 |
| Domínio | https://docs.cloud.hometecseg.com |
| Porta interna | 8000 |
| Rede | proxy |
| Healthcheck | Não configurado |
| Política de reinício | unless-stopped |
Arquivos principais¶
| Arquivo ou diretório | Finalidade |
|---|---|
/opt/stacks/mkdocs/compose.yml |
Definição do container |
/opt/stacks/mkdocs/mkdocs.yml |
Configuração do site |
/opt/stacks/mkdocs/docs |
Arquivos Markdown |
/docs/docs |
Documentação dentro do container |
/docs/mkdocs.yml |
Configuração dentro do container |
/docs/site |
Site estático gerado pelo build |
Estrutura atual¶
/opt/stacks/mkdocs/
├── compose.yml
├── mkdocs.yml
└── docs/
├── index.md
├── docker.md
├── traefik.md
├── n8n.md
├── postgres.md
├── redis.md
├── portainer.md
├── pgadmin.md
├── dozzle.md
├── kuma.md
├── mkdocs.md
├── scripts.md
├── security.md
├── backups.md
├── updates.md
└── troubleshooting.md
Configuração atual¶
O site possui:
- Idioma
pt-BR - Navegação por abas
- Seções na navegação
- Botão para voltar ao topo
- Rodapé de navegação
- Sugestões de pesquisa
- Destaque dos resultados de pesquisa
- Botão para copiar código
- Blocos de aviso
- Tabelas
- Blocos recolhíveis
- Realce de sintaxe
- Links permanentes nos títulos
Navegação¶
A navegação está dividida em:
Início
Infraestrutura
├── Docker
├── Traefik
├── Segurança
├── Backups
└── Atualizações
Serviços
├── n8n
├── PostgreSQL
├── Redis
├── Portainer
├── pgAdmin
├── Dozzle
├── Uptime Kuma
└── MkDocs
Operação
├── Scripts
└── Troubleshooting
Estado do serviço¶
Ver o estado¶
Ver somente o container¶
Ver o estado detalhado¶
docker inspect mkdocs \
--format 'Status={{.State.Status}} ExitCode={{.State.ExitCode}} StartedAt={{.State.StartedAt}} OOMKilled={{.State.OOMKilled}}'
Iniciar e parar¶
Iniciar¶
Caso o container ainda não exista:
Parar¶
Reiniciar¶
Recriar¶
Logs¶
Ver os últimos registros¶
Acompanhar em tempo real¶
Procurar erros e avisos¶
Versões instaladas¶
MkDocs¶
Resultado registrado:
Material for MkDocs¶
docker exec mkdocs python -c \
"import importlib.metadata as m; print(m.version('mkdocs-material'))"
Resultado registrado:
Todos os componentes principais¶
docker exec mkdocs python -c \
"import importlib.metadata as m; \
pkgs=['mkdocs','mkdocs-material','pymdown-extensions','pygments']; \
[print(f'{p}={m.version(p)}') for p in pkgs]"
Resultado registrado:
Estado das versões¶
| Componente | Instalada | Mais recente verificada | Situação |
|---|---|---|---|
| MkDocs | 1.6.1 |
1.6.1 |
Atualizado |
| Material for MkDocs | 9.7.7 |
9.7.7 |
Atualizado |
Verificação realizada em julho de 2026.
Informação temporal
A versão mais recente pode mudar. Consulte sempre os changelogs oficiais antes de atualizar.
Ciclo de vida do Material¶
O Material for MkDocs está em modo de manutenção.
Isso significa que:
- Não deve receber novos recursos relevantes.
- Deve receber apenas correções críticas e de segurança.
- O fim de vida está programado para novembro de 2026.
- Será necessário planejar uma migração futura.
O sucessor indicado pelo projeto é o Zensical.
Página oficial:
Não migrar às cegas
A migração para outra ferramenta deve ser testada em uma cópia da documentação. O site atual está funcionando e não deve ser desmontado por entusiasmo migratório.
MkDocs 2.0¶
O Material for MkDocs 9.7.7 restringe o MkDocs para versões inferiores à 2.0.
O alerta exibido durante o build informa que o MkDocs 2.0 possui mudanças incompatíveis com:
- Plugins existentes
- Sobrescritas de tema
- Configurações atuais
- Fluxos de migração anteriores
Não instalar MkDocs 2.0
Não tente atualizar manualmente o MkDocs para a versão 2.0 dentro desta instalação.
A imagem atual mantém uma combinação compatível:
Funcionamento atual¶
O Compose executa:
Isso inicia o servidor de desenvolvimento do MkDocs na porta 8000.
Características:
- Detecta alterações nos arquivos.
- Reconstrói o site automaticamente.
- Atualiza os navegadores conectados.
- Exibe alterações sem reiniciar o container.
Confirmar o comando¶
Observação sobre produção¶
O comando mkdocs serve é destinado principalmente à edição e pré-visualização.
A arquitetura recomendada para uma publicação mais robusta é:
- Executar
mkdocs build. - Gerar o site estático em
/docs/site. - Publicar os arquivos com Nginx, Caddy ou outro servidor HTTP.
A configuração atual funciona, mas mantém permanentemente:
- Servidor de desenvolvimento
- Monitoramento de arquivos
- Live reload
- Processo de reconstrução automática
Melhoria futura
A migração para publicação estática pode ser feita posteriormente, depois de documentada e testada. Não é necessário alterar agora.
Validar a documentação¶
Build normal¶
Build estrito¶
O modo estrito transforma avisos de configuração e referências inválidas em falhas do build.
Resultado atual:
O alerta referente ao MkDocs 2.0 é emitido pelo tema e não representa falha da documentação.
Editar uma página¶
Exemplo:
Depois de salvar, o servidor detecta automaticamente a alteração.
Verificar nos logs¶
Saída esperada:
Criar uma página¶
Criar o arquivo¶
Adicionar ao menu¶
Editar:
Adicionar na seção desejada:
Validar¶
Excluir uma página¶
Antes de excluir, remova a referência correspondente no mkdocs.yml.
Depois:
Validar:
Configuração YAML¶
Validar dentro do container¶
Ver o arquivo¶
Procurar tabulações¶
Arquivos YAML devem usar espaços, não tabulações:
Nenhuma saída significa que não foram encontradas tabulações.
Montagens¶
Os arquivos são montados diretamente do host:
| Host | Container | Tipo | Escrita |
|---|---|---|---|
/opt/stacks/mkdocs/docs |
/docs/docs |
Bind | Sim |
/opt/stacks/mkdocs/mkdocs.yml |
/docs/mkdocs.yml |
Bind | Sim |
Verificar¶
docker inspect mkdocs \
--format '{{range .Mounts}}{{println .Type "|" .Source "|" .Destination "|" .RW}}{{end}}'
Escrita habilitada
O container possui acesso de escrita aos arquivos da documentação. Uma futura melhoria de segurança pode avaliar mounts somente leitura, desde que o funcionamento do MkDocs seja preservado.
Rede e Traefik¶
O container participa da rede externa:
O Traefik encaminha o domínio:
para a porta interna:
Ver as redes¶
Ver as labels¶
Testar o domínio¶
Verificar DNS¶
Healthcheck¶
Atualmente não existe healthcheck:
Confirmar¶
Exemplo para avaliação futura¶
healthcheck:
test:
- CMD
- wget
- --spider
- -q
- http://localhost:8000/
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
Ainda não aplicado
O exemplo precisa ser testado porque a disponibilidade do comando wget depende da imagem usada.
Backup¶
Como os dados são bind mounts, o backup deve incluir:
Criar diretório¶
Criar backup completo¶
Listar backups¶
Testar o arquivo¶
Restaurar backup¶
Cuidado
Confirme o nome correto do arquivo antes de restaurar. A restauração pode substituir a documentação atual.
Parar o container¶
Restaurar¶
Iniciar¶
Validar¶
Atualização manual¶
Criar backup¶
tar -czf \
"/opt/backups/mkdocs/mkdocs-pre-update-$(date +%Y%m%d-%H%M%S).tar.gz" \
-C /opt/stacks mkdocs
Validar o Compose¶
Baixar a imagem mais recente¶
Recriar o container¶
Ver os logs¶
Confirmar versões¶
docker exec mkdocs python -c \
"import importlib.metadata as m; print(m.version('mkdocs-material'))"
Validar toda a documentação¶
Testar o domínio¶
Fixar versão da imagem¶
Atualmente é utilizada:
Para reduzir atualizações inesperadas, pode ser usada uma tag fixa:
Planejar antes
A alteração para tag fixa deve ser feita junto com um procedimento claro de atualização e rollback.
Rollback de imagem¶
Identificar imagens existentes¶
Alterar temporariamente o Compose¶
Definir a tag anterior:
Recriar¶
Validar¶
robots.txt¶
Os logs atuais mostram acessos a:
com resposta:
Isso não quebra o site. Bots e mecanismos de busca procuram esse arquivo automaticamente.
Para criar um arquivo básico:
Conteúdo exemplo:
Depois, validar:
O MkDocs copia arquivos não Markdown da pasta docs para o site gerado.
Troubleshooting¶
Site não abre¶
Erro 502 ou Gateway Timeout¶
A porta interna esperada é:
Página não aparece no menu¶
Verifique se o arquivo existe:
Verifique o nav:
Valide:
Alteração não aparece¶
Erro de YAML¶
Verifique principalmente:
- Indentação
- Dois-pontos
- Listas iniciadas por hífen
- Nome e caminho dos arquivos
- Espaços em vez de tabulações
Build falha¶
Container reiniciando¶
docker inspect mkdocs \
--format 'Status={{.State.Status}} ExitCode={{.State.ExitCode}} OOMKilled={{.State.OOMKilled}} RestartCount={{.RestartCount}}'
Ver consumo de recursos¶
Ver espaço ocupado¶
Boas práticas¶
- Executar
mkdocs build --strictapós cada alteração importante. - Fazer backup antes de atualizar a imagem.
- Não atualizar manualmente para MkDocs 2.0.
- Considerar fixar a versão da imagem.
- Planejar a migração antes do fim de vida do Material.
- Manter o
mkdocs.ymlcom indentação consistente. - Não remover arquivos ainda referenciados no menu.
- Não expor credenciais na documentação.
- Considerar publicação estática no futuro.
- Considerar adicionar healthcheck.
- Manter o site acessível apenas por HTTPS.