Public Access
131 lines
3.9 KiB
Docker
131 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 \
|
|
libonig-dev \
|
|
libpng-dev \
|
|
libwebp-dev \
|
|
libzip-dev \
|
|
pkg-config; \
|
|
docker-php-ext-configure gd \
|
|
--with-avif \
|
|
--with-freetype \
|
|
--with-jpeg \
|
|
--with-webp; \
|
|
docker-php-ext-install -j"$(nproc)" \
|
|
exif \
|
|
gd \
|
|
mbstring \
|
|
mysqli \
|
|
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
|