|
1 | | -FROM python:3.10-slim-bookworm AS builder |
| 1 | +FROM python:3.10-alpine3.22 AS builder |
2 | 2 |
|
3 | | -SHELL ["/bin/bash", "-o", "pipefail", "-c"] |
| 3 | +COPY --from=ghcr.io/astral-sh/uv:0.9 /uv /uvx /bin/ |
4 | 4 |
|
5 | | -# Install build dependencies |
6 | | -RUN apt update && apt upgrade -y && apt install -y --no-install-recommends \ |
| 5 | +RUN apk add --update --no-cache --virtual build-dependencies \ |
7 | 6 | curl \ |
| 7 | + bash \ |
8 | 8 | git \ |
9 | | - build-essential \ |
10 | | - libldap2-dev \ |
11 | | - libsasl2-dev && \ |
12 | | - rm -rf /var/lib/apt/lists/* |
13 | | - |
14 | | -# Install nodejs 18 with npm |
15 | | -RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ |
16 | | - apt update && \ |
17 | | - apt install -y --no-install-recommends nodejs && \ |
18 | | - rm -rf /var/lib/apt/lists/* |
19 | | - |
20 | | -# Download the latest uv installer |
21 | | -ADD https://astral.sh/uv/install.sh /uv-installer.sh |
22 | | - |
23 | | -# Run the installer then remove it |
24 | | -RUN sh /uv-installer.sh && rm /uv-installer.sh |
| 9 | + tar \ |
| 10 | + musl-dev \ |
| 11 | + gcc \ |
| 12 | + openssl-dev \ |
| 13 | + libffi-dev \ |
| 14 | + cyrus-sasl-dev \ |
| 15 | + openldap-dev \ |
| 16 | + npm |
25 | 17 |
|
26 | 18 | # Ensure the installed uv binary is on the `PATH` |
27 | 19 | ENV PATH="/root/.local/bin/:$PATH" |
28 | 20 |
|
29 | | -# Copy dependency files & set workdir |
30 | 21 | WORKDIR /opt/lemur |
31 | 22 | COPY . . |
32 | 23 |
|
33 | | -# Install Python dependencies with uv |
34 | | -RUN uv sync --frozen |
| 24 | +RUN uv sync --frozen --compile-bytecode |
| 25 | + |
| 26 | +RUN curl -sSL https://github.com/caddyserver/caddy/releases/download/v2.10.2/caddy_2.10.2_linux_amd64.tar.gz | tar xz -C /usr/bin |
35 | 27 |
|
36 | 28 | RUN npm install \ |
37 | 29 | && npm run build_static \ |
38 | 30 | && node_modules/.bin/gulp package --urlContextPath="" \ |
39 | | - && rm -rf node_modules bower_components .tmp |
| 31 | + && rm -rf node_modules bower_components .tmp \ |
| 32 | + && apk del build-dependencies |
40 | 33 |
|
41 | 34 |
|
42 | | -FROM python:3.10-slim-bookworm AS runtime |
| 35 | +FROM python:3.10-alpine3.22 AS runtime |
43 | 36 |
|
44 | | -ENV PATH="/opt/lemur/.venv/bin:${PATH}" \ |
45 | | - PYTHONUNBUFFERED=1 \ |
46 | | - PYTHONDONTWRITEBYTECODE=1 |
| 37 | +ENV uid=1337 |
| 38 | +ENV gid=1337 |
| 39 | +ENV user=lemur |
| 40 | +ENV group=lemur |
47 | 41 |
|
48 | | -RUN apt update && apt upgrade -y && apt install -y --no-install-recommends \ |
49 | | - debian-keyring debian-archive-keyring apt-transport-https curl libldap-2.5-0 make gnupg && \ |
50 | | - rm -rf /var/lib/apt/lists/* |
| 42 | +ENV PATH="/opt/lemur/.venv/bin:${PATH}" \ |
| 43 | + PYTHONUNBUFFERED=1 |
51 | 44 |
|
52 | | -RUN curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/gpg.key | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg && \ |
53 | | - curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt | tee /etc/apt/sources.list.d/caddy-stable.list && \ |
54 | | - chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg && \ |
55 | | - chmod o+r /etc/apt/sources.list.d/caddy-stable.list && \ |
56 | | - apt update && apt install caddy && \ |
57 | | - rm -rf /var/lib/apt/lists/* |
| 45 | +RUN apk add --update --no-cache curl libldap bash openssl |
58 | 46 |
|
59 | | -# Create lemur user |
60 | | -RUN useradd --create-home --shell /bin/bash lemur |
| 47 | +RUN addgroup -S ${group} -g ${gid} && \ |
| 48 | + adduser -D -S ${user} -G ${group} -u ${uid} && \ |
| 49 | + apk add --no-cache --update curl |
61 | 50 |
|
62 | | -# Copy built project |
63 | | -COPY --from=builder --chown=lemur:lemur /opt/lemur /opt/lemur |
| 51 | +COPY --from=builder --chown=${uid}:${gid} /opt/lemur /opt/lemur |
| 52 | +COPY --from=builder --chown=${uid}:${gid} /usr/bin/caddy /usr/bin/caddy |
64 | 53 |
|
65 | | -# Ensure entrypoint is executable |
66 | 54 | RUN chmod +x /opt/lemur/docker/entrypoint.sh |
67 | 55 |
|
68 | | -# Switch to the user |
69 | 56 | USER lemur |
70 | 57 |
|
71 | | -# Expose port |
72 | 58 | EXPOSE 80 |
73 | 59 |
|
74 | | -# Default command |
75 | 60 | ENTRYPOINT ["/opt/lemur/docker/entrypoint.sh"] |
0 commit comments