20 changed files with 190 additions and 86 deletions
@ -0,0 +1,60 @@ |
|||||||
|
# Deploy Jumble with docker-compose.prod.yml (remote server) |
||||||
|
|
||||||
|
Workflow: **build and push locally** → **pull and run on the server**. |
||||||
|
|
||||||
|
## Local: build and push |
||||||
|
|
||||||
|
From the **repo root** on your machine: |
||||||
|
|
||||||
|
```bash |
||||||
|
docker login # once, if needed |
||||||
|
./scripts/build-and-push-prod.sh |
||||||
|
``` |
||||||
|
|
||||||
|
This builds both images and pushes two tags each (`latest` and the version from `package.json`, e.g. `17.0.0`): |
||||||
|
|
||||||
|
- **Main app:** `silberengel/imwald-jumble` |
||||||
|
- **NIP-66 monitor:** `silberengel/imwald-jumble-nip66-monitor` |
||||||
|
|
||||||
|
## Remote server: one-time setup |
||||||
|
|
||||||
|
1. **Docker** |
||||||
|
Install Docker and Docker Compose (v2). |
||||||
|
|
||||||
|
2. **Clone the repo** (so you have `docker-compose.prod.yml`): |
||||||
|
```bash |
||||||
|
git clone <your-repo-url> jumble |
||||||
|
cd jumble |
||||||
|
``` |
||||||
|
|
||||||
|
3. **Optional env file** (e.g. for NIP-66 monitor): |
||||||
|
```bash |
||||||
|
# .env next to docker-compose.prod.yml |
||||||
|
NIP66_MONITOR_NSEC=nsec1... |
||||||
|
NIP66_MONITOR_NPUB=npub1... |
||||||
|
``` |
||||||
|
|
||||||
|
## Remote server: pull and run |
||||||
|
|
||||||
|
After you’ve pushed from local: |
||||||
|
|
||||||
|
```bash |
||||||
|
cd jumble |
||||||
|
docker compose -f docker-compose.prod.yml pull |
||||||
|
docker compose -f docker-compose.prod.yml up -d |
||||||
|
``` |
||||||
|
|
||||||
|
The app is on **port 8089**. Both services use `:latest`; to pin a version, set the image in `docker-compose.prod.yml` to e.g. `silberengel/imwald-jumble:17.0.0` and `silberengel/imwald-jumble-nip66-monitor:17.0.0`. |
||||||
|
|
||||||
|
## Useful commands (server) |
||||||
|
|
||||||
|
```bash |
||||||
|
# Status |
||||||
|
docker compose -f docker-compose.prod.yml ps |
||||||
|
|
||||||
|
# Logs |
||||||
|
docker compose -f docker-compose.prod.yml logs -f |
||||||
|
|
||||||
|
# Stop |
||||||
|
docker compose -f docker-compose.prod.yml down |
||||||
|
``` |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
# Build main app and NIP-66 monitor images locally; push to silberengel/imwald-jumble and silberengel/imwald-jumble-nip66-monitor as :latest and :<version from package.json>. |
||||||
|
# Run from repo root. Requires: docker, docker login. On the server you then pull and run docker-compose.prod.yml. |
||||||
|
set -e |
||||||
|
|
||||||
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
||||||
|
cd "$REPO_ROOT" |
||||||
|
|
||||||
|
VERSION="$(node -p "require('./package.json').version")" |
||||||
|
IMAGE_APP="silberengel/imwald-jumble" |
||||||
|
IMAGE_MONITOR="silberengel/imwald-jumble-nip66-monitor" |
||||||
|
|
||||||
|
echo "Building main app (version: $VERSION)" |
||||||
|
docker build -t "$IMAGE_APP:latest" -t "$IMAGE_APP:$VERSION" . |
||||||
|
|
||||||
|
echo "Building NIP-66 monitor (version: $VERSION)" |
||||||
|
docker build -t "$IMAGE_MONITOR:latest" -t "$IMAGE_MONITOR:$VERSION" ./nip66-cron |
||||||
|
|
||||||
|
echo "Pushing $IMAGE_APP and $IMAGE_MONITOR" |
||||||
|
docker push "$IMAGE_APP:latest" |
||||||
|
docker push "$IMAGE_APP:$VERSION" |
||||||
|
docker push "$IMAGE_MONITOR:latest" |
||||||
|
docker push "$IMAGE_MONITOR:$VERSION" |
||||||
|
|
||||||
|
echo "Done. On the server: docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d" |
||||||
Loading…
Reference in new issue