Um compose por serviço, e um menu central para subir, derrubar e configurar cada um sem precisar lembrar onde está nada.
┌ lastro ─────────────────────────────────────────────────────────┐
│ serviço categoria estado config porta pendências │
│ ● postgresql banco rodando ok 5433 │
│ ● mysql banco rodando ok 3308 │
│ ● redis cache rodando ok 6380 │
│ ● pgadmin4 ferramenta rodando ok 8767 │
│ ○ phpmyadmin ferramenta parado ok 8768 ⚠ precisa… │
│ ○ ngrok rede parado ausente 4040 │
│ ○ tailscale rede parado ausente — ⚠ módulo tun │
│ │
│ ⏎ subir · d derrubar · e editar · l logs · X zerar dados · q sair │
└──────────────────────────────────────────────────────────────────────┘
git clone https://github.com/ronidomingues/lastro.git
cd lastro
./install.shDepois disso, lastro funciona de qualquer diretório:
lastro status
lastro up postgresql
lastro up <TAB><TAB> # completa os serviçosO instalador não usa sudo: ele cria um link em ~/.local/bin e instala a
completação de bash e zsh. Confere Python 3.10+, venv e Docker antes, e
prepara o ambiente na primeira execução.
Ele cria um link, não uma cópia. O lastro lê os serviços de services/
dentro do repositório, então o repositório é a instalação — mover a pasta
depois exige rodar ./install.sh de novo. O lastro doctor avisa se o
comando do seu PATH apontar para outro clone.
Para remover: ./install.sh --uninstall. Ele tira só o link e a completação;
o repositório, os .env, os contêineres e os volumes ficam intactos.
Sem instalar, ./lastro dentro do repositório funciona igual.
Tudo que a interface faz tem um comando equivalente — os dois chamam o mesmo código:
./lastro list # o catálogo
./lastro help postgresql # referência do serviço, gerada do manifesto
./lastro man postgresql # manual completo: uso, erros e soluções
./lastro status # o que está de pé
./lastro config postgresql # preenche o .env pelo formulário
./lastro up pgadmin4 # sobe (e oferece subir as dependências)
./lastro restart redis # recria se a definição mudou
./lastro logs redis
./lastro down mysql # preserva os dados
./lastro destroy redis # APAGA os volumes (pede o id digitado)
./lastro net create # cria a rede compartilhada
./lastro completion bash # script de completação, se quiser instalar à mão| Serviço | Imagem | Local | Na rede |
|---|---|---|---|
| postgresql | postgres:18.6-alpine |
127.0.0.1:5433 |
postgresql:5432 |
| mysql | mysql:8.4 |
127.0.0.1:3308 |
mysql:3306 |
| mongodb | mongo:8 |
127.0.0.1:27018 |
mongodb:27017 |
| qdrant | qdrant/qdrant:v1.12.4 |
127.0.0.1:6333 |
qdrant:6333 |
| meilisearch | getmeili/meilisearch:v1.11 |
127.0.0.1:7700 |
meilisearch:7700 |
| neo4j | neo4j:5-community |
127.0.0.1:7474 · :7687 |
neo4j:7687 |
| redis | redis:8-alpine |
127.0.0.1:6380 |
redis:6379 |
| pgadmin4 | dpage/pgadmin4:9.8 |
127.0.0.1:8767 |
pgadmin4:80 |
| phpmyadmin | phpmyadmin:5.2-apache |
127.0.0.1:8768 |
phpmyadmin:80 |
| mongo-express | mongo-express:1.0.2 |
127.0.0.1:8769 |
mongo-express:8081 |
| n8n | n8nio/n8n:2.38.1 |
127.0.0.1:5680 |
n8n:5678 |
| ngrok | ngrok/ngrok:3-alpine |
127.0.0.1:4040 |
— |
| motioneye | ghcr.io/motioneye-project/motioneye:0.44.0 |
127.0.0.1:8765 |
motioneye:8765 |
| tailscale | tailscale/tailscale:stable |
— | — |
Todos publicam em 127.0.0.1, nunca em 0.0.0.0. ngrok e tailscale estão
atrás de perfil e não sobem sem --profile.
Cada pasta em services/ tem quatro arquivos:
services/postgresql/
├── compose.yml # o serviço
├── service.yaml # o manifesto: o que é configurável, de quem depende
├── .env.example # versionado, sem segredos, serve de documentação
└── .env # gerado; 0600, fora do git
O .env é derivado do manifesto e do .env.example — e preserva todos os
comentários deste, então continua servindo de documentação depois de
preenchido.
Dois comandos, com propósitos diferentes:
lastro help <serviço> # referência GERADA do manifesto
lastro man <serviço> # manual escrito à mãoO help é derivado do service.yaml: sinopse, campos com tipo e validação,
perfis, dependências, portas e volumes. Por ser gerado, não tem como ficar
desatualizado — um campo novo aparece nele sozinho.
O man cobre o que nenhum manifesto sabe: para que serve, como usar, os
problemas conhecidos e a solução de cada um. Fica em
services/<id>/README.md, e o lastro doctor cobra que exista.
Não exige tocar em nenhuma linha de Python — o gerenciador descobre o serviço pelos arquivos.
services/<id>/
├── compose.yml o serviço
├── service.yaml o manifesto: o que é configurável, de quem depende
├── .env.example gabarito versionado, sem segredos
└── README.md o manual do serviço
O passo a passo completo, com as sete decisões antes de começar, as regras que o carregamento impõe, as dez armadilhas e um exemplo montado do zero: docs/07-adicionar-servico.md.
down preserva. Apagar é outro comando (destroy, tecla X), com
confirmação por digitação do id. Detalhes e receita de backup em
docs/08-volumes-e-backup.md.
docs/ — visão geral, convenções, referência do manifesto, rede, portas, riscos, e como adicionar serviços.
.venv/bin/python -m unittest discover -s manager/testsMIT — ver LICENSE.