social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky

update grokerfile to use alpine

zenfyr.dev 5a0d5106 6512ecbf

verified
+8
.dockerignore
···
···
+
.env
+
.env.*
+
.gitignore
+
.DS_Store
+
*.swp
+
*~
+
__pycache__/
+
.venv
+14 -13
Containerfile
···
-
FROM python:3.12-slim-bookworm
COPY --from=ghcr.io/astral-sh/uv:0.7.12 /uv /uvx /bin/
WORKDIR /app
-
RUN \
-
--mount=type=cache,id=apt-cache,target=/var/cache/apt,sharing=locked \
-
--mount=type=cache,id=apt-lib-cache,target=/var/lib/apt,sharing=locked \
-
apt-get update; \
-
apt-get dist-upgrade -yq; \
-
apt-get install -y --no-install-recommends \
-
ffmpeg \
-
libmagic1
# Enable bytecode compilation
ENV UV_COMPILE_BYTECODE=1
···
ENV UV_LINK_MODE=copy
# Install the project's dependencies using the lockfile and settings
RUN --mount=type=cache,target=/root/.cache/uv \
-
--mount=type=bind,source=uv.lock,target=uv.lock \
-
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync --locked --no-install-project --no-dev
# Define app data volume
VOLUME /app/data
# Then, add the rest of the project source code and install it
-
# Installing separately from its dependencies allows optimal layer caching
COPY . /app
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --locked --no-dev
···
ENV PATH="/app/.venv/bin:$PATH"
# Set entrypoint to run the app using uv
-
ENTRYPOINT ["uv", "run", "main.py"]
···
+
FROM python:3.12-alpine
COPY --from=ghcr.io/astral-sh/uv:0.7.12 /uv /uvx /bin/
+
# Install build tools & runtime dependencies
+
RUN apk add --no-cache \
+
ffmpeg \
+
file \
+
libmagic
+
+
RUN mkdir -p /app/data
WORKDIR /app
+
# switch to a non-root user
+
RUN adduser -D -u 1000 app && \
+
chown -R app:app /app
+
USER app
# Enable bytecode compilation
ENV UV_COMPILE_BYTECODE=1
···
ENV UV_LINK_MODE=copy
# Install the project's dependencies using the lockfile and settings
+
COPY ./uv.lock ./pyproject.toml /app/
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --locked --no-install-project --no-dev
# Define app data volume
VOLUME /app/data
# Then, add the rest of the project source code and install it
COPY . /app
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --locked --no-dev
···
ENV PATH="/app/.venv/bin:$PATH"
# Set entrypoint to run the app using uv
+
ENTRYPOINT ["uv", "run", "main.py"]
-36
Containerfile-alpine
···
-
FROM python:3.12-alpine
-
COPY --from=ghcr.io/astral-sh/uv:0.7.12 /uv /uvx /bin/
-
-
WORKDIR /app
-
-
# Install build tools & runtime dependencies
-
RUN apk add --no-cache \
-
ffmpeg \
-
file \
-
libmagic
-
-
# Enable bytecode compilation
-
ENV UV_COMPILE_BYTECODE=1
-
-
# Copy from the cache instead of linking since it's a mounted volume
-
ENV UV_LINK_MODE=copy
-
-
# Install the project's dependencies using the lockfile and settings
-
RUN --mount=type=cache,target=/root/.cache/uv \
-
--mount=type=bind,source=uv.lock,target=uv.lock \
-
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
-
uv sync --locked --no-install-project --no-dev
-
-
# Define app data volume
-
VOLUME /app/data
-
-
# Then, add the rest of the project source code and install it
-
COPY . /app
-
RUN --mount=type=cache,target=/root/.cache/uv \
-
uv sync --locked --no-dev
-
-
# Place executables in the environment at the front of the path
-
ENV PATH="/app/.venv/bin:$PATH"
-
-
# Set entrypoint to run the app using uv
-
ENTRYPOINT ["uv", "run", "main.py"]
···