[{"data":1,"prerenderedAt":1621},["ShallowReactive",2],{"navigation":3,"/docs/getting-started/these-images-vs-others":221,"/docs/getting-started/these-images-vs-others-surround":1616},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","/docs","docs",[9,12,56,85,132,153,178,195,208],{"title":10,"path":6,"stem":11},"","docs/index",{"title":13,"path":14,"stem":15,"children":16,"icon":55},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[17,19,23,27,31,35,39,43,47,51],{"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},"Upgrade Guide","/docs/getting-started/upgrade-guide","docs/1.getting-started/7.upgrade-guide",{"title":44,"path":45,"stem":46},"Changelog","/docs/getting-started/changelog","docs/1.getting-started/8.changelog",{"title":48,"path":49,"stem":50},"About","/docs/getting-started/about","docs/1.getting-started/9.about",{"title":52,"path":53,"stem":54},"Contributing","/docs/getting-started/contributing","docs/1.getting-started/99.contributing",false,{"title":57,"path":58,"stem":59,"children":60,"page":55},"Image Variations","/docs/image-variations","docs/2.image-variations",[61,65,69,73,77,81],{"title":62,"path":63,"stem":64},"CLI","/docs/image-variations/cli","docs/2.image-variations/cli",{"title":66,"path":67,"stem":68},"FPM","/docs/image-variations/fpm","docs/2.image-variations/fpm",{"title":70,"path":71,"stem":72},"FPM-Apache","/docs/image-variations/fpm-apache","docs/2.image-variations/fpm-apache",{"title":74,"path":75,"stem":76},"FPM-NGINX","/docs/image-variations/fpm-nginx","docs/2.image-variations/fpm-nginx",{"title":78,"path":79,"stem":80},"FrankenPHP","/docs/image-variations/frankenphp","docs/2.image-variations/frankenphp",{"title":82,"path":83,"stem":84},"Unit (Deprecated)","/docs/image-variations/unit","docs/2.image-variations/unit",{"title":86,"path":87,"stem":88,"children":89,"page":55},"Framework Guides","/docs/framework-guides","docs/3.framework-guides",[90,123],{"title":91,"icon":55,"defaultOpen":55,"path":92,"stem":93,"children":94,"page":55},"Laravel","/docs/framework-guides/laravel","docs/3.framework-guides/1.laravel",[95,99,103,107,111,115,119],{"title":96,"path":97,"stem":98},"Automations","/docs/framework-guides/laravel/automations","docs/3.framework-guides/1.laravel/1.automations",{"title":100,"path":101,"stem":102},"Task Scheduler","/docs/framework-guides/laravel/task-scheduler","docs/3.framework-guides/1.laravel/2.task-scheduler",{"title":104,"path":105,"stem":106},"Queue","/docs/framework-guides/laravel/queue","docs/3.framework-guides/1.laravel/3.queue",{"title":108,"path":109,"stem":110},"Horizon","/docs/framework-guides/laravel/horizon","docs/3.framework-guides/1.laravel/4.horizon",{"title":112,"path":113,"stem":114},"Reverb","/docs/framework-guides/laravel/reverb","docs/3.framework-guides/1.laravel/4.reverb",{"title":116,"path":117,"stem":118},"Nightwatch","/docs/framework-guides/laravel/nightwatch","docs/3.framework-guides/1.laravel/5.nightwatch",{"title":120,"path":121,"stem":122},"Octane","/docs/framework-guides/laravel/octane","docs/3.framework-guides/1.laravel/octane",{"title":124,"icon":55,"defaultOpen":55,"path":125,"stem":126,"children":127,"page":55},"WordPress","/docs/framework-guides/wordpress","docs/3.framework-guides/2.wordpress",[128],{"title":129,"path":130,"stem":131},"Using Docker with WordPress","/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":55},"Deployment And Production","/docs/deployment-and-production","docs/4.deployment-and-production",[137,141,145,149],{"title":138,"path":139,"stem":140},"Development to Production","/docs/deployment-and-production/development-to-production","docs/4.deployment-and-production/2.development-to-production",{"title":142,"path":143,"stem":144},"Packaging Your App for Deployment","/docs/deployment-and-production/packaging-your-app-for-deployment","docs/4.deployment-and-production/3.packaging-your-app-for-deployment",{"title":146,"path":147,"stem":148},"Configuring SSL","/docs/deployment-and-production/configuring-ssl","docs/4.deployment-and-production/4.configuring-ssl",{"title":150,"path":151,"stem":152},"Choosing a Host","/docs/deployment-and-production/choosing-a-host","docs/4.deployment-and-production/5.choosing-a-host",{"title":154,"icon":55,"defaultOpen":55,"path":155,"stem":156,"children":157,"page":55},"Advanced Guides","/docs/guide","docs/5.guide",[158,162,166,170,174],{"title":159,"path":160,"stem":161},"Migrating from official PHP images","/docs/guide/migrating-from-official-php-images","docs/5.guide/1.migrating-from-official-php-images",{"title":163,"path":164,"stem":165},"Using Healthchecks With Laravel","/docs/guide/using-healthchecks-with-laravel","docs/5.guide/2.using-healthchecks-with-laravel",{"title":167,"path":168,"stem":169},"Using S6 Overlay","/docs/guide/using-s6-overlay","docs/5.guide/2.using-s6-overlay",{"title":171,"path":172,"stem":173},"Understanding File Permissions","/docs/guide/understanding-file-permissions","docs/5.guide/3.understanding-file-permissions",{"title":175,"path":176,"stem":177},"Configuring Trusted Proxies","/docs/guide/configuring-trusted-proxies","docs/5.guide/4.configuring-trusted-proxies",{"title":179,"icon":55,"defaultOpen":55,"path":180,"stem":181,"children":182,"page":55},"Customization","/docs/customizing-the-image","docs/6.customizing-the-image",[183,187,191],{"title":184,"path":185,"stem":186},"Changing php.ini settings","/docs/customizing-the-image/changing-common-php-settings","docs/6.customizing-the-image/1.changing-common-php-settings",{"title":188,"path":189,"stem":190},"Installing PHP extensions","/docs/customizing-the-image/installing-additional-php-extensions","docs/6.customizing-the-image/2.installing-additional-php-extensions",{"title":192,"path":193,"stem":194},"Adding Start Up Scripts","/docs/customizing-the-image/adding-your-own-start-up-scripts","docs/6.customizing-the-image/3.adding-your-own-start-up-scripts",{"title":196,"path":197,"stem":198,"children":199,"page":55},"Troubleshooting","/docs/troubleshooting","docs/7.troubleshooting",[200,204],{"title":201,"path":202,"stem":203},"Common Issues","/docs/troubleshooting/common-issues","docs/7.troubleshooting/1.common-issues",{"title":205,"path":206,"stem":207},"Getting Help","/docs/troubleshooting/getting-help","docs/7.troubleshooting/2.getting-help",{"title":209,"path":210,"stem":211,"children":212,"page":55},"Reference","/docs/reference","docs/8.reference",[213,217],{"title":214,"path":215,"stem":216},"Environment Variable Specification","/docs/reference/environment-variable-specification","docs/8.reference/1.environment-variable-specification",{"title":218,"path":219,"stem":220},"Command Reference","/docs/reference/command-reference","docs/8.reference/2.command-reference",{"id":222,"title":28,"body":223,"description":1611,"extension":889,"links":1612,"meta":1613,"navigation":1137,"path":29,"redirect":1612,"seo":1614,"stem":30,"__hash__":1615},"docs/docs/1.getting-started/4.these-images-vs-others.md",{"type":224,"value":225,"toc":1587},"minimark",[226,231,235,285,292,296,301,340,349,353,359,603,607,612,622,629,649,652,666,670,673,678,689,694,705,710,718,732,736,739,873,876,892,896,899,904,918,923,934,939,953,958,972,976,979,984,1028,1032,1037,1048,1053,1056,1073,1076,1079,1084,1095,1099,1116,1185,1190,1204,1210,1252,1256,1259,1292,1297,1317,1322,1342,1347,1367,1371,1375,1378,1383,1397,1400,1404,1408,1411,1415,1419,1422,1427,1452,1457,1475,1481,1485,1488,1529,1533,1536,1572,1583],[227,228,230],"h2",{"id":229},"the-problem-with-traditional-php-deployment","The Problem with Traditional PHP Deployment",[232,233,234],"p",{},"If you've ever deployed a PHP application to production, you've probably experienced one (or all) of these frustrations:",[236,237,238,246,261,267,273,279],"ul",{},[239,240,241,245],"li",{},[242,243,244],"strong",{},"\"It works on my machine\""," - Your local environment doesn't match production, leading to mysterious bugs that only appear after deployment",[239,247,248,251,252,256,257,260],{},[242,249,250],{},"Configuration Hell"," - Spending hours tweaking ",[253,254,255],"code",{},"php.ini",", ",[253,258,259],{},"www.conf",", and web server configs across multiple servers",[239,262,263,266],{},[242,264,265],{},"Security Vulnerabilities"," - Running as root, outdated extensions, or misconfigured permissions exposing your application to attacks",[239,268,269,272],{},[242,270,271],{},"Manual Server Management"," - SSH-ing into servers to update PHP, install extensions, or troubleshoot issues",[239,274,275,278],{},[242,276,277],{},"Inconsistent Environments"," - Each server is slightly different, making debugging and scaling a nightmare",[239,280,281,284],{},[242,282,283],{},"Framework-Specific Tweaks"," - Researching and applying dozens of optimizations for Laravel or WordPress performance",[232,286,287,288,291],{},"You're not alone. These are the exact problems that led us to create ",[253,289,290],{},"serversideup/php",".",[227,293,295],{"id":294},"how-serversideupphp-solves-these-problems","How serversideup/php Solves These Problems",[232,297,298,300],{},[253,299,290],{}," is built on the official PHP images but adds everything needed for real-world production use:",[236,302,303,310,316,322,328,334],{},[239,304,305,306,309],{},"✅ ",[242,307,308],{},"Works Identically Everywhere"," - Same container runs on your laptop, CI/CD, and production",[239,311,305,312,315],{},[242,313,314],{},"Zero Configuration Required"," - Production-ready defaults with simple environment variable customization",[239,317,305,318,321],{},[242,319,320],{},"Secure by Default"," - Runs as unprivileged user, hardened for the open internet",[239,323,305,324,327],{},[242,325,326],{},"Batteries Included"," - Composer, common extensions, and helpful utilities pre-installed",[239,329,305,330,333],{},[242,331,332],{},"Framework Optimized"," - Pre-configured for Laravel and WordPress best practices",[239,335,305,336,339],{},[242,337,338],{},"Modern Architecture"," - FrankenPHP, S6 Overlay, native health checks, and multi-process support",[341,342,343],"note",{},[232,344,345,348],{},[242,346,347],{},"Trusted by the Community"," - Over 1 million Docker image pulls and actively used by Laravel and PHP developers worldwide.",[227,350,352],{"id":351},"feature-comparison","Feature Comparison",[232,354,355,356,358],{},"See how ",[253,357,290],{}," stacks up against other PHP deployment options:",[360,361,362,386],"table",{},[363,364,365],"thead",{},[366,367,368,372,377,382],"tr",{},[369,370,371],"th",{},"Feature",[369,373,374],{},[242,375,376],{},"Traditional Server",[369,378,379],{},[242,380,381],{},"Official PHP Images",[369,383,384],{},[242,385,290],{},[387,388,389,403,414,427,440,451,463,474,485,499,512,523,534,545,556,567,578],"tbody",{},[366,390,391,395,398,401],{},[392,393,394],"td",{},"Consistent environments",[392,396,397],{},"❌",[392,399,400],{},"✅",[392,402,400],{},[366,404,405,408,410,412],{},[392,406,407],{},"Easy to scale",[392,409,397],{},[392,411,400],{},[392,413,400],{},[366,415,416,419,422,425],{},[392,417,418],{},"Base OS Options",[392,420,421],{},"Manual Setup",[392,423,424],{},"Debian, Alpine",[392,426,424],{},[366,428,429,432,435,438],{},[392,430,431],{},"PHP Version Management",[392,433,434],{},"Manual Updates",[392,436,437],{},"Easy Upgrades",[392,439,437],{},[366,441,442,445,447,449],{},[392,443,444],{},"Multi-arch support",[392,446,397],{},[392,448,400],{},[392,450,400],{},[366,452,453,456,459,461],{},[392,454,455],{},"Production-ready defaults",[392,457,458],{},"⚠️ Manual",[392,460,397],{},[392,462,400],{},[366,464,465,468,470,472],{},[392,466,467],{},"Runs as non-root user",[392,469,458],{},[392,471,397],{},[392,473,400],{},[366,475,476,479,481,483],{},[392,477,478],{},"Variable-first configuration",[392,480,397],{},[392,482,397],{},[392,484,400],{},[366,486,487,493,495,497],{},[392,488,489,490],{},"Includes ",[253,491,492],{},"composer",[392,494,458],{},[392,496,397],{},[392,498,400],{},[366,500,501,506,508,510],{},[392,502,489,503],{},[253,504,505],{},"install-php-extensions",[392,507,397],{},[392,509,397],{},[392,511,400],{},[366,513,514,517,519,521],{},[392,515,516],{},"Built-in security hardening",[392,518,458],{},[392,520,397],{},[392,522,400],{},[366,524,525,528,530,532],{},[392,526,527],{},"Laravel & WordPress optimizations",[392,529,458],{},[392,531,397],{},[392,533,400],{},[366,535,536,539,541,543],{},[392,537,538],{},"NGINX + FPM variation",[392,540,458],{},[392,542,397],{},[392,544,400],{},[366,546,547,550,552,554],{},[392,548,549],{},"FrankenPHP support",[392,551,397],{},[392,553,397],{},[392,555,400],{},[366,557,558,561,563,565],{},[392,559,560],{},"Native health checks",[392,562,458],{},[392,564,397],{},[392,566,400],{},[366,568,569,572,574,576],{},[392,570,571],{},"S6 Overlay init system",[392,573,397],{},[392,575,397],{},[392,577,400],{},[366,579,580,583,586,589],{},[392,581,582],{},"Published Registries",[392,584,585],{},"N/A",[392,587,588],{},"DockerHub",[392,590,591,597,598],{},[592,593,588],"a",{"href":594,"rel":595},"https://hub.docker.com/r/serversideup/php",[596],"nofollow"," + ",[592,599,602],{"href":600,"rel":601},"https://github.com/serversideup/docker-php/pkgs/container/php",[596],"GitHub Packages",[227,604,606],{"id":605},"key-advantages-explained","Key Advantages Explained",[608,609,611],"h3",{"id":610},"security-first-unprivileged-by-default","Security First: Unprivileged by Default",[613,614,615],"caution",{},[232,616,617,618,621],{},"Running containers as ",[253,619,620],{},"root"," in production is a critical security vulnerability. If your application is compromised, an attacker gains root access to your container which could lead to a full system compromise.",[232,623,624,625,628],{},"Our images run as the ",[253,626,627],{},"www-data"," user by default, following the principle of least privilege. This means:",[236,630,631,637,643],{},[239,632,633,636],{},[242,634,635],{},"Limited Blast Radius"," - If your application is compromised, don't have root privileges",[239,638,639,642],{},[242,640,641],{},"Kubernetes Compatible"," - Many Kubernetes clusters require non-root containers by policy",[239,644,645,648],{},[242,646,647],{},"Production Best Practice"," - Aligns with NIST and CIS security benchmarks",[232,650,651],{},"We also include additional security hardening:",[236,653,654,657,660,663],{},[239,655,656],{},"Disabled dangerous PHP functions by default (but you control them)",[239,658,659],{},"Proper file permissions out of the box",[239,661,662],{},"Customizable trusted proxy configuration (Cloudflare, Sucuri, local, or off) for accurate IP logging",[239,664,665],{},"Regular security updates from official PHP base images",[608,667,669],{"id":668},"performance-optimized","Performance Optimized",[232,671,672],{},"Every image includes production-tuned defaults based on real-world PHP applications:",[232,674,675],{},[242,676,677],{},"OPcache Configuration",[236,679,680,683,686],{},[239,681,682],{},"Pre-configured for optimal memory usage and caching strategy",[239,684,685],{},"Easily toggle between development and production modes",[239,687,688],{},"Smart defaults that work for most applications",[232,690,691],{},[242,692,693],{},"Process Management",[236,695,696,699,702],{},[239,697,698],{},"PHP-FPM tuned for typical low resource usage for Laravel/WordPress workloads",[239,700,701],{},"S6 Overlay for intelligent process supervision",[239,703,704],{},"Graceful shutdown handling for zero-downtime deployments",[232,706,707],{},[242,708,709],{},"Modern Options",[236,711,712,715],{},[239,713,714],{},"FrankenPHP support for incredible performance gains (2-3x faster than FPM in many claims made by developers)",[239,716,717],{},"HTTP/2 and HTTP/3 ready configurations",[719,720,721],"tip",{},[232,722,723,724,727,728,731],{},"Need to customize performance settings? Just set an environment variable like ",[253,725,726],{},"PHP_OPCACHE_ENABLE=1"," or ",[253,729,730],{},"PHP_MEMORY_LIMIT=512M",". No config files needed.",[608,733,735],{"id":734},"developer-experience-variable-first-configuration","Developer Experience: Variable-First Configuration",[232,737,738],{},"Stop editing config files. Stop rebuilding images for simple changes. Just set environment variables:",[740,741,754],"pre",{"className":742,"code":743,"filename":744,"highlights":745,"language":753,"meta":10,"style":10},"language-yml shiki shiki-themes github-dark","services:\n  php:\n    image: serversideup/php:8.5-fpm-nginx\n    environment:\n      # Change any PHP setting with environment variables\n      PHP_MEMORY_LIMIT: \"512M\"\n      PHP_UPLOAD_MAX_FILE_SIZE: \"100M\"\n      PHP_MAX_EXECUTION_TIME: \"180\"\n      PHP_OPCACHE_ENABLE: \"1\"\n      \n      # Run Migrations, Storage Link, Caching, and more\n      AUTORUN_ENABLED: \"true\"\n","compose.yml",[746,747,748,749,750,751,752],5,6,7,8,9,11,12,"yml",[253,755,756,769,777,790,798,806,817,828,839,850,856,862],{"__ignoreMap":10},[757,758,761,765],"span",{"class":759,"line":760},"line",1,[757,762,764],{"class":763},"s4JwU","services",[757,766,768],{"class":767},"s95oV",":\n",[757,770,772,775],{"class":759,"line":771},2,[757,773,774],{"class":763},"  php",[757,776,768],{"class":767},[757,778,780,783,786],{"class":759,"line":779},3,[757,781,782],{"class":763},"    image",[757,784,785],{"class":767},": ",[757,787,789],{"class":788},"sU2Wk","serversideup/php:8.5-fpm-nginx\n",[757,791,793,796],{"class":759,"line":792},4,[757,794,795],{"class":763},"    environment",[757,797,768],{"class":767},[757,799,802],{"class":800,"line":746},[759,801],"highlight",[757,803,805],{"class":804},"sAwPA","      # Change any PHP setting with environment variables\n",[757,807,809,812,814],{"class":808,"line":747},[759,801],[757,810,811],{"class":763},"      PHP_MEMORY_LIMIT",[757,813,785],{"class":767},[757,815,816],{"class":788},"\"512M\"\n",[757,818,820,823,825],{"class":819,"line":748},[759,801],[757,821,822],{"class":763},"      PHP_UPLOAD_MAX_FILE_SIZE",[757,824,785],{"class":767},[757,826,827],{"class":788},"\"100M\"\n",[757,829,831,834,836],{"class":830,"line":749},[759,801],[757,832,833],{"class":763},"      PHP_MAX_EXECUTION_TIME",[757,835,785],{"class":767},[757,837,838],{"class":788},"\"180\"\n",[757,840,842,845,847],{"class":841,"line":750},[759,801],[757,843,844],{"class":763},"      PHP_OPCACHE_ENABLE",[757,846,785],{"class":767},[757,848,849],{"class":788},"\"1\"\n",[757,851,853],{"class":759,"line":852},10,[757,854,855],{"class":767},"      \n",[757,857,859],{"class":858,"line":751},[759,801],[757,860,861],{"class":804},"      # Run Migrations, Storage Link, Caching, and more\n",[757,863,865,868,870],{"class":864,"line":752},[759,801],[757,866,867],{"class":763},"      AUTORUN_ENABLED",[757,869,785],{"class":767},[757,871,872],{"class":788},"\"true\"\n",[232,874,875],{},"No Dockerfile modifications. No config file mounting. No image rebuilds. Just simple environment variables with production-ready defaults.",[877,878],"u-button",{"ariaLabel":879,"className":880,"color":888,"label":879,"size":889,"to":215,"trailing-icon":890,"variant":891},"View all environment variables",[881,882,883,884,885,886,887],"font-bold","ring","ring-inset","ring-blue-600","text-blue-600","hover:ring-blue-500","hover:text-blue-500","primary","md","i-lucide-arrow-right","outline",[608,893,895],{"id":894},"production-ready-out-of-the-box","Production-Ready Out of the Box",[232,897,898],{},"Our images are built for the wild internet:",[232,900,901],{},[242,902,903],{},"Security Hardening",[236,905,906,909,912,915],{},[239,907,908],{},"Unprivileged user execution",[239,910,911],{},"Disabled dangerous PHP functions (you control which ones)",[239,913,914],{},"Proper file permissions and ownership",[239,916,917],{},"Regular security updates",[232,919,920],{},[242,921,922],{},"Monitoring & Observability",[236,924,925,928,931],{},[239,926,927],{},"Built-in health check endpoints",[239,929,930],{},"All logs to STDOUT/STDERR for centralized logging",[239,932,933],{},"Compatible with Prometheus, DataDog, and other monitoring tools",[232,935,936],{},[242,937,938],{},"Deployment Features",[236,940,941,944,947,950],{},[239,942,943],{},"Zero-downtime deployment support",[239,945,946],{},"Graceful shutdown handling",[239,948,949],{},"Queue worker and scheduler support for Laravel",[239,951,952],{},"Automatic migration running on container start (optional)",[232,954,955],{},[242,956,957],{},"Infrastructure as Code",[236,959,960,966,969],{},[239,961,962,963,965],{},"Version your entire PHP stack in a ",[253,964,744],{}," file",[239,967,968],{},"Reproduce every environment with 100% consistency",[239,970,971],{},"Easy rollbacks to previous versions",[608,973,975],{"id":974},"framework-optimized-for-laravel-wordpress","Framework Optimized for Laravel & WordPress",[232,977,978],{},"We've done the hard work of optimizing for PHP's most popular frameworks:",[232,980,981],{},[242,982,983],{},"Laravel Automations",[740,985,987],{"className":742,"code":986,"filename":744,"language":753,"meta":10,"style":10},"services:\n  php:\n    image: serversideup/php:8.5-fpm-nginx\n    environment:\n      # Run migrations, storage link, caching, and more\n      AUTORUN_ENABLED: \"true\"\n",[253,988,989,995,1001,1009,1015,1020],{"__ignoreMap":10},[757,990,991,993],{"class":759,"line":760},[757,992,764],{"class":763},[757,994,768],{"class":767},[757,996,997,999],{"class":759,"line":771},[757,998,774],{"class":763},[757,1000,768],{"class":767},[757,1002,1003,1005,1007],{"class":759,"line":779},[757,1004,782],{"class":763},[757,1006,785],{"class":767},[757,1008,789],{"class":788},[757,1010,1011,1013],{"class":759,"line":792},[757,1012,795],{"class":763},[757,1014,768],{"class":767},[757,1016,1017],{"class":759,"line":746},[757,1018,1019],{"class":804},"      # Run migrations, storage link, caching, and more\n",[757,1021,1022,1024,1026],{"class":759,"line":747},[757,1023,867],{"class":763},[757,1025,785],{"class":767},[757,1027,872],{"class":788},[877,1029],{"ariaLabel":1030,"className":1031,"color":888,"label":1030,"size":889,"to":97,"trailing-icon":890,"variant":891},"Learn More About Laravel Automations",[881,882,883,884,885,886,887],[232,1033,1034],{},[242,1035,1036],{},"WordPress Optimizations",[236,1038,1039,1042,1045],{},[239,1040,1041],{},"Pre-installed PHP extensions WordPress needs",[239,1043,1044],{},"Optimized PHP settings for WordPress performance",[239,1046,1047],{},"Support for popular WordPress hosting patterns",[232,1049,1050],{},[242,1051,1052],{},"All Frameworks Welcome",[232,1054,1055],{},"While we optimize for Laravel and WordPress, our images work great with:",[236,1057,1058,1061,1064,1067,1070],{},[239,1059,1060],{},"Symfony",[239,1062,1063],{},"CodeIgniter",[239,1065,1066],{},"Drupal",[239,1068,1069],{},"Joomla",[239,1071,1072],{},"Custom PHP applications",[608,1074,326],{"id":1075},"batteries-included",[232,1077,1078],{},"Unlike the official PHP images, we include tools you'll actually use:",[232,1080,1081],{},[242,1082,1083],{},"Composer",[236,1085,1086,1089,1092],{},[239,1087,1088],{},"Pre-installed and ready to use",[239,1090,1091],{},"No need to install it in every Dockerfile",[239,1093,1094],{},"Supports Composer v2 for lightning-fast installs",[232,1096,1097],{},[242,1098,505],{},[236,1100,1101,1110,1113],{},[239,1102,1103,1104,1109],{},"The popular ",[592,1105,1108],{"href":1106,"rel":1107},"https://github.com/mlocati/docker-php-extension-installer",[596],"mlocati/docker-php-extension-installer"," included",[239,1111,1112],{},"Install any PHP extension with a single command",[239,1114,1115],{},"Handles all dependencies automatically",[740,1117,1122],{"className":1118,"code":1119,"filename":1120,"language":1121,"meta":10,"style":10},"language-dockerfile shiki shiki-themes github-dark","FROM serversideup/php:8.5-cli\n\n# Switch to root to install extensions\nUSER root\n\n# Install any PHP extension easily\nRUN install-php-extensions bcmath imagick mongodb\n\n# Switch back to unprivileged user\nUSER www-data\n","Dockerfile","dockerfile",[253,1123,1124,1133,1139,1144,1152,1156,1161,1169,1173,1178],{"__ignoreMap":10},[757,1125,1126,1130],{"class":759,"line":760},[757,1127,1129],{"class":1128},"snl16","FROM",[757,1131,1132],{"class":767}," serversideup/php:8.5-cli\n",[757,1134,1135],{"class":759,"line":771},[757,1136,1138],{"emptyLinePlaceholder":1137},true,"\n",[757,1140,1141],{"class":759,"line":779},[757,1142,1143],{"class":804},"# Switch to root to install extensions\n",[757,1145,1146,1149],{"class":759,"line":792},[757,1147,1148],{"class":1128},"USER",[757,1150,1151],{"class":767}," root\n",[757,1153,1154],{"class":759,"line":746},[757,1155,1138],{"emptyLinePlaceholder":1137},[757,1157,1158],{"class":759,"line":747},[757,1159,1160],{"class":804},"# Install any PHP extension easily\n",[757,1162,1163,1166],{"class":759,"line":748},[757,1164,1165],{"class":1128},"RUN",[757,1167,1168],{"class":767}," install-php-extensions bcmath imagick mongodb\n",[757,1170,1171],{"class":759,"line":749},[757,1172,1138],{"emptyLinePlaceholder":1137},[757,1174,1175],{"class":759,"line":750},[757,1176,1177],{"class":804},"# Switch back to unprivileged user\n",[757,1179,1180,1182],{"class":759,"line":852},[757,1181,1148],{"class":1128},[757,1183,1184],{"class":767}," www-data\n",[232,1186,1187],{},[242,1188,1189],{},"Modern Init System",[236,1191,1192,1195,1198,1201],{},[239,1193,1194],{},"S6 Overlay for our FPM-Apache and FPM-NGINX variations",[239,1196,1197],{},"Proper process supervision in containers",[239,1199,1200],{},"Better than Supervisor for containerized workloads",[239,1202,1203],{},"Graceful handling of signals for zero-downtime deployments",[232,1205,1206,1209],{},[242,1207,1208],{},"Multiple Variations","\nChoose the right tool for your use case:",[236,1211,1212,1220,1228,1236,1244],{},[239,1213,1214,1219],{},[592,1215,1216],{"href":63},[253,1217,1218],{},"cli"," - Command-line scripts, Composer, CI/CD",[239,1221,1222,1227],{},[592,1223,1224],{"href":67},[253,1225,1226],{},"fpm"," - Just PHP-FPM (bring your own web server)",[239,1229,1230,1235],{},[592,1231,1232],{"href":75},[253,1233,1234],{},"fpm-nginx"," - PHP-FPM + NGINX (most popular)",[239,1237,1238,1243],{},[592,1239,1240],{"href":71},[253,1241,1242],{},"fpm-apache"," - PHP-FPM + Apache",[239,1245,1246,1251],{},[592,1247,1248],{"href":79},[253,1249,1250],{},"frankenphp"," - Modern, incredibly fast (2-3x FPM performance)",[227,1253,1255],{"id":1254},"real-world-impact","Real-World Impact",[232,1257,1258],{},"Don't just take our word for it. Here's what developers are experiencing:",[341,1260,1261,1266],{},[232,1262,1263],{},[242,1264,1265],{},"By the Numbers",[236,1267,1268,1274,1280,1286],{},[239,1269,1270,1273],{},[242,1271,1272],{},"1,000,000+"," Docker image pulls",[239,1275,1276,1279],{},[242,1277,1278],{},"2,000+"," GitHub stars",[239,1281,1282,1285],{},[242,1283,1284],{},"Active Community"," with regular updates and contributions",[239,1287,1288,1291],{},[242,1289,1290],{},"Production-Proven"," across startups to enterprise applications",[232,1293,1294],{},[242,1295,1296],{},"Time Savings",[236,1298,1299,1305,1311],{},[239,1300,1301,1304],{},[242,1302,1303],{},"Minutes vs Hours"," - Go from zero to production-ready PHP in minutes, not hours of server configuration",[239,1306,1307,1310],{},[242,1308,1309],{},"Consistent Deployments"," - Eliminate \"works on my machine\" debugging sessions",[239,1312,1313,1316],{},[242,1314,1315],{},"Pre-configured"," - Stop researching optimal PHP settings for Laravel",[232,1318,1319],{},[242,1320,1321],{},"Better Security",[236,1323,1324,1330,1336],{},[239,1325,1326,1329],{},[242,1327,1328],{},"Hardened by Default"," - Security best practices built-in, not bolted on",[239,1331,1332,1335],{},[242,1333,1334],{},"Regular Updates"," - Based on official PHP images with security patches",[239,1337,1338,1341],{},[242,1339,1340],{},"Audit Trail"," - Infrastructure as code means every change is tracked",[232,1343,1344],{},[242,1345,1346],{},"Happier Developers",[236,1348,1349,1355,1361],{},[239,1350,1351,1354],{},[242,1352,1353],{},"Simple Configuration"," - Environment variables instead of config file archaeology",[239,1356,1357,1360],{},[242,1358,1359],{},"Modern Tools"," - FrankenPHP, native health checks, and container-native features",[239,1362,1363,1366],{},[242,1364,1365],{},"Community Support"," - Active community and comprehensive documentation",[227,1368,1370],{"id":1369},"making-the-switch","Making the Switch",[608,1372,1374],{"id":1373},"from-traditional-servers-lamplemp","From Traditional Servers (LAMP/LEMP)",[232,1376,1377],{},"If you're currently managing PHP on traditional servers, the switch to containers might seem daunting, but it's easier than you think:",[232,1379,1380],{},[242,1381,1382],{},"Benefits You'll Gain",[236,1384,1385,1388,1391,1394],{},[239,1386,1387],{},"Identical environments from development to production",[239,1389,1390],{},"Scale horizontally by adding more containers",[239,1392,1393],{},"Roll back bad deployments in seconds",[239,1395,1396],{},"Version control your entire infrastructure",[232,1398,1399],{},"See our quick start guide to run your first PHP container.",[877,1401],{"ariaLabel":1402,"className":1403,"color":888,"label":1402,"size":889,"to":25,"trailing-icon":890,"variant":891},"Quick Start Guide",[881,882,883,884,885,886,887],[608,1405,1407],{"id":1406},"from-official-php-images","From Official PHP Images",[232,1409,1410],{},"Already using Docker with official PHP images? Switching is trivially easy.",[877,1412],{"ariaLabel":1413,"className":1414,"color":888,"label":1413,"size":889,"to":160,"trailing-icon":890,"variant":891},"Official PHP Migration Guide",[881,882,883,884,885,886,887],[608,1416,1418],{"id":1417},"from-other-docker-images","From Other Docker Images",[232,1420,1421],{},"Switching from Bitnami, custom images, or other PHP Docker images is straightforward:",[232,1423,1424],{},[242,1425,1426],{},"Key Differences to Note",[236,1428,1429,1435,1438,1445],{},[239,1430,1431,1432,1434],{},"We run as ",[253,1433,627],{}," (UID 33) by default, not root",[239,1436,1437],{},"Configuration via environment variables, not config file mounts",[239,1439,1440,1441,1444],{},"Web root is ",[253,1442,1443],{},"/var/www/html"," by default",[239,1446,1447,1448,1451],{},"All variations expose port ",[253,1449,1450],{},"8080"," (unprivileged port)",[232,1453,1454],{},[242,1455,1456],{},"Migration Strategy",[1458,1459,1460,1466,1469,1472],"ol",{},[239,1461,1462,1463],{},"Review our ",[592,1464,1465],{"href":215},"environment variable specification",[239,1467,1468],{},"Map your current config to environment variables",[239,1470,1471],{},"Test in development first",[239,1473,1474],{},"Switch image tag in production",[1476,1477,1478],"warning",{},[232,1479,1480],{},"Always test in a development or staging environment first to ensure your application works correctly with the new image.",[227,1482,1484],{"id":1483},"ready-to-get-started","Ready to Get Started?",[232,1486,1487],{},"You're just minutes away from a better PHP deployment experience.",[1489,1490,1491,1495,1501,1509,1515,1519,1523,1526],"steps",{},[608,1492,1494],{"id":1493},"choose-your-path","Choose Your Path",[232,1496,1497,1500],{},[242,1498,1499],{},"Quick Start (New Projects)","\nFollow our installation guide to create your first PHP app with Docker in under 5 minutes.",[877,1502],{"ariaLabel":1402,"className":1503,"color":888,"label":1402,"size":889,"to":25,"trailing-icon":1507,"variant":1508},[881,1504,1505,1506],"text-white","bg-blue-600","hover:bg-blue-700","i-lucide-rocket","solid",[232,1510,1511,1514],{},[242,1512,1513],{},"Migration Guide (Existing Apps)","\nAlready have a PHP application? Learn how to containerize it with serversideup/php.",[877,1516],{"ariaLabel":1517,"className":1518,"color":888,"label":1517,"size":889,"to":160,"trailing-icon":890,"variant":891},"Migration Guides",[881,882,883,884,885,886,887],[608,1520,1522],{"id":1521},"choose-an-image-variation","Choose an Image Variation",[232,1524,1525],{},"Not sure which image variation is right for you? We have a guide for that.",[877,1527],{"ariaLabel":32,"className":1528,"color":888,"label":32,"size":889,"to":33,"trailing-icon":890,"variant":891},[881,882,883,884,885,886,887],[227,1530,1532],{"id":1531},"questions","Questions?",[232,1534,1535],{},"We're here to help! Check out these resources:",[236,1537,1538,1545,1554,1563],{},[239,1539,1540,1541,1544],{},"📚 ",[592,1542,1543],{"href":6},"Full Documentation"," - Comprehensive guides and references",[239,1546,1547,1548,1553],{},"💬 ",[592,1549,1552],{"href":1550,"rel":1551},"https://github.com/serversideup/docker-php/discussions",[596],"GitHub Discussions"," - Ask questions and share experiences",[239,1555,1556,1557,1562],{},"🐛 ",[592,1558,1561],{"href":1559,"rel":1560},"https://github.com/serversideup/docker-php/issues",[596],"GitHub Issues"," - Report bugs or request features",[239,1564,1565,1566,1571],{},"🗣️ ",[592,1567,1570],{"href":1568,"rel":1569},"https://serversideup.net/discord",[596],"Discord"," - Join our community and get help from the team and other developers.",[719,1573,1574],{},[232,1575,1576,1577,1582],{},"Join our community! Star us on ",[592,1578,1581],{"href":1579,"rel":1580},"https://github.com/serversideup/docker-php",[596],"GitHub"," and follow updates.",[1584,1585,1586],"style",{},"html pre.shiki code .s4JwU, html code.shiki .s4JwU{--shiki-default:#85E89D}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}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 .snl16, html code.shiki .snl16{--shiki-default:#F97583}",{"title":10,"searchDepth":771,"depth":771,"links":1588},[1589,1590,1591,1592,1600,1601,1606,1610],{"id":229,"depth":771,"text":230},{"id":294,"depth":771,"text":295},{"id":351,"depth":771,"text":352},{"id":605,"depth":771,"text":606,"children":1593},[1594,1595,1596,1597,1598,1599],{"id":610,"depth":779,"text":611},{"id":668,"depth":779,"text":669},{"id":734,"depth":779,"text":735},{"id":894,"depth":779,"text":895},{"id":974,"depth":779,"text":975},{"id":1075,"depth":779,"text":326},{"id":1254,"depth":771,"text":1255},{"id":1369,"depth":771,"text":1370,"children":1602},[1603,1604,1605],{"id":1373,"depth":779,"text":1374},{"id":1406,"depth":779,"text":1407},{"id":1417,"depth":779,"text":1418},{"id":1483,"depth":771,"text":1484,"children":1607},[1608,1609],{"id":1493,"depth":779,"text":1494},{"id":1521,"depth":779,"text":1522},{"id":1531,"depth":771,"text":1532},"Discover why thousands of developers trust serversideup/php for their production PHP applications.",null,{},{"title":28,"description":1611},"EY5CkbPY22JCSYXSj2m6AZMBoGMmZAu4BgT587Y5EXQ",[1617,1619],{"title":24,"path":25,"stem":26,"description":1618,"children":-1},"Learn how to get started with serversideup/php Docker Images.",{"title":32,"path":33,"stem":34,"description":1620,"children":-1},"Learn how to choose the right image for your use case.",1776367053013]