From 6a7113193fbe24d50a165fb7e796bb04d77bac69 Mon Sep 17 00:00:00 2001 From: Pouzor Date: Mon, 9 Mar 2026 12:01:04 +0100 Subject: [PATCH] feat: add GitHub Actions Docker publish workflow and prebuilt install - Build and push backend/frontend images to ghcr.io on every push to main and on version tags - Add docker-compose.prebuilt.yml for pull-based install (no clone needed) - Update README Quick Start with inline install one-liner using prebuilt images --- .github/workflows/docker-publish.yml | 56 ++++++++++++++++++++++++++++ README.md | 17 +++++++-- docker-compose.prebuilt.yml | 32 ++++++++++++++++ 3 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/docker-publish.yml create mode 100644 docker-compose.prebuilt.yml diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..3efff39 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,56 @@ +name: Docker + +on: + push: + branches: [main] + tags: ['v*'] + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + strategy: + matrix: + include: + - image: ghcr.io/pouzor/homelable-backend + dockerfile: Dockerfile.backend + - image: ghcr.io/pouzor/homelable-frontend + dockerfile: Dockerfile.frontend + + steps: + - uses: actions/checkout@v4 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ matrix.image }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + file: ${{ matrix.dockerfile }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/README.md b/README.md index 8143e6e..4d2623a 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,12 @@ Homelable also offers a healthcheck system (WIP) through multiple methods (ping/ ## Quick Start — Docker +No clone needed. Pull the pre-built images directly: + ```bash -git clone https://github.com/Pouzor/homelable.git -cd homelable -cp .env.example .env +mkdir homelable && cd homelable +curl -fsSL https://raw.githubusercontent.com/Pouzor/homelable/main/.env.example -o .env +curl -fsSL https://raw.githubusercontent.com/Pouzor/homelable/main/docker-compose.prebuilt.yml -o docker-compose.yml docker compose up -d ``` @@ -24,6 +26,15 @@ Open **http://localhost:3000** — login with `admin` / `admin`. > > ⚠️ Keep the single quotes around the hash value in `.env` — bcrypt hashes contain `$` characters that Docker Compose would otherwise misinterpret. +### Build from source + +```bash +git clone https://github.com/Pouzor/homelable.git +cd homelable +cp .env.example .env +docker compose up -d +``` + --- ## Proxmox LXC Install diff --git a/docker-compose.prebuilt.yml b/docker-compose.prebuilt.yml new file mode 100644 index 0000000..6a9d777 --- /dev/null +++ b/docker-compose.prebuilt.yml @@ -0,0 +1,32 @@ +services: + backend: + image: ghcr.io/pouzor/homelable-backend:latest + restart: unless-stopped + env_file: + - .env + environment: + SQLITE_PATH: /app/data/homelab.db + CORS_ORIGINS: '["http://localhost:3000"]' + volumes: + - backend_data:/app/data + networks: + - homelable + cap_add: + - NET_RAW + + frontend: + image: ghcr.io/pouzor/homelable-frontend:latest + restart: unless-stopped + ports: + - "3000:80" + depends_on: + - backend + networks: + - homelable + +volumes: + backend_data: + +networks: + homelable: + driver: bridge