kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
116 wiersze
2.7 KiB
Docker
116 wiersze
2.7 KiB
Docker
FROM alpine:3.17 as pre-build
|
||
|
||
# We need this additional step to avoid having poetrys deps interacting with our
|
||
# dependencies. This is only required until alpine 3.16 is released, since this
|
||
# allows us to install poetry as package.
|
||
|
||
RUN apk add --no-cache python3 py3-cryptography py3-pip poetry
|
||
COPY pyproject.toml poetry.lock /
|
||
RUN poetry export --without-hashes > requirements.txt
|
||
RUN poetry export --with dev --without-hashes > dev-requirements.txt
|
||
|
||
|
||
FROM alpine:3.17 as builder
|
||
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
ENV PYTHONUNBUFFERED=1
|
||
ARG PIP_NO_CACHE_DIR=1
|
||
|
||
RUN set -eux; \
|
||
apk add --no-cache \
|
||
cargo \
|
||
curl \
|
||
gcc \
|
||
git \
|
||
jpeg-dev \
|
||
libffi-dev \
|
||
libldap \
|
||
libxml2-dev \
|
||
libxslt-dev \
|
||
make \
|
||
musl-dev \
|
||
openldap-dev \
|
||
openssl-dev \
|
||
postgresql-dev \
|
||
zlib-dev \
|
||
py3-cryptography=38.0.3-r0 \
|
||
py3-lxml=4.9.2-r0 \
|
||
py3-pillow=9.3.0-r0 \
|
||
py3-psycopg2=2.9.5-r0 \
|
||
py3-watchfiles=0.18.1-r0 \
|
||
python3-dev
|
||
|
||
# create virtual env for next stage
|
||
RUN python3 -m venv --system-site-packages /venv
|
||
# emulate activation by prefixing PATH
|
||
ENV PATH="/venv/bin:/root/.local/bin:$PATH" VIRTUAL_ENV=/venv
|
||
|
||
COPY --from=pre-build /requirements.txt /requirements.txt
|
||
COPY --from=pre-build /dev-requirements.txt /dev-requirements.txt
|
||
|
||
RUN set -eux; \
|
||
pip3 install --upgrade pip; \
|
||
pip3 install setuptools wheel; \
|
||
# Currently we are unable to relieably build rust-based packages on armv7. This
|
||
# is why we need to use the packages shipped by Alpine Linux.
|
||
# Since poetry does not allow in-place dependency pinning, we need
|
||
# to install the deps using pip.
|
||
grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /requirements.txt \
|
||
| pip3 install -r /dev/stdin \
|
||
cryptography==38.0.3 \
|
||
lxml==4.9.2 \
|
||
pillow==9.3.0 \
|
||
psycopg2==2.9.5 \
|
||
watchfiles==0.18.1
|
||
|
||
ARG install_dev_deps=0
|
||
RUN set -eux; \
|
||
if [ "$install_dev_deps" = "1" ] ; then \
|
||
grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /dev-requirements.txt \
|
||
| pip3 install -r /dev/stdin \
|
||
cryptography==38.0.3 \
|
||
lxml==4.9.2 \
|
||
pillow==9.3.0 \
|
||
psycopg2==2.9.5 \
|
||
watchfiles==0.18.1; \
|
||
fi
|
||
|
||
FROM alpine:3.17 as image
|
||
|
||
ENV PYTHONDONTWRITEBYTECODE=1
|
||
ENV PYTHONUNBUFFERED=1
|
||
ARG PIP_NO_CACHE_DIR=1
|
||
|
||
RUN set -eux; \
|
||
apk add --no-cache \
|
||
bash \
|
||
ffmpeg \
|
||
gettext \
|
||
jpeg-dev \
|
||
libldap \
|
||
libmagic \
|
||
libpq \
|
||
libxml2 \
|
||
libxslt \
|
||
py3-cryptography=38.0.3-r0 \
|
||
py3-lxml=4.9.2-r0 \
|
||
py3-pillow=9.3.0-r0 \
|
||
py3-psycopg2=2.9.5-r0 \
|
||
py3-watchfiles=0.18.1-r0 \
|
||
python3
|
||
|
||
COPY --from=builder /venv /venv
|
||
# emulate activation by prefixing PATH
|
||
ENV PATH="/venv/bin:$PATH"
|
||
|
||
COPY . /app
|
||
WORKDIR /app
|
||
|
||
RUN set -eux; \
|
||
pip3 install --no-deps --editable .
|
||
|
||
ENV CACHE_URL="redis://redis:6379/0"
|
||
ENV CELERY_BROKER_URL="redis://redis:6379/0"
|
||
|
||
CMD ["./docker/server.sh"]
|