# 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. 1. **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). 2. **Each release:** From the project root: - `./scripts/docker-build-push.sh 1.0.0` (or any version; omit to use `latest` or git describe). - Or manually: set `VERSION=1.0.0`, `REGISTRY=10.0.10.205:3000`, `OWNER=bert.hausmans`, then `docker build -t $REGISTRY/$OWNER/event-uploader-api:$VERSION ./api` (and same for `admin`, `upload`), then `docker push` for each. 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 | | MySQL | 3004 | 3306 | (internal; use 3004 only for direct DB access) | ## One-time setup in Dockge 1. Add stack: point Dockge at this repo’s `deploy/` folder (or paste `docker-compose.yml`). 2. Create `.env` in the stack directory (or use Dockge’s env) with at least: - `TAG=latest` (or e.g. `1.0.0`) - `DB_PASSWORD=...` - `DB_DATABASE=event_uploader` - `APP_KEY=...` (Laravel `php 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` 3. Ensure Docker on the server has `10.0.10.205:3000` in `insecure-registries` and run `docker login 10.0.10.205:3000`. 4. 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.0` in `.env`, then `docker 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. 1. **Match the tag** – In the stack `.env`, set `TAG` to the exact tag you pushed (e.g. the git hash from the build output, or `latest`). After running `./scripts/docker-build-push.sh`, the script prints the tag and now also pushes `:latest`, so `TAG=latest` works. 2. **Re-push all images** – From project root run `./scripts/docker-build-push.sh` again so api, admin, and upload are all pushed with the same tag. 3. **Registry login on the server** – Where Dockge runs, ensure `docker login 10.0.10.205:3000` has been done and that Docker has `10.0.10.205:3000` in `insecure-registries` (if using HTTP). ### "no matching manifest for linux/amd64" (MySQL) The stack pins MySQL to `docker.io/library/mysql:8.0` with `platform: linux/amd64` so the server pulls the correct image from Docker Hub. If your Dockge server is ARM (e.g. Raspberry Pi), change the MySQL service in `docker-compose.yml` to `platform: linux/arm64`.