Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 120 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Build and publish Docker images

on:
pull_request:
paths:
- 'apache/**'
- 'fpm/**'
- 'fpm-alpine/**'
- 'frankenphp/**'
- 'docker-entrypoint.sh'
- '.github/workflows/publish-images.yml'

push:
branches:
- master
tags:
- 'v*'
paths:
- 'apache/**'
- 'fpm/**'
- 'fpm-alpine/**'
- 'frankenphp/**'
- 'docker-entrypoint.sh'
- '.github/workflows/publish-images.yml'

workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/postfixadmin

permissions:
contents: read
packages: write

jobs:
build:
name: Build ${{ matrix.variant }}
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
include:
- variant: apache
context: ./apache
suffix: -apache
latest: 'true'

- variant: fpm
context: ./fpm
suffix: -fpm
latest: 'false'

- variant: fpm-alpine
context: ./fpm-alpine
suffix: -fpm-alpine
latest: 'false'

- variant: frankenphp
context: ./frankenphp
suffix: -frankenphp
latest: 'false'

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Set up QEMU
uses: docker/setup-qemu-action@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

- name: Log in to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

tags: |
# type=raw,value=dev-${{ matrix.variant }},enable={{is_default_branch}}
# type=raw,value=dev,enable=${{ matrix.variant == 'apache' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}

type=semver,pattern={{version}},suffix=-${{ matrix.variant }}
type=semver,pattern={{major}}.{{minor}},suffix=-${{ matrix.variant }}
type=semver,pattern={{major}},suffix=-${{ matrix.variant }}

type=semver,pattern={{version}},enable=${{ matrix.variant == 'apache' }}
type=semver,pattern={{major}}.{{minor}},enable=${{ matrix.variant == 'apache' }}
type=semver,pattern={{major}},enable=${{ matrix.variant == 'apache' }}
type=raw,value=latest,enable=${{ matrix.variant == 'apache' && startsWith(github.ref, 'refs/tags/v') }}

labels: |
org.opencontainers.image.title=PostfixAdmin ${{ matrix.variant }}
org.opencontainers.image.description=PostfixAdmin Docker image using the ${{ matrix.variant }} variant
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}

- name: Build and push image
uses: docker/build-push-action@v7
with:
context: ${{ matrix.context }}
file: ${{ matrix.context }}/Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
pull: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha,scope=${{ matrix.variant }}
cache-to: type=gha,mode=max,scope=${{ matrix.variant }}
provenance: mode=max
sbom: true
14 changes: 8 additions & 6 deletions Dockerfile-alpine.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM php:8.3-%%VARIANT%%
FROM php:%%PHPVERSION%%-%%VARIANT%%
LABEL maintainer="David Goodwin <david@codepoets.co.uk> (@DavidGoodwin)"

# docker-entrypoint.sh dependencies
Expand All @@ -12,12 +12,14 @@ RUN set -ex; \
apk add --no-cache --virtual .build-deps \
postgresql-dev \
sqlite-dev \
libpng-dev \
; \
docker-php-ext-install -j "$(nproc)" \
pdo_mysql \
pdo_pgsql \
pdo_sqlite \
pgsql \
gd \
; \
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
Expand All @@ -28,11 +30,11 @@ RUN set -ex; \
apk add --no-network --virtual .postfixadmin-phpexts-rundeps $runDeps; \
apk del --no-network .build-deps

ARG POSTFIXADMIN_VERSION=4.0.5
ARG POSTFIXADMIN_SHA512=b9549137e5bb6cf69fe76aef2711092a7e74ec223ee272d0303430b03da16ba8cfe704047f8e07ee5bd1ef6b632cac9ae2c0830271629b193c395197e1f4d93d
ARG POSTFIXADMIN_VERSION=%%POSTFIXADMIN_VERSION%%
ARG POSTFIXADMIN_SHA512=%%POSTFIXADMIN_SHA512%%

ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION
ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512
ENV POSTFIXADMIN_VERSION=$POSTFIXADMIN_VERSION
ENV POSTFIXADMIN_SHA512=$POSTFIXADMIN_SHA512

RUN set -eu; \
curl -fsSL -o postfixadmin.tar.gz "https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \
Expand All @@ -52,7 +54,7 @@ COPY --from=composer:2 /usr/bin/composer /usr/local/bin/
# https://github.com/moby/buildkit/issues/4503
# https://github.com/composer/composer/issues/11839
# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_ALLOW_SUPERUSER=1

RUN set -eux; \
export COMPOSER_HOME="$(mktemp -d)"; \
Expand Down
16 changes: 9 additions & 7 deletions Dockerfile-debian.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM php:8.3-%%VARIANT%%
FROM php:%%PHPVERSION%%-%%VARIANT%%
LABEL maintainer="David Goodwin <david@codepoets.co.uk> (@DavidGoodwin)"

# docker-entrypoint.sh dependencies
Expand All @@ -18,12 +18,14 @@ RUN set -ex; \
apt-get install -y --no-install-recommends \
libpq-dev \
libsqlite3-dev \
libpng-dev \
; \
docker-php-ext-install -j "$(nproc)" \
pdo_mysql \
pdo_pgsql \
pdo_sqlite \
pgsql \
gd \
; \
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
apt-mark auto '.*' > /dev/null; \
Expand All @@ -40,12 +42,12 @@ RUN set -ex; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
apt-get dist-clean

