From 33ae94df0aab8432bccc837c735cb527581355b6 Mon Sep 17 00:00:00 2001 From: Guillaume Sainthillier Date: Mon, 12 Oct 2026 14:44:27 +0200 Subject: [PATCH 1/2] feat: add PHP 8.6 release candidate images Add the 8.6, 8.6-ci and 8.6-symfony variants, copied from 8.5 and built from the upstream php:8.6-rc-apache / php:8.6-rc-alpine images (8.6.0RC3 today). They are published as silarhi/php-apache:8.6* and listed in the CI matrix and the Makefile; latest stays on 8.5 until 8.6.0 is released. FrankenPHP variants are not added yet: dunglas/frankenphp has no PHP 8.6 tag so far. --- .github/workflows/continuous-integration.yml | 6 ++ 8.6-ci/Dockerfile | 21 ++++ 8.6-symfony/Dockerfile | 35 +++++++ 8.6-symfony/conf/apache.conf | 64 ++++++++++++ 8.6-symfony/conf/php.ini | 17 ++++ 8.6-symfony/conf/vhost.conf | 23 +++++ 8.6-symfony/errors/403.html | 20 ++++ 8.6-symfony/errors/404.html | 20 ++++ 8.6-symfony/errors/500.html | 20 ++++ 8.6-symfony/errors/css/style.css | 102 +++++++++++++++++++ 8.6-symfony/errors/img/emoji.png | Bin 0 -> 7358 bytes 8.6-symfony/health.php | 3 + 8.6-symfony/index.php | 3 + 8.6/Dockerfile | 37 +++++++ 8.6/conf/apache.conf | 64 ++++++++++++ 8.6/conf/php.ini | 17 ++++ 8.6/conf/vhost.conf | 8 ++ 8.6/errors/403.html | 20 ++++ 8.6/errors/404.html | 20 ++++ 8.6/errors/500.html | 20 ++++ 8.6/errors/css/style.css | 102 +++++++++++++++++++ 8.6/errors/img/emoji.png | Bin 0 -> 7358 bytes 8.6/health.php | 3 + 8.6/index.php | 3 + Makefile | 3 + README.md | 8 +- 26 files changed, 637 insertions(+), 2 deletions(-) create mode 100644 8.6-ci/Dockerfile create mode 100644 8.6-symfony/Dockerfile create mode 100644 8.6-symfony/conf/apache.conf create mode 100644 8.6-symfony/conf/php.ini create mode 100644 8.6-symfony/conf/vhost.conf create mode 100644 8.6-symfony/errors/403.html create mode 100644 8.6-symfony/errors/404.html create mode 100644 8.6-symfony/errors/500.html create mode 100644 8.6-symfony/errors/css/style.css create mode 100644 8.6-symfony/errors/img/emoji.png create mode 100644 8.6-symfony/health.php create mode 100644 8.6-symfony/index.php create mode 100644 8.6/Dockerfile create mode 100644 8.6/conf/apache.conf create mode 100644 8.6/conf/php.ini create mode 100644 8.6/conf/vhost.conf create mode 100644 8.6/errors/403.html create mode 100644 8.6/errors/404.html create mode 100644 8.6/errors/500.html create mode 100644 8.6/errors/css/style.css create mode 100644 8.6/errors/img/emoji.png create mode 100644 8.6/health.php create mode 100644 8.6/index.php diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index d6af697..e503857 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -40,6 +40,12 @@ jobs: fail-fast: false matrix: include: + - path: '8.6' + tags: silarhi/php-apache:8.6 + - path: '8.6-ci' + tags: silarhi/php-apache:8.6-ci + - path: '8.6-symfony' + tags: silarhi/php-apache:8.6-symfony - path: '8.5' tags: | silarhi/php-apache:latest diff --git a/8.6-ci/Dockerfile b/8.6-ci/Dockerfile new file mode 100644 index 0000000..9b9ec05 --- /dev/null +++ b/8.6-ci/Dockerfile @@ -0,0 +1,21 @@ +FROM mlocati/php-extension-installer:latest AS php-extension-installer +FROM php:8.6-rc-alpine + +ENV COMPOSER_ALLOW_SUPERUSER=1 + +WORKDIR /app + +HEALTHCHECK --interval=1m --timeout=3s --start-period=5s --start-interval=1s --retries=3 \ + CMD ["/bin/sh", "-c", "curl -f http://localhost/_health || exit 1"] + +SHELL ["/bin/ash", "-o", "pipefail", "-c"] + +# Install dependencies +RUN apk add --no-cache \ + bash \ + git \ + icu + +# PHP Extensions +COPY --from=php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ +RUN install-php-extensions @composer intl opcache zip diff --git a/8.6-symfony/Dockerfile b/8.6-symfony/Dockerfile new file mode 100644 index 0000000..b4bc80a --- /dev/null +++ b/8.6-symfony/Dockerfile @@ -0,0 +1,35 @@ +FROM mlocati/php-extension-installer:latest AS php-extension-installer +FROM php:8.6-rc-apache + +ENV COMPOSER_ALLOW_SUPERUSER=1 + +EXPOSE 80 +WORKDIR /app + +HEALTHCHECK --interval=1m --timeout=3s --start-period=5s --start-interval=1s --retries=3 \ + CMD ["/bin/sh", "-c", "curl -f http://localhost/_health || exit 1"] + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN apt-get update -qq && \ + apt-get install -qy \ + git \ + gnupg \ + unzip \ + zip && \ + apt-get clean && rm -rf /var/lib/apt/lists/* /var/log/* + +# PHP Extensions +COPY --from=php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ +RUN install-php-extensions @composer intl opcache pdo_mysql zip +COPY --link conf/php.ini /usr/local/etc/php/conf.d/app.ini + +# Apache +COPY --link errors /errors +COPY --link health.php /health/index.php +COPY --link conf/vhost.conf /etc/apache2/sites-available/000-default.conf +COPY --link conf/apache.conf /etc/apache2/conf-available/z-app.conf +COPY --link index.php /app/index.php + +RUN a2enmod rewrite remoteip && \ + a2enconf z-app diff --git a/8.6-symfony/conf/apache.conf b/8.6-symfony/conf/apache.conf new file mode 100644 index 0000000..e827487 --- /dev/null +++ b/8.6-symfony/conf/apache.conf @@ -0,0 +1,64 @@ + + Options -Indexes +FollowSymLinks + AllowOverride None + Require all granted + + SetEnvIf X_FORWARDED_PROTO https HTTPS=on + + +ServerTokens Prod +ServerSignature Off + +LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined + +RemoteIPHeader X-Forwarded-For +RemoteIPInternalProxy 10.0.0.0/8 +RemoteIPInternalProxy 172.16.0.0/12 +RemoteIPInternalProxy 192.168.0.0/16 +RemoteIPInternalProxy 169.254.0.0/16 +RemoteIPInternalProxy 127.0.0.0/8 +RemoteIPInternalProxy ::1 + +# Add Cloudflare IP ranges +RemoteIPTrustedProxy 173.245.48.0/20 +RemoteIPTrustedProxy 103.21.244.0/22 +RemoteIPTrustedProxy 103.22.200.0/22 +RemoteIPTrustedProxy 103.31.4.0/22 +RemoteIPTrustedProxy 141.101.64.0/18 +RemoteIPTrustedProxy 108.162.192.0/18 +RemoteIPTrustedProxy 190.93.240.0/20 +RemoteIPTrustedProxy 188.114.96.0/20 +RemoteIPTrustedProxy 197.234.240.0/22 +RemoteIPTrustedProxy 198.41.128.0/17 +RemoteIPTrustedProxy 162.158.0.0/15 +RemoteIPTrustedProxy 104.16.0.0/13 +RemoteIPTrustedProxy 104.24.0.0/14 +RemoteIPTrustedProxy 172.64.0.0/13 +RemoteIPTrustedProxy 131.0.72.0/22 +RemoteIPTrustedProxy 2400:cb00::/32 +RemoteIPTrustedProxy 2606:4700::/32 +RemoteIPTrustedProxy 2803:f800::/32 +RemoteIPTrustedProxy 2405:b500::/32 +RemoteIPTrustedProxy 2405:8100::/32 +RemoteIPTrustedProxy 2a06:98c0::/29 +RemoteIPTrustedProxy 2c0f:f248::/32 + + + Options -Indexes + AllowOverride None + Require all granted + + + + Options -Indexes + AllowOverride None + Require local + + +Alias /_errors/ /errors/ + + Alias "/health/index.php" + +ErrorDocument 404 /_errors/404.html +ErrorDocument 403 /_errors/403.html +ErrorDocument 500 /_errors/500.html diff --git a/8.6-symfony/conf/php.ini b/8.6-symfony/conf/php.ini new file mode 100644 index 0000000..75371d2 --- /dev/null +++ b/8.6-symfony/conf/php.ini @@ -0,0 +1,17 @@ +date.timezone = Europe/Paris + +opcache.enable = 1 +opcache.enable_cli = 1 +opcache.memory_consumption = 128 +opcache.revalidate_freq = 0 +apc.enable_cli = On + +upload_max_filesize = 16M +post_max_size = 16M + +realpath_cache_size = 4096k +realpath_cache_ttl = 7200 + +display_errors = Off +display_startup_errors = Off +error_log = /proc/self/fd/2 diff --git a/8.6-symfony/conf/vhost.conf b/8.6-symfony/conf/vhost.conf new file mode 100644 index 0000000..4295c31 --- /dev/null +++ b/8.6-symfony/conf/vhost.conf @@ -0,0 +1,23 @@ + + ServerAdmin hello@silarhi.fr + + DocumentRoot /app/public + + + + Options -MultiViews + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php [QSA,L] + + + + + RedirectMatch 302 ^/$ /index.php/ + + + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/8.6-symfony/errors/403.html b/8.6-symfony/errors/403.html new file mode 100644 index 0000000..97890d1 --- /dev/null +++ b/8.6-symfony/errors/403.html @@ -0,0 +1,20 @@ + + + + + + + Erreur 403 (Interdit) + + + + +
+
+

