79 lines
4.0 KiB
Docker
79 lines
4.0 KiB
Docker
FROM alpine:3.22
|
|
|
|
RUN set -eux; \
|
|
apk add --no-cache \
|
|
apache2 apache2-proxy apache2-http2\
|
|
php84 php84-fpm php84-opcache php84-session \
|
|
php84-mysqli php84-pdo php84-pdo_mysql php84-ctype php84-tokenizer php84-xml php84-gd php84-curl php84-mbstring \
|
|
php84-pgsql php84-pdo_pgsql \
|
|
tzdata curl; \
|
|
mkdir -p /run/apache2 /run/php /var/www/html; \
|
|
# Apache → logy do stdout/stderr, ServerName
|
|
sed -ri 's|^[#[:space:]]*ErrorLog .*|ErrorLog /dev/stderr|g' /etc/apache2/httpd.conf; \
|
|
sed -ri 's|^[#[:space:]]*CustomLog .*|CustomLog /dev/stdout combined|g' /etc/apache2/httpd.conf; \
|
|
sed -ri 's|#ServerName www.example.com:80|ServerName localhost|g' /etc/apache2/httpd.conf; \
|
|
# PHP-FPM: TCP 127.0.0.1:9000
|
|
sed -ri 's|^listen = .*|listen = 127.0.0.1:9000|g' /etc/php84/php-fpm.d/www.conf; \
|
|
# Production ini (pokud je k dispozici)
|
|
if [ -f /etc/php84/php.ini-production ]; then cp /etc/php84/php.ini-production /etc/php84/php.ini; fi; \
|
|
# Alpine default symlink
|
|
if [ -d /var/www/localhost/htdocs ]; then rmdir /var/www/localhost/htdocs || true; ln -s /var/www/html /var/www/localhost/htdocs; fi
|
|
|
|
# Přepnout MPM na event (Alpine má MPM jako moduly)
|
|
RUN set -eux; \
|
|
# zakomentuj prefork
|
|
sed -ri 's|^(LoadModule\s+mpm_prefork_module\b.*)$|# \1|' /etc/apache2/httpd.conf; \
|
|
# zajisti event (absolutní cesta kvůli Alpine)
|
|
grep -q '^LoadModule mpm_event_module' /etc/apache2/httpd.conf || \
|
|
echo 'LoadModule mpm_event_module /usr/lib/apache2/mod_mpm_event.so' >> /etc/apache2/httpd.conf
|
|
|
|
# --- MSSQL: ODBC driver + PHP rozšíření sqlsrv/pdo_sqlsrv ---
|
|
RUN set -eux; \
|
|
# runtime závislosti
|
|
apk add --no-cache unixodbc gnupg curl; \
|
|
# build závislosti (po kompilaci odstraníme)
|
|
apk add --no-cache --virtual .build-deps php84-dev php84-pear autoconf make g++ unixodbc-dev; \
|
|
# Microsoft ODBC 18 (oficiální .apk; uprav verzi, až vyjde novější)
|
|
arch="$(apk --print-arch)"; case "$arch" in x86_64) msarch=amd64 ;; aarch64) msarch=arm64 ;; *) echo "unsupported arch: $arch"; exit 1 ;; esac; \
|
|
curl -fsSLO "https://download.microsoft.com/download/fae28b9a-d880-42fd-9b98-d779f0fdd77f/msodbcsql18_18.5.1.1-1_${msarch}.apk"; \
|
|
apk add --allow-untrusted "./msodbcsql18_18.5.1.1-1_${msarch}.apk"; \
|
|
rm -f msodbcsql18_*.apk; \
|
|
# sjednotím binárky pro pecl/phpize
|
|
ln -sf /usr/bin/php84 /usr/bin/php; ln -sf /usr/bin/phpize84 /usr/bin/phpize; ln -sf /usr/bin/pecl84 /usr/bin/pecl; \
|
|
# PHP rozšíření
|
|
pecl install sqlsrv pdo_sqlsrv; \
|
|
echo "extension=sqlsrv.so" > /etc/php84/conf.d/20_sqlsrv.ini; \
|
|
echo "extension=pdo_sqlsrv.so" > /etc/php84/conf.d/30_pdo_sqlsrv.ini; \
|
|
# úklid build závislostí
|
|
apk del .build-deps
|
|
|
|
RUN sed -ri 's|^(LoadModule\s+lbmethod_heartbeat_module\b.*)|# \1|' /etc/apache2/httpd.conf
|
|
# Konfigurace Apache pro FPM + DocumentRoot
|
|
COPY apache-phpfpm.conf /etc/apache2/conf.d/php-fpm.conf
|
|
|
|
# Aplikace
|
|
COPY data/www/ /var/www/html/
|
|
|
|
# Jednoduchý healthcheck
|
|
HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD wget -qO- http://127.0.0.1/ >/dev/null || exit 1
|
|
|
|
LABEL org.opencontainers.image.title="docker-php-alpine" \
|
|
org.opencontainers.image.description="Apache + PHP 8.4 on Alpine (FPM)" \
|
|
org.opencontainers.image.source="https://git.najihu.net/zdenek/docker-php-alpine" \
|
|
org.opencontainers.image.licenses="MIT"
|
|
|
|
# --- OpenSSL: povol legacy TLS a sniž security level ---
|
|
RUN set -eux; \
|
|
cp /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.bak || true; \
|
|
awk 'BEGIN{print "openssl_conf = openssl_init"}{print}END{print "\n[openssl_init]\nssl_conf = ssl_sect\n\n[ssl_sect]\nsystem_default = system_default_sect\n\n[system_default_sect]\nMinProtocol = TLSv1\nCipherString = DEFAULT:@SECLEVEL=0"}' \
|
|
/etc/ssl/openssl.cnf.bak > /etc/ssl/openssl.cnf
|
|
|
|
|
|
# Entrypoint spustí FPM a Apache (root → Apache si sám shodí práva)
|
|
COPY docker-entrypoint.sh /docker-entrypoint.sh
|
|
RUN chmod +x /docker-entrypoint.sh
|
|
|
|
EXPOSE 80
|
|
CMD ["/docker-entrypoint.sh"]
|
|
|