- Add .gitea/workflows/docker-build-push.yaml: build api/admin/upload on push to main - Build script: build for linux/amd64 by default (PLATFORM), doc PLATFORM=linux/arm64 - Deploy README: Option A Gitea Actions, Option B manual; proxy timeout troubleshooting Co-authored-by: Cursor <cursoragent@cursor.com>
Deploy event-uploader to Dockge
Production stack: images from Gitea registry only. Use from Dockge on the home server (10.0.10.189:5001).
Build and push images
Build and upload images to Gitea’s container registry (10.0.10.205:3000) from your dev machine so Dockge can pull them.
Option A: Gitea Actions (on push to main) — Enable Repository Actions, register a runner with Docker, add secrets REGISTRY_USER and REGISTRY_TOKEN (PAT with package write). The workflow .gitea/workflows/docker-build-push.yaml builds api, admin, upload for linux/amd64 on every push to main. MariaDB: run ./scripts/push-mariadb-to-registry.sh once from your dev machine.
Option B: Manual — From your dev machine:
- One-time: Allow HTTP registry and log in:
- Docker Desktop (Mac): Settings → Docker Engine → add
"insecure-registries": ["10.0.10.205:3000"], Apply. - Run:
docker login 10.0.10.205:3000(username:bert.hausmans, password: Gitea password or a personal access token with package read/write).
- Docker Desktop (Mac): Settings → Docker Engine → add
- Each release: From the project root:
./scripts/docker-build-push.sh 1.0.0(or any version; omit to uselatestor git describe). Images are built forlinux/amd64by default so they run on typical Dockge servers; if your server is ARM, runPLATFORM=linux/arm64 ./scripts/docker-build-push.sh ....- Or manually: set
VERSION=1.0.0,REGISTRY=...,OWNER=..., thendocker build --platform linux/amd64 -t ...and push for api, admin, upload.
After pushing, deploy on the server: set TAG=1.0.0 in the stack .env, then in Dockge use Pull and Redeploy.
Ports (3000 range to avoid conflicts)
| Service | Host port | Container | URL (example) |
|---|---|---|---|
| API | 3001 | 8000 | http://10.0.10.189:3001 |
| Admin | 3002 | 80 | http://10.0.10.189:3002 |
| Upload | 3003 | 80 | http://10.0.10.189:3003 |
| MariaDB | 3004 | 3306 | (internal; use 3004 only for direct DB access) |
One-time setup in Dockge
- Add stack: point Dockge at this repo’s
deploy/folder (or pastedocker-compose.yml). - Create
.envin the stack directory (or use Dockge’s env) with at least:TAG=latest(or e.g.1.0.0)DB_PASSWORD=...DB_DATABASE=event_uploaderAPP_KEY=...(Laravelphp artisan key:generate)APP_URL=http://10.0.10.189:3001(or your public URL)SESSION_DOMAIN=10.0.10.189(or your domain)SANCTUM_STATEFUL_DOMAINS=10.0.10.189:3002,10.0.10.189:3003- Google OAuth if used:
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URI
- Ensure Docker on the server has
10.0.10.205:3000ininsecure-registriesand rundocker login 10.0.10.205:3000. - One-time: If the server fails with "no matching manifest for linux/amd64" when pulling the database image, push the amd64 MariaDB image to Gitea from your dev machine:
./scripts/push-mariadb-to-registry.sh(afterdocker login 10.0.10.205:3000). The stack uses this image so the server only pulls from Gitea. - First deploy: Pull, then Start (or
docker compose -f deploy/docker-compose.yml pull && docker compose -f deploy/docker-compose.yml up -d).
Deploy new version
- In Dockge: open the stack → Pull (to fetch new images from Gitea) → Redeploy (or Stop + Start).
- Or on the server: set
TAG=1.0.0in.env, thendocker compose pull && docker compose up -d.
Troubleshooting: "manifest unknown" (e.g. for admin)
This means the registry has no image for the tag Dockge is using.
- Match the tag – In the stack
.env, setTAGto the exact tag you pushed (e.g. the git hash from the build output, orlatest). After running./scripts/docker-build-push.sh, the script prints the tag and now also pushes:latest, soTAG=latestworks. - Re-push all images – From project root run
./scripts/docker-build-push.shagain so api, admin, and upload are all pushed with the same tag. - Registry login on the server – Where Dockge runs, ensure
docker login 10.0.10.205:3000has been done and that Docker has10.0.10.205:3000ininsecure-registries(if using HTTP).
"no matching manifest for linux/amd64" (database)
The stack uses MariaDB 11 from your Gitea registry (10.0.10.205:3000/bert.hausmans/mariadb:11). If that image is missing or the server can’t pull from Docker Hub, run once from your dev machine (after docker login 10.0.10.205:3000): ./scripts/push-mariadb-to-registry.sh. It pulls the amd64 image from Docker Hub and pushes it to Gitea so the server only pulls from Gitea.
Proxy timeout (dial tcp 192.168.65.1:3128: i/o timeout)
Docker is sending registry requests through an HTTP proxy; the proxy is not responding for traffic to your Gitea registry. Bypass the proxy for the registry on the machine where the error occurs (Dockge server or your dev machine):
-
Environment: Set
NO_PROXY(orno_proxy) to include the registry host so it is not proxied, e.g.
NO_PROXY=localhost,127.0.0.1,10.0.10.205
or append:NO_PROXY=$NO_PROXY,10.0.10.205
Then restart the process (Dockge, Docker daemon, or your shell) that runsdocker pull/docker push. -
Docker daemon (Linux server): If the daemon uses a proxy, add the registry to
no_proxyin the same place (e.g./etc/systemd/system/docker.service.d/http-proxy.conf):
Environment="no_proxy=localhost,127.0.0.1,10.0.10.205"
Thensudo systemctl daemon-reloadandsudo systemctl restart docker. -
Docker Desktop (Mac): In Settings → Resources → Proxies, either disable the proxy or add
10.0.10.205to “Bypass for these hosts”.