- Dockerfile 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| copyparty | ||
| ech0 | ||
| forgejo | ||
| homepage | ||
| silverbullet | ||
| traefik | ||
| ttyd | ||
| .gitignore | ||
| AGENTS.md | ||
| README.md | ||
app-services-prd
Docker Compose stacks for the self-hosted services running on app-services (/home/luigi/services on the host). One folder per service, each with its own docker-compose.yaml.
Services
| Service | Image | Port | Purpose |
|---|---|---|---|
| copyparty | copyparty/ac:latest |
3923 | File sharing / web file explorer |
| ech0 | sn0wl1n/ech0:latest |
6277 | Lightweight self-hosted microblog / personal publishing |
| forgejo | codeberg.org/forgejo/forgejo:16.0.1 |
3000 (web), 222 (ssh) | Self-hosted Git |
| homepage | ghcr.io/gethomepage/homepage:latest |
5010 | Dashboard for the lab |
| silverbullet | ghcr.io/silverbulletmd/silverbullet:latest |
4000 | Notes |
| traefik | traefik:v3.1 |
80, 443, 8080 | Reverse proxy / edge router |
| ttyd | built from ./Dockerfile |
7681 | Terminal in the browser |
All stacks attach to the shared external proxy Docker network.
Deployment
cd <service-dir>
docker compose pull # fetch newest images
docker compose up -d # (re)create the containers
docker compose up -d recreates a container only when its image or config changed; add --force-recreate to force it.
Updates are also automated from the home-lab ansible inventory repo:
ansible-playbook -i inventory.yml services.yml
Configuration & secrets
Sensitive values are read from .env files that are gitignored; never commit them. Each service that needs variables ships a template:
ech0/.env.sampleforgejo/.env.examplettyd/.env.examplecopyparty/.env.templatetraefik/.env.example
Copy the template to .env and fill in real values. forgejo/config/app.ini and copyparty's account files are also gitignored (see .gitignore).
Persistent data (*/data, */config) lives next to the compose files on the host and is not version-controlled.