Files
Inanis_Vault/21-Server Reference/homelab/stacks/linkwarden.md

76 lines
2.1 KiB
Markdown

# Linkwarden
Self-hosted bookmark manager with link archiving.
## Access
- **Tailscale:** [linkwarden.bunny-wyvern.ts.net](https://linkwarden.bunny-wyvern.ts.net)
- **LAN:** `http://192.168.2.114:5001`
## Containers
| Container | Image | Role |
|---|---|---|
| `linkwarden` | `ghcr.io/linkwarden/linkwarden:latest` | Web app |
| `linkwarden-db` | `postgres:16-alpine` | PostgreSQL database |
| `linkwarden-tailscale-sidecar` | `tailscale/tailscale:latest` | Tailscale node |
## Compose File
**Path:** `/home/artanis/DockerFiles/linkwarden/docker-compose.yml`
```yaml
services:
postgres:
image: postgres:16-alpine
container_name: linkwarden-db
restart: always
pull_policy: always
volumes:
- /home/artanis/DockerFiles/linkwarden/pgdata:/var/lib/postgresql/data
linkwarden:
container_name: linkwarden
image: ghcr.io/linkwarden/linkwarden:latest
restart: always
pull_policy: always
ports:
- 5001:3000
volumes:
- /home/artanis/DockerFiles/linkwarden/data:/data/data
environment:
- DATABASE_URL=postgresql://postgres:<redacted>@postgres:5432/postgres
- NEXTAUTH_URL=https://linkwarden.bunny-wyvern.ts.net/api/v1/auth
- NEXTAUTH_SECRET=<redacted>
depends_on:
- postgres
linkwarden-tailscale-sidecar:
image: tailscale/tailscale:latest
container_name: linkwarden-tailscale-sidecar
restart: unless-stopped
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
volumes:
- linkwarden_tailscale_state:/var/lib/tailscale
environment:
- TS_AUTHKEY=<redacted>
- TS_HOSTNAME=linkwarden
- TS_STATE_DIR=/var/lib/tailscale
network_mode: "service:linkwarden"
volumes:
linkwarden_tailscale_state:
```
## Data Layout
| Path | Contents |
|---|---|
| `/home/artanis/DockerFiles/linkwarden/pgdata` | PostgreSQL data directory |
| `/home/artanis/DockerFiles/linkwarden/data` | Linkwarden app data (archived pages, assets) |
## Notes
- `NEXTAUTH_URL` must point to the Tailscale URL for auth to work correctly
- A Meilisearch service was previously considered (commented out in compose) but not deployed