mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-11-07 21:58:02 +00:00
- Switched Drupal base image to PHP 8.2 for compatibility with openid_connect 2.x - Added mariadb-client to container to allow Drush to drop tables - Upgraded OIDC module from ^1 to ^2@beta for entity-based client configuration - Replaced legacy client creation task with generic plugin-based entity creation - Ensured /usr/local/bin is in PATH for www-data user - Updated oidc.yml to explicitly use the generic plugin References: https://chatgpt.com/share/6905cecc-8e3c-800f-849b-4041b6925381
84 lines
3.9 KiB
Django/Jinja
84 lines
3.9 KiB
Django/Jinja
FROM {{ DRUPAL_IMAGE }}:{{ DRUPAL_VERSION }}
|
|
|
|
# -------------------------------------------------------------------
|
|
# System dependencies (mail support + MySQL client + basic tools)
|
|
# -------------------------------------------------------------------
|
|
RUN apt-get update && \
|
|
apt-get install -y msmtp msmtp-mta git unzip zip less nano curl vim mariadb-client && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# -------------------------------------------------------------------
|
|
# PHP extensions required by Drupal/Drush bootstrap
|
|
# -------------------------------------------------------------------
|
|
RUN docker-php-ext-install -j"$(nproc)" pdo_mysql
|
|
|
|
# -------------------------------------------------------------------
|
|
# Install Composer
|
|
# -------------------------------------------------------------------
|
|
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
|
|
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
|
|
&& rm composer-setup.php
|
|
|
|
ENV COMPOSER_ALLOW_SUPERUSER=1
|
|
|
|
# -------------------------------------------------------------------
|
|
# Build Drupal project with Drush + OpenID Connect
|
|
# IMPORTANT:
|
|
# - The Drupal base image uses /var/www/html as a symlink to {{ DRUPAL_DOCKER_HTML_PATH }}
|
|
# - Therefore, the actual project root must be placed in /opt/drupal
|
|
# -------------------------------------------------------------------
|
|
RUN set -eux; \
|
|
builddir="$(mktemp -d)"; \
|
|
composer create-project --no-interaction --no-ansi --no-progress drupal/recommended-project:^10 "$builddir"; \
|
|
composer --working-dir="$builddir" require -n drush/drush:^13 drupal/openid_connect:^2@beta; \
|
|
rm -rf /opt/drupal/* /opt/drupal/.[!.]* /opt/drupal/..?* 2>/dev/null || true; \
|
|
mkdir -p /opt/drupal; \
|
|
cp -a "$builddir"/. /opt/drupal/; \
|
|
rm -rf "$builddir"
|
|
|
|
# -------------------------------------------------------------------
|
|
# Make vendor binaries available in PATH
|
|
# -------------------------------------------------------------------
|
|
RUN ln -sf /opt/drupal/vendor/bin/drush /usr/local/bin/drush
|
|
|
|
# -------------------------------------------------------------------
|
|
# PHP upload configuration
|
|
# -------------------------------------------------------------------
|
|
COPY {{ DRUPAL_CONFIG_UPLOAD_REL }} $PHP_INI_DIR/conf.d/
|
|
|
|
# -------------------------------------------------------------------
|
|
# Permissions and ownership fixes
|
|
# -------------------------------------------------------------------
|
|
RUN set -eux; \
|
|
# Ensure all directories are traversable
|
|
chmod 755 /var /var/www /opt /opt/drupal; \
|
|
# Ensure correct ownership for Drupal files
|
|
chown -R www-data:www-data /opt/drupal; \
|
|
# Apply default permissions
|
|
find /opt/drupal -type d -exec chmod 755 {} +; \
|
|
find /opt/drupal -type f -exec chmod 644 {} +; \
|
|
# Ensure vendor binaries are executable
|
|
if [ -d /opt/drupal/vendor/bin ]; then chmod a+rx /opt/drupal/vendor/bin/*; fi; \
|
|
if [ -f /opt/drupal/vendor/drush/drush/drush ]; then chmod a+rx /opt/drupal/vendor/drush/drush/drush; fi; \
|
|
# Ensure the docroot ({{ DRUPAL_DOCKER_HTML_PATH }}) is accessible
|
|
if [ -d {{ DRUPAL_DOCKER_HTML_PATH }} ]; then \
|
|
chmod 755 {{ DRUPAL_DOCKER_HTML_PATH }}; \
|
|
find {{ DRUPAL_DOCKER_HTML_PATH }} -type d -exec chmod 755 {} +; \
|
|
fi; \
|
|
# Ensure settings.local.php exists and is owned by www-data
|
|
install -o www-data -g www-data -m 640 /dev/null {{ DRUPAL_DOCKER_HTML_PATH }}/sites/default/settings.local.php
|
|
|
|
# -------------------------------------------------------------------
|
|
# Runtime defaults
|
|
# -------------------------------------------------------------------
|
|
USER www-data
|
|
WORKDIR /var/www/html # symlink pointing to {{ DRUPAL_DOCKER_HTML_PATH }}
|
|
|
|
# Ensure PATH for non-login shells includes /usr/local/bin
|
|
ENV PATH="/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
|
|
# -------------------------------------------------------------------
|
|
# Build-time check (optional)
|
|
# -------------------------------------------------------------------
|
|
RUN /usr/local/bin/drush --version
|