403

+

Accès interdit.

+

L'accès à cette page requiert une autorisation.

+ Retour à la page d'accueil +
+ + diff --git a/8.6-symfony/errors/404.html b/8.6-symfony/errors/404.html new file mode 100644 index 0000000..f0b6399 --- /dev/null +++ b/8.6-symfony/errors/404.html @@ -0,0 +1,20 @@ + + + + + + + Erreur 404 (Introuvable) + + + + +
+
+

404

+

Oops! Vous êtes perdu.

+

La page que vous demandez est introuvable. Elle a peut-être été supprimée ou déplacée.

+ Retour à la page d'accueil +
+ + diff --git a/8.6-symfony/errors/500.html b/8.6-symfony/errors/500.html new file mode 100644 index 0000000..b34c2d7 --- /dev/null +++ b/8.6-symfony/errors/500.html @@ -0,0 +1,20 @@ + + + + + + + Erreur 500 (Inaccessible) + + + + +
+
+

500

+

Huston, on a un problème !

+

La page que vous demandez est temporairement inaccessible.

+ Retour à la page d'accueil +
+ + diff --git a/8.6-symfony/errors/css/style.css b/8.6-symfony/errors/css/style.css new file mode 100644 index 0000000..6be89a5 --- /dev/null +++ b/8.6-symfony/errors/css/style.css @@ -0,0 +1,102 @@ +html { + box-sizing: border-box; + font-size: 16px; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +body, h1, h2, h3, h4, h5, h6, p, ol, ul { + margin: 0; + padding: 0; + font-weight: normal; +} + +ol, ul { + list-style: none; +} + +html, body { + height: 100%; +} + +body { + font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +#error-box { + position: relative; + max-width: 560px; + width: 100%; + padding-left: 160px; + line-height: 1.1; +} + +#error-box #error-image { + position: absolute; + left: 0; + top: 0; + display: inline-block; + width: 140px; + height: 140px; + background-image: url('/_errors/img/emoji.png'); + background-size: cover; +} + +#error-box #error-image:before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + transform: scale(2.4); + border-radius: 50%; + background-color: #f2f5f8; + z-index: -1; +} + +#error-box h1 { + font-size: 65px; + font-weight: 700; + margin-top: 0; + margin-bottom: 10px; + color: #151723; + text-transform: uppercase; +} + +#error-box h2 { + font-size: 21px; + font-weight: 400; + margin: 0 0 1rem 0; + text-transform: uppercase; + color: #151723; +} + +#error-box p { + color: #999fa5; + font-weight: 400; + margin-bottom: 1rem; +} + +#error-box a { + font-weight: 500; + text-decoration: none; + color: #388dbc; +} + +@media only screen and (max-width: 767px) { + #error-box #error-image { + width: 110px; + height: 110px; + } + + #error-box { + padding-left: 15px; + padding-right: 15px; + padding-top: 110px; + } +} diff --git a/8.6-symfony/errors/img/emoji.png b/8.6-symfony/errors/img/emoji.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd4942deaebf02d1f0e3f274de20eb92d3fae48 GIT binary patch literal 7358 zcmaKRcQjn>-nJ55l#nRVM;mo?GkQ0S8eMcl)M0c{WAqliOY}%YOOznQAee|=B7$ha zlfh^)A>ozhoaemnAK&@*T6^E^cU`}_*ShzJW-(to+&gf{D1BJe-a0nh55n7P2mBEAf(H6;@kj#RQW+PkZ`9!1kwzF z@ct)?#t#sIh=2zOKQ0Z8KT(t8614R2bwz{(0RP4q7(k%D0fA1wE^w%(63;b@n1_ce z1f-z>meA5rlhp>vOGs$RtAW&|)xpvlni{eiYU-M5|6nx{E2FYtyvR}^azH#Y9kRoTz|U_@%Zny$p2Tqe`8($yDi}ViWR>$M*L55|4*|2nYyl^ zKi&V7?)Bh5#Sizru6X2iX&Y~tb6mewVo*&rv(V32JF-x-x%L&PE;k_&YEqv7INhyl zF2bmFczB~b#!6Ldh-kq}i*e=cLFN4>v`$tfkC0XD3tdD?iaHTFlLVp06e|Blwkl>> z#hu;Vy%btoS_Ix6JMTk8g5AH3ZDQN57Tx#S7VL#9U%xg3F|R!$=U0rQm~aHGu~1+4 z`cdv65gq*JAaSQXkVxuk<`wqnRIhJ~%^YK~h$pDj0d7#_oy8&-Z zQ>t@y!2muTz5HBnpg=WS-cf2Ub@r;&++{4q0lSd?E>BHdZieY+eGeVf4-)gd4PM&D zVOr;oTxnqU&H)YZ=NB38X=cJSjHTW#U<(Oct{yDJa-=5xvaR;cZOtgZ<2?;pQ&M*a z#_5KK;TaW0`RpW=Bu98h`N3MeBHWL@2>~MbB!h4p&(+)>`_j}1PMhfk(MA(2RY#~D z0T{|D4yX%(fSNC`K_S|Unuu*z3$~lnk@EsldUADL`X1)}?l_HK#+VD!C`WXn_?lYz z!|E@co{p$?;MDZJ z9t#g2W=O`JF@OO1#o4FfMWJilh#6A5CD+{a8`N5@_71~}w(es|8w|kozKnGRIcZ%=cJOjojz`4k8r$D^~tTz^x~uFzzan9xd>#vLkC*08`v{xEsGoRw!ol|ma)Q?T1 zE~y(xzVK{W14YYL6hz>axm&?p5!E*#RF^xav)n?9Qq^f$)7lsX*bk(MCd5-8^1*n; z3l>m%TJ5DjfI%gat@8m__1~aJwWHM^P)Sl1?$|R#6YlO)2;9A-oIcgBeyERr&ToKd z9kK-n-QlmCpz;AfSyQ1~!Bys7XfD#F{&u}Uz;pPUlkz1E9_(x8VVT3a^uivG`U+GPz5E~OtSe3F<4nILmcFSuO>o*4hrW{P4r^AJgr5s~?A7(dB0KXK$BBxU*5F*+X zqPY4ON1xp)hAJl<6_f-8`RzIY%inkOBBid^#|8sw464^}+p_OV4c6C5(Z*#2PXCs| zs4^HuN-tm;Y^02A=s$Lra@0VYm-j4ytC9z>SPs*CU600|AL+SkJcCn(7A3FItKG}V z*e8=4IitQDPsO`TR(E!wkqgNNtP_4OC%@R;-0eZZm>a6g-7<=3>go~Y^cf(R6ZUpC z`(czgCvLBiG2`P$@+EeD`146w7tk2R$;S_~mSHEX>a8lbZ632StdQ_eRqHr>mFKBx znp~e{nI|}>Onp=o$f0GJ2!-KW-;pcZ$+y?;(HA2k1p-EpF%ujmt06OCH%|A=_fZXn;j<#epg)X%}9ZOuFV^i$fn37V`$ew$bguUafEF67$BwI$21FhDX+ zCnq);X1ShG;~hGy89tr-OA!jsl}k2~N$ zvF#4Bu;-xqE6B8qrTrv)%)G^`z1}@ir#J%)d{AR9!JnqxPHG)Y;A*C(sIV@9((zIjrZ`!&uE$j5`oc8~bAW3JIB?wAiL4%H-Wx(N(S~_GtuRdga^7 zF8Ji_cmS;lz-dwp2q4eQlbqYWd<1ehv`;vFtaX3-5ankVAiIOop@hGUu}YZK-N2ir(o75E;Zfoeoue)$Phn;*&u0CEI_V;h)`#@ZIzQdnat1|0Svjv zMT%WgM2eWc=cPutyzbsxm!!aOEMY`VK&KHi;d`Pr+=sY_8gWqkMczgS3V=@UCuclL z@_H_MAQM5sp`V3(93_Is)u3aPlBg5NR7Y_36(mAD-$>hPB=6fjaK(MH!)&*M7FpB= zmDfhJ*?OEgPAi6@$aDFfoT%xK8! zJDp~nq2k^ur5+Pd>Al=UA1mp>Q`-BBcwPyhiGP=jqmKo7m<5pLv3pW+hU7{yM-dfC zJdU)XWzrTa;Y^eDXf)5Tyw=WrqqD;l%*jliqy6%EPj=8axr7-Fjl}2b{wjd&1Fg6< zoKZgV&op;46Cjn;#~ZJ0yvR}oD<(vna6cr=DRUw!HT#xpGH5aYE55`WLgr-#c&!c+ zs-hTrGm$;Xr(+-r*{-!`4ya*_g$^X4zwaYIM%{;dQ$fxAO~6UguULDp!M#^E+9`Ef zn=%H?`vhJ_=9#d^I=>Wcl)?$4Bau%cfJRh4F8aWZiP=wpnsoG>=%t~Jg7EO_ zXGgP8g9qL2m=CVzMU6$Hds0fX^2K7>h0;Q6Ga`*_uGWQLhfZm!;w0_;FNjF~-U zA{0vKdifTcR-C)E#^k#@CK%8ia*uG&B~3*en0ZeQYw)7VQt?afHrT)c^C$c-gW{`T z@)j-6ZOwo;tJ!XSCW;q-r)SRq)ai_@y`g9v-ZdOHm#>-s z0`^nL#l3a_{Gy-|cI|-n#w{^1mr8r0GR-rNMH?Qc^Z%srb#Q$8O(*3z5trwqj?Y9z zYh}0GdQ*DsCnK{~=xL;|<=i;0DLy6Bz<1;G+sN`?jzPKI>-SAW($C#c&9Zb>D9VWy zQmcw=w%{4;#*ZRac&Ddpm-h=IcF1Dlgh4ww3wA|W!;v)OpFR6Sr%kD? zZSkFv-%vJl;uD3DNHqv}f0td!_ zlf~z&HU!vP;vru-^fqqR2)h zsNuizI7(s~Tu!YzsB;Lj2*T%E6iw8mV+0N*RDi?m)_v4DYFnEtDPliRxQDqLKN=ho zMko7kT1N8!%7ld`Bv&AjbyKK=@pE_~wdY(Wr%>0Y99APi#(1;EaFg|7bs)h9M--i4 zVPrPxJ`bd?u>ai?(J1^QJIv`@>j~OWyGrjankN*r-X<9rE#)lyvBm2TUkGsG za&ey7<%A9H3DBoV|G4Xk!Gr~$8tkCtJa&nDQbJ8@KBJrtCPGX#zn&Oe=ujLgJv(UTmZ~BoHoPKxqN{pNPvLGobi7K@~ ztYm~Wh-!@Q)q~0R%JaNIzPsP=sN61zuj)D5GtF-vkMF#gr@t3~4CuNF-?ZA+=yRJ_ z^gl8)gC<{rUsP7|Xr=!(r_Vb3qGYDpWMGyxIeCdm^fwMTkLT<(z;vgKE?Y*st`bbp~cu08lKzmaR>ExAN0|E zLq!+p(kj06n*pH*R_iU5-d7PT3{eeeb=g^61joJ43hoQnhpP6i9GJf}g%9@(>DyB=pjQRA7$DxB?_>t`Y)l&VQ%nU`-=xaaaEejw9DM6XWP)DeDv;y@ZS=;Jw~GRQLS z42!MCG6=XJkH@v~7gcfY+qK_Gqb=%!kM1JIY&$>mqgJ2!?UTf(5&{(YUy{Xt!wn~j z=e4e4s=^I@_a{SCe&M+ter>n3v{YK_ZS=Iiv}w%Ybx2uA1Mz_pAD=M<2p*5%l~nc) z0yQ>{l8X z1`EE6USgHLuHcP)*_DXKuo-?5AKQ-e+Nfm+)rPR;iuA@uFyX`-;1gBRiE;%w-s7DX zh2Yx#{lH&m4T1<|PP_VS=AfmKL}%wpTC334WD6&A+u}9U$dHODRHFWo3q)D;HLNYn zLdt30`_r$F<&hUkn1>Dm;5VHITS^va#iaCPFdcPv!I{R;Y8*?V{o>^^ZJALSc*9@l z_&b^X+cs!b!aWh)@XeSjbNPq^If_It$*-v4omQiwo^{K!=XoQS`-z-2P}?`^l_%Kw ztp^2$>>Np{$&2iI+1&$!hi5XPf+EDWh)NH6W#Kb}~7^X@_ zv(r~$5_dk+fSn^aJf@=TdTHOc8$Slnsam$P1W2@OHrgV55roq(Vx5zweN3|`*vZkv z;?S^!j4MFROKY8o?`HV2?yBiSo(OF%rYJKCq5-5Vhca_J5ox(3ZoC(^2O`U5B?V`7!x4SpKN{A+$o~ zQQ>Tb{Z5!vR^;I{+@sF$iI|j{&rBD5B`-4kCT-g=A7kzK(S(JeQclj@HR)+8@N|dF zBCSfX_gU>q+I}p5L=fxNX`p+iUXjP0)`N?QSU!iwCA?1X^=G`5#8K^ChsJEWzEQ(( zsU3qVNG$%|ljxRnp}7|`ZTAwf%1RGUni5P$Ng&tdSX>I^>qjqZ(5W{ptqfoRpBAb51n# zeD>P>I@`>`k3X5&z0yu!3@*=QJ=GkWm^cs?ID3_vk~&0Ob z_6alhmIk7iiy1{Wt1Fw<`02#%7G?S<)MH=9@}!%37#2KnxH+(~K23XdzA`?$9QP}o z?Ude6jB6NX1UUop$XTIuoIkKjclSQ9)(wmE7{s}Ga&I{VrfKE)_F7S1R)0Pw^-y0z z*0^+i#c)$kOy$Z~Z6LHuhO{$r=Qr+nq}l@A#?4(9q?q>!9!9?OtDcCvdYdE1FlU^G zd*q9=9}3nX=J$`56nf_xkL4TW9(b#nMc5Svlb-ckW2!#+stoTW{EJ4hskBd1JS|mw}T|3y}faPeDnFcKLuz4s>a^ZsjotZ4> zF~YB#9m=p@F(ayllKotYF>?$4n4feNa3x334gWRBRz#1Wt<1D3e>x@JoYRb-_fsaG zxgucIX>Z zW@ZZx%DeU?tdFcpU=SUR0)3B>NX}r@C*t=;XbjWn)IMv_vkWG1@ZGgPo0fjuswe+r zP!gM2JiC3a8j>LI&ub+|$FfOUH`QeA5Tu3u*cbn;*!k1lJFFrmgHlcetzP))mC5Wt?BxSjw5uw{*aku{z!9PmSMKd5O5K= z<}^>(eTxI1D%gFV5)+MLlye@px^uIhwj0=_q!THMF2fNZmtbc6t$V0;=Bd~>F5q`m z$1h#2TUbMfdQVGLqfJcJkr-QbhzmKuh|?avAbEq0i!))XHm01O&ngDdyB zF||J*sLAr&5vwdjaBDE0_FI^=dvBJ^y6YHtJuI57_J41uuD@E>IOxmIAW-&`$xND$ zLE9h$<%jS-vG&d{d0h!D>?V>y#$PUYzW66>W&+Xm8xPTgz=$dJpb+ zfYIody8d`o9RZZi1~||}a)Bk@(~QY*e>_fdN_bvb&}>|`qMHijs9)gED(hVJIC>q2 z{cSU5G+>+>*flU}O|a|$jr3p9yP5L(fzG=q9gFAnCjbIt3`t20?c*YbfrwKU3D;gW zt}+W#($WIxSxLhu& zsk~mzj_PfSYQGY3whF2>8WiCd!0WF22Bj++yOn)ZqVIvLo;Rt2iZdLmAoN!fYe{>? z3P=w6XotdEZ)NBs8&YGr3rG`K&;vxyu+U?!WZg_H`fUTg8tI>9!mo3=f65Ag%cBP3 z^YfUzn8*7=pZO`Jj+FbHzE2Qd3wjr#n8308@qSOHiBEj)S$sR+%Srw{ZS^HJ^$!$* zajA9eII1kRq3DUvH3I`>I7qWisFD(fjA}vnwR_S@7h8wb-S4+XgZ%S|Y6?Hg7DVl| z3tRM~uB7O~(^|hJ4SVc=V-+N;FU`8+n>uN6_Z4hD!?oh2>KVV0p5@xgMZ#1BcbK!} z-j_Ep{Lxf8$A#{#Jk$QR5#Q9uR-GClQ>!j&T@&Hzwjru;fA5O#h76NOvcvCQ;^~XL zmf~IR*8KfX`)V?A(tn=TI)O z0v7VJt)&b!OoFg-Hp$r5QC^68ZMN93)f_C8bRZfn#oT_PcYQ8#J^DW<6iybuEMo`> YSdIyacCaqqe@+ykT85g9>W+{82M^eXeE + Options -Indexes +FollowSymLinks + AllowOverride None + Require all granted + + SetEnvIf X_FORWARDED_PROTO https HTTPS=on + + +ServerTokens Prod +ServerSignature Off + +LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined + +RemoteIPHeader X-Forwarded-For +RemoteIPInternalProxy 10.0.0.0/8 +RemoteIPInternalProxy 172.16.0.0/12 +RemoteIPInternalProxy 192.168.0.0/16 +RemoteIPInternalProxy 169.254.0.0/16 +RemoteIPInternalProxy 127.0.0.0/8 +RemoteIPInternalProxy ::1 + +# Add Cloudflare IP ranges +RemoteIPTrustedProxy 173.245.48.0/20 +RemoteIPTrustedProxy 103.21.244.0/22 +RemoteIPTrustedProxy 103.22.200.0/22 +RemoteIPTrustedProxy 103.31.4.0/22 +RemoteIPTrustedProxy 141.101.64.0/18 +RemoteIPTrustedProxy 108.162.192.0/18 +RemoteIPTrustedProxy 190.93.240.0/20 +RemoteIPTrustedProxy 188.114.96.0/20 +RemoteIPTrustedProxy 197.234.240.0/22 +RemoteIPTrustedProxy 198.41.128.0/17 +RemoteIPTrustedProxy 162.158.0.0/15 +RemoteIPTrustedProxy 104.16.0.0/13 +RemoteIPTrustedProxy 104.24.0.0/14 +RemoteIPTrustedProxy 172.64.0.0/13 +RemoteIPTrustedProxy 131.0.72.0/22 +RemoteIPTrustedProxy 2400:cb00::/32 +RemoteIPTrustedProxy 2606:4700::/32 +RemoteIPTrustedProxy 2803:f800::/32 +RemoteIPTrustedProxy 2405:b500::/32 +RemoteIPTrustedProxy 2405:8100::/32 +RemoteIPTrustedProxy 2a06:98c0::/29 +RemoteIPTrustedProxy 2c0f:f248::/32 + + + Options -Indexes + AllowOverride None + Require all granted + + + + Options -Indexes + AllowOverride None + Require local + + +Alias /_errors/ /errors/ + + Alias "/health/index.php" + +ErrorDocument 404 /_errors/404.html +ErrorDocument 403 /_errors/403.html +ErrorDocument 500 /_errors/500.html diff --git a/8.6/conf/php.ini b/8.6/conf/php.ini new file mode 100644 index 0000000..75371d2 --- /dev/null +++ b/8.6/conf/php.ini @@ -0,0 +1,17 @@ +date.timezone = Europe/Paris + +opcache.enable = 1 +opcache.enable_cli = 1 +opcache.memory_consumption = 128 +opcache.revalidate_freq = 0 +apc.enable_cli = On + +upload_max_filesize = 16M +post_max_size = 16M + +realpath_cache_size = 4096k +realpath_cache_ttl = 7200 + +display_errors = Off +display_startup_errors = Off +error_log = /proc/self/fd/2 diff --git a/8.6/conf/vhost.conf b/8.6/conf/vhost.conf new file mode 100644 index 0000000..a16c65c --- /dev/null +++ b/8.6/conf/vhost.conf @@ -0,0 +1,8 @@ + + ServerAdmin hello@silarhi.fr + + DocumentRoot /app + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/8.6/errors/403.html b/8.6/errors/403.html new file mode 100644 index 0000000..97890d1 --- /dev/null +++ b/8.6/errors/403.html @@ -0,0 +1,20 @@ + + + + + + + Erreur 403 (Interdit) + + + + + + + diff --git a/8.6/errors/404.html b/8.6/errors/404.html new file mode 100644 index 0000000..f0b6399 --- /dev/null +++ b/8.6/errors/404.html @@ -0,0 +1,20 @@ + + + + + + + Erreur 404 (Introuvable) + + + + +
+
+

404

+

Oops! Vous êtes perdu.

+

La page que vous demandez est introuvable. Elle a peut-être été supprimée ou déplacée.

+ Retour à la page d'accueil +
+ + diff --git a/8.6/errors/500.html b/8.6/errors/500.html new file mode 100644 index 0000000..b34c2d7 --- /dev/null +++ b/8.6/errors/500.html @@ -0,0 +1,20 @@ + + + + + + + Erreur 500 (Inaccessible) + + + + +
+
+

500

+

Huston, on a un problème !

+

La page que vous demandez est temporairement inaccessible.

+ Retour à la page d'accueil +
+ + diff --git a/8.6/errors/css/style.css b/8.6/errors/css/style.css new file mode 100644 index 0000000..6be89a5 --- /dev/null +++ b/8.6/errors/css/style.css @@ -0,0 +1,102 @@ +html { + box-sizing: border-box; + font-size: 16px; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +body, h1, h2, h3, h4, h5, h6, p, ol, ul { + margin: 0; + padding: 0; + font-weight: normal; +} + +ol, ul { + list-style: none; +} + +html, body { + height: 100%; +} + +body { + font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +#error-box { + position: relative; + max-width: 560px; + width: 100%; + padding-left: 160px; + line-height: 1.1; +} + +#error-box #error-image { + position: absolute; + left: 0; + top: 0; + display: inline-block; + width: 140px; + height: 140px; + background-image: url('/_errors/img/emoji.png'); + background-size: cover; +} + +#error-box #error-image:before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + transform: scale(2.4); + border-radius: 50%; + background-color: #f2f5f8; + z-index: -1; +} + +#error-box h1 { + font-size: 65px; + font-weight: 700; + margin-top: 0; + margin-bottom: 10px; + color: #151723; + text-transform: uppercase; +} + +#error-box h2 { + font-size: 21px; + font-weight: 400; + margin: 0 0 1rem 0; + text-transform: uppercase; + color: #151723; +} + +#error-box p { + color: #999fa5; + font-weight: 400; + margin-bottom: 1rem; +} + +#error-box a { + font-weight: 500; + text-decoration: none; + color: #388dbc; +} + +@media only screen and (max-width: 767px) { + #error-box #error-image { + width: 110px; + height: 110px; + } + + #error-box { + padding-left: 15px; + padding-right: 15px; + padding-top: 110px; + } +} diff --git a/8.6/errors/img/emoji.png b/8.6/errors/img/emoji.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd4942deaebf02d1f0e3f274de20eb92d3fae48 GIT binary patch literal 7358 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 YSdIyacCaqqe@+ykT85g9>W+{82M^eXeE Date: Mon, 12 Oct 2026 15:14:47 +0200 Subject: [PATCH 2/2] fix: apply the image and OPcache fixes to the PHP 8.6 images Same changes as #58 (Apache logs on stdout/stderr, php.ini-production, X-Forwarded-Proto, no health check in the CI image, Composer through install-php-extensions) and #59 (OPcache timestamps and sizing), so the 8.6 folders match 8.5 apart from the base image. conf/ is copied from _shared/ as it will be once both are merged; until then, running update.sh on this branch alone would revert it. --- 8.6-ci/Dockerfile | 3 --- 8.6-symfony/Dockerfile | 6 ++++-- 8.6-symfony/conf/apache.conf | 2 +- 8.6-symfony/conf/php.ini | 8 +++++++- 8.6/Dockerfile | 9 +++++---- 8.6/conf/apache.conf | 2 +- 8.6/conf/php.ini | 8 +++++++- 7 files changed, 25 insertions(+), 13 deletions(-) diff --git a/8.6-ci/Dockerfile b/8.6-ci/Dockerfile index 9b9ec05..0a125e3 100644 --- a/8.6-ci/Dockerfile +++ b/8.6-ci/Dockerfile @@ -5,9 +5,6 @@ ENV COMPOSER_ALLOW_SUPERUSER=1 WORKDIR /app -HEALTHCHECK --interval=1m --timeout=3s --start-period=5s --start-interval=1s --retries=3 \ - CMD ["/bin/sh", "-c", "curl -f http://localhost/_health || exit 1"] - SHELL ["/bin/ash", "-o", "pipefail", "-c"] # Install dependencies diff --git a/8.6-symfony/Dockerfile b/8.6-symfony/Dockerfile index b4bc80a..f838d8d 100644 --- a/8.6-symfony/Dockerfile +++ b/8.6-symfony/Dockerfile @@ -2,6 +2,7 @@ FROM mlocati/php-extension-installer:latest AS php-extension-installer FROM php:8.6-rc-apache ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS=0 EXPOSE 80 WORKDIR /app @@ -17,12 +18,13 @@ RUN apt-get update -qq && \ gnupg \ unzip \ zip && \ - apt-get clean && rm -rf /var/lib/apt/lists/* /var/log/* + apt-get clean && rm -rf /var/lib/apt/lists/* # PHP Extensions COPY --from=php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ RUN install-php-extensions @composer intl opcache pdo_mysql zip -COPY --link conf/php.ini /usr/local/etc/php/conf.d/app.ini +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" +COPY --link conf/php.ini $PHP_INI_DIR/conf.d/app.ini # Apache COPY --link errors /errors diff --git a/8.6-symfony/conf/apache.conf b/8.6-symfony/conf/apache.conf index e827487..142ec3c 100644 --- a/8.6-symfony/conf/apache.conf +++ b/8.6-symfony/conf/apache.conf @@ -3,7 +3,7 @@ AllowOverride None Require all granted - SetEnvIf X_FORWARDED_PROTO https HTTPS=on + SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on ServerTokens Prod diff --git a/8.6-symfony/conf/php.ini b/8.6-symfony/conf/php.ini index 75371d2..81f7cde 100644 --- a/8.6-symfony/conf/php.ini +++ b/8.6-symfony/conf/php.ini @@ -2,7 +2,12 @@ date.timezone = Europe/Paris opcache.enable = 1 opcache.enable_cli = 1 -opcache.memory_consumption = 128 +opcache.memory_consumption = 256 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +; Files are compiled once and never checked again: restart PHP to deploy new code, or set +; PHP_OPCACHE_VALIDATE_TIMESTAMPS=1 when the sources are mounted and edited in place. +opcache.validate_timestamps = ${PHP_OPCACHE_VALIDATE_TIMESTAMPS} opcache.revalidate_freq = 0 apc.enable_cli = On @@ -12,6 +17,7 @@ post_max_size = 16M realpath_cache_size = 4096k realpath_cache_ttl = 7200 +expose_php = Off display_errors = Off display_startup_errors = Off error_log = /proc/self/fd/2 diff --git a/8.6/Dockerfile b/8.6/Dockerfile index ddf254b..9ae1a5b 100644 --- a/8.6/Dockerfile +++ b/8.6/Dockerfile @@ -2,6 +2,7 @@ FROM mlocati/php-extension-installer:latest AS php-extension-installer FROM php:8.6-rc-apache ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS=0 EXPOSE 80 WORKDIR /app @@ -18,13 +19,13 @@ RUN apt-get update -qq && \ gnupg \ unzip \ zip && \ - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ - apt-get clean && rm -rf /var/lib/apt/lists/* /var/log/* + apt-get clean && rm -rf /var/lib/apt/lists/* # PHP Extensions COPY --from=php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ -RUN install-php-extensions opcache pdo_mysql -COPY --link conf/php.ini /usr/local/etc/php/conf.d/app.ini +RUN install-php-extensions @composer opcache pdo_mysql +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" +COPY --link conf/php.ini $PHP_INI_DIR/conf.d/app.ini # Apache COPY --link errors /errors diff --git a/8.6/conf/apache.conf b/8.6/conf/apache.conf index e827487..142ec3c 100644 --- a/8.6/conf/apache.conf +++ b/8.6/conf/apache.conf @@ -3,7 +3,7 @@ AllowOverride None Require all granted - SetEnvIf X_FORWARDED_PROTO https HTTPS=on + SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on ServerTokens Prod diff --git a/8.6/conf/php.ini b/8.6/conf/php.ini index 75371d2..81f7cde 100644 --- a/8.6/conf/php.ini +++ b/8.6/conf/php.ini @@ -2,7 +2,12 @@ date.timezone = Europe/Paris opcache.enable = 1 opcache.enable_cli = 1 -opcache.memory_consumption = 128 +opcache.memory_consumption = 256 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +; Files are compiled once and never checked again: restart PHP to deploy new code, or set +; PHP_OPCACHE_VALIDATE_TIMESTAMPS=1 when the sources are mounted and edited in place. +opcache.validate_timestamps = ${PHP_OPCACHE_VALIDATE_TIMESTAMPS} opcache.revalidate_freq = 0 apc.enable_cli = On @@ -12,6 +17,7 @@ post_max_size = 16M realpath_cache_size = 4096k realpath_cache_ttl = 7200 +expose_php = Off display_errors = Off display_startup_errors = Off error_log = /proc/self/fd/2