--- name: build-and-push description: | Build Docker images for the API and frontend, and push them to Docker Hub. Use when: (1) user wants to build new Docker images locally, (2) push images to the registry before deploying, (3) tag images for a release. Covers both the Python/FastAPI backend and the React/Nginx frontend. author: Claude Code version: 1.0.0 date: 2026-02-06 --- # Build and Push Docker Images All commands run locally. Images are pushed to Docker Hub under the `viktorbarzin` namespace. ## Image Registries | Component | Docker Hub repo | Dockerfile location | |-----------|------------------------------------|------------------------------| | API | `viktorbarzin/realestatecrawler` | `Dockerfile` | | Frontend | `viktorbarzin/immoweb` | `frontend/Dockerfile` | ## Building Images ### Build API image ```bash docker build -t viktorbarzin/realestatecrawler:latest . ``` ### Build Frontend image ```bash docker build -t viktorbarzin/immoweb:latest frontend/ ``` ### Build both ```bash docker build -t viktorbarzin/realestatecrawler:latest . && \ docker build -t viktorbarzin/immoweb:latest frontend/ ``` ### Build with a specific tag (recommended for production) ```bash # Use git commit SHA GIT_SHA=$(git rev-parse --short HEAD) docker build -t viktorbarzin/realestatecrawler:${GIT_SHA} -t viktorbarzin/realestatecrawler:latest . docker build -t viktorbarzin/immoweb:${GIT_SHA} -t viktorbarzin/immoweb:latest frontend/ ``` ## Pushing Images ### Login to Docker Hub (if not already) ```bash docker login -u viktorbarzin ``` ### Push API image ```bash docker push viktorbarzin/realestatecrawler:latest ``` ### Push Frontend image ```bash docker push viktorbarzin/immoweb:latest ``` ### Push with specific tag ```bash GIT_SHA=$(git rev-parse --short HEAD) docker push viktorbarzin/realestatecrawler:${GIT_SHA} docker push viktorbarzin/realestatecrawler:latest docker push viktorbarzin/immoweb:${GIT_SHA} docker push viktorbarzin/immoweb:latest ``` ## Build and Push Everything (Full Release) ```bash GIT_SHA=$(git rev-parse --short HEAD) # Build docker build -t viktorbarzin/realestatecrawler:${GIT_SHA} -t viktorbarzin/realestatecrawler:latest . docker build -t viktorbarzin/immoweb:${GIT_SHA} -t viktorbarzin/immoweb:latest frontend/ # Push docker push viktorbarzin/realestatecrawler:${GIT_SHA} docker push viktorbarzin/realestatecrawler:latest docker push viktorbarzin/immoweb:${GIT_SHA} docker push viktorbarzin/immoweb:latest ``` ## CI/CD Note Woodpecker CI automatically builds and pushes images on push to `master` (see `.woodpecker/`). The manual process above is for when you need to build/push outside of CI, such as: - Hotfix deployments - Testing image builds locally before pushing - Deploying from a non-master branch ## Notes - The API Dockerfile installs system deps (OpenCV, Tesseract, MariaDB client) and Python deps via Poetry - The Frontend Dockerfile is a multi-stage build: Node builder -> Nginx runtime - Always tag with both `:latest` and a specific tag (git SHA or version) for traceability - Use `docker buildx` for cross-platform builds if deploying to ARM nodes