generated from DAM/ts-TEMPLATE
Bookmark manager (Go, single binary). Single container, SQLite in a named volume. Default admin (shiori/gopher) is auto-created on first run. Known issue: Shiori v1.7.0's SPA wizard detection panics with HTTP 500 on the first /api/bookmarks request when no session exists. The setup wizard does NOT appear on first visit — log in with the default credentials above and change the password immediately. Port 8080 inside the sidecar namespace. Optional SHIORI_HTTP_SECRET_KEY env var would persist sessions across restarts (not enabled by default).
90 lines
2.8 KiB
Markdown
90 lines
2.8 KiB
Markdown
# Shiori with Tailscale Integration
|
|
|
|
A self-hosted bookmark manager (Go, single binary) running on your tailnet, fronted by a Tailscale sidecar.
|
|
|
|
## Quick Start (Tailscale)
|
|
|
|
1. Copy the example environment file and fill in your values:
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
2. Edit `.env` and set:
|
|
- `TS_AUTHKEY` — your Tailscale auth key
|
|
3. Start the stack:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
4. Browse to `https://shiori.<your-tailnet>.ts.net` and log in with the default credentials:
|
|
- Username: `shiori`
|
|
- Password: `gopher`
|
|
5. Change the password immediately (Settings → Account).
|
|
|
|
**Note:** Shiori v1.7.0 has a known issue where the SPA's "setup wizard" detection
|
|
panics with HTTP 500 on the first request when no session exists. The wizard
|
|
does NOT appear on first visit. Just log in with the default credentials above
|
|
and change the password.
|
|
|
|
## Headscale
|
|
|
|
If you're using Headscale instead of Tailscale:
|
|
|
|
1. Copy the example environment file:
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
2. Edit `.env` and set:
|
|
- `TS_AUTHKEY` — your Headscale auth key
|
|
- `TS_LOGIN_SERVER` — your Headscale server URL
|
|
3. Switch to the Headscale serve config:
|
|
```bash
|
|
cp tailscale/config/serve.headscale.json tailscale/config/serve.json
|
|
```
|
|
4. Edit `serve.json` and replace `shiori.damconsulting.net` with your actual domain.
|
|
5. Start the stack:
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
6. Browse to `http://shiori.yourdomain.com` and complete the setup wizard.
|
|
|
|
## Configuration
|
|
|
|
See `.env.example` for all available options. The app accepts no env vars
|
|
beyond what the sidecar requires — Shiori uses SQLite by default and stores
|
|
its data in `SHIORI_DIR=/srv/shiori` (a named volume).
|
|
|
|
### Switching Serve Configs
|
|
|
|
| Environment | File to use | Notes |
|
|
|-------------------|--------------------------------------|-------|
|
|
| Tailscale (default) | `tailscale/config/serve.json` | Supports HTTP + HTTPS with certs |
|
|
| Headscale | `tailscale/config/serve.headscale.json` | HTTP only |
|
|
|
|
After changing the serve config, restart the sidecar **and** the app:
|
|
```bash
|
|
docker compose restart shiori-ts
|
|
docker compose restart shiori
|
|
```
|
|
|
|
## Optional: Direct Host Access
|
|
|
|
Uncomment the `ports` section in `docker-compose.yml` if you need direct access without Tailscale:
|
|
|
|
```yaml
|
|
ports:
|
|
- "8080:8080"
|
|
```
|
|
|
|
## Data Backup
|
|
|
|
Shiori's data (SQLite database + archived bookmarks) lives in the `shiori-data` named volume. To back it up:
|
|
|
|
```bash
|
|
docker run --rm -v shiori-data:/data -v /path/to/backups:/backup alpine \
|
|
tar czf /backup/shiori-$(date +%F).tar.gz -C /data .
|
|
```
|
|
|
|
## Links
|
|
|
|
- [Shiori Website](https://go-shiori.github.io/shiori/)
|
|
- [Shiori GitHub](https://github.com/go-shiori/shiori)
|
|
- [Shiori Container Image](https://github.com/go-shiori/shiori/pkgs/container/shiori) |