95 lines
2.8 KiB
Docker
95 lines
2.8 KiB
Docker
|
|
# Multi-stage build for smaller final image
|
||
|
|
FROM python:3.11-alpine AS builder
|
||
|
|
|
||
|
|
# Use HTTP repositories to avoid SSL issues, then install dependencies
|
||
|
|
RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.22/main" > /etc/apk/repositories \
|
||
|
|
&& echo "http://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories \
|
||
|
|
&& apk update \
|
||
|
|
&& apk add --no-cache \
|
||
|
|
pkgconfig \
|
||
|
|
gcc \
|
||
|
|
python3-dev \
|
||
|
|
musl-dev \
|
||
|
|
postgresql-dev \
|
||
|
|
linux-headers \
|
||
|
|
bash \
|
||
|
|
git \
|
||
|
|
curl
|
||
|
|
|
||
|
|
# Set working directory
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# v1.3.x
|
||
|
|
ARG PIEFED_VERSION=main
|
||
|
|
RUN git clone https://codeberg.org/rimu/pyfedi.git /app \
|
||
|
|
&& cd /app \
|
||
|
|
&& git checkout ${PIEFED_VERSION} \
|
||
|
|
&& rm -rf .git
|
||
|
|
|
||
|
|
# Install Python dependencies to /app/venv
|
||
|
|
RUN python -m venv /app/venv \
|
||
|
|
&& source /app/venv/bin/activate \
|
||
|
|
&& pip install --no-cache-dir -r requirements.txt \
|
||
|
|
&& pip install --no-cache-dir uwsgi
|
||
|
|
|
||
|
|
# Runtime stage - much smaller
|
||
|
|
FROM python:3.11-alpine AS runtime
|
||
|
|
|
||
|
|
# Set environment variables
|
||
|
|
ENV TZ=UTC
|
||
|
|
ENV PYTHONUNBUFFERED=1
|
||
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||
|
|
ENV PATH="/app/venv/bin:$PATH"
|
||
|
|
|
||
|
|
# Install only runtime dependencies
|
||
|
|
RUN echo "http://dl-cdn.alpinelinux.org/alpine/v3.22/main" > /etc/apk/repositories \
|
||
|
|
&& echo "http://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories \
|
||
|
|
&& apk update \
|
||
|
|
&& apk add --no-cache \
|
||
|
|
ca-certificates \
|
||
|
|
curl \
|
||
|
|
su-exec \
|
||
|
|
dcron \
|
||
|
|
libpq \
|
||
|
|
jpeg \
|
||
|
|
freetype \
|
||
|
|
lcms2 \
|
||
|
|
openjpeg \
|
||
|
|
tiff \
|
||
|
|
nginx \
|
||
|
|
supervisor \
|
||
|
|
redis \
|
||
|
|
bash \
|
||
|
|
tesseract-ocr \
|
||
|
|
tesseract-ocr-data-eng
|
||
|
|
|
||
|
|
# Create piefed user
|
||
|
|
RUN addgroup -g 1000 piefed \
|
||
|
|
&& adduser -u 1000 -G piefed -s /bin/sh -D piefed
|
||
|
|
|
||
|
|
# Set working directory
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# Copy application and virtual environment from builder
|
||
|
|
COPY --from=builder /app /app
|
||
|
|
COPY --from=builder /app/venv /app/venv
|
||
|
|
|
||
|
|
# Compile translations (matching official Dockerfile)
|
||
|
|
RUN source /app/venv/bin/activate && \
|
||
|
|
(pybabel compile -d app/translations || true)
|
||
|
|
|
||
|
|
# Set proper permissions - ensure logs directory is writable for dual logging
|
||
|
|
RUN chown -R piefed:piefed /app \
|
||
|
|
&& mkdir -p /app/logs /app/app/static/tmp /app/app/static/media \
|
||
|
|
&& chown -R piefed:piefed /app/logs /app/app/static/tmp /app/app/static/media \
|
||
|
|
&& chmod -R 755 /app/logs /app/app/static/tmp /app/app/static/media \
|
||
|
|
&& chmod 777 /app/logs
|
||
|
|
|
||
|
|
# Copy shared entrypoint utilities
|
||
|
|
COPY entrypoint-common.sh /usr/local/bin/entrypoint-common.sh
|
||
|
|
COPY entrypoint-init.sh /usr/local/bin/entrypoint-init.sh
|
||
|
|
RUN chmod +x /usr/local/bin/entrypoint-common.sh /usr/local/bin/entrypoint-init.sh
|
||
|
|
|
||
|
|
# Create directories for logs and runtime
|
||
|
|
RUN mkdir -p /var/log/piefed /var/run/piefed \
|
||
|
|
&& chown -R piefed:piefed /var/log/piefed /var/run/piefed
|