Skip to content

Commit dfe6579

Browse files
committed
Fix docker builds
1 parent 302b0d4 commit dfe6579

5 files changed

Lines changed: 76 additions & 55 deletions

File tree

docker-compose.yml

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,20 @@ services:
66
api:
77
build:
88
context: .
9-
dockerfile: packages/api/Dockerfile
9+
dockerfile: packages/api/dev.Dockerfile
1010
environment:
1111
HOST: "0.0.0.0"
1212
PORT: "8000"
1313
DEBUG: "true"
1414
SHELLY_CONFIG_FILE: "/app/config.json"
15-
PYTHONPATH: "/app/src:/app/src_core"
1615
volumes:
1716
- ./config.json:/app/config.json:ro
18-
- ./packages/api/src:/app/src:ro
19-
- ./packages/core/src:/app/src_core:ro
20-
command: >
21-
sh -lc '/app/.venv/bin/uvicorn api.main:app --host ${HOST:-0.0.0.0} --port ${PORT:-8000} --reload --reload-dir /app/src --reload-dir /app/src_core --log-level info'
17+
- ./packages/api/src:/app/packages/api/src:rw
18+
- ./packages/core/src:/app/packages/core/src:rw
2219
ports:
2320
- "8000:8000"
2421
healthcheck:
25-
test: ["CMD-SHELL", "curl -f http://localhost:8000/api/health || exit 1"]
22+
test: [ "CMD-SHELL", "curl -f http://localhost:8000/api/health || exit 1" ]
2623
interval: 10s
2724
timeout: 3s
2825
retries: 5
@@ -33,6 +30,7 @@ services:
3330
build:
3431
context: packages/web
3532
dockerfile: Dockerfile
33+
target: builder
3634
environment:
3735
- VITE_BASE_API_URL=http://localhost:8000
3836
volumes:
@@ -41,24 +39,24 @@ services:
4139
- ./packages/web/package.json:/app/package.json:ro
4240
- ./packages/web/vite.config.ts:/app/vite.config.ts:ro
4341
- ./packages/web/tsconfig.json:/app/tsconfig.json:ro
42+
command: npm run dev -- --host 0.0.0.0 --port 5173
4443
ports:
45-
- "5173:5173" # Vite dev server port
44+
- "5173:5173"
4645
depends_on:
4746
- api
4847
restart: unless-stopped
4948

5049
cli:
5150
build:
5251
context: .
53-
dockerfile: packages/cli/Dockerfile
52+
dockerfile: packages/cli/dev.Dockerfile
5453
environment:
5554
SHELLY_CONFIG_FILE: "/app/config.json"
56-
PYTHONPATH: "/app/src:/app/src_core"
5755
volumes:
5856
- ./config.json:/app/config.json:ro
59-
- ./packages/cli/src:/app/src:ro
60-
- ./packages/core/src:/app/src_core:ro
57+
- ./packages/cli/src:/app/packages/cli/src:rw
58+
- ./packages/core/src:/app/packages/core/src:rw
6159
profiles:
62-
- cli # Optional service, start with: docker-compose --profile cli up
63-
command: tail -f /dev/null
60+
- cli
61+
entrypoint: [ "tail", "-f", "/dev/null" ]
6462
restart: unless-stopped

packages/api/Dockerfile

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,35 @@
1-
# syntax=docker/dockerfile:1
2-
31
ARG PYTHON_VERSION=3.11-slim
42

5-
# Build stage with uv
6-
FROM python:${PYTHON_VERSION} AS builder
7-
8-
# Install uv
9-
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
3+
FROM ghcr.io/astral-sh/uv:python3.11-bookworm-slim AS builder
104

11-
# Set environment for uv
12-
ENV UV_CACHE_DIR=/tmp/uv-cache
5+
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
6+
ENV UV_PYTHON_DOWNLOADS=0
137

148
WORKDIR /app
159

16-
# Copy workspace files
1710
COPY pyproject.toml uv.lock ./
1811
COPY packages/core/ packages/core/
1912
COPY packages/api/ packages/api/
2013

21-
# Install dependencies with uv
22-
RUN uv sync --frozen --no-dev --package shelly-manager-api
14+
RUN --mount=type=cache,target=/root/.cache/uv \
15+
uv sync --frozen --no-dev --package shelly-manager-api
2316

