[{"data":1,"prerenderedAt":1086},["ShallowReactive",2],{"navigation":3,"/docs/upgrading/upgrade-guide":249,"/docs/upgrading/upgrade-guide-surround":1081},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","/docs","docs",[9,12,48,77,132,160,185,206,219,236],{"title":10,"path":6,"stem":11},"","docs/index",{"title":13,"path":14,"stem":15,"children":16,"icon":47},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[17,19,23,27,31,35,39,43],{"title":18,"path":14,"stem":15},"Introduction",{"title":20,"path":21,"stem":22},"Container basics","/docs/getting-started/container-basics","docs/1.getting-started/2.container-basics",{"title":24,"path":25,"stem":26},"Installation","/docs/getting-started/installation","docs/1.getting-started/3.installation",{"title":28,"path":29,"stem":30},"These images vs others","/docs/getting-started/these-images-vs-others","docs/1.getting-started/4.these-images-vs-others",{"title":32,"path":33,"stem":34},"Choosing an image","/docs/getting-started/choosing-an-image","docs/1.getting-started/5.choosing-an-image",{"title":36,"path":37,"stem":38},"Default configurations","/docs/getting-started/default-configurations","docs/1.getting-started/6.default-configurations",{"title":40,"path":41,"stem":42},"Migrating from official PHP images","/docs/getting-started/migrating-from-official-php-images","docs/1.getting-started/7.migrating-from-official-php-images",{"title":44,"path":45,"stem":46},"Contributing","/docs/getting-started/contributing","docs/1.getting-started/99.contributing",false,{"title":49,"path":50,"stem":51,"children":52,"page":47},"Image Variations","/docs/image-variations","docs/2.image-variations",[53,57,61,65,69,73],{"title":54,"path":55,"stem":56},"CLI","/docs/image-variations/cli","docs/2.image-variations/cli",{"title":58,"path":59,"stem":60},"FPM","/docs/image-variations/fpm","docs/2.image-variations/fpm",{"title":62,"path":63,"stem":64},"FPM-Apache","/docs/image-variations/fpm-apache","docs/2.image-variations/fpm-apache",{"title":66,"path":67,"stem":68},"FPM-NGINX","/docs/image-variations/fpm-nginx","docs/2.image-variations/fpm-nginx",{"title":70,"path":71,"stem":72},"FrankenPHP","/docs/image-variations/frankenphp","docs/2.image-variations/frankenphp",{"title":74,"path":75,"stem":76},"NGINX Unit (removed)","/docs/image-variations/unit","docs/2.image-variations/unit",{"title":78,"path":79,"stem":80,"children":81,"page":47},"Framework Guides","/docs/framework-guides","docs/3.framework-guides",[82,123],{"title":83,"icon":47,"defaultOpen":47,"path":84,"stem":85,"children":86,"page":47},"Laravel","/docs/framework-guides/laravel","docs/3.framework-guides/1.laravel",[87,91,95,99,103,107,111,115,119],{"title":88,"path":89,"stem":90},"Automations","/docs/framework-guides/laravel/automations","docs/3.framework-guides/1.laravel/1.automations",{"title":92,"path":93,"stem":94},"Running workers","/docs/framework-guides/laravel/workers","docs/3.framework-guides/1.laravel/2.workers",{"title":96,"path":97,"stem":98},"Health checks","/docs/framework-guides/laravel/health-checks","docs/3.framework-guides/1.laravel/3.health-checks",{"title":100,"path":101,"stem":102},"Horizon","/docs/framework-guides/laravel/horizon","docs/3.framework-guides/1.laravel/4.horizon",{"title":104,"path":105,"stem":106},"Nightwatch","/docs/framework-guides/laravel/nightwatch","docs/3.framework-guides/1.laravel/5.nightwatch",{"title":108,"path":109,"stem":110},"Octane","/docs/framework-guides/laravel/octane","docs/3.framework-guides/1.laravel/6.octane",{"title":112,"path":113,"stem":114},"Queue","/docs/framework-guides/laravel/queue","docs/3.framework-guides/1.laravel/7.queue",{"title":116,"path":117,"stem":118},"Reverb","/docs/framework-guides/laravel/reverb","docs/3.framework-guides/1.laravel/8.reverb",{"title":120,"path":121,"stem":122},"Task scheduler","/docs/framework-guides/laravel/task-scheduler","docs/3.framework-guides/1.laravel/9.task-scheduler",{"title":124,"icon":47,"defaultOpen":47,"path":125,"stem":126,"children":127,"page":47},"WordPress","/docs/framework-guides/wordpress","docs/3.framework-guides/2.wordpress",[128],{"title":129,"path":130,"stem":131},"Using WordPress with Docker","/docs/framework-guides/wordpress/using-wordpress-with-docker","docs/3.framework-guides/2.wordpress/4.using-wordpress-with-docker",{"title":133,"path":134,"stem":135,"children":136,"page":47},"Deployment And Production","/docs/deployment-and-production","docs/4.deployment-and-production",[137,141,145,148,152,156],{"title":138,"path":139,"stem":140},"Packaging your app for deployment","/docs/deployment-and-production/packaging-your-app-for-deployment","docs/4.deployment-and-production/1.packaging-your-app-for-deployment",{"title":142,"path":143,"stem":144},"Configuring SSL","/docs/deployment-and-production/configuring-ssl","docs/4.deployment-and-production/2.configuring-ssl",{"title":96,"path":146,"stem":147},"/docs/deployment-and-production/health-checks","docs/4.deployment-and-production/3.health-checks",{"title":149,"path":150,"stem":151},"Configuring trusted proxies","/docs/deployment-and-production/configuring-trusted-proxies","docs/4.deployment-and-production/4.configuring-trusted-proxies",{"title":153,"path":154,"stem":155},"Production performance tuning","/docs/deployment-and-production/production-performance-tuning","docs/4.deployment-and-production/5.production-performance-tuning",{"title":157,"path":158,"stem":159},"Choosing a host","/docs/deployment-and-production/choosing-a-host","docs/4.deployment-and-production/6.choosing-a-host",{"title":161,"icon":47,"defaultOpen":47,"path":162,"stem":163,"children":164,"page":47},"Customization","/docs/customizing-the-image","docs/5.customizing-the-image",[165,169,173,177,181],{"title":166,"path":167,"stem":168},"Changing php.ini settings","/docs/customizing-the-image/changing-common-php-settings","docs/5.customizing-the-image/1.changing-common-php-settings",{"title":170,"path":171,"stem":172},"Installing PHP extensions","/docs/customizing-the-image/installing-additional-php-extensions","docs/5.customizing-the-image/2.installing-additional-php-extensions",{"title":174,"path":175,"stem":176},"Adding start up scripts","/docs/customizing-the-image/adding-your-own-start-up-scripts","docs/5.customizing-the-image/3.adding-your-own-start-up-scripts",{"title":178,"path":179,"stem":180},"Using S6 Overlay","/docs/customizing-the-image/using-s6-overlay","docs/5.customizing-the-image/4.using-s6-overlay",{"title":182,"path":183,"stem":184},"Understanding file permissions","/docs/customizing-the-image/understanding-file-permissions","docs/5.customizing-the-image/5.understanding-file-permissions",{"title":186,"icon":47,"defaultOpen":47,"path":187,"stem":188,"children":189,"page":47},"Upgrading","/docs/upgrading","docs/6.upgrading",[190,194,198,202],{"title":191,"path":192,"stem":193},"Upgrade guide","/docs/upgrading/upgrade-guide","docs/6.upgrading/1.upgrade-guide",{"title":195,"path":196,"stem":197},"Upgrade to v5","/docs/upgrading/upgrade-to-v5","docs/6.upgrading/2.upgrade-to-v5",{"title":199,"path":200,"stem":201},"Upgrade to v4","/docs/upgrading/upgrade-to-v4","docs/6.upgrading/3.upgrade-to-v4",{"title":203,"path":204,"stem":205},"Upgrade to v3","/docs/upgrading/upgrade-to-v3","docs/6.upgrading/4.upgrade-to-v3",{"title":207,"path":208,"stem":209,"children":210,"page":47},"Troubleshooting","/docs/troubleshooting","docs/7.troubleshooting",[211,215],{"title":212,"path":213,"stem":214},"Common issues","/docs/troubleshooting/common-issues","docs/7.troubleshooting/1.common-issues",{"title":216,"path":217,"stem":218},"Getting help","/docs/troubleshooting/getting-help","docs/7.troubleshooting/2.getting-help",{"title":220,"path":221,"stem":222,"children":223,"page":47},"Security","/docs/security","docs/8.security",[224,228,232],{"title":225,"path":226,"stem":227},"How images are built","/docs/security/how-images-are-built","docs/8.security/1.how-images-are-built",{"title":229,"path":230,"stem":231},"Verifying images","/docs/security/verifying-images","docs/8.security/2.verifying-images",{"title":233,"path":234,"stem":235},"Vulnerability scanning","/docs/security/vulnerability-scanning","docs/8.security/3.vulnerability-scanning",{"title":237,"path":238,"stem":239,"children":240,"page":47},"Reference","/docs/reference","docs/9.reference",[241,245],{"title":242,"path":243,"stem":244},"Environment variable specification","/docs/reference/environment-variable-specification","docs/9.reference/1.environment-variable-specification",{"title":246,"path":247,"stem":248},"Command reference","/docs/reference/command-reference","docs/9.reference/2.command-reference",{"id":250,"title":191,"body":251,"description":1073,"extension":1074,"links":1075,"meta":1076,"navigation":558,"path":192,"redirect":1075,"seo":1079,"stem":193,"__hash__":1080},"docs/docs/6.upgrading/1.upgrade-guide.md",{"type":252,"value":253,"toc":1061},"minimark",[254,261,290,302,307,315,380,384,391,461,468,471,492,505,509,512,517,528,650,654,667,692,703,729,733,741,799,812,817,821,841,876,1008,1023,1030,1034,1037,1054,1057],[255,256,257],"lead-p",{},[258,259,260],"p",{},"Your image tag decides how updates reach you. Floating tags are rebuilt for you. Version-pinned tags never change.",[258,262,263,264,271,272,276,277,276,280,283,284,289],{},"Watch the ",[265,266,270],"a",{"href":267,"rel":268},"https://github.com/serversideup/docker-php",[269],"nofollow","GitHub repository"," for releases (",[273,274,275],"strong",{},"Watch"," → ",[273,278,279],{},"Custom",[273,281,282],{},"Releases",") so you hear about changes whichever tag you use. Release notes for every version are on ",[265,285,288],{"href":286,"rel":287},"https://github.com/serversideup/docker-php/releases",[269],"GitHub releases",".",[258,291,292],{},[293,294],"img",{"alt":295,"className":296,"src":301},"The Watch button on the serversideup/docker-php GitHub repository",[297,298,299,300],"max-w-md","w-full","h-auto","mx-auto","images/docs/watch-repo.png",[303,304,306],"h2",{"id":305},"when-images-are-rebuilt","When images are rebuilt",[258,308,309,310,314],{},"Code merges into ",[311,312,313],"code",{},"main"," and ships first as a beta pre-release. After testing, we publish a GitHub release, which builds every image and pushes it to Docker Hub and GitHub Packages. Two other triggers rebuild the floating tags between releases.",[316,317,318,337],"table",{},[319,320,321],"thead",{},[322,323,324,328,331,334],"tr",{},[325,326,327],"th",{},"Trigger",[325,329,330],{},"When",[325,332,333],{},"Floating tags",[325,335,336],{},"Version-pinned tags",[338,339,340,355,368],"tbody",{},[322,341,342,346,349,352],{},[343,344,345],"td",{},"GitHub release",[343,347,348],{},"When we publish one",[343,350,351],{},"✅ Updated",[343,353,354],{},"✅ Created",[322,356,357,360,363,365],{},[343,358,359],{},"Weekly rebuild",[343,361,362],{},"Tuesdays at 08:00 UTC, for OS security updates",[343,364,351],{},[343,366,367],{},"❌",[322,369,370,373,376,378],{},[343,371,372],{},"New PHP patch",[343,374,375],{},"Hourly check of php.net starts a build; published once it passes tests",[343,377,351],{},[343,379,367],{},[303,381,383],{"id":382},"floating-and-version-pinned-tags","Floating and version-pinned tags",[258,385,386,387,390],{},"A tag that ends in a release version, such as ",[311,388,389],{},"-v5.0.5",", is version-pinned. Every other tag floats.",[316,392,393,405],{},[319,394,395],{},[322,396,397,399,402],{},[325,398],{},[325,400,401],{},"Floating",[325,403,404],{},"Version-pinned",[338,406,407,422,433,450],{},[322,408,409,412,417],{},[343,410,411],{},"Example",[343,413,414],{},[311,415,416],{},"serversideup/php:8.5-fpm-nginx",[343,418,419],{},[311,420,421],{},"serversideup/php:8.5-fpm-nginx-v5.0.5",[322,423,424,427,430],{},[343,425,426],{},"Rebuilt",[343,428,429],{},"On every trigger above",[343,431,432],{},"Never. Written once, on release.",[322,434,435,438,444],{},[343,436,437],{},"Security updates",[343,439,440,441],{},"Run ",[311,442,443],{},"docker pull",[343,445,446],{},[265,447,449],{"href":448},"#apply-your-own-security-updates","Apply them yourself",[322,451,452,455,458],{},[343,453,454],{},"Use it when",[343,456,457],{},"You want patches without extra work",[343,459,460],{},"You need reproducible builds (compliance, air-gapped hosts) and have your own patch process",[258,462,463,464,467],{},"For most projects, use a floating tag on a PHP minor version, such as ",[311,465,466],{},"8.5-fpm-nginx",". PHP stays on 8.5 while patches and OS updates arrive. Test a pulled image before it reaches production.",[258,469,470],{},"How specific the PHP version in a floating tag is changes what you get:",[472,473,474,481,486],"ul",{},[475,476,477,480],"li",{},[311,478,479],{},"8-fpm-nginx"," follows the newest PHP 8.x minor.",[475,482,483,485],{},[311,484,466],{}," follows the newest 8.5.x patch.",[475,487,488,491],{},[311,489,490],{},"8.5.12-fpm-nginx"," stays on PHP 8.5.12. It gets the weekly OS updates until 8.5.13 ships, then it is no longer rebuilt.",[258,493,494,497,498,501,502,504],{},[311,495,496],{},"latest"," is the ",[311,499,500],{},"cli"," variation on the newest stable PHP. Don't use it for an app. ",[265,503,32],{"href":33}," lists every variation, operating system, and tag.",[303,506,508],{"id":507},"apply-your-own-security-updates","Apply your own security updates",[258,510,511],{},"Patch an image yourself when a CVE is disclosed after your version-pinned tag was released. Do the same on a floating tag when you need a fix before the next rebuild. Either way, extend our image in your own Dockerfile and test the result before you deploy it.",[513,514,516],"h3",{"id":515},"update-operating-system-packages","Update operating system packages",[258,518,519,520,523,524,527],{},"The images run as the unprivileged ",[311,521,522],{},"www-data"," user. Switch to ",[311,525,526],{},"root"," for the package manager, then back.",[529,530,531,604],"code-group",{},[532,533,538],"pre",{"className":534,"code":535,"filename":536,"language":537,"meta":10,"style":10},"language-dockerfile shiki shiki-themes github-dark","FROM serversideup/php:8.5-fpm-nginx-v5.0.5\n\nUSER root\nRUN apt-get update \\\n    && apt-get upgrade -y \\\n    && apt-get clean \\\n    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*\nUSER www-data\n","Debian","dockerfile",[311,539,540,553,560,569,578,584,590,596],{"__ignoreMap":10},[541,542,545,549],"span",{"class":543,"line":544},"line",1,[541,546,548],{"class":547},"snl16","FROM",[541,550,552],{"class":551},"s95oV"," serversideup/php:8.5-fpm-nginx-v5.0.5\n",[541,554,556],{"class":543,"line":555},2,[541,557,559],{"emptyLinePlaceholder":558},true,"\n",[541,561,563,566],{"class":543,"line":562},3,[541,564,565],{"class":547},"USER",[541,567,568],{"class":551}," root\n",[541,570,572,575],{"class":543,"line":571},4,[541,573,574],{"class":547},"RUN",[541,576,577],{"class":551}," apt-get update \\\n",[541,579,581],{"class":543,"line":580},5,[541,582,583],{"class":551},"    && apt-get upgrade -y \\\n",[541,585,587],{"class":543,"line":586},6,[541,588,589],{"class":551},"    && apt-get clean \\\n",[541,591,593],{"class":543,"line":592},7,[541,594,595],{"class":551},"    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*\n",[541,597,599,601],{"class":543,"line":598},8,[541,600,565],{"class":547},[541,602,603],{"class":551}," www-data\n",[532,605,608],{"className":534,"code":606,"filename":607,"language":537,"meta":10,"style":10},"FROM serversideup/php:8.5-fpm-nginx-alpine-v5.0.5\n\nUSER root\nRUN apk update \\\n    && apk upgrade \\\n    && rm -rf /var/cache/apk/*\nUSER www-data\n","Alpine",[311,609,610,617,621,627,634,639,644],{"__ignoreMap":10},[541,611,612,614],{"class":543,"line":544},[541,613,548],{"class":547},[541,615,616],{"class":551}," serversideup/php:8.5-fpm-nginx-alpine-v5.0.5\n",[541,618,619],{"class":543,"line":555},[541,620,559],{"emptyLinePlaceholder":558},[541,622,623,625],{"class":543,"line":562},[541,624,565],{"class":547},[541,626,568],{"class":551},[541,628,629,631],{"class":543,"line":571},[541,630,574],{"class":547},[541,632,633],{"class":551}," apk update \\\n",[541,635,636],{"class":543,"line":580},[541,637,638],{"class":551},"    && apk upgrade \\\n",[541,640,641],{"class":543,"line":586},[541,642,643],{"class":551},"    && rm -rf /var/cache/apk/*\n",[541,645,646,648],{"class":543,"line":592},[541,647,565],{"class":547},[541,649,603],{"class":551},[513,651,653],{"id":652},"update-composer","Update Composer",[258,655,656,657,666],{},"Every variation copies Composer from the ",[265,658,661,662,665],{"href":659,"rel":660},"https://hub.docker.com/_/composer",[269],"official ",[311,663,664],{},"composer"," image",". Copy a newer one over it the same way:",[532,668,671],{"className":534,"code":669,"filename":670,"language":537,"meta":10,"style":10},"FROM serversideup/php:8.5-cli-v5.0.5\n\nCOPY --from=composer:2 /usr/bin/composer /usr/bin/composer\n","Dockerfile",[311,672,673,680,684],{"__ignoreMap":10},[541,674,675,677],{"class":543,"line":544},[541,676,548],{"class":547},[541,678,679],{"class":551}," serversideup/php:8.5-cli-v5.0.5\n",[541,681,682],{"class":543,"line":555},[541,683,559],{"emptyLinePlaceholder":558},[541,685,686,689],{"class":543,"line":562},[541,687,688],{"class":547},"COPY",[541,690,691],{"class":551}," --from=composer:2 /usr/bin/composer /usr/bin/composer\n",[258,693,694,695,698,699,702],{},"Replace ",[311,696,697],{},"composer:2"," with an exact version such as ",[311,700,701],{},"composer:2.9.8"," if you need reproducible builds.",[704,705,707],"warning",{"title":706},"Web servers come from package repositories",[472,708,709,716,719],{},[475,710,711,712,715],{},"Apache comes from the OS repositories, so ",[311,713,714],{},"apt-get upgrade"," only gets the version your Debian release ships.",[475,717,718],{},"NGINX comes from the nginx.org repository at the version our build config sets.",[475,720,721,722,725,726,289],{},"For a newer web server, pull a newer floating tag or move to a newer base OS, for example from ",[311,723,724],{},"bookworm"," to ",[311,727,728],{},"trixie",[303,730,732],{"id":731},"php-and-os-versions-we-no-longer-build","PHP and OS versions we no longer build",[258,734,735,736,289],{},"We build an end-of-life PHP version while its official docker-library Dockerfile exists and the OS underneath still gets security updates. Once the OS is end of life too, a rebuild can't deliver patches. That's when we stop. The tags stay pullable but freeze at their last build. The full rule is in our ",[265,737,740],{"href":738,"rel":739},"https://github.com/serversideup/docker-php/blob/main/SECURITY.md#component-lifecycle-references",[269],"security policy",[316,742,743,756],{},[319,744,745],{},[322,746,747,750,753],{},[325,748,749],{},"Version",[325,751,752],{},"Last built",[325,754,755],{},"Why",[338,757,758,769,779,789],{},[322,759,760,763,766],{},[343,761,762],{},"PHP 8.0",[343,764,765],{},"2026-09-03",[343,767,768],{},"Only shipped on Debian Bullseye and Alpine 3.16, both end of life. Upstream stopped building it in November 2023.",[322,770,771,774,776],{},[343,772,773],{},"PHP 7.4",[343,775,765],{},[343,777,778],{},"Same bases as 8.0. Upstream stopped building it in November 2022.",[322,780,781,784,786],{},[343,782,783],{},"Debian Bullseye",[343,785,765],{},[343,787,788],{},"Debian 11 LTS ended on 2026-08-31, and Debian removed its packages from the mirrors the following week.",[322,790,791,794,796],{},[343,792,793],{},"Alpine 3.16",[343,795,765],{},[343,797,798],{},"End of life on 2024-05-23. Only PHP 7.4 and 8.0 used it.",[258,800,801,802,804,805,807,808,811],{},"PHP 8.1 is end of life but still built on ",[311,803,724],{},", ",[311,806,728],{},", and ",[311,809,810],{},"alpine3.22",", because those bases still get security updates. It stops when they do.",[258,813,814,815,289],{},"If you're on a frozen tag, move to a supported PHP version and base from ",[265,816,32],{"href":33},[513,818,820],{"id":819},"installing-packages-on-a-frozen-bullseye-image","Installing packages on a frozen Bullseye image",[704,822,824],{"title":823},"Unsupported, and it doesn't make the image safer",[258,825,826,827,804,830,807,833,836,837,840],{},"The ",[311,828,829],{},"7.4",[311,831,832],{},"8.0",[311,834,835],{},"-bullseye"," tags are frozen, and Debian no longer publishes security updates for Bullseye. This recipe only makes ",[311,838,839],{},"apt-get install"," work again so you can add a dependency while you finish migrating.",[258,842,843,844,847,848,725,851,854,855,858,859,865,866,871,872,875],{},"Debian moved ",[311,845,846],{},"bullseye"," and ",[311,849,850],{},"bullseye-updates",[311,852,853],{},"archive.debian.org",". The last copy of ",[311,856,857],{},"bullseye-security"," is only on ",[265,860,864],{"href":861,"rel":862,"target":863},"https://snapshot.debian.org/",[269],"_blank","snapshot.debian.org",". Its release file has expired, so apt must skip the expiry check. This is the same approach ",[265,867,870],{"href":868,"rel":869,"target":863},"https://github.com/mlocati/docker-php-extension-installer/pull/1320",[269],"docker-php-extension-installer uses",". The recipe also installs a newer ",[311,873,874],{},"install-php-extensions",", because the frozen images ship one from before that fix.",[532,877,879],{"className":534,"code":878,"filename":670,"language":537,"meta":10,"style":10},"FROM serversideup/php:7.4-fpm-nginx\n\nUSER root\n\nRUN printf '%s\\n' \\\n      'deb http://archive.debian.org/debian bullseye main' \\\n      'deb http://archive.debian.org/debian bullseye-updates main' \\\n      'deb http://snapshot.debian.org/archive/debian-security/20260903T220410Z bullseye-security main' \\\n      > /etc/apt/sources.list \\\n    && printf 'Acquire::Check-Valid-Until \"false\";\\n' > /etc/apt/apt.conf.d/99no-check-valid-until \\\n    && docker-php-serversideup-install-php-ext-installer 2.11.15\n\nRUN docker-php-serversideup-dep-install-debian \"mariadb-client\" \\\n    && install-php-extensions intl\n\nUSER www-data\n",[311,880,881,888,892,898,902,923,930,937,944,950,966,972,977,990,996,1001],{"__ignoreMap":10},[541,882,883,885],{"class":543,"line":544},[541,884,548],{"class":547},[541,886,887],{"class":551}," serversideup/php:7.4-fpm-nginx\n",[541,889,890],{"class":543,"line":555},[541,891,559],{"emptyLinePlaceholder":558},[541,893,894,896],{"class":543,"line":562},[541,895,565],{"class":547},[541,897,568],{"class":551},[541,899,900],{"class":543,"line":571},[541,901,559],{"emptyLinePlaceholder":558},[541,903,904,906,909,913,917,920],{"class":543,"line":580},[541,905,574],{"class":547},[541,907,908],{"class":551}," printf ",[541,910,912],{"class":911},"sU2Wk","'%s",[541,914,916],{"class":915},"sDLfK","\\n",[541,918,919],{"class":911},"'",[541,921,922],{"class":551}," \\\n",[541,924,925,928],{"class":543,"line":586},[541,926,927],{"class":911},"      'deb http://archive.debian.org/debian bullseye main'",[541,929,922],{"class":551},[541,931,932,935],{"class":543,"line":592},[541,933,934],{"class":911},"      'deb http://archive.debian.org/debian bullseye-updates main'",[541,936,922],{"class":551},[541,938,939,942],{"class":543,"line":598},[541,940,941],{"class":911},"      'deb http://snapshot.debian.org/archive/debian-security/20260903T220410Z bullseye-security main'",[541,943,922],{"class":551},[541,945,947],{"class":543,"line":946},9,[541,948,949],{"class":551},"      > /etc/apt/sources.list \\\n",[541,951,953,956,959,961,963],{"class":543,"line":952},10,[541,954,955],{"class":551},"    && printf ",[541,957,958],{"class":911},"'Acquire::Check-Valid-Until \"false\";",[541,960,916],{"class":915},[541,962,919],{"class":911},[541,964,965],{"class":551}," > /etc/apt/apt.conf.d/99no-check-valid-until \\\n",[541,967,969],{"class":543,"line":968},11,[541,970,971],{"class":551},"    && docker-php-serversideup-install-php-ext-installer 2.11.15\n",[541,973,975],{"class":543,"line":974},12,[541,976,559],{"emptyLinePlaceholder":558},[541,978,980,982,985,988],{"class":543,"line":979},13,[541,981,574],{"class":547},[541,983,984],{"class":551}," docker-php-serversideup-dep-install-debian ",[541,986,987],{"class":911},"\"mariadb-client\"",[541,989,922],{"class":551},[541,991,993],{"class":543,"line":992},14,[541,994,995],{"class":551},"    && install-php-extensions intl\n",[541,997,999],{"class":543,"line":998},15,[541,1000,559],{"emptyLinePlaceholder":558},[541,1002,1004,1006],{"class":543,"line":1003},16,[541,1005,565],{"class":547},[541,1007,603],{"class":551},[258,1009,1010,1011,1013,1014,1016,1017,1019,1020,289],{},"Once Debian publishes ",[311,1012,857],{}," on ",[311,1015,853],{},", replace the ",[311,1018,864],{}," line with ",[311,1021,1022],{},"deb http://archive.debian.org/debian-security bullseye-security main",[258,1024,1025,1026,1029],{},"The Alpine 3.16 tags need no changes. Alpine keeps every past release on its mirrors, so ",[311,1027,1028],{},"apk add"," still works. The packages are just as unpatched.",[303,1031,1033],{"id":1032},"upgrade-to-a-new-major-version","Upgrade to a new major version",[258,1035,1036],{},"Floating tags always come from the newest major version. A major version has breaking changes. Read its page before you pull, or pin to the last release of your current major while you review:",[472,1038,1039,1044,1049],{},[475,1040,1041,1043],{},[265,1042,195],{"href":196}," from v4",[475,1045,1046,1048],{},[265,1047,199],{"href":200}," from v3",[475,1050,1051,1053],{},[265,1052,203],{"href":204}," from v2",[258,1055,1056],{},"Upgrade one major version at a time and work through each page in order.",[1058,1059,1060],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":10,"searchDepth":555,"depth":555,"links":1062},[1063,1064,1065,1069,1072],{"id":305,"depth":555,"text":306},{"id":382,"depth":555,"text":383},{"id":507,"depth":555,"text":508,"children":1066},[1067,1068],{"id":515,"depth":562,"text":516},{"id":652,"depth":562,"text":653},{"id":731,"depth":555,"text":732,"children":1070},[1071],{"id":819,"depth":562,"text":820},{"id":1032,"depth":555,"text":1033},"How serversideup/php releases and tags work, which tag to use, and how to patch an image yourself.","md",null,{"head":1077,"layout":7},{"title":1078},"Upgrade guide - Docker PHP - Server Side Up",{"title":191,"description":1073},"OKrr5oOaDrUG7MjQ2vNum4YpPeXdIFRV6l5tx-idAZs",[1082,1084],{"title":182,"path":183,"stem":184,"description":1083,"children":-1},"Match the container user to your host user in development while keeping production images unprivileged.",{"title":195,"path":196,"stem":197,"description":1085,"children":-1},"The breaking changes, new defaults, and new variables when you move from serversideup/php v4 to v5.",1793811956038]