mirror of
https://github.com/temetro/temetro.git
synced 2026-08-17 13:57:48 +00:00
infra/docs: Docker Hub release pipeline, versioning, README overhaul
Reference prebuilt temetro/temetro-{backend,frontend} images in docker-compose
(with a build fallback) and stop baking the frontend API URL. Add a
tag-triggered GitHub Actions release workflow that pushes both images and cuts
a GitHub Release, plus RELEASING.md, CHANGELOG.md, and a root version. Overhaul
the root and frontend READMEs (screenshot, features, prebuilt-image quickstart,
LAN access, updating).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+10
-1
@@ -9,9 +9,16 @@ shape exactly.
|
||||
## Quick start (Docker)
|
||||
|
||||
```bash
|
||||
docker compose up # db + backend + frontend — no setup needed
|
||||
docker compose pull # fetch prebuilt images from Docker Hub (fast)
|
||||
docker compose up -d # db + backend + frontend — no setup needed
|
||||
```
|
||||
|
||||
`docker compose up --build` instead builds from source (for development). The
|
||||
Compose file references the published `temetro/temetro-backend` and
|
||||
`temetro/temetro-frontend` images with a build fallback, so the same file serves
|
||||
both clinics and developers. Update with `docker compose pull && docker compose
|
||||
up -d` (see [`../RELEASING.md`](../RELEASING.md)).
|
||||
|
||||
No `.env` or manual secret generation is required: on first start the backend
|
||||
generates any missing secrets (`BETTER_AUTH_SECRET`, `AI_CREDENTIALS_KEY`) and
|
||||
persists them to a Docker volume, so they stay stable across restarts. Create a
|
||||
@@ -72,6 +79,8 @@ Other org-scoped resources follow the same pattern (CRUD, role-gated):
|
||||
| Analytics | `GET /api/analytics` | — (any member) | computed clinic aggregates |
|
||||
| Conversations | `/api/conversations` | — (participant-scoped) | staff messaging; real-time over Socket.io |
|
||||
| Notifications | `/api/notifications` | — (per-recipient) | auto-generated; `read-all` + per-id read |
|
||||
| Version | `GET /api/version` | — (public) | running version + GitHub-release update check |
|
||||
| Network | `GET /api/network` | — (public) | detected LAN addresses for sharing the app |
|
||||
|
||||
Real-time messaging and live notifications are delivered over **Socket.io**, attached to the same
|
||||
HTTP server; the handshake is authenticated with the Better Auth session cookie.
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
# Full-stack dev/run orchestration for temetro.
|
||||
#
|
||||
# docker compose up # db + backend + frontend — that's it.
|
||||
# docker compose up -d # run prebuilt images (clinics — fast)
|
||||
# docker compose up --build # build from source (developers)
|
||||
# docker compose pull && docker compose up -d # update to the latest release
|
||||
#
|
||||
# Each service has both `image:` (published on Docker Hub) and `build:` (the
|
||||
# source), so the same file serves clinics pulling releases and developers
|
||||
# building locally. `TEMETRO_VERSION` (default `latest`) pins the image tag.
|
||||
#
|
||||
# No .env or secret setup is required: the backend generates any missing
|
||||
# secrets on first start and persists them (see docker-entrypoint.sh). Create a
|
||||
# .env only if you want to override something (SMTP, a real auth secret, etc.).
|
||||
#
|
||||
# Frontend -> http://localhost:3000
|
||||
# Frontend -> http://localhost:3000 (also reachable at http://<this-host-LAN-IP>:3000)
|
||||
# Backend -> http://localhost:4000
|
||||
# Postgres -> localhost:5432
|
||||
#
|
||||
# LAN access: the frontend finds the backend from the address you open it on, so
|
||||
# other departments can just visit http://<server-LAN-IP>:3000 — no rebuild. The
|
||||
# in-app Settings → "About & updates" page shows the shareable network address.
|
||||
#
|
||||
# The frontend service builds the sibling ../frontend app. Run just the API
|
||||
# with: docker compose up db backend
|
||||
#
|
||||
@@ -36,6 +46,7 @@ services:
|
||||
retries: 10
|
||||
|
||||
backend:
|
||||
image: temetro/temetro-backend:${TEMETRO_VERSION:-latest}
|
||||
build:
|
||||
context: .
|
||||
restart: unless-stopped
|
||||
@@ -68,15 +79,16 @@ services:
|
||||
- "4000:4000"
|
||||
|
||||
frontend:
|
||||
image: temetro/temetro-frontend:${TEMETRO_VERSION:-latest}
|
||||
build:
|
||||
context: ../frontend
|
||||
args:
|
||||
NEXT_PUBLIC_API_URL: http://localhost:4000
|
||||
# Empty by default -> the app derives the backend URL from the host the
|
||||
# browser uses (localhost or a LAN IP). Set to pin a fixed/proxied URL.
|
||||
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-}
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- backend
|
||||
environment:
|
||||
NEXT_PUBLIC_API_URL: http://localhost:4000
|
||||
ports:
|
||||
- "3000:3000"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user