Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions docs/architecture/package-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ Each container app package contains:
└── {app-name}.png # Icon for store and dashboard
```

The package is intentionally lightweight — it does **not** contain the Docker image itself. The actual container image is pulled from the registry when the service starts for the first time. This keeps packages small (a few kilobytes) and ensures you always get the exact image version specified in the compose file.

The systemd service runs `docker compose up -d` on start and `docker compose down` on stop.

## App Definition Format
Expand Down Expand Up @@ -151,10 +153,13 @@ The CI/CD pipeline builds packages on push to main, publishes to unstable, and p

```
apt install marine-grafana-container
→ dpkg extracts files
→ dpkg extracts files (seconds — package is small)
→ postinst creates data directories, generates secrets
→ systemd starts grafana-container.service
→ docker compose up -d
→ prestart.sh computes runtime configuration
→ docker compose up
→ Docker pulls image layers from registry (may take minutes on first install)
→ Container starts
→ Traefik detects labels, creates route
→ mDNS publisher advertises grafana.halos.local
→ Homarr adapter adds dashboard tile
Expand All @@ -178,7 +183,7 @@ apt remove marine-grafana-container
apt upgrade
→ dpkg extracts updated files
→ systemd restarts the service
→ docker compose pulls new image and recreates container
→ docker compose pulls new image (only if upstream version changed) and recreates container
→ Persistent data in /var/lib/container-apps/{app}/ is preserved
```

Expand Down
21 changes: 14 additions & 7 deletions docs/user-guide/installing-apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,20 @@ HaLOS provides a container app store — a curated collection of applications pa

## How it works

Each container app is a standard Debian package (`.deb`) that contains:
Installing a container app is a two-phase process:

- A Docker Compose file defining the container(s)
- A systemd service that manages the container lifecycle
- Docker labels for Traefik routing and Homarr dashboard integration
1. **Package install (fast)** — HaLOS downloads and installs a small package that describes how to run the app. This takes only a few seconds.

When you install an app, `apt` downloads the package, `systemd` starts the container, Traefik picks up the routing labels, and the app appears on your [dashboard](dashboard.md) — all automatically.
2. **Image pull (slow)** — The app's actual software is then downloaded from the internet. This can take anywhere from 30 seconds to several minutes depending on the app size and your network speed.

The app only becomes accessible after the download completes and the app starts. It then appears on your [dashboard](dashboard.md) automatically.

??? info "Under the hood"
The package is a standard Debian `.deb` containing a Docker Compose file
(which defines the containers to run), a systemd service (which manages
the app lifecycle), and metadata for routing and dashboard integration.
The heavy download in phase 2 is Docker pulling the container image
layers from a registry.

## Browsing the store

Expand All @@ -26,8 +33,8 @@ The store shows apps from all configured stores. The Marine variant adds a dedic

1. Click on an app to view its details (description, version, dependencies).
2. Click **Install**.
3. Wait for the package to download and the container to start (typically 30–60 seconds).
4. The app appears on your Homarr dashboard and is accessible via its subdomain URL.
3. The package installs quickly, but the app needs time to pull its Docker image on first start. Small apps are ready within a minute; larger ones (e.g., Grafana, OpenCPN) may take several minutes on slower connections.
4. Once the image pull completes, the app appears on your Homarr dashboard and is accessible via its subdomain URL.

## Managing installed apps

Expand Down