Run website with Apache PHP-FPM and OPcache

This commit is contained in:
juvdiaz 2026-06-04 09:50:23 -06:00
parent d1df0bcf6e
commit 1038ea806c
6 changed files with 95 additions and 32 deletions

View File

@ -1,41 +1,73 @@
FROM alpine:3.19
FROM php:8.5-fpm-alpine
RUN apk update && apk add --no-cache \
apache2 \
php82 \
php82-apache2 \
php82-pdo \
php82-pdo_sqlite \
php82-curl \
curl \
shadow
RUN apk add --no-cache \
apache2 \
curl \
libcurl \
shadow \
sqlite-libs && \
apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
curl-dev \
sqlite-dev && \
docker-php-ext-install \
curl \
opcache \
pdo_sqlite && \
apk del .build-deps
RUN ln -sf /usr/bin/php82 /usr/bin/php
RUN sed -i 's/#LoadModule rewrite_module/LoadModule rewrite_module/' /etc/apache2/httpd.conf && \
sed -i 's/#LoadModule headers_module/LoadModule headers_module/' /etc/apache2/httpd.conf && \
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/' /etc/apache2/httpd.conf && \
sed -i 's/^Listen 80$/Listen 8080/' /etc/apache2/httpd.conf && \
sed -i 's#^ErrorLog .*#ErrorLog /proc/self/fd/2#' /etc/apache2/httpd.conf && \
sed -i 's#^CustomLog .*#CustomLog /proc/self/fd/1 combined#' /etc/apache2/httpd.conf && \
RUN set -eu; \
enable_module() { \
name="$1"; \
path="$2"; \
if grep -q "^#LoadModule ${name} " /etc/apache2/httpd.conf; then \
sed -i "s|^#LoadModule ${name} .*|LoadModule ${name} ${path}|" /etc/apache2/httpd.conf; \
elif ! grep -q "^LoadModule ${name} " /etc/apache2/httpd.conf; then \
printf "LoadModule %s %s\n" "$name" "$path" >> /etc/apache2/httpd.conf; \
fi; \
}; \
enable_module rewrite_module modules/mod_rewrite.so; \
enable_module headers_module modules/mod_headers.so; \
enable_module proxy_module modules/mod_proxy.so; \
enable_module proxy_fcgi_module modules/mod_proxy_fcgi.so; \
sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/' /etc/apache2/httpd.conf; \
sed -i 's/^Listen 80$/Listen 8080/' /etc/apache2/httpd.conf; \
sed -i 's#^ErrorLog .*#ErrorLog /proc/self/fd/2#' /etc/apache2/httpd.conf; \
sed -i 's#^CustomLog .*#CustomLog /proc/self/fd/1 combined#' /etc/apache2/httpd.conf; \
if grep -q '^PidFile ' /etc/apache2/httpd.conf; then \
sed -i 's#^PidFile .*#PidFile /tmp/httpd.pid#' /etc/apache2/httpd.conf; \
else \
printf '\nPidFile /tmp/httpd.pid\n' >> /etc/apache2/httpd.conf; \
fi
fi; \
printf '\nServerName localhost\n' >> /etc/apache2/httpd.conf; \
sed -i 's#^listen = .*#listen = 127.0.0.1:9000#' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's#^;clear_env = no#clear_env = no#' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's#^pm.max_children = .*#pm.max_children = 6#' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's#^pm.start_servers = .*#pm.start_servers = 2#' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's#^pm.min_spare_servers = .*#pm.min_spare_servers = 1#' /usr/local/etc/php-fpm.d/www.conf; \
sed -i 's#^pm.max_spare_servers = .*#pm.max_spare_servers = 3#' /usr/local/etc/php-fpm.d/www.conf
COPY httpd-php-fpm.conf /etc/apache2/conf.d/php-fpm.conf
COPY opcache.ini /usr/local/etc/php/conf.d/zz-opcache.ini
COPY php-fpm-runtime.conf /usr/local/etc/php-fpm.d/zz-runtime.conf
COPY start-website.sh /usr/local/bin/start-website
COPY . /var/www/localhost/htdocs/
RUN rm -f /var/www/localhost/htdocs/index.html
RUN mkdir -p /var/www/localhost/htdocs/db && \
chown -R apache:apache /var/www/localhost/htdocs/db && \
chmod -R 755 /var/www/localhost/htdocs/db
RUN usermod -u 1000 apache && \
RUN rm -f /var/www/localhost/htdocs/index.html && \
usermod -u 1000 apache && \
groupmod -g 1000 apache && \
mkdir -p /run/apache2 /var/log/apache2 /tmp/website-lang && \
chown -R apache:apache /run/apache2 /var/log/apache2 /tmp/website-lang /var/www/localhost/htdocs/db
mkdir -p \
/run/apache2 \
/var/log/apache2 \
/var/www/localhost/htdocs/db \
/tmp/website-lang && \
chown -R apache:apache \
/run/apache2 \
/var/log/apache2 \
/var/www/localhost/htdocs/db \
/tmp/website-lang && \
chmod 0755 /usr/local/bin/start-website
ENV WEBSITE_LANG_WRITE_DIR=/var/www/localhost/htdocs/db/lang
ENV OLLAMA_HOST=http://192.168.100.68:11434
@ -45,4 +77,4 @@ USER apache
EXPOSE 8080
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
CMD ["start-website"]

View File

@ -0,0 +1,8 @@
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
<Directory "/var/www/localhost/htdocs">
AllowOverride None
Require all granted
</Directory>

7
apps/website/opcache.ini Normal file
View File

@ -0,0 +1,7 @@
opcache.enable=1
opcache.enable_cli=1
opcache.validate_timestamps=0
opcache.memory_consumption=64
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.jit=0

View File

@ -0,0 +1,3 @@
[global]
pid = /tmp/php-fpm.pid
error_log = /proc/self/fd/2

View File

@ -0,0 +1,13 @@
#!/bin/sh
set -eu
mkdir -p \
/run/apache2 \
/var/log/apache2 \
"$WEBSITE_LANG_WRITE_DIR" \
"${WEBSITE_IDEAS_WRITE_DIR:-/var/www/localhost/htdocs/db/ideas}" \
/tmp/website-lang
php-fpm -D
exec httpd -D FOREGROUND

View File

@ -89,10 +89,10 @@ spec:
periodSeconds: 30
resources:
requests:
cpu: 25m
memory: 64Mi
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi
memory: 384Mi
volumeMounts:
- name: apache-run
mountPath: /run/apache2