From 4d343f98734d343baa0d5328d9bf80f1ae692c22 Mon Sep 17 00:00:00 2001 From: eduard256 Date: Wed, 12 Nov 2025 10:50:50 +0300 Subject: [PATCH] Add Docker support with multi-arch builds - Multi-stage Dockerfile (Alpine base, ~174MB) - All runtime dependencies: ffmpeg, ffprobe, ca-certificates, tzdata, wget - Camera database included in image (17MB) - Security: non-root user (strix:1000) - Healthcheck on /api/v1/health - docker-compose.yml for simple deployment - docker-compose.full.yml with go2rtc and Frigate integration - GitHub Actions workflow for automated multi-arch builds (amd64, arm64) - Auto-publish to Docker Hub (eduard256/strix) - DOCKER.md documentation --- .dockerignore | 52 +++++++++++ .github/workflows/docker.yml | 77 ++++++++++++++++ DOCKER.md | 164 +++++++++++++++++++++++++++++++++++ Dockerfile | 67 ++++++++++++++ docker-compose.full.yml | 93 ++++++++++++++++++++ docker-compose.yml | 56 ++++++++++++ 6 files changed, 509 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/docker.yml create mode 100644 DOCKER.md create mode 100644 Dockerfile create mode 100644 docker-compose.full.yml create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..699c63a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,52 @@ +# Git +.git +.gitignore +.github + +# IDE +.vscode +.idea +*.swp +*.swo +*~ + +# Build artifacts +bin/ +dist/ +*.exe +*.dll +*.so +*.dylib + +# Test files +*.test +*_test.go +coverage.* +*.out + +# Logs +*.log +strix.log + +# Config files (user-specific) +strix.yaml +test_*.yaml +config.yaml + +# Temporary files +tmp/ +temp/ +*.dump +*_output.txt + +# Documentation (included in image metadata instead) +*.md +!README.md + +# OS files +.DS_Store +Thumbs.db + +# Development +.env +.env.local diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..1c87e3e --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,77 @@ +name: Docker Build and Push + +on: + push: + branches: + - main + tags: + - 'v*' + pull_request: + branches: + - main + +env: + REGISTRY: docker.io + IMAGE_NAME: eduard256/strix + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + VERSION=${{ steps.meta.outputs.version }} + + - name: Docker Hub Description + if: github.event_name != 'pull_request' + uses: peter-evans/dockerhub-description@v4 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + repository: ${{ env.IMAGE_NAME }} + readme-filepath: ./README.md + short-description: "Smart IP Camera Stream Discovery System" diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..91cbf16 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,164 @@ +# 🐳 Docker Setup for Strix + +## Quick Start + +### Using Docker Compose (Recommended) + +```bash +# Start Strix +docker-compose up -d + +# View logs +docker-compose logs -f strix + +# Stop Strix +docker-compose down +``` + +Access: http://localhost:4567 + +### Using Docker Run + +```bash +docker run -d \ + --name strix \ + -p 4567:4567 \ + eduard256/strix:latest +``` + +## Configuration + +### Using Environment Variables + +```bash +docker run -d \ + --name strix \ + -p 8080:8080 \ + -e STRIX_API_LISTEN=:8080 \ + -e STRIX_LOG_LEVEL=debug \ + eduard256/strix:latest +``` + +### Using Config File + +```bash +# Create strix.yaml +cat > strix.yaml <