Files
docker-daloradius/Dockerfile
Ryan Hamilton 617de13689
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 26s
Add Apache virtual host configuration for user UI
2025-08-12 08:41:53 -05:00

104 lines
3.6 KiB
Docker

# syntax=docker/dockerfile:1.7
############################################
# Stage 1: fetch source (pin to tag/sha)
############################################
FROM alpine:3.20 AS source
ARG DALOREF=master
ARG MIRROR_URL=https://gitea.portal.tulsacounty.org/external-repos/daloradius.git
RUN apk add --no-cache git && \
git clone --depth=1 --branch ${DALOREF} ${MIRROR_URL} /src
############################################
# Stage 2: runtime (PHP 8, Apache)
############################################
FROM php:8.3-apache
ENV TZ=UTC
# System deps (no php-pear package here)
RUN apt-get update && apt-get -y upgrade && \
apt-get install -y --no-install-recommends \
ca-certificates tzdata curl git \
libpng-dev libjpeg62-turbo-dev libfreetype6-dev libwebp-dev \
libmariadb-dev \
&& rm -rf /var/lib/apt/lists/* && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ >/etc/timezone && \
update-ca-certificates -f
# PHP extensions
RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
docker-php-ext-install gd mysqli pdo_mysql
# Install PEAR manually, then required PEAR packages
RUN curl -fsSL https://pear.php.net/install-pear-nozlib.phar -o /tmp/pear.phar \
&& php /tmp/pear.phar \
&& rm /tmp/pear.phar \
&& pear channel-update pear.php.net \
&& pear install -a -f DB \
&& pear install -a -f Mail \
&& pear install -a -f Mail_Mime
# App
COPY --from=source /src/app/ /var/www/html/daloradius/
COPY --from=source /src/app/common/includes/daloradius.conf.php.sample /opt/daloradius.conf.php.tmpl
COPY --from=source /src/contrib/scripts/apache-config.sh /usr/local/bin/apache-config.sh
# Apache + perms (+ run helper to set DocumentRoot=/var/www/html/daloradius)
RUN chown -R www-data:www-data /var/www/html && \
chmod +x /usr/local/bin/apache-config.sh && \
a2enmod rewrite && \
/usr/local/bin/apache-config.sh && \
printf 'ServerName localhost\n' > /etc/apache2/conf-available/servername.conf && a2enconf servername
# Entry script renders config from env only if not bind-mounted or if forced
COPY <<'EOF' /entrypoint.sh
#!/usr/bin/env bash
set -euo pipefail
CFG="/var/www/html/daloradius/common/includes/daloradius.conf.php"
TMPL="/opt/daloradius.conf.php.tmpl"
# If no config present, seed from template
if [ ! -f "$CFG" ]; then
cp "$TMPL" "$CFG"
fi
# Only edit if envs are provided and not explicitly skipped
if [ "${FORCE_RENDER:-0}" = "1" ] || [ ! -s "$CFG" ]; then
: "${DBHOST:?set DBHOST}"; : "${DBNAME:?set DBNAME}"; : "${DBUSER:?set DBUSER}"; : "${DBPASS:?set DBPASS}"
sed -i \
-e "s|\$configValues\['CONFIG_DB_HOST'\].*|\$configValues['CONFIG_DB_HOST'] = '${DBHOST}';|g" \
-e "s|\$configValues\['CONFIG_DB_USER'\].*|\$configValues['CONFIG_DB_USER'] = '${DBUSER}';|g" \
-e "s|\$configValues\['CONFIG_DB_PASS'\].*|\$configValues['CONFIG_DB_PASS'] = '${DBPASS}';|g" \
-e "s|\$configValues\['CONFIG_DB_NAME'\].*|\$configValues['CONFIG_DB_NAME'] = '${DBNAME}';|g" \
"$CFG"
fi
exec apachectl -DFOREGROUND
EOF
# Replace default vhost so root serves the users UI
RUN bash -lc 'cat >/etc/apache2/sites-available/000-default.conf <<EOF
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html/daloradius/users
<Directory /var/www/html/daloradius/users>
AllowOverride All
Require all granted
</Directory>
DirectoryIndex index.php
ErrorLog \${APACHE_LOG_DIR}/error.log
CustomLog \${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF' \
&& apache2ctl -t
HEALTHCHECK --interval=30s --timeout=5s --retries=5 CMD curl -fsS http://localhost/ || exit 1
RUN chmod +x /entrypoint.sh