File size: 2,871 Bytes
8c1b9fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Running Auralynq with Podman (production-shaped stack)

Auralynq is **Podman-first** — no Docker, no sudo required. This mode runs
the full 7-service topology behind a TLS reverse proxy: `caddy`, `web`, `api`,
`worker`, `mcp`, `qdrant`, `phoenix`.

For a lighter single-process setup with no containers, see
[no-podman.md](no-podman.md) instead.

## Prerequisites

- Podman + a Podman Compose (`podman compose` or `podman-compose`)
- No Docker needed anywhere in this flow

```bash
make runtime-check   # verifies a Podman Compose command is available
```

## 1. Build and start

```bash
git clone https://github.com/MHHamdan/Auralynq.git && cd Auralynq
cp .env.example .env    # optional; only HUGGINGFACE_TOKEN matters for gated models

make images       # build versioned api/web/caddy images locally
make stack-up      # start the stack (alias: make up)
```

`make stack-up` starts caddy (public TLS) + web + api + mcp + worker + qdrant +
phoenix, in a hardened order. Only the Caddy HTTPS port is meant to be public;
everything else binds to loopback by default.

## 2. Seed and index data

```bash
podman exec auralynq-api auralynq data --sample
podman exec auralynq-api auralynq index --input /app/data/corpus
```

Or upload documents directly through the web UI's Ingest tab — no shell access
needed.

## 3. Open it

- Web UI: **https://localhost:8443** (accept the self-signed cert warning, or
  see [server.md](server.md) for a real domain / trusted cert)
- API docs: **https://localhost:8443/api/docs**
- Phoenix traces: loopback-only by default; SSH-tunnel to view, or expose
  intentionally if you understand the trade-off

## Everyday commands

```bash
make stack-down     # stop
make stack-logs      # tail logs
make fresh           # wipe corpus + Qdrant volumes and start clean
make status          # container status (when using `make start`/`make stop`)
```

## Rebuilding after a code change

`podman-compose build` can silently reuse cached layers for both the
multi-stage web image and the single-stage API image. Always rebuild with
`podman build --no-cache` directly, then fully cycle the stack (compose pins
image IDs, so a plain restart won't pick up a new image):

```bash
make images
podman-compose -f compose.yml down && make stack-up
```

## Where your data lives (Podman mode)

Corpus, vector index, and page cache live in named Podman volumes (not the
host filesystem), so they survive `stack-down`/`stack-up` cycles but are
separate from whatever `./data/` holds if you also ran no-Podman mode on the
same machine. `make fresh` wipes exactly these volumes (`auralynq-data`,
`auralynq-qdrant`) and nothing else.

## Next steps

- Deploying to a remote server with a real domain/IP → [server.md](server.md)
- No containers at all → [no-podman.md](no-podman.md)
- Something not working → [troubleshooting.md](troubleshooting.md)