3.7 KiB
Guia de Deploy e Manutenção - Apolo
Este guia descreve o processo completo para implantar, atualizar e manter serviços na VPS Apolo utilizando Podman e Quadlet, seguindo o padrão da infraestrutura.
🚀 Adicionando um Novo Serviço
O Quadlet permite declarar containers como serviços systemd. Siga estes passos para criar um novo.
1. Preparação
Escolha onde o arquivo ficará:
- Global (Root):
/etc/containers/systemd/(Padrão para serviços core/produção). - Usuário:
~/.config/containers/systemd/(Recomendado para experimentos ou serviços pessoais).
Nota: A maioria dos serviços no Apolo roda como root em
/etc/containers/systemd/para acesso facilitado a portas baixas e volumes globais, mas o modo rootless é suportado.
2. Criar o Arquivo .container
Crie um arquivo com sufixo .container, por exemplo, meu-app.container.
[Unit]
Description=Meu App Exemplo
After=network-online.target
[Container]
# 1. Imagem Docker
Image=docker.io/minha-empresa/meu-app:latest
AutoUpdate=registry
# 2. Variáveis de Ambiente
Environment=PORT=3000
Environment=DB_HOST=postgres-main
# 3. Persistência (opcional)
Volume=/mnt/data/meu-app:/app:Z
# Explicação:
# - /mnt/data/meu-app : Pasta no Host (Servidor)
# - /app : Pasta dentro do Container
# - :Z : Configura permissão SELinux (Essencial no AlmaLinux)
# 4. Rede e Exposição (Traefik)
Network=web_proxy
Label=traefik.enable=true
# Roteamento de Host (URL)
Label=traefik.http.routers.meu-app.rule=Host(`app.rede5.com.br`)
Label=traefik.http.routers.meu-app.entrypoints=websecure
Label=traefik.http.routers.meu-app.tls.certresolver=myresolver
# Porta Interna do Container (Load Balancer)
Label=traefik.http.services.meu-app.loadbalancer.server.port=3000
# Middleware (Ex: Redirect HTTP->HTTPS) - Opcional se entrypoints já for websecure
# Label=traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
[Install]
WantedBy=multi-user.target
3. Aplicar as Alterações
O systemd precisa ler o novo arquivo e gerar o serviço correspondente.
# Se criado como Root (Padrão Apolo)
sudo systemctl daemon-reload
sudo systemctl start meu-app
# Se criado como Usuário
systemctl --user daemon-reload
systemctl --user start meu-app
🔄 Atualizando um Serviço
Se a imagem estiver configurada com AutoUpdate=registry, o Podman pode atualizar automaticamente. Para fazer manual:
- Baixar nova imagem:
podman pull docker.io/minha-empresa/meu-app:latest - Reiniciar serviço:
systemctl restart meu-app
🛠️ Troubleshooting
Verificar Status do Serviço
systemctl status meu-app
Ver Logs da Aplicação
# Follow logs em tempo real
journalctl -f -u meu-app
# Ver logs anteriores
journalctl -u meu-app -n 100
O Container não sobe?
- Verifique erros de sintaxe no arquivo
.container:/usr/libexec/podman/quadlet -dryrun - Verifique se a porta está em uso.
- Verifique se a imagem existe e foi baixada.
O domínio não responde (Erro 404/502)?
- Verifique se o container está na rede
web_proxy. - Confira se a
portno Label do Traefik bate com a porta que a aplicação escuta internamente. - Veja os logs do Traefik:
journalctl -f -u traefik
📂 Estrutura de Diretórios Recomendada
Mantenha os volumes organizados em /mnt/data/:
/mnt/data/
├── postgres-general/ # Banco de Dados Principal
├── redis-gohorsejobs/ # Redis Dedicado
├── saveinmed/
│ ├── backend/
│ │ └── .env
│ ├── marketplace/
│ └── ...
├── farmacia/
├── obramarket/
└── [nome-do-projeto]/