mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-25 15:55:22 +00:00
a bit of refactoring
This commit is contained in:
parent
7b3e11012f
commit
7dcca09c65
4 changed files with 162 additions and 112 deletions
|
@ -1,5 +1,4 @@
|
|||
data
|
||||
contrib/docker/Dockerfile
|
||||
docker-compose*.yml
|
||||
.dockerignore
|
||||
.git
|
||||
|
|
|
@ -8,17 +8,25 @@
|
|||
ARG COMPOSER_VERSION="2.6"
|
||||
ARG NGINX_VERSION=1.25.3
|
||||
ARG FOREGO_VERSION=0.17.2
|
||||
ARG PECL_EXTENSIONS_EXTRA=""
|
||||
ARG PECL_EXTENSIONS="imagick redis"
|
||||
ARG PHP_BASE_TYPE="apache"
|
||||
ARG PHP_DATABASE_EXTENSIONS="pdo_pgsql pdo_mysql pdo_sqlite"
|
||||
ARG PHP_DEBIAN_RELEASE="bullseye"
|
||||
ARG PHP_EXTENSIONS_EXTRA=""
|
||||
ARG PHP_EXTENSIONS="intl bcmath zip pcntl exif curl gd"
|
||||
|
||||
# PHP base configuration
|
||||
ARG PHP_VERSION="8.1"
|
||||
ARG APT_PACKAGES_EXTRA=""
|
||||
ARG RUNTIME_UID=33
|
||||
ARG RUNTIME_GID=33
|
||||
ARG PHP_BASE_TYPE="apache"
|
||||
ARG PHP_DEBIAN_RELEASE="bullseye"
|
||||
ARG RUNTIME_UID=33 # often called 'www-data'
|
||||
ARG RUNTIME_GID=33 # often called 'www-data'
|
||||
|
||||
# APT extra packages
|
||||
ARG APT_PACKAGES_EXTRA=
|
||||
|
||||
# Extensions installed via [pecl install]
|
||||
ARG PHP_PECL_EXTENSIONS=""
|
||||
ARG PHP_PECL_EXTENSIONS_EXTRA=
|
||||
|
||||
# Extensions installed via [docker-php-ext-install]
|
||||
ARG PHP_EXTENSIONS="intl bcmath zip pcntl exif curl gd"
|
||||
ARG PHP_EXTENSIONS_EXTRA=
|
||||
ARG PHP_EXTENSIONS_DATABASE="pdo_pgsql pdo_mysql pdo_sqlite"
|
||||
|
||||
# GPG key for nginx apt repository
|
||||
ARG NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
|
||||
|
@ -75,87 +83,13 @@ RUN set -ex \
|
|||
|
||||
WORKDIR /var/www/
|
||||
|
||||
# Install package dependencies
|
||||
ENV APT_PACKAGES_EXTRA=${APT_PACKAGES_EXTRA}
|
||||
|
||||
# Install and configure base layer
|
||||
COPY contrib/docker/install/base.sh /install/base.sh
|
||||
RUN --mount=type=cache,id=pixelfed-apt-${PHP_VERSION}-${PHP_DEBIAN_RELEASE}-${TARGETPLATFORM},sharing=locked,target=/var/lib/apt \
|
||||
--mount=type=cache,id=pixelfed-apt-cache-${PHP_VERSION}-${PHP_DEBIAN_RELEASE}-${TARGETPLATFORM},sharing=locked,target=/var/cache/apt \
|
||||
<<-SCRIPT
|
||||
#!/bin/bash
|
||||
set -ex -o errexit -o nounset -o pipefail
|
||||
|
||||
# ensure we keep apt cache around in a Docker environment
|
||||
rm -f /etc/apt/apt.conf.d/docker-clean
|
||||
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache
|
||||
|
||||
# Standard packages
|
||||
standardPackages=(
|
||||
apt-utils
|
||||
ca-certificates
|
||||
gettext-base
|
||||
git
|
||||
gnupg1
|
||||
gosu
|
||||
libcurl4-openssl-dev
|
||||
libzip-dev
|
||||
locales
|
||||
locales-all
|
||||
nano
|
||||
procps
|
||||
unzip
|
||||
zip
|
||||
)
|
||||
|
||||
# Image Optimization
|
||||
imageOptimization=(
|
||||
gifsicle
|
||||
jpegoptim
|
||||
optipng
|
||||
pngquant
|
||||
)
|
||||
|
||||
# Image Processing
|
||||
imageProcessing=(
|
||||
libjpeg62-turbo-dev
|
||||
libmagickwand-dev
|
||||
libpng-dev
|
||||
)
|
||||
|
||||
# Required for GD
|
||||
gdDependencies=(
|
||||
libwebp-dev
|
||||
libwebp6
|
||||
libxpm-dev
|
||||
libxpm4
|
||||
)
|
||||
|
||||
# Video Processing
|
||||
videoProcessing=(
|
||||
ffmpeg
|
||||
)
|
||||
|
||||
# Database
|
||||
databaseDependencies=(
|
||||
libpq-dev
|
||||
libsqlite3-dev
|
||||
)
|
||||
|
||||
apt-get update
|
||||
|
||||
apt-get upgrade -y
|
||||
|
||||
apt-get install -y --no-install-recommends \
|
||||
${standardPackages[*]} \
|
||||
${imageOptimization[*]} \
|
||||
${imageProcessing[*]} \
|
||||
${gdDependencies[*]} \
|
||||
${videoProcessing[*]} \
|
||||
${databaseDependencies[*]} \
|
||||
${APT_PACKAGES_EXTRA}
|
||||
SCRIPT
|
||||
|
||||
# update locales
|
||||
RUN set -ex \
|
||||
&& locale-gen \
|
||||
&& update-locale
|
||||
/install/base.sh
|
||||
|
||||
#######################################################
|
||||
# PHP: extensions
|
||||
|
@ -163,37 +97,35 @@ RUN set -ex \
|
|||
|
||||
FROM base AS php-extensions
|
||||
|
||||
ARG PECL_EXTENSIONS
|
||||
ARG PECL_EXTENSIONS_EXTRA
|
||||
ARG PHP_DATABASE_EXTENSIONS
|
||||
ARG PHP_EXTENSIONS_DATABASE
|
||||
ARG PHP_DEBIAN_RELEASE
|
||||
ARG PHP_EXTENSIONS
|
||||
ARG PHP_EXTENSIONS_EXTRA
|
||||
ARG PHP_PECL_EXTENSIONS
|
||||
ARG PHP_PECL_EXTENSIONS_EXTRA
|
||||
ARG PHP_VERSION
|
||||
ARG TARGETPLATFORM
|
||||
|
||||
ENV PHP_EXTENSIONS_DATABASE=${PHP_EXTENSIONS_DATABASE}
|
||||
ENV PHP_DEBIAN_RELEASE=${PHP_DEBIAN_RELEASE}
|
||||
ENV PHP_EXTENSIONS_EXTRA=${PHP_EXTENSIONS_EXTRA}
|
||||
ENV PHP_EXTENSIONS=${PHP_EXTENSIONS}
|
||||
ENV PHP_PECL_EXTENSIONS_EXTRA=${PHP_PECL_EXTENSIONS_EXTRA}
|
||||
ENV PHP_PECL_EXTENSIONS=${PHP_PECL_EXTENSIONS}
|
||||
ENV PHP_VERSION=${PHP_VERSION}
|
||||
ENV TARGETPLATFORM=${TARGETPLATFORM}
|
||||
|
||||
COPY contrib/docker/install/php-extensions.sh /install/php-extensions.sh
|
||||
RUN --mount=type=cache,id=pixelfed-php-${PHP_VERSION}-${PHP_DEBIAN_RELEASE}-${TARGETPLATFORM},sharing=locked,target=/usr/src/php/ \
|
||||
set -ex \
|
||||
# Grab the PHP source code so we can compile against it
|
||||
&& docker-php-source extract \
|
||||
# Install pecl extensions
|
||||
&& pecl install ${PECL_EXTENSIONS} ${PECL_EXTENSIONS_EXTRA} \
|
||||
# PHP GD extensions
|
||||
&& docker-php-ext-configure gd \
|
||||
--with-freetype \
|
||||
--with-jpeg \
|
||||
--with-webp \
|
||||
--with-xpm \
|
||||
# PHP extensions (dependencies)
|
||||
&& docker-php-ext-install -j$(nproc) ${PHP_EXTENSIONS} ${PHP_EXTENSIONS_EXTRA} ${PHP_DATABASE_EXTENSIONS} \
|
||||
# Enable all extensions
|
||||
&& docker-php-ext-enable ${PECL_EXTENSIONS} ${PECL_EXTENSIONS_EXTRA} ${PHP_EXTENSIONS} ${PHP_EXTENSIONS_EXTRA} ${PHP_DATABASE_EXTENSIONS}
|
||||
--mount=type=cache,id=pixelfed-apt-${PHP_VERSION}-${PHP_DEBIAN_RELEASE}-${TARGETPLATFORM},sharing=locked,target=/var/lib/apt \
|
||||
--mount=type=cache,id=pixelfed-apt-cache-${PHP_VERSION}-${PHP_DEBIAN_RELEASE}-${TARGETPLATFORM},sharing=locked,target=/var/cache/apt \
|
||||
/install/php-extensions.sh
|
||||
|
||||
#######################################################
|
||||
# PHP: composer and source code
|
||||
#######################################################
|
||||
|
||||
FROM base AS composer-and-src
|
||||
FROM php-extensions AS composer-and-src
|
||||
|
||||
ARG PHP_VERSION
|
||||
ARG PHP_DEBIAN_RELEASE
|
||||
|
@ -241,6 +173,12 @@ USER root:root
|
|||
|
||||
FROM base AS shared-runtime
|
||||
|
||||
ARG RUNTIME_UID
|
||||
ARG RUNTIME_GID
|
||||
|
||||
ENV RUNTIME_UID=${RUNTIME_UID}
|
||||
ENV RUNTIME_GID=${RUNTIME_GID}
|
||||
|
||||
COPY --link --from=php-extensions /usr/local/lib/php/extensions /usr/local/lib/php/extensions
|
||||
COPY --link --from=php-extensions /usr/local/etc/php /usr/local/etc/php
|
||||
COPY --link --from=composer-and-src --chown=${RUNTIME_UID}:${RUNTIME_GID} /var/www /var/www
|
||||
|
@ -252,9 +190,9 @@ RUN set -ex \
|
|||
&& cp --recursive --link --preserve=all storage storage.skel \
|
||||
&& rm -rf html && ln -s public html
|
||||
|
||||
COPY --link contrib/docker/docker-entrypoint.sh /docker-entrypoint.sh
|
||||
COPY --link contrib/docker/shared/lib.sh /lib.sh
|
||||
COPY --link contrib/docker/shared/docker-entrypoint.d /docker-entrypoint.d/
|
||||
COPY contrib/docker/docker-entrypoint.sh /docker-entrypoint.sh
|
||||
COPY contrib/docker/shared/lib.sh /lib.sh
|
||||
COPY contrib/docker/shared/docker-entrypoint.d /docker-entrypoint.d/
|
||||
|
||||
ENTRYPOINT ["/docker-entrypoint.sh"]
|
||||
|
||||
|
|
81
contrib/docker/install/base.sh
Executable file
81
contrib/docker/install/base.sh
Executable file
|
@ -0,0 +1,81 @@
|
|||
#!/bin/bash
|
||||
set -ex -o errexit -o nounset -o pipefail
|
||||
|
||||
# Ensure we keep apt cache around in a Docker environment
|
||||
rm -f /etc/apt/apt.conf.d/docker-clean
|
||||
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache
|
||||
|
||||
# Don't install recommended packages by default
|
||||
echo 'APT::Install-Recommends "false";' >>/etc/apt/apt.conf
|
||||
|
||||
# Don't install suggested packages by default
|
||||
echo 'APT::Install-Suggests "false";' >>/etc/apt/apt.conf
|
||||
|
||||
# Standard packages
|
||||
declare -ra standardPackages=(
|
||||
apt-utils
|
||||
ca-certificates
|
||||
gettext-base
|
||||
git
|
||||
gnupg1
|
||||
gosu
|
||||
libcurl4-openssl-dev
|
||||
libzip-dev
|
||||
locales
|
||||
locales-all
|
||||
nano
|
||||
procps
|
||||
unzip
|
||||
zip
|
||||
software-properties-common
|
||||
)
|
||||
|
||||
# Image Optimization
|
||||
declare -ra imageOptimization=(
|
||||
gifsicle
|
||||
jpegoptim
|
||||
optipng
|
||||
pngquant
|
||||
)
|
||||
|
||||
# Image Processing
|
||||
declare -ra imageProcessing=(
|
||||
libjpeg62-turbo-dev
|
||||
libmagickwand-dev
|
||||
libpng-dev
|
||||
)
|
||||
|
||||
# Required for GD
|
||||
declare -ra gdDependencies=(
|
||||
libwebp-dev
|
||||
libwebp6
|
||||
libxpm-dev
|
||||
libxpm4
|
||||
)
|
||||
|
||||
# Video Processing
|
||||
declare -ra videoProcessing=(
|
||||
ffmpeg
|
||||
)
|
||||
|
||||
# Database
|
||||
declare -ra databaseDependencies=(
|
||||
libpq-dev
|
||||
libsqlite3-dev
|
||||
)
|
||||
|
||||
apt-get update
|
||||
|
||||
apt-get upgrade -y
|
||||
|
||||
apt-get install -y \
|
||||
${standardPackages[*]} \
|
||||
${imageOptimization[*]} \
|
||||
${imageProcessing[*]} \
|
||||
${gdDependencies[*]} \
|
||||
${videoProcessing[*]} \
|
||||
${databaseDependencies[*]} \
|
||||
${APT_PACKAGES_EXTRA}
|
||||
|
||||
locale-gen
|
||||
update-locale
|
32
contrib/docker/install/php-extensions.sh
Executable file
32
contrib/docker/install/php-extensions.sh
Executable file
|
@ -0,0 +1,32 @@
|
|||
#!/bin/bash
|
||||
set -ex -o errexit -o nounset -o pipefail
|
||||
|
||||
# Grab the PHP source code so we can compile against it
|
||||
docker-php-source extract
|
||||
|
||||
# PHP GD extensions
|
||||
docker-php-ext-configure gd \
|
||||
--with-freetype \
|
||||
--with-jpeg \
|
||||
--with-webp \
|
||||
--with-xpm
|
||||
|
||||
# Optional script folks can copy into their image to do any [docker-php-ext-configure] work before the [docker-php-ext-install]
|
||||
# this can also overwirte the [gd] configure above by simply running it again
|
||||
if [[ -f /install/php-extension-configure.sh ]]; then
|
||||
if [ !-x "$f" ]; then
|
||||
echo >&2 "ERROR: found /install/php-extension-configure.sh but its not executable - please [chmod +x] the file!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
/install/php-extension-configure.sh
|
||||
fi
|
||||
|
||||
# Install pecl extensions
|
||||
pecl install ${PHP_PECL_EXTENSIONS} ${PHP_PECL_EXTENSIONS_EXTRA}
|
||||
|
||||
# PHP extensions (dependencies)
|
||||
docker-php-ext-install -j$(nproc) ${PHP_EXTENSIONS} ${PHP_EXTENSIONS_EXTRA} ${PHP_EXTENSIONS_DATABASE}
|
||||
|
||||
# Enable all extensions
|
||||
docker-php-ext-enable ${PHP_PECL_EXTENSIONS} ${PHP_PECL_EXTENSIONS_EXTRA} ${PHP_EXTENSIONS} ${PHP_EXTENSIONS_EXTRA} ${PHP_EXTENSIONS_DATABASE}
|
Loading…
Reference in a new issue