# 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:@postgres:5432/postgres - NEXTAUTH_URL=https://linkwarden.bunny-wyvern.ts.net/api/v1/auth - NEXTAUTH_SECRET= 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= - 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