82541536af
This should fix most scaling problems without needing to start more server instances. By default, waitress maintains at most 4 threads. This works fine if the database is small (sub 100k posts) but causes a large Task queue depth to occur if the database is larger. Letting users increase the amount of threads means that one server instance is able to handle more requests without locking up the rest of the site. This adds a new environment variable to .env, THREADS, which can be used to configure the amount of threads to start and is by default set to 4 (the default amount used by waitress).
102 lines
2.4 KiB
Docker
102 lines
2.4 KiB
Docker
ARG ALPINE_VERSION=3.13
|
|
|
|
|
|
FROM alpine:$ALPINE_VERSION as prereqs
|
|
WORKDIR /opt/app
|
|
|
|
RUN apk --no-cache add \
|
|
python3 \
|
|
python3-dev \
|
|
ffmpeg \
|
|
py3-pip \
|
|
# from requirements.txt:
|
|
py3-yaml \
|
|
py3-psycopg2 \
|
|
py3-sqlalchemy \
|
|
py3-certifi \
|
|
py3-numpy \
|
|
py3-pillow \
|
|
py3-pynacl \
|
|
py3-tz \
|
|
py3-pyrfc3339 \
|
|
build-base \
|
|
&& apk --no-cache add \
|
|
libheif \
|
|
libavif \
|
|
libheif-dev \
|
|
libavif-dev \
|
|
&& pip3 install --no-cache-dir --disable-pip-version-check \
|
|
alembic \
|
|
"coloredlogs==5.0" \
|
|
heif-image-plugin \
|
|
youtube_dl \
|
|
pillow-avif-plugin \
|
|
&& apk --no-cache del py3-pip
|
|
|
|
COPY ./ /opt/app/
|
|
RUN rm -rf /opt/app/szurubooru/tests
|
|
|
|
|
|
FROM --platform=$BUILDPLATFORM prereqs as testing
|
|
WORKDIR /opt/app
|
|
|
|
RUN apk --no-cache add \
|
|
py3-pip \
|
|
py3-pytest \
|
|
py3-pytest-cov \
|
|
postgresql \
|
|
&& pip3 install --no-cache-dir --disable-pip-version-check \
|
|
pytest-pgsql \
|
|
freezegun \
|
|
&& apk --no-cache del py3-pip \
|
|
&& addgroup app \
|
|
&& adduser -SDH -h /opt/app -g '' -G app app \
|
|
&& chown app:app /opt/app
|
|
|
|
COPY --chown=app:app ./szurubooru/tests /opt/app/szurubooru/tests/
|
|
|
|
ENV TEST_ENVIRONMENT="true"
|
|
USER app
|
|
ENTRYPOINT ["pytest", "--tb=short"]
|
|
CMD ["szurubooru/"]
|
|
|
|
|
|
FROM prereqs as release
|
|
WORKDIR /opt/app
|
|
|
|
ARG PUID=1000
|
|
ARG PGID=1000
|
|
|
|
RUN apk --no-cache add \
|
|
dumb-init \
|
|
py3-setuptools \
|
|
py3-waitress \
|
|
&& mkdir -p /opt/app /data \
|
|
&& addgroup -g ${PGID} app \
|
|
&& adduser -SDH -h /opt/app -g '' -G app -u ${PUID} app \
|
|
&& chown -R app:app /opt/app /data
|
|
|
|
USER app
|
|
CMD ["/opt/app/docker-start.sh"]
|
|
|
|
ARG PORT=6666
|
|
ENV PORT=${PORT}
|
|
EXPOSE ${PORT}
|
|
|
|
ARG THREADS=4
|
|
ENV THREADS=${THREADS}
|
|
|
|
VOLUME ["/data/"]
|
|
|
|
ARG DOCKER_REPO
|
|
ARG BUILD_DATE
|
|
ARG SOURCE_COMMIT
|
|
LABEL \
|
|
maintainer="" \
|
|
org.opencontainers.image.title="${DOCKER_REPO}" \
|
|
org.opencontainers.image.url="https://github.com/rr-/szurubooru" \
|
|
org.opencontainers.image.documentation="https://github.com/rr-/szurubooru/blob/${SOURCE_COMMIT}/doc/INSTALL.md" \
|
|
org.opencontainers.image.created="${BUILD_DATE}" \
|
|
org.opencontainers.image.source="https://github.com/rr-/szurubooru" \
|
|
org.opencontainers.image.revision="${SOURCE_COMMIT}" \
|
|
org.opencontainers.image.licenses="GPL-3.0"
|