This commit is contained in:
2025-09-20 10:40:05 -07:00
parent ecec0c659e
commit ea1ddea242
3 changed files with 15 additions and 47 deletions

View File

@@ -7,13 +7,16 @@ on:
- main
paths:
- 'app.py'
- 'Dockerfile'
- 'dockerfile'
- 'requirements.txt'
- 'docker-compose.yml'
jobs:
build-and-push:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [amd64, arm64]
permissions:
contents: read
packages: write
@@ -32,30 +35,15 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Create multi-arch Dockerfile
run: |
cat > Dockerfile <<EOF
FROM --platform=\$BUILDPLATFORM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin
COPY . .
CMD ["python", "app.py"]
EOF
- name: Build and push multi-arch Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
platforms: linux/amd64,linux/arm64
platforms: linux/${{ matrix.arch }}
build-args: |
TARGETARCH=${{ matrix.arch }}
tags: |
ghcr.io/${{ github.repository }}:latest
ghcr.io/${{ github.repository }}:${{ github.sha }}

View File

@@ -1,36 +1,15 @@
# Dockerfile
FROM python:3.11-slim
# Stage 1: Builder for all architectures
FROM --platform=$BUILDPLATFORM python:3.11-slim as builder
# Set working directory
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements first for better caching
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy application files
# Stage 2: Final image using architecture-specific Python
FROM --platform=$TARGETPLATFORM python:3.11-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY . .
# Create templates directory and copy template
RUN mkdir -p templates
# Expose port
EXPOSE 5000
# Create non-root user for security
RUN useradd --create-home --shell /bin/bash app \
&& chown -R app:app /app
USER app
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:5000/ || exit 1
# Run the application
CMD ["python", "app.py"]

View File

@@ -27,6 +27,7 @@ job "minihass" {
config {
image = "ghcr.io/sstent/MiniHASS:latest"
ports = ["http"]
platform = "linux/${attr.cpu.arch}"
}
env {