Files
egeya-docker/Dockerfile
T
2026-09-29 22:08:18 +07:00

128 lines
3.9 KiB
Docker

ARG EGEYA_VERSION=4199
ARG EGEYA_URL=""
ARG EGEYA_SHA256=""
FROM debian:bookworm-slim AS egeya-source
ARG EGEYA_VERSION
ARG EGEYA_URL
ARG EGEYA_SHA256
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates curl unzip; \
rm -rf /var/lib/apt/lists/*; \
archive_url="${EGEYA_URL:-https://blogengine.ru/download/e2_distr_v${EGEYA_VERSION}.zip}"; \
work_dir="$(mktemp -d)"; \
curl -fL \
--retry 5 \
--retry-delay 2 \
--connect-timeout 20 \
--user-agent "egeya-docker/${EGEYA_VERSION}" \
"$archive_url" \
-o "$work_dir/egeya.zip"; \
if [ -n "$EGEYA_SHA256" ]; then \
echo "$EGEYA_SHA256 $work_dir/egeya.zip" | sha256sum -c -; \
fi; \
mkdir -p "$work_dir/unpacked" /opt/egeya-release; \
unzip -q "$work_dir/egeya.zip" -d "$work_dir/unpacked"; \
if [ -f "$work_dir/unpacked/index.php" ]; then \
source_dir="$work_dir/unpacked"; \
else \
source_dir="$(find "$work_dir/unpacked" -maxdepth 2 -type f -name index.php -printf '%h\n' | head -n 1)"; \
fi; \
test -n "$source_dir"; \
cp -a "$source_dir"/. /opt/egeya-release/; \
test -f /opt/egeya-release/index.php; \
rm -rf "$work_dir"
FROM php:8.2-fpm-bookworm AS php
ENV EGEYA_ROOT=/var/www/html \
EGEYA_DATA_DIR=/var/www/egeya-data \
EGEYA_DEFAULTS_DIR=/opt/egeya-defaults
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
libavif-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
libzip-dev; \
docker-php-ext-configure gd \
--with-avif \
--with-freetype \
--with-jpeg \
--with-webp; \
docker-php-ext-install -j"$(nproc)" \
exif \
gd \
mbstring \
opcache \
pdo_mysql \
zip; \
mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"; \
rm -rf /var/lib/apt/lists/*
COPY --from=egeya-source /opt/egeya-release/ /var/www/html/
RUN set -eux; \
mkdir -p "$EGEYA_DEFAULTS_DIR/user" "$EGEYA_DEFAULTS_DIR/pictures"; \
if [ -d "$EGEYA_ROOT/user" ]; then \
cp -a "$EGEYA_ROOT/user"/. "$EGEYA_DEFAULTS_DIR/user"/; \
fi; \
if [ -d "$EGEYA_ROOT/pictures" ]; then \
cp -a "$EGEYA_ROOT/pictures"/. "$EGEYA_DEFAULTS_DIR/pictures"/; \
fi; \
rm -rf "$EGEYA_ROOT/user" "$EGEYA_ROOT/pictures"; \
ln -s "$EGEYA_DATA_DIR/user" "$EGEYA_ROOT/user"; \
ln -s "$EGEYA_DATA_DIR/pictures" "$EGEYA_ROOT/pictures"; \
chown -R www-data:www-data "$EGEYA_ROOT" "$EGEYA_DEFAULTS_DIR"
COPY docker/php/egeya-entrypoint.sh /usr/local/bin/egeya-entrypoint
COPY docker/php/www-egeya.conf /usr/local/etc/php-fpm.d/zz-egeya.conf
RUN chmod 0755 /usr/local/bin/egeya-entrypoint
WORKDIR /var/www/html
EXPOSE 9000
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
CMD php -r '$s=@fsockopen("127.0.0.1",9000,$e,$m,2); if(!$s){exit(1);} fclose($s);'
ENTRYPOINT ["egeya-entrypoint"]
CMD ["php-fpm"]
FROM nginx:1.28-bookworm AS nginx
ENV EGEYA_ROOT=/var/www/html \
EGEYA_DATA_DIR=/var/www/egeya-data
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends curl; \
rm -rf /var/lib/apt/lists/*; \
if getent passwd www-data >/dev/null; then \
sed -ri 's/^user[[:space:]]+[^;]+;/user www-data;/' /etc/nginx/nginx.conf; \
fi
COPY --from=egeya-source /opt/egeya-release/ /var/www/html/
RUN set -eux; \
rm -rf "$EGEYA_ROOT/user" "$EGEYA_ROOT/pictures"; \
ln -s "$EGEYA_DATA_DIR/user" "$EGEYA_ROOT/user"; \
ln -s "$EGEYA_DATA_DIR/pictures" "$EGEYA_ROOT/pictures"; \
rm -f /etc/nginx/conf.d/default.conf
COPY docker/nginx/egeya.conf.template /etc/nginx/templates/egeya.conf.template
WORKDIR /var/www/html
EXPOSE 80
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
CMD curl -fsS http://127.0.0.1/ >/dev/null || exit 1