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