58 lines
1.5 KiB
Markdown
58 lines
1.5 KiB
Markdown
# Home Services
|
|
|
|
This repository manages home-lab application stacks using compose files and a small Python CLI that works with either Docker or Podman.
|
|
|
|
## Repository layout
|
|
|
|
```text
|
|
services/
|
|
media/
|
|
compose.yaml
|
|
composectl.py
|
|
update_containers.sh
|
|
```
|
|
|
|
- `services/` contains one directory per deployed stack.
|
|
- Each stack directory contains its own `compose.yaml` file.
|
|
- `composectl.py` infers the stack name, compose file path, and project name from that directory structure.
|
|
- `update_containers.sh` is a compatibility shim that delegates to the Python tool.
|
|
|
|
## Runtime support
|
|
|
|
The CLI detects and uses whichever runtime is available:
|
|
|
|
- `docker compose ...`
|
|
- `podman compose ...`
|
|
|
|
This means the same service directories can be managed from either backend without changing the compose files.
|
|
|
|
## Common commands
|
|
|
|
From the repository root:
|
|
|
|
```bash
|
|
python3 composectl.py --help
|
|
python3 composectl.py --dry-run --all refresh
|
|
python3 composectl.py --stack media --dry-run up
|
|
python3 composectl.py --stack media pull
|
|
python3 composectl.py --stack media down
|
|
python3 composectl.py --stack media status
|
|
```
|
|
|
|
The shell entrypoint delegates to the Python tool:
|
|
|
|
```bash
|
|
bash update_containers.sh --dry-run --all refresh
|
|
```
|
|
|
|
## Refresh flow
|
|
|
|
The repo-wide refresh flow does the following for each configured stack:
|
|
|
|
1. `pull`
|
|
2. `down`
|
|
3. `up -d`
|
|
4. `prune`
|
|
|
|
This preserves the same maintenance behavior as the old shell updater, but moves the logic into a portable Python implementation.
|