104 lines
3.7 KiB
Markdown
104 lines
3.7 KiB
Markdown
# Deploy to Dockge via the Gitea container registry
|
|
|
|
Flashcard ships as one container (API + built frontend). You build the image once,
|
|
push it to your Gitea registry, and Dockge pulls it — same pattern as your
|
|
`questionnaire` stack.
|
|
|
|
- Gitea repo: `https://gitea.hausmans.cloud/bert.hausmans/flashcards`
|
|
- Registry image: `10.0.10.205:3000/bert.hausmans/flashcards:latest`
|
|
|
|
## One-time prerequisites (on this Mac)
|
|
|
|
The registry is plain HTTP on an IP, so Docker must trust it. In **Docker Desktop →
|
|
Settings → Docker Engine**, add `10.0.10.205:3000` to `insecure-registries`:
|
|
|
|
```json
|
|
{
|
|
"insecure-registries": ["10.0.10.205:3000"]
|
|
}
|
|
```
|
|
|
|
Apply & restart Docker. Then log in to the registry (use your Gitea username and a
|
|
Gitea access token or password — run it yourself so the prompt works):
|
|
|
|
```
|
|
! docker login 10.0.10.205:3000
|
|
```
|
|
|
|
(The Dockge host already trusts this registry since `questionnaire` pulls from it.)
|
|
|
|
## Step 1 — build for amd64 and push
|
|
|
|
Your Mac is arm64 but the Proxmox host is amd64, so build with `--platform
|
|
linux/amd64`. From the repo root:
|
|
|
|
```bash
|
|
docker buildx build --platform linux/amd64 \
|
|
-t 10.0.10.205:3000/bert.hausmans/flashcards:latest \
|
|
--push .
|
|
```
|
|
|
|
That builds the image and pushes it straight to the Gitea registry.
|
|
|
|
## Step 2 — create the Dockge stack
|
|
|
|
In Dockge, **+ Compose** → name it `flashcard`, and paste the contents of
|
|
`compose.yaml` from this repo (or copy the file into the stack directory). Then edit
|
|
the `environment:` block:
|
|
|
|
- `APP_URL` → how users reach the app, e.g. `http://10.0.10.205:4100`
|
|
(used in verification / reset / invite e-mail links — get it right).
|
|
- `COOKIE_SECURE` → leave `false` over plain HTTP; set `true` only behind HTTPS.
|
|
- SMTP (Amazon SES) → fill in `SMTP_HOST` / `SMTP_USER` / `SMTP_PASS` / `SMTP_FROM`,
|
|
**or** leave `SMTP_HOST` empty for the first boot (see Step 4).
|
|
|
|
The stack maps host **4100 → container 4000** and persists the SQLite DB in the
|
|
`flashcard-data` volume.
|
|
|
|
## Step 3 — deploy
|
|
|
|
Click **Deploy**. Dockge pulls the image and starts it. Open
|
|
`http://10.0.10.205:4100`. Migrations run automatically on container start.
|
|
|
|
## Step 4 — create the first account (becomes sysadmin)
|
|
|
|
Go to `/register` and sign up — the **first registered user is automatically the
|
|
sysadmin**.
|
|
|
|
- SES configured → click the verification link in your inbox.
|
|
- SMTP left empty → open the stack's **Logs** in Dockge and copy the
|
|
`…/verify-email?token=…` link printed by the stub mailer.
|
|
|
|
Then log in. Done.
|
|
|
|
## Updating later
|
|
|
|
Rebuild & push the new image, then redeploy in Dockge:
|
|
|
|
```bash
|
|
docker buildx build --platform linux/amd64 \
|
|
-t 10.0.10.205:3000/bert.hausmans/flashcards:latest --push .
|
|
```
|
|
|
|
In Dockge: open the **flashcard** stack → **Pull** (fetches the new image) →
|
|
**Deploy**. The `flashcard-data` volume — and all lessons, cards and accounts —
|
|
survives redeploys.
|
|
|
|
> Tip: for safe rollbacks, also tag a version alongside `latest`, e.g.
|
|
> `-t 10.0.10.205:3000/bert.hausmans/flashcards:2026-05-21 -t 10.0.10.205:3000/bert.hausmans/flashcards:latest`.
|
|
|
|
## Notes & gotchas
|
|
|
|
- **Data lives in the `flashcard-data` volume** — don't delete it; back up
|
|
`/app/data/flashcard.db`.
|
|
- **Secure cookies need HTTPS.** Over plain HTTP keep `COOKIE_SECURE=false`,
|
|
otherwise the browser drops the login cookie and sign-in silently fails.
|
|
- **Mailpit** (`docker-compose.yml`) is dev-only and unrelated to this deploy.
|
|
- The backend runs via `tsx` and applies migrations on boot
|
|
(`docker-entrypoint.sh`).
|
|
|
|
## Optional: automate with Gitea Actions
|
|
|
|
If you later register a Gitea `act_runner`, I can add a `.gitea/workflows/build.yml`
|
|
that builds and pushes on every push to `master`, so you skip the manual buildx step.
|