Switch deployment to TrueNAS Custom App Wizard

Removes docker-compose.example.yml and docs/local.md; rewrites
docs/truenas.md around the Custom App Wizard flow (image push to
Gitea registry, env vars entered in UI, network attachment). Custom
catalog approach is not available in Electric Eel 24.10+.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
didericis
2026-05-05 16:31:16 -04:00
parent 8ec8df3827
commit 88bb9749a3
4 changed files with 67 additions and 137 deletions
+64 -44
View File
@@ -1,9 +1,26 @@
# TrueNAS SCALE setup
Tested on TrueNAS SCALE 24.10 (Electric Eel) with Gitea installed via the
official app catalog. All commands below run over SSH on the TrueNAS host.
official app catalog. All shell commands run over SSH on the TrueNAS host.
### 1. Find Gitea's DB container and Docker network
## 1. Publish the image
The Custom App Wizard requires a pre-built image in a container registry.
The Gitea instance you're already running works fine for this.
On your development machine (or directly on TrueNAS):
```bash
docker login gitea.yourdomain.com
docker build -t gitea.yourdomain.com/yourusername/gitea-heatmap-sidecar:latest .
docker push gitea.yourdomain.com/yourusername/gitea-heatmap-sidecar:latest
```
Make the package public in Gitea under **Settings → Packages**, or configure
TrueNAS with registry credentials if you keep it private.
## 2. Find Gitea's DB container and Docker network
```bash
# List Gitea-related containers
@@ -14,77 +31,80 @@ docker inspect <gitea-app-container> \
--format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{end}}'
```
Note both the DB container name (typically ends in `-postgres` or `-db`) and
the network name — you'll need them in the steps below.
Note both names — you'll need them below.
### 2. Get the Gitea DB password
## 3. Get the Gitea DB password
In the TrueNAS UI: **Apps → Installed Apps → Gitea → Edit → Database
Configuration**. The Postgres password is visible there. You'll use it in
steps 3 and 4.
Configuration**. The Postgres password is visible there.
### 3. Create the read-only DB user
## 4. Create the read-only DB user
Edit `db/setup.sql` to set a password for `heatmap_ro`, then run it against
the DB container:
the DB container (name from step 2):
```bash
docker exec -i <gitea-db-container> psql -U gitea -d gitea < db/setup.sql
```
### 4. Clone and configure
## 5. Install via the Custom App Wizard
Put the repo somewhere on persistent storage:
In the TrueNAS UI: **Apps → Discover Apps → Custom App**.
```bash
git clone https://github.com/didericis/gitea-heatmap-sidecar \
/mnt/<pool>/gitea-heatmap-sidecar
cd /mnt/<pool>/gitea-heatmap-sidecar
cp docker-compose.example.yml docker-compose.yml
```
| Field | Value |
|-------|-------|
| Application Name | `gitea-heatmap-sidecar` |
| Image Repository | `gitea.yourdomain.com/yourusername/gitea-heatmap-sidecar` |
| Image Tag | `latest` |
| Pull Policy | `Always` (so updates are picked up on restart) |
Edit `docker-compose.yml`:
Under **Environment Variables**, add:
- Set `DATABASE_URL` — use the DB container name as the hostname, e.g.
`postgres://heatmap_ro:PASSWORD@gitea-db-container-name:5432/gitea?sslmode=disable`
- Set `ALLOWED_USERS` and `ALLOWED_ORIGIN`
- Under `networks.gitea`, set `name` to the network name from step 1 and
uncomment `external: true`
| Name | Value |
|------|-------|
| `DATABASE_URL` | `postgres://heatmap_ro:PASSWORD@<gitea-db-container>:5432/gitea?sslmode=disable` |
| `ALLOWED_USERS` | your Gitea username, lowercase |
| `ALLOWED_ORIGIN` | `https://gitea.yourdomain.com` |
### 5. Build and start
Under **Networking**, add the Gitea Docker network (from step 2) as an
additional network so the sidecar can reach the DB container by name.
```bash
docker compose -f /mnt/<pool>/gitea-heatmap-sidecar/docker-compose.yml up -d --build
```
Under **Port Forwarding**, map host port `8080` → container port `8080`
(or omit this entirely if you're routing via a reverse proxy on the same
Docker network).
Confirm it's healthy:
Leave everything else at defaults and click **Install**.
```bash
docker exec gitea-heatmap wget -qO- http://localhost:8080/healthz
```
## 6. Reverse proxy
### 6. Reverse proxy
Expose the sidecar at a public HTTPS hostname. With **Nginx Proxy Manager**:
Expose port 8080 at a public HTTPS hostname. With **Nginx Proxy Manager**
(a common TrueNAS app on the same Docker network):
- Scheme: `http`, Forward hostname: `gitea-heatmap` (the container name),
- Scheme: `http`, Forward hostname: `gitea-heatmap-sidecar` (container name),
Port: `8080`
- Enable SSL via Let's Encrypt
For Traefik or Caddy configured as TrueNAS apps, wire it up the same way
the sidecar is reachable by container name on the shared network.
For Traefik or Caddy on the same Docker network, wire it up the same way.
### 7. Find the Gitea custom directory
## 7. Find the Gitea custom directory
In the TrueNAS UI: **Apps → Installed Apps → Gitea → Edit → Storage**.
Find the host path mapped to the Gitea data volume. The custom directory
Gitea reads templates from is the `custom/` subdirectory of that path
check the `GITEA_CUSTOM` env var in the container if unsure:
Find the host path mapped to the Gitea data volume. The custom directory is
the `custom/` subdirectory of that path. Check the `GITEA_CUSTOM` env var in
the container if unsure:
```bash
docker exec <gitea-app-container> printenv GITEA_CUSTOM
```
Then follow [step 4 of the local setup](local.md#4-install-the-profile-template-override)
to install the template override into that directory and restart Gitea.
## 8. Install the profile template override
Copy `templates/user/profile.tmpl` from the Gitea source matching your
running version into `$GITEA_CUSTOM/templates/user/profile.tmpl`, then merge
in the snippet from `templates/profile-snippet.tmpl` near the existing
heatmap block.
Replace `HEATMAP_BASE_URL` in the snippet with your sidecar's public URL and
`didericis` with your username.
Restart Gitea, hit the profile page in incognito, and the heatmap should
populate.