Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ KEYCAST_UID=10001
KEYCAST_GID=10001

# Image settings used by docker-compose.prod.yml
KEYCAST_IMAGE=ghcr.io/erskingardner/keycast
KEYCAST_IMAGE=ghcr.io/marmot-protocol/keycast
KEYCAST_IMAGE_TAG=master
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ RUN bun install --production --frozen-lockfile

# Final stage
FROM debian:bookworm-slim@sha256:67b30a61dc87758f0caf819646104f29ecbda97d920aaf5edc834128ac8493d3 AS runtime
LABEL org.opencontainers.image.source="https://github.com/erskingardner/keycast"
LABEL org.opencontainers.image.source="https://github.com/marmot-protocol/keycast"
WORKDIR /app

# Install only the essential runtime dependencies
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ access control matter more than cosmetic cleanup.
Docker deployment uses:

- `docker-compose.yml` for local source builds of API, web, and signer containers,
- `docker-compose.prod.yml` for pulling the published `ghcr.io/erskingardner/keycast` image,
- `docker-compose.prod.yml` for pulling the published `ghcr.io/marmot-protocol/keycast` image,
- `master.key` mounted into API and signer containers,
- an external Docker network named `keycast`,
- Caddy labels for routing `/api/*` to the API and the rest to the web app.
Expand Down
6 changes: 5 additions & 1 deletion UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ install path.
- Containers now run as a non-root user and use a read-only root filesystem.
- `master.key` is mounted from the host instead of being copied into the image.
- `ALLOWED_PUBKEYS` is enforced by the API, not just the browser.
- `docker-compose.prod.yml` can pull the published `ghcr.io/erskingardner/keycast` image instead of
- `docker-compose.prod.yml` can pull the published `ghcr.io/marmot-protocol/keycast` image instead of
building Rust and Bun on the server.
- The Nostr Rust stack moved to current crates.io releases.
- Migration `0002_normalize_allowed_kinds_permissions.sql` normalizes old `allowed_kinds` permission
Expand Down Expand Up @@ -75,6 +75,10 @@ docker compose -f docker-compose.prod.yml up -d
docker compose -f docker-compose.prod.yml ps
```

Production Compose pulls `ghcr.io/marmot-protocol/keycast` by default. If `pull` returns
`unauthorized`, change the GitHub Packages visibility to public or log the deployment host in to
GHCR before retrying.

The API and signer run SQLx migrations on startup. The new migration only normalizes old permission
JSON. It does not rotate keys, change stored-key ciphertext, or invalidate existing bunker connection
strings.
Expand Down
6 changes: 3 additions & 3 deletions docker-compose.prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ services:
keycast-api:
<<: *keycast-hardening
container_name: keycast-api
image: ${KEYCAST_IMAGE:-ghcr.io/erskingardner/keycast}:${KEYCAST_IMAGE_TAG:-master}
image: ${KEYCAST_IMAGE:-ghcr.io/marmot-protocol/keycast}:${KEYCAST_IMAGE_TAG:-master}
command: api
expose:
- "3000"
Expand Down Expand Up @@ -43,7 +43,7 @@ services:
keycast-web:
<<: *keycast-hardening
container_name: keycast-web
image: ${KEYCAST_IMAGE:-ghcr.io/erskingardner/keycast}:${KEYCAST_IMAGE_TAG:-master}
image: ${KEYCAST_IMAGE:-ghcr.io/marmot-protocol/keycast}:${KEYCAST_IMAGE_TAG:-master}
command: web
expose:
- "5173"
Expand Down Expand Up @@ -77,7 +77,7 @@ services:
keycast-signer:
<<: *keycast-hardening
container_name: keycast-signer
image: ${KEYCAST_IMAGE:-ghcr.io/erskingardner/keycast}:${KEYCAST_IMAGE_TAG:-master}
image: ${KEYCAST_IMAGE:-ghcr.io/marmot-protocol/keycast}:${KEYCAST_IMAGE_TAG:-master}
command: signer
volumes:
- ./database:/app/database:rw
Expand Down
Loading