jcloude/press/docker/Dockerfile_Bench_5_2_1
2025-12-23 23:17:43 +08:00

177 lines
5.5 KiB
Plaintext

# syntax = docker/dockerfile:experimental
FROM ubuntu:20.04
{% for d in pg.dependencies %}
ENV {{ d.dependency }} {{ d.version }}
{% else %}
ENV NVM_VERSION 0.36.0
ENV NODE_VERSION 14.19.0
ENV PYTHON_VERSION 3.7
ENV WKHTMLTOPDF_VERSION 0.12.5
ENV BENCH_VERSION 5.2.1
{% endfor %}
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive
ENV OPENBLAS_NUM_THREADS 1
ENV MKL_NUM_THREADS 1
# Install essential packages
RUN --mount=type=cache,target=/var/cache/apt apt-get update \
&& apt-get install --yes --no-install-suggests --no-install-recommends \
# Essentials
build-essential \
git \
mariadb-client \
libmariadb-dev \
pv \
ntp \
wget \
curl \
supervisor \
# Dependencies for SSH access
openssh-server \
nano \
vim \
less \
htop \
# Dependencies for adding Python PPA
software-properties-common \
gnupg \
# weasyprint dependencies
libpango-1.0-0 \
libharfbuzz0b \
libpangoft2-1.0-0 \
libpangocairo-1.0-0 \
# wkhtmltopdf dependencies
ca-certificates \
fontconfig \
libfreetype6 \
libjpeg-turbo8 \
libpng16-16 \
libx11-6 \
libxcb1 \
libxext6 \
libxrender1 \
xfonts-75dpi \
xfonts-base \
# pycups dependencies
gcc \
libcups2-dev \
# s3-attachment dependencies
libmagic1 \
&& rm -rf /var/lib/apt/lists/* \
`#stage-pre-essentials`
COPY --chown=root:root supervisord.conf /etc/supervisor/supervisord.conf
# Install Redis from PPA
RUN --mount=type=cache,target=/var/cache/apt add-apt-repository ppa:redislabs/redis \
&& apt-get update \
&& apt-get install --yes --no-install-suggests --no-install-recommends \
redis-server \
&& rm -rf /var/lib/apt/lists/* `#stage-pre-redis`
# Install Python from DeadSnakes PPA
RUN --mount=type=cache,target=/var/cache/apt add-apt-repository ppa:deadsnakes/ppa \
&& apt-get update \
&& apt-get install --yes --no-install-suggests --no-install-recommends \
python${PYTHON_VERSION} \
python${PYTHON_VERSION}-dev \
python${PYTHON_VERSION}-distutils \
&& rm -rf /var/lib/apt/lists/* \
`#stage-pre-python`
# Install wkhtmltopdf
RUN wget http://git.jingrow.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.focal_amd64.deb \
&& dpkg -i wkhtmltox_${WKHTMLTOPDF_VERSION}-1.focal_amd64.deb \
&& rm wkhtmltox_${WKHTMLTOPDF_VERSION}-1.focal_amd64.deb \
`#stage-pre-wkhtmltopdf`
RUN curl -fsSL https://code-server.dev/install.sh | sh `#stage-pre-code-server`
# Install Fonts
RUN git clone --progress --depth 1 http://git.jingrow.com/jingrow/fonts.git /tmp/fonts \
&& rm -rf /etc/fonts && mv /tmp/fonts/etc_fonts /etc/fonts \
&& rm -rf /usr/share/fonts && mv /tmp/fonts/usr_share_fonts /usr/share/fonts \
&& rm -rf /tmp/fonts \
&& fc-cache -fv \
`#stage-pre-fonts`
# Set max_allowed_packet to 512 MB for mysqldump
RUN echo "[mysqldump]\nmax_allowed_packet = 512M" > /etc/mysql/conf.d/mysqldump.cnf
RUN useradd -ms /bin/bash jingrow
USER jingrow
WORKDIR /home/jingrow
# Install Node using NVM
ENV NVM_DIR /home/jingrow/.nvm
RUN wget https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh \
&& bash install.sh \
&& . "/home/jingrow/.nvm/nvm.sh" \
&& nvm install ${NODE_VERSION} \
&& nvm use v${NODE_VERSION} \
&& nvm alias default v${NODE_VERSION} \
&& rm install.sh \
&& nvm cache clear \
`#stage-pre-node`
ENV PATH "$PATH:/home/jingrow/.nvm/versions/node/v${NODE_VERSION}/bin"
# Install Yarn
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 npm install -g yarn `#stage-pre-yarn`
# Install Bench
ENV PATH "$PATH:/home/jingrow/.local/bin"
RUN wget https://bootstrap.pypa.io/get-pip.py && python${PYTHON_VERSION} get-pip.py `#stage-pre-pip`
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 pip3 install --upgrade jingrow-bench==${BENCH_VERSION} `#stage-bench-bench`
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 pip3 install Jinja2~=3.0.3
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 pip3 install --upgrade virtualenv setuptools
RUN mkdir /home/jingrow/jingrow-bench
WORKDIR /home/jingrow/jingrow-bench
RUN mkdir -p apps logs sites config/pids redis
# Install Redisearch 2.0 from precompiled binaries
COPY --chown=jingrow:jingrow redis /home/jingrow/jingrow-bench/redis
# Create virtual environment for bench
RUN virtualenv -p python${PYTHON_VERSION} env `#stage-bench-env`
COPY --chown=jingrow:jingrow common_site_config.json /home/jingrow/jingrow-bench/sites/common_site_config.json
RUN git config --global advice.detachedHead false
ENV PYTHONUNBUFFERED 1
# Install Jingrow app
RUN echo '["build"]' > .bench.cmd
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 --mount=type=bind,source=apps/jingrow,target=/home/jingrow/context/apps/jingrow bench get-app /home/jingrow/context/apps/jingrow `#stage-apps-jingrow`
RUN rm .bench.cmd
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 /home/jingrow/jingrow-bench/env/bin/pip install pycups==2.0.1
# Install other apps
{% for app in pg.apps %}
{% if app.app != "jingrow" %}
RUN --mount=type=cache,target=/home/jingrow/.cache,uid=1000,gid=1000 --mount=type=bind,source=apps/{{ app.app }},target=/home/jingrow/context/apps/{{ app.app }} bench get-app /home/jingrow/context/apps/{{ app.app }} `#stage-apps-{{ app.app }}`
{% endif %}
{% endfor %}
COPY --chown=jingrow:jingrow config /home/jingrow/jingrow-bench/config
COPY --chown=jingrow:jingrow apps.txt /home/jingrow/jingrow-bench/sites/apps.txt
ENV JINGROW_HARD_LINK_ASSETS True
EXPOSE 8000 8088 9000 2200
CMD ["supervisord"]