|
|
|
@@ -144,3 +144,92 @@ Note: repo is heavy (~1.4 GB .git, mp3s tracked directly) — clones/builds are
|
|
|
|
|
but the site rarely changes.
|
|
|
|
|
|
|
|
|
|
Redeploy: `scripts/api.sh application.deploy '{"applicationId":"arptPVNJZU0SIsk7z8G-E"}'`
|
|
|
|
|
|
|
|
|
|
### photos
|
|
|
|
|
|
|
|
|
|
> photos.kennethreitz.org (ExifTree) — Django photo portfolio
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Project ID | `ZTrEB4hHFibiOjqGUaEvF` |
|
|
|
|
|
| Environment | `production` (`p0XGhTIy3NvO3Flwr7bVU`) |
|
|
|
|
|
|
|
|
|
|
#### Compose: photos (web + worker)
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| URL | https://photos.kennethreitz.org |
|
|
|
|
|
| Compose ID | `WICLbVwy5JEbHz2SPb4tR` (appName `exiftree-1fms6x`) |
|
|
|
|
|
| Source | Custom git `git@github.com:kennethreitz/photos.kennethreitz.org.git`, branch `main`, `compose.prod.yml` |
|
|
|
|
|
| Auth | Dokploy SSH key `github-photos` (`a1BX7DYoCglQFXAwTEmy0`), read-only deploy key |
|
|
|
|
|
| Services | `web` (runbolt :8000, Traefik routes here) + `worker` (Celery, concurrency 2) |
|
|
|
|
|
| Domain | `photos.kennethreitz.org` (`x9rE8KS2nDGXlQjpUorfm`, serviceName `web`) — covered by wildcard `*.kennethreitz.org` A record |
|
|
|
|
|
| Env | DEBUG/SECRET_KEY/ALLOWED_HOSTS/DATABASE_URL/CELERY_*/AWS_* in Dokploy compose env. Celery brokers through Postgres via `sqla+postgresql+psycopg://` (explicit env override — repo only ships psycopg v3, default `sqla+postgresql://` wants psycopg2). `OPENAI_API_KEY` empty for now (AI describe disabled). |
|
|
|
|
|
| Storage | Tigris bucket `exiftree-media` (kept from Fly era; creds in compose env — rotate if needed) |
|
|
|
|
|
| Auto-deploy | GitHub webhook (id `636448741`) → `/api/deploy/compose/<refreshToken>` |
|
|
|
|
|
| Deployed | 2026-06-05 (migrated from Fly.io app `exiftree`; old `deploy.yml` + `daily-restart.yml` workflows removed) |
|
|
|
|
|
|
|
|
|
|
#### Database: exiftree-db
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Postgres ID | `BgAzfQ5lAXvd6jORAz2bs` (appName/host `exiftree-db-fsgd0w`) |
|
|
|
|
|
| Image | `postgres:17` (matches the Fly source version — pg16 cannot read pg17 dumps) |
|
|
|
|
|
| DB/user | `exiftree` / `exiftree` (password in Dokploy) |
|
|
|
|
|
| Data | Restored 2026-06-05 from Fly Postgres `exiftree-db` dump — 20,301 images, 168 MB. The Fly DB app still exists as a fallback snapshot. |
|
|
|
|
|
|
|
|
|
|
Redeploy: `scripts/api.sh compose.deploy '{"composeId":"WICLbVwy5JEbHz2SPb4tR"}'`
|
|
|
|
|
|
|
|
|
|
#### Compose: minio (photos media store)
|
|
|
|
|
|
|
|
|
|
> MinIO for photo media. Lives in the photos project. A *separate* MinIO in the
|
|
|
|
|
> infra project handles backups — see below.
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Compose ID | `UK8pWczw8d9GSmyLjZJiP` (appName `minio-q3xgqx`, sourceType raw, env `production` of photos) |
|
|
|
|
|
| S3 API | https://media.kennethreitz.org (container port 9000) |
|
|
|
|
|
| Console | https://media-minio.kennethreitz.org (container port 9001) |
|
|
|
|
|
| Data dir | `/mnt/objects/minio` — bind mount on the 250 GB `mercury-objects` Hetzner volume |
|
|
|
|
|
| Root user | `exiftree-admin` (password in Dokploy compose env) |
|
|
|
|
|
| Buckets | `exiftree-media` (anonymous download enabled) |
|
|
|
|
|
| Service account | access key in Dokploy (photos compose env) |
|
|
|
|
|
|
|
|
|
|
⚠️ Gotcha learned the hard way: Dokploy compose domains are applied as **container
|
|
|
|
|
labels at deploy time** — `domain.create`/`delete` alone changes nothing until the
|
|
|
|
|
compose is redeployed. Stale labels keep routing the old hostname.
|
|
|
|
|
|
|
|
|
|
### infra
|
|
|
|
|
|
|
|
|
|
> Infrastructure services (own project)
|
|
|
|
|
|
|
|
|
|
#### Compose: minio-backups
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Compose ID | `o5LlW9tAugh9K3nf5CTh5` (appName `minio-backups-o5fjyf`, raw) |
|
|
|
|
|
| S3 API | https://s3.kennethreitz.org (port 9000) |
|
|
|
|
|
| Console | https://minio.kennethreitz.org (port 9001) |
|
|
|
|
|
| Data dir | `/mnt/objects/minio-infra` (on the volume) |
|
|
|
|
|
| Root user | `infra-admin` (password in Dokploy compose env) |
|
|
|
|
|
| Buckets | `dokploy-backups` (private) |
|
|
|
|
|
| Service account | access key in the Dokploy destination config |
|
|
|
|
|
|
|
|
|
|
#### Compose: gitea
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Compose ID | `PV7bUFe4wV-2G1WD8H57e` (appName `gitea-qdogok`, raw) |
|
|
|
|
|
| URL | https://git.kennethreitz.org (container port 3000) |
|
|
|
|
|
| Git SSH | `git.kennethreitz.org:2222` (host port 2222 → container 22) |
|
|
|
|
|
| Data dir | `/var/lib/gitea` (root disk; sqlite DB) |
|
|
|
|
|
| Admin | `kennethreitz` (password noted at setup; registration disabled) |
|
|
|
|
|
| Homepage | Custom landing page (`/var/lib/gitea/gitea/templates/home.tmpl` on the host) with a "Featured projects" card grid — edit the file and `docker restart` the gitea container to change picks |
|
|
|
|
|
| Mirrors | Pull-mirrors (8h refresh) of all repos from github.com/**kennethreitz** (99), **not-kennethreitz** (38), and **kennethreitz-archive** (154) — all three owners public on Gitea — created via `/api/v1/repos/migrate` with a GitHub token |
|
|
|
|
|
|
|
|
|
|
### Backups
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Destination | `minio` (`gZBEIrDnfDmRcv_pQQO7q`) → bucket `dokploy-backups` via https://s3.kennethreitz.org |
|
|
|
|
|
| Schedule | exiftree-db (postgres): daily 06:00 UTC, keep 14 (`backupId Wa4DDnhr2alAK_f7o7C5I`) — verified working with a manual run |
|
|
|
|
|