mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-11-14 11:44:54 +08:00
188 lines
6.4 KiB
Docker
188 lines
6.4 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
FROM alpine:3.18.5 AS builder
|
|
RUN apk add --no-cache php82 php82-json php-phar php-zip
|
|
RUN apk add --no-cache npm
|
|
RUN npm install -g gulp yarn
|
|
WORKDIR /source
|
|
COPY package.json yarn.lock ./
|
|
RUN yarn install
|
|
COPY . .
|
|
# Patch release.php with hotfix from: https://github.com/xgbstar1/snappymail-docker/blob/main/Dockerfile, so that release.php doesn't fail with error
|
|
RUN sed -i 's_^if.*rename.*snappymail.v.0.0.0.*$_if (!!system("mv snappymail/v/0.0.0 snappymail/v/{$package->version}")) {_' cli/release.php || true
|
|
RUN php release.php
|
|
RUN set -eux; \
|
|
VERSION=$( ls build/dist/releases/webmail ); \
|
|
ls -al build/dist/releases/webmail/$VERSION/snappymail-$VERSION.tar.gz; \
|
|
mkdir -p /snappymail; \
|
|
tar -zxvf build/dist/releases/webmail/$VERSION/snappymail-$VERSION.tar.gz -C /snappymail; \
|
|
find /snappymail -type d -exec chmod 550 {} \; ; \
|
|
find /snappymail -type f -exec chmod 440 {} \; ; \
|
|
find /snappymail/data -type d -exec chmod 750 {} \; ; \
|
|
# Remove unneeded files
|
|
rm -v /snappymail/README.md /snappymail/_include.php
|
|
|
|
# Inspired by the original Rainloop dockerfile from youtous on GitLab
|
|
FROM php:8.2-fpm-alpine AS final
|
|
|
|
LABEL org.label-schema.description="SnappyMail webmail client image using nginx, php-fpm on Alpine"
|
|
|
|
# Install dependencies such as nginx
|
|
RUN apk add --no-cache ca-certificates nginx supervisor bash
|
|
|
|
# Install PHP extensions
|
|
# apcu
|
|
RUN set -eux; \
|
|
apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
pecl install apcu; \
|
|
docker-php-ext-enable apcu; \
|
|
docker-php-source delete; \
|
|
apk del .build-dependencies;
|
|
|
|
# gd
|
|
RUN set -eux; \
|
|
apk add --no-cache freetype libjpeg-turbo libpng; \
|
|
apk add --no-cache --virtual .deps freetype-dev libjpeg-turbo-dev libpng-dev; \
|
|
docker-php-ext-configure gd --with-freetype --with-jpeg; \
|
|
docker-php-ext-install gd; \
|
|
apk del .deps
|
|
|
|
# gmagick
|
|
# RUN set -eux; \
|
|
# apk add --no-cache graphicsmagick libgomp; \
|
|
# apk add --no-cache --virtual .deps graphicsmagick-dev libtool; \
|
|
# apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
# pecl install gmagick-2.0.6RC1; \
|
|
# docker-php-ext-enable gmagick; \
|
|
# docker-php-source delete; \
|
|
# apk del .build-dependencies; \
|
|
# apk del .deps
|
|
|
|
# gnupg
|
|
RUN set -eux; \
|
|
apk add --no-cache gnupg gpgme; \
|
|
apk add --no-cache --virtual .deps gpgme-dev; \
|
|
apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
pecl install gnupg; \
|
|
docker-php-ext-enable gnupg; \
|
|
docker-php-source delete; \
|
|
apk del .build-dependencies; \
|
|
apk del .deps
|
|
|
|
# imagick
|
|
RUN set -eux; \
|
|
apk add --no-cache imagemagick libgomp; \
|
|
apk add --no-cache --virtual .deps imagemagick-dev; \
|
|
apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
echo | pecl install imagick; \
|
|
docker-php-ext-enable imagick; \
|
|
docker-php-source delete; \
|
|
apk del .build-dependencies; \
|
|
apk del .deps
|
|
|
|
# intl
|
|
RUN set -eux; \
|
|
apk add --no-cache icu-libs; \
|
|
apk add --no-cache --virtual .deps icu-dev; \
|
|
docker-php-ext-configure intl; \
|
|
docker-php-ext-install intl; \
|
|
apk del .deps
|
|
|
|
# ldap
|
|
RUN set -eux; \
|
|
apk add --no-cache libldap; \
|
|
apk add --no-cache --virtual .deps openldap-dev; \
|
|
docker-php-ext-configure ldap; \
|
|
docker-php-ext-install ldap; \
|
|
apk del .deps
|
|
|
|
# mysql
|
|
RUN docker-php-ext-install pdo_mysql
|
|
|
|
# opcache
|
|
RUN docker-php-ext-install opcache
|
|
|
|
# postgres
|
|
RUN set -eux; \
|
|
apk add --no-cache postgresql-libs; \
|
|
apk add --no-cache --virtual .deps postgresql-dev; \
|
|
docker-php-ext-install pdo_pgsql; \
|
|
apk del .deps
|
|
|
|
# redis
|
|
RUN set -eux; \
|
|
apk add --no-cache liblzf zstd-libs; \
|
|
apk add --no-cache --virtual .deps zstd-dev; \
|
|
apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
pecl install igbinary; \
|
|
docker-php-ext-enable igbinary; \
|
|
pecl install --configureoptions 'enable-redis-igbinary="yes" enable-redis-lzf="yes" enable-redis-zstd="yes"' redis; \
|
|
docker-php-ext-enable redis; \
|
|
docker-php-source delete; \
|
|
apk del .build-dependencies; \
|
|
apk del .deps
|
|
|
|
# tidy
|
|
RUN set -eux; \
|
|
apk add --no-cache tidyhtml; \
|
|
apk add --no-cache --virtual .deps tidyhtml-dev; \
|
|
docker-php-ext-install tidy; \
|
|
apk del .deps
|
|
|
|
# uuid
|
|
RUN set -eux; \
|
|
apk add --no-cache libuuid; \
|
|
apk add --no-cache --virtual .deps util-linux-dev; \
|
|
apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
pecl install uuid; \
|
|
docker-php-ext-enable uuid; \
|
|
docker-php-source delete; \
|
|
apk del .build-dependencies; \
|
|
apk del .deps
|
|
|
|
# xxtea - Manually install php8 compatible version from https://github.com/xxtea/xxtea-pecl master branch
|
|
RUN set -eux; \
|
|
apk add --no-cache --virtual .build-dependencies $PHPIZE_DEPS; \
|
|
wget -q https://github.com/xxtea/xxtea-pecl/tarball/3f5888a29045e12301254151737c5dab4523a1c1 -O xxtea.tar; \
|
|
echo '9cbfd9c27255767deb26ddedf69e738d401d88ac9762d82c8510f9768842ca18 xxtea.tar' | sha256sum -c -; \
|
|
tar -C /usr/src -xvf xxtea.tar; \
|
|
cd /usr/src/xxtea-xxtea-pecl-3f5888a; \
|
|
phpize; \
|
|
./configure --with-php-config=/usr/local/bin/php-config --enable-xxtea=yes; \
|
|
make install; \
|
|
docker-php-ext-enable xxtea; \
|
|
cd -; \
|
|
rm -fv xxtea.tar; \
|
|
rm -rfv /usr/src/xxtea*; \
|
|
apk del .build-dependencies;
|
|
|
|
# zip
|
|
RUN set -eux; \
|
|
apk add --no-cache libzip; \
|
|
apk add --no-cache --virtual .deps libzip-dev; \
|
|
docker-php-ext-install zip; \
|
|
apk del .deps
|
|
|
|
# Install snappymail
|
|
# The 'www-data' user/group in alpine is 82:82. The 'nginx' user/group in alpine is 101:101, and is part of www-data group
|
|
COPY --chown=www-data:www-data --from=builder /snappymail /snappymail
|
|
# Use a custom snappymail data folder
|
|
RUN mv -v /snappymail/data /var/lib/snappymail;
|
|
# Setup configs
|
|
COPY --chown=root:root .docker/release/files /
|
|
RUN set -eux; \
|
|
chown www-data:www-data /snappymail/include.php; \
|
|
chmod 440 /snappymail/include.php; \
|
|
chmod +x /entrypoint.sh; \
|
|
# Disable the built-in php-fpm configs, since we're using our own config
|
|
mv -v /usr/local/etc/php-fpm.d/docker.conf /usr/local/etc/php-fpm.d/docker.conf.disabled; \
|
|
mv -v /usr/local/etc/php-fpm.d/www.conf /usr/local/etc/php-fpm.d/www.conf.disabled; \
|
|
mv -v /usr/local/etc/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf.disabled;
|
|
|
|
USER root
|
|
WORKDIR /snappymail
|
|
VOLUME /var/lib/snappymail
|
|
EXPOSE 8888
|
|
EXPOSE 9000
|
|
ENTRYPOINT []
|
|
CMD ["/entrypoint.sh"]
|