ARG POSTFIXADMIN_VERSION=4.0.5
ARG POSTFIXADMIN_SHA512=b9549137e5bb6cf69fe76aef2711092a7e74ec223ee272d0303430b03da16ba8cfe704047f8e07ee5bd1ef6b632cac9ae2c0830271629b193c395197e1f4d93d
ARG POSTFIXADMIN_VERSION=%%POSTFIXADMIN_VERSION%%
ARG POSTFIXADMIN_SHA512=%%POSTFIXADMIN_SHA512%%

ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION
ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
ENV POSTFIXADMIN_VERSION=$POSTFIXADMIN_VERSION
ENV POSTFIXADMIN_SHA512=$POSTFIXADMIN_SHA512
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public

RUN set -eu; sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf; \
sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
Expand All @@ -68,7 +70,7 @@ COPY --from=composer:2 /usr/bin/composer /usr/local/bin/
# https://github.com/moby/buildkit/issues/4503
# https://github.com/composer/composer/issues/11839
# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_ALLOW_SUPERUSER=1

RUN set -eux; \
composerDeps=" \
Expand Down
101 changes: 101 additions & 0 deletions Dockerfile-frankenphp.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
FROM dunglas/frankenphp:1-php%%PHPVERSION%%

LABEL maintainer="David Goodwin <david@codepoets.co.uk> (@DavidGoodwin)"

ARG POSTFIXADMIN_VERSION=%%POSTFIXADMIN_VERSION%%
ARG POSTFIXADMIN_SHA512=%%POSTFIXADMIN_SHA512%%

ENV POSTFIXADMIN_VERSION="${POSTFIXADMIN_VERSION}" \
POSTFIXADMIN_SHA512="${POSTFIXADMIN_SHA512}" \
COMPOSER_ALLOW_SUPERUSER=1 \
SERVER_NAME=:80 \
SERVER_ROOT=/var/www/html/public

WORKDIR /var/www/html

#
# Runtime dependencies used by docker-entrypoint.sh.
#
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
gosu \
; \
rm -rf /var/lib/apt/lists/*

#
# PHP extensions required by PostfixAdmin.
#
# install-php-extensions automatically installs and removes the necessary
# system build dependencies.
#
RUN install-php-extensions \
pdo_mysql \
pdo_pgsql \
pdo_sqlite \
pgsql \
gd \
;

RUN printf '%s\n' \
'output_buffering = 4096' \
'session.use_strict_mode = 1' \
'expose_php = Off' \
> /usr/local/etc/php/conf.d/postfixadmin.ini

#
# Download PostfixAdmin.
#
RUN set -eux; \
curl -fsSL \
-o /tmp/postfixadmin.tar.gz \
"https://github.com/postfixadmin/postfixadmin/archive/v${POSTFIXADMIN_VERSION}.tar.gz"; \
\
echo "${POSTFIXADMIN_SHA512} */tmp/postfixadmin.tar.gz" \
| sha512sum -c -; \
\
mkdir -p /var/www/html; \
tar \
-xf /tmp/postfixadmin.tar.gz \
-C /var/www/html \
--strip-components=1; \
rm /tmp/postfixadmin.tar.gz; \
\
mkdir -p /var/www/html/templates_c; \
chown -R www-data:www-data /var/www/html

#
# Install Composer dependencies.
#
COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer

RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
unzip \
; \
\
export COMPOSER_HOME="$(mktemp -d)"; \
composer install \
--ignore-platform-req=ext-mysqli \
--no-dev \
--no-interaction \
--no-progress \
--prefer-dist \
--working-dir=/var/www/html; \
rm -rf "${COMPOSER_HOME}"; \
\
apt-get purge -y --auto-remove \
-o APT::AutoRemove::RecommendsImportant=false \
unzip; \
rm -rf /var/lib/apt/lists/*

COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh

RUN chmod +x /usr/local/bin/docker-entrypoint.sh

EXPOSE 80

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

CMD ["%%CMD%%"]
10 changes: 6 additions & 4 deletions apache/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ RUN set -ex; \
apt-get install -y --no-install-recommends \
libpq-dev \
libsqlite3-dev \
libpng-dev \
; \
docker-php-ext-install -j "$(nproc)" \
pdo_mysql \
pdo_pgsql \
pdo_sqlite \
pgsql \
gd \
; \
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
apt-mark auto '.*' > /dev/null; \
Expand All @@ -43,9 +45,9 @@ RUN set -ex; \
ARG POSTFIXADMIN_VERSION=4.0.5
ARG POSTFIXADMIN_SHA512=b9549137e5bb6cf69fe76aef2711092a7e74ec223ee272d0303430b03da16ba8cfe704047f8e07ee5bd1ef6b632cac9ae2c0830271629b193c395197e1f4d93d

ENV POSTFIXADMIN_VERSION $POSTFIXADMIN_VERSION
ENV POSTFIXADMIN_SHA512 $POSTFIXADMIN_SHA512
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
ENV POSTFIXADMIN_VERSION=$POSTFIXADMIN_VERSION
ENV POSTFIXADMIN_SHA512=$POSTFIXADMIN_SHA512
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public

RUN set -eu; sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf; \
sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
Expand All @@ -68,7 +70,7 @@ COPY --from=composer:2 /usr/bin/composer /usr/local/bin/
# https://github.com/moby/buildkit/issues/4503
# https://github.com/composer/composer/issues/11839
# https://github.com/composer/composer/blob/94fe2945456df51e122a492b8d14ac4b54c1d2ce/src/Composer/Console/Application.php#L217-L218
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_ALLOW_SUPERUSER=1

RUN set -eux; \
composerDeps=" \
Expand Down
Loading