24-
# Runtime stage
2517
FROM python:${PYTHON_VERSION} AS runtime
2618

27-
# Copy uv and installed packages
28-
COPY --from=builder /app/.venv /app/.venv
19+
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
20+
21+
RUN useradd -u 10001 -m app
22+
23+
COPY --from=builder --chown=app:app /app/.venv /app/.venv
24+
COPY --from=builder --chown=app:app /app/packages/core /app/packages/core
25+
COPY --from=builder --chown=app:app /app/packages/api /app/packages/api
2926

30-
# Set environment
3127
ENV PATH="/app/.venv/bin:$PATH"
3228
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
3329
ENV HOST=0.0.0.0 PORT=8000 DEBUG=false
3430

3531
WORKDIR /app
36-
37-
# Non-root user
38-
RUN useradd -u 10001 -m appuser
39-
USER appuser
40-
32+
USER app
4133
EXPOSE 8000
4234

43-
# Run with uvicorn
44-
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000", "--log-level", "info"]
35+
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000", "--log-level", "info"]

packages/api/dev.Dockerfile

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
FROM python:3.11-slim
2+
3+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
4+
ENV UV_CACHE_DIR=/tmp/uv-cache
5+
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
6+
7+
WORKDIR /app
8+
9+
COPY pyproject.toml uv.lock ./
10+
COPY packages/core/ packages/core/
11+
COPY packages/api/ packages/api/
12+
13+
RUN uv sync --frozen --package shelly-manager-api
14+
15+
ENV PATH="/app/.venv/bin:$PATH"
16+
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
17+
ENV HOST=0.0.0.0 PORT=8000 DEBUG=true
18+
19+
EXPOSE 8000
20+
21+
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload", "--log-level", "info"]

packages/cli/Dockerfile

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,31 @@
1-
# syntax=docker/dockerfile:1
2-
31
ARG PYTHON_VERSION=3.11-slim
42

5-
# Build stage with uv
6-
FROM python:${PYTHON_VERSION} AS builder
7-
8-
# Install uv
9-
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
3+
FROM ghcr.io/astral-sh/uv:python3.11-bookworm-slim AS builder
104

11-
ENV UV_CACHE_DIR=/tmp/uv-cache
5+
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
6+
ENV UV_PYTHON_DOWNLOADS=0
127

138
WORKDIR /app
149

15-
# Copy workspace files
1610
COPY pyproject.toml uv.lock ./
1711
COPY packages/core/ packages/core/
1812
COPY packages/cli/ packages/cli/
1913

20-
# Install dependencies with uv
21-
RUN uv sync --frozen --no-dev --package shelly-manager-cli
14+
RUN --mount=type=cache,target=/root/.cache/uv \
15+
uv sync --frozen --no-dev --package shelly-manager-cli
2216

23-
# Runtime stage
2417
FROM python:${PYTHON_VERSION} AS runtime
2518

26-
# Copy uv and installed packages
27-
COPY --from=builder /app/.venv /app/.venv
19+
RUN useradd -u 10001 -m app
20+
21+
COPY --from=builder --chown=app:app /app/.venv /app/.venv
22+
COPY --from=builder --chown=app:app /app/packages/core /app/packages/core
23+
COPY --from=builder --chown=app:app /app/packages/cli /app/packages/cli
2824

2925
ENV PATH="/app/.venv/bin:$PATH"
3026
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
3127

3228
WORKDIR /app
29+
USER app
3330

34-
RUN useradd -u 10001 -m appuser
35-
USER appuser
36-
37-
ENTRYPOINT ["shelly-manager"]
31+
ENTRYPOINT ["shelly-manager"]

packages/cli/dev.Dockerfile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM python:3.11-slim
2+
3+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
4+
ENV UV_CACHE_DIR=/tmp/uv-cache
5+
6+
WORKDIR /app
7+
8+
COPY pyproject.toml uv.lock ./
9+
COPY packages/core/ packages/core/
10+
COPY packages/cli/ packages/cli/
11+
12+
RUN uv sync --frozen --package shelly-manager-cli
13+
14+
ENV PATH="/app/.venv/bin:$PATH"
15+
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
16+
17+
ENTRYPOINT ["shelly-manager"]

0 commit comments

Comments
 (0)