Skip to content

Commit 033a335

Browse files
Update README and CLAUDE.md: Watchtower as recommended install method
README: - Replace vague Updates section with a full Watchtower compose snippet as the recommended auto-update approach for homelab users — no SSH, no manual pulls, updates within 5 minutes of a release automatically. - Update TrueNAS compose snippet to include Watchtower alongside the app. - Keep manual docker compose pull fallback for users who prefer control. CLAUDE.md: - Clarify that backend/static/ is gitignored and built inside the Docker image from source — never commit files under that path. - Update TrueNAS environment note: Watchtower handles updates, images land on GHCR within ~1 min of a master push, Watchtower pulls within 5. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 8f80dd9 commit 033a335

2 files changed

Lines changed: 36 additions & 6 deletions

File tree

CLAUDE.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@ docker compose build && docker compose up
7676

7777
The `docker-compose.yml` mounts `./data` as a volume, so your `config.json`, `channels.json`, and `plex_library.csv` persist between runs. To pick up code changes, rebuild: `docker compose build && docker compose up`.
7878

79+
Note: `backend/static/` is **gitignored** — the Dockerfile builds the frontend from source inside the container (`npm run build` runs during `docker build`). Never commit files under `backend/static/`.
80+
7981
Two environments:
8082
- **localhost:7979** — local Docker build for testing before pushing
81-
- **TrueNAS** — production, pulls image from GHCR automatically on every `master` push via GitHub Actions
83+
- **TrueNAS** — production, runs `ghcr.io/alpinearchitecture/programmarr:latest` with Watchtower for automatic updates. New images land on GHCR within ~1 min of a master push; Watchtower picks them up within 5 min.
8284

8385
## Workflow
8486

README.md

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,35 @@ First run shows an onboarding wizard — create a login, enter your Tunarr and P
3939

4040
### Updates
4141

42-
The image is rebuilt and pushed automatically on every commit. To update:
42+
Add [Watchtower](https://containrrr.dev/watchtower/) to your compose file and updates happen automatically — no SSH, no manual pulls, no Portainer. Watchtower checks every 5 minutes and restarts the container if a new image is available:
43+
44+
```yaml
45+
services:
46+
programmarr:
47+
image: ghcr.io/alpinearchitecture/programmarr:latest
48+
container_name: programmarr
49+
restart: unless-stopped
50+
ports:
51+
- "7979:7979"
52+
volumes:
53+
- ./data:/data
54+
55+
watchtower:
56+
image: containrrr/watchtower
57+
container_name: watchtower
58+
volumes:
59+
- /var/run/docker.sock:/var/run/docker.sock
60+
command: --interval 300 programmarr
61+
restart: unless-stopped
62+
```
63+
64+
Or update manually any time:
4365
4466
```bash
4567
docker compose pull && docker compose up -d
4668
```
4769

48-
Or use the **Update** button in Portainer / TrueNAS Apps if you're using the `image:` reference below.
49-
50-
### TrueNAS (Custom App UI)
70+
### TrueNAS
5171

5272
Paste this as a complete compose file in Apps → Custom App:
5373

@@ -61,9 +81,17 @@ services:
6181
- "7979:7979"
6282
volumes:
6383
- /mnt/YourPool/AppData/programmarr/data:/data
84+
85+
watchtower:
86+
image: containrrr/watchtower
87+
container_name: watchtower
88+
volumes:
89+
- /var/run/docker.sock:/var/run/docker.sock
90+
command: --interval 300 programmarr
91+
restart: unless-stopped
6492
```
6593
66-
Replace `/mnt/YourPool/AppData/programmarr/data` with a real path on your TrueNAS pool. TrueNAS will show an **Update** button whenever a new image is pushed.
94+
Replace `/mnt/YourPool/AppData/programmarr/data` with a real path on your pool.
6795

6896
---
6997

0 commit comments

Comments
 (0)