[{"data":1,"prerenderedAt":1640},["ShallowReactive",2],{"navigation":3,"/docs/image-variations/fpm-apache":221,"/docs/image-variations/fpm-apache-surround":1635},[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":70,"body":223,"description":1630,"extension":998,"links":1631,"meta":1632,"navigation":854,"path":71,"redirect":1631,"seo":1633,"stem":72,"__hash__":1634},"docs/docs/2.image-variations/fpm-apache.md",{"type":224,"value":225,"toc":1611},"minimark",[226,241,246,249,281,286,302,306,446,450,453,499,502,520,524,527,532,580,591,595,620,623,730,736,740,743,959,963,966,978,985,1001,1005,1013,1016,1020,1091,1094,1114,1118,1121,1198,1203,1207,1210,1214,1400,1408,1412,1582,1588,1592,1595,1607],[227,228,229,233],"lead-p",{},[230,231,232],"p",{},"The FPM-Apache variation combines PHP-FPM with Apache as a reverse proxy in a single container. Apache serves static content directly and forwards PHP requests to PHP-FPM for processing.",[230,234,235,236,240],{},"Use this variation when you need Apache-specific features, ",[237,238,239],"code",{},".htaccess"," support, or want an all-in-one solution for running PHP applications.",[242,243,245],"h2",{"id":244},"when-to-use-fpm-apache","When to Use FPM-Apache",[230,247,248],{},"Use the FPM-Apache variation when you need to:",[250,251,252,259,269,275,278],"ul",{},[253,254,255,256,258],"li",{},"Run WordPress sites that rely on ",[237,257,239],{}," configurations",[253,260,261,262,265,266],{},"Use Apache-specific modules like ",[237,263,264],{},"mod_rewrite"," or ",[237,267,268],{},"mod_security",[253,270,271,272,274],{},"Deploy applications that require ",[237,273,239],{}," support",[253,276,277],{},"Want an all-in-one container with both web server and PHP processing",[253,279,280],{},"Need Apache's mature ecosystem and widespread documentation",[282,283,285],"h4",{"id":284},"perfect-for","Perfect for",[250,287,288,291,294,297],{},[253,289,290],{},"WordPress hosting with Docker",[253,292,293],{},"Legacy PHP applications that depend on Apache",[253,295,296],{},"Teams familiar with Apache configuration",[253,298,299,300,274],{},"Applications requiring ",[237,301,239],{},[282,303,305],{"id":304},"whats-inside","What's Inside",[307,308,309,322],"table",{},[310,311,312],"thead",{},[313,314,315,319],"tr",{},[316,317,318],"th",{},"Item",[316,320,321],{},"Status",[323,324,325,334,341,348,355,365,375,382,389,397,405,413,421,436],"tbody",{},[313,326,327,331],{},[328,329,330],"td",{},"Apache web server",[328,332,333],{},"✅",[313,335,336,339],{},[328,337,338],{},"PHP-FPM process manager",[328,340,333],{},[313,342,343,346],{},[328,344,345],{},"PHP CLI binary",[328,347,333],{},[313,349,350,353],{},[328,351,352],{},"Common PHP extensions",[328,354,333],{},[313,356,357,363],{},[328,358,359,362],{},[237,360,361],{},"composer"," executable",[328,364,333],{},[313,366,367,373],{},[328,368,369,372],{},[237,370,371],{},"install-php-extensions"," script",[328,374,333],{},[313,376,377,380],{},[328,378,379],{},"Essential system utilities",[328,381,333],{},[313,383,384,387],{},[328,385,386],{},"S6 Overlay (process supervisor)",[328,388,333],{},[313,390,391,394],{},[328,392,393],{},"Native health checks",[328,395,396],{},"✅ (via HTTP endpoint)",[313,398,399,403],{},[328,400,401,274],{},[237,402,239],{},[328,404,333],{},[313,406,407,410],{},[328,408,409],{},"SSL/TLS support",[328,411,412],{},"✅ (self-signed certificates or bring your own)",[313,414,415,418],{},[328,416,417],{},"Process management",[328,419,420],{},"S6 Overlay supervising both Apache and PHP-FPM",[313,422,423,426],{},[328,424,425],{},"Exposed Ports",[328,427,428,431,432,435],{},[237,429,430],{},"8080"," (HTTP), ",[237,433,434],{},"8443"," (HTTPS)",[313,437,438,441],{},[328,439,440],{},"Stop Signal",[328,442,443],{},[237,444,445],{},"SIGQUIT",[242,447,449],{"id":448},"how-fpm-apache-works","How FPM-Apache Works",[230,451,452],{},"This variation runs both Apache and PHP-FPM in a single container, managed by S6 Overlay (for the most accurate process supervision). Here's how requests flow:",[454,455,457,461,464,468,471,475,478,482,485,489,492,496],"steps",{"level":456},"4",[282,458,460],{"id":459},"client-sends-http-request","Client sends HTTP request",[230,462,463],{},"The container listens on port 8080 (or 8443 for HTTPS) for incoming HTTP requests.",[282,465,467],{"id":466},"apache-receives-the-request","Apache receives the request",[230,469,470],{},"Apache receives the request and determines if it's a static file or PHP script.",[282,472,474],{"id":473},"check-for-static-files","Check for static files",[230,476,477],{},"Static files (CSS, JavaScript, images) are served directly by Apache.",[282,479,481],{"id":480},"forward-php-requests-to-php-fpm","Forward PHP requests to PHP-FPM",[230,483,484],{},"PHP requests are forwarded to PHP-FPM via FastCGI protocol.",[282,486,488],{"id":487},"process-php-requests-with-php-fpm","Process PHP requests with PHP-FPM",[230,490,491],{},"PHP-FPM processes the PHP script and returns the result to Apache.",[282,493,495],{"id":494},"send-the-response-back-to-the-client","Send the response back to the client",[230,497,498],{},"Apache sends the response back to the client.",[230,500,501],{},"S6 Overlay ensures both Apache and PHP-FPM are running and automatically restarts them if either process fails.",[503,504,505],"note",{},[230,506,507,508,265,514,519],{},"If you don't specifically need Apache, consider using the ",[509,510,511],"a",{"href":75},[237,512,513],{},"fpm-nginx",[509,515,516],{"href":79},[237,517,518],{},"frankenphp"," variations instead. They offer better performance for modern PHP applications.",[242,521,523],{"id":522},"quick-start","Quick Start",[230,525,526],{},"Here are a few examples to help you get started with the FPM-Apache variation.",[528,529,531],"h3",{"id":530},"docker-cli","Docker CLI",[533,534,539],"pre",{"className":535,"code":536,"filename":537,"language":538,"meta":10,"style":10},"language-bash shiki shiki-themes github-dark","docker run -p 80:8080 -v $(pwd):/var/www/html/public serversideup/php:8.5-fpm-apache\n","Terminal","bash",[237,540,541],{"__ignoreMap":10},[542,543,546,550,554,558,561,564,568,571,574,577],"span",{"class":544,"line":545},"line",1,[542,547,549],{"class":548},"svObZ","docker",[542,551,553],{"class":552},"sU2Wk"," run",[542,555,557],{"class":556},"sDLfK"," -p",[542,559,560],{"class":552}," 80:8080",[542,562,563],{"class":556}," -v",[542,565,567],{"class":566},"s95oV"," $(",[542,569,570],{"class":556},"pwd",[542,572,573],{"class":566},")",[542,575,576],{"class":552},":/var/www/html/public",[542,578,579],{"class":552}," serversideup/php:8.5-fpm-apache\n",[230,581,582,583,586,587,590],{},"Your application will be available at ",[237,584,585],{},"http://localhost",". The default document root is ",[237,588,589],{},"/var/www/html/public",".",[528,592,594],{"id":593},"docker-compose","Docker Compose",[596,597,598],"warning",{},[230,599,600,601,604,605,607,608,611,612,615,616,619],{},"Notice how we're mapping the current directory to ",[237,602,603],{},"/var/www/html/",", but the actual default document root is ",[237,606,589],{},". We're assuming you're creating the ",[237,609,610],{},"public"," directory and putting your PHP code in there. It's not best practice to expose your ",[237,613,614],{},"compose.yml"," file. See the ",[509,617,618],{"href":25},"Installation guide"," for a full example.",[230,621,622],{},"This is the recommended approach for local development and production deployments.",[533,624,628],{"className":625,"code":626,"filename":614,"language":627,"meta":10,"style":10},"language-yml shiki shiki-themes github-dark","services:\n  php:\n    image: serversideup/php:8.5-fpm-apache\n    ports:\n      - \"80:8080\"\n      - \"443:8443\"\n    volumes:\n      - ./:/var/www/html\n    environment:\n      PHP_OPCACHE_ENABLE: \"1\"\n      SSL_MODE: \"full\"\n","yml",[237,629,630,639,647,659,667,676,684,692,700,708,719],{"__ignoreMap":10},[542,631,632,636],{"class":544,"line":545},[542,633,635],{"class":634},"s4JwU","services",[542,637,638],{"class":566},":\n",[542,640,642,645],{"class":544,"line":641},2,[542,643,644],{"class":634},"  php",[542,646,638],{"class":566},[542,648,650,653,656],{"class":544,"line":649},3,[542,651,652],{"class":634},"    image",[542,654,655],{"class":566},": ",[542,657,658],{"class":552},"serversideup/php:8.5-fpm-apache\n",[542,660,662,665],{"class":544,"line":661},4,[542,663,664],{"class":634},"    ports",[542,666,638],{"class":566},[542,668,670,673],{"class":544,"line":669},5,[542,671,672],{"class":566},"      - ",[542,674,675],{"class":552},"\"80:8080\"\n",[542,677,679,681],{"class":544,"line":678},6,[542,680,672],{"class":566},[542,682,683],{"class":552},"\"443:8443\"\n",[542,685,687,690],{"class":544,"line":686},7,[542,688,689],{"class":634},"    volumes",[542,691,638],{"class":566},[542,693,695,697],{"class":544,"line":694},8,[542,696,672],{"class":566},[542,698,699],{"class":552},"./:/var/www/html\n",[542,701,703,706],{"class":544,"line":702},9,[542,704,705],{"class":634},"    environment",[542,707,638],{"class":566},[542,709,711,714,716],{"class":544,"line":710},10,[542,712,713],{"class":634},"      PHP_OPCACHE_ENABLE",[542,715,655],{"class":566},[542,717,718],{"class":552},"\"1\"\n",[542,720,722,725,727],{"class":544,"line":721},11,[542,723,724],{"class":634},"      SSL_MODE",[542,726,655],{"class":566},[542,728,729],{"class":552},"\"full\"\n",[731,732,733],"tip",{},[230,734,735],{},"The FPM-Apache variation uses ports 8080 and 8443 (instead of 80 and 443) to allow the container to run as a non-root user for better security.",[528,737,739],{"id":738},"wordpress-example","WordPress Example",[230,741,742],{},"The FPM-Apache variation is excellent for WordPress hosting:",[533,744,746],{"className":625,"code":745,"filename":614,"language":627,"meta":10,"style":10},"services:\n  wordpress:\n    image: serversideup/php:8.5-fpm-apache\n    ports:\n      - \"80:8080\"\n      - \"443:8443\"\n    volumes:\n      - ./wordpress:/var/www/html\n    environment:\n      SSL_MODE: \"full\"\n      PHP_MEMORY_LIMIT: \"512M\"\n      PHP_OPCACHE_ENABLE: \"1\"\n    depends_on:\n      - mariadb\n\n  mariadb:\n    image: mariadb:11\n    environment:\n      MYSQL_ROOT_PASSWORD: rootpassword\n      MYSQL_DATABASE: wordpress\n      MYSQL_USER: wordpress\n      MYSQL_PASSWORD: wordpress\n    volumes:\n      - db_data:/var/lib/mysql\n\nvolumes:\n  db_data:\n",[237,747,748,754,761,769,775,781,787,793,800,806,814,824,833,841,849,856,864,874,881,892,903,913,923,930,938,943,951],{"__ignoreMap":10},[542,749,750,752],{"class":544,"line":545},[542,751,635],{"class":634},[542,753,638],{"class":566},[542,755,756,759],{"class":544,"line":641},[542,757,758],{"class":634},"  wordpress",[542,760,638],{"class":566},[542,762,763,765,767],{"class":544,"line":649},[542,764,652],{"class":634},[542,766,655],{"class":566},[542,768,658],{"class":552},[542,770,771,773],{"class":544,"line":661},[542,772,664],{"class":634},[542,774,638],{"class":566},[542,776,777,779],{"class":544,"line":669},[542,778,672],{"class":566},[542,780,675],{"class":552},[542,782,783,785],{"class":544,"line":678},[542,784,672],{"class":566},[542,786,683],{"class":552},[542,788,789,791],{"class":544,"line":686},[542,790,689],{"class":634},[542,792,638],{"class":566},[542,794,795,797],{"class":544,"line":694},[542,796,672],{"class":566},[542,798,799],{"class":552},"./wordpress:/var/www/html\n",[542,801,802,804],{"class":544,"line":702},[542,803,705],{"class":634},[542,805,638],{"class":566},[542,807,808,810,812],{"class":544,"line":710},[542,809,724],{"class":634},[542,811,655],{"class":566},[542,813,729],{"class":552},[542,815,816,819,821],{"class":544,"line":721},[542,817,818],{"class":634},"      PHP_MEMORY_LIMIT",[542,820,655],{"class":566},[542,822,823],{"class":552},"\"512M\"\n",[542,825,827,829,831],{"class":544,"line":826},12,[542,828,713],{"class":634},[542,830,655],{"class":566},[542,832,718],{"class":552},[542,834,836,839],{"class":544,"line":835},13,[542,837,838],{"class":634},"    depends_on",[542,840,638],{"class":566},[542,842,844,846],{"class":544,"line":843},14,[542,845,672],{"class":566},[542,847,848],{"class":552},"mariadb\n",[542,850,852],{"class":544,"line":851},15,[542,853,855],{"emptyLinePlaceholder":854},true,"\n",[542,857,859,862],{"class":544,"line":858},16,[542,860,861],{"class":634},"  mariadb",[542,863,638],{"class":566},[542,865,867,869,871],{"class":544,"line":866},17,[542,868,652],{"class":634},[542,870,655],{"class":566},[542,872,873],{"class":552},"mariadb:11\n",[542,875,877,879],{"class":544,"line":876},18,[542,878,705],{"class":634},[542,880,638],{"class":566},[542,882,884,887,889],{"class":544,"line":883},19,[542,885,886],{"class":634},"      MYSQL_ROOT_PASSWORD",[542,888,655],{"class":566},[542,890,891],{"class":552},"rootpassword\n",[542,893,895,898,900],{"class":544,"line":894},20,[542,896,897],{"class":634},"      MYSQL_DATABASE",[542,899,655],{"class":566},[542,901,902],{"class":552},"wordpress\n",[542,904,906,909,911],{"class":544,"line":905},21,[542,907,908],{"class":634},"      MYSQL_USER",[542,910,655],{"class":566},[542,912,902],{"class":552},[542,914,916,919,921],{"class":544,"line":915},22,[542,917,918],{"class":634},"      MYSQL_PASSWORD",[542,920,655],{"class":566},[542,922,902],{"class":552},[542,924,926,928],{"class":544,"line":925},23,[542,927,689],{"class":634},[542,929,638],{"class":566},[542,931,933,935],{"class":544,"line":932},24,[542,934,672],{"class":566},[542,936,937],{"class":552},"db_data:/var/lib/mysql\n",[542,939,941],{"class":544,"line":940},25,[542,942,855],{"emptyLinePlaceholder":854},[542,944,946,949],{"class":544,"line":945},26,[542,947,948],{"class":634},"volumes",[542,950,638],{"class":566},[542,952,954,957],{"class":544,"line":953},27,[542,955,956],{"class":634},"  db_data",[542,958,638],{"class":566},[528,960,962],{"id":961},"health-check","Health Check",[230,964,965],{},"The FPM-Apache variation includes a built-in health check that verifies Apache is responding:",[503,967,968],{},[230,969,970,971,974,975,590],{},"The health check endpoint is configurable via the ",[237,972,973],{},"HEALTHCHECK_PATH"," environment variable, which defaults to ",[237,976,977],{},"/healthcheck",[230,979,980,981,984],{},"If you are using Laravel, you can use the ",[237,982,983],{},"/up"," route to validate that Laravel is running and healthy.",[986,987],"u-button",{"ariaLabel":988,"className":989,"color":997,"label":988,"size":998,"to":164,"trailing-icon":999,"variant":1000},"Learn more about using healthchecks with Laravel",[990,991,992,993,994,995,996],"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",[242,1002,1004],{"id":1003},"ssltls-support","SSL/TLS Support",[731,1006,1007],{"to":147},[230,1008,1009,1010,1012],{},"For more information on SSL, see the ",[509,1011,146],{"href":147}," guide.",[230,1014,1015],{},"The FPM-Apache variation includes built-in SSL support with self-signed certificates for development.",[528,1017,1019],{"id":1018},"enabling-ssl","Enabling SSL",[533,1021,1023],{"className":625,"code":1022,"filename":614,"language":627,"meta":10,"style":10},"services:\n  php:\n    image: serversideup/php:8.5-fpm-apache\n    ports:\n      - \"8080:8080\"\n      - \"8443:8443\"\n    volumes:\n      - ./:/var/www/html\n    environment:\n      SSL_MODE: \"full\"\n",[237,1024,1025,1031,1037,1045,1051,1058,1065,1071,1077,1083],{"__ignoreMap":10},[542,1026,1027,1029],{"class":544,"line":545},[542,1028,635],{"class":634},[542,1030,638],{"class":566},[542,1032,1033,1035],{"class":544,"line":641},[542,1034,644],{"class":634},[542,1036,638],{"class":566},[542,1038,1039,1041,1043],{"class":544,"line":649},[542,1040,652],{"class":634},[542,1042,655],{"class":566},[542,1044,658],{"class":552},[542,1046,1047,1049],{"class":544,"line":661},[542,1048,664],{"class":634},[542,1050,638],{"class":566},[542,1052,1053,1055],{"class":544,"line":669},[542,1054,672],{"class":566},[542,1056,1057],{"class":552},"\"8080:8080\"\n",[542,1059,1060,1062],{"class":544,"line":678},[542,1061,672],{"class":566},[542,1063,1064],{"class":552},"\"8443:8443\"\n",[542,1066,1067,1069],{"class":544,"line":686},[542,1068,689],{"class":634},[542,1070,638],{"class":566},[542,1072,1073,1075],{"class":544,"line":694},[542,1074,672],{"class":566},[542,1076,699],{"class":552},[542,1078,1079,1081],{"class":544,"line":702},[542,1080,705],{"class":634},[542,1082,638],{"class":566},[542,1084,1085,1087,1089],{"class":544,"line":710},[542,1086,724],{"class":634},[542,1088,655],{"class":566},[542,1090,729],{"class":552},[230,1092,1093],{},"Available SSL modes:",[250,1095,1096,1102,1108],{},[253,1097,1098,1101],{},[237,1099,1100],{},"off"," - SSL disabled (default)",[253,1103,1104,1107],{},[237,1105,1106],{},"mixed"," - Both HTTP (8080) and HTTPS (8443) enabled",[253,1109,1110,1113],{},[237,1111,1112],{},"full"," - HTTPS only on port 8443",[528,1115,1117],{"id":1116},"custom-ssl-certificates","Custom SSL Certificates",[230,1119,1120],{},"For production, use your own SSL certificates:",[533,1122,1124],{"className":625,"code":1123,"filename":614,"language":627,"meta":10,"style":10},"services:\n  php:\n    image: serversideup/php:8.5-fpm-apache\n    ports:\n      - \"443:8443\"\n    volumes:\n      - ./:/var/www/html\n      - ./certs/server.crt:/etc/ssl/private/self-signed-web.crt:ro\n      - ./certs/server.key:/etc/ssl/private/self-signed-web.key:ro\n    environment:\n      SSL_MODE: \"full\"\n",[237,1125,1126,1132,1138,1146,1152,1158,1164,1170,1177,1184,1190],{"__ignoreMap":10},[542,1127,1128,1130],{"class":544,"line":545},[542,1129,635],{"class":634},[542,1131,638],{"class":566},[542,1133,1134,1136],{"class":544,"line":641},[542,1135,644],{"class":634},[542,1137,638],{"class":566},[542,1139,1140,1142,1144],{"class":544,"line":649},[542,1141,652],{"class":634},[542,1143,655],{"class":566},[542,1145,658],{"class":552},[542,1147,1148,1150],{"class":544,"line":661},[542,1149,664],{"class":634},[542,1151,638],{"class":566},[542,1153,1154,1156],{"class":544,"line":669},[542,1155,672],{"class":566},[542,1157,683],{"class":552},[542,1159,1160,1162],{"class":544,"line":678},[542,1161,689],{"class":634},[542,1163,638],{"class":566},[542,1165,1166,1168],{"class":544,"line":686},[542,1167,672],{"class":566},[542,1169,699],{"class":552},[542,1171,1172,1174],{"class":544,"line":694},[542,1173,672],{"class":566},[542,1175,1176],{"class":552},"./certs/server.crt:/etc/ssl/private/self-signed-web.crt:ro\n",[542,1178,1179,1181],{"class":544,"line":702},[542,1180,672],{"class":566},[542,1182,1183],{"class":552},"./certs/server.key:/etc/ssl/private/self-signed-web.key:ro\n",[542,1185,1186,1188],{"class":544,"line":710},[542,1187,705],{"class":634},[542,1189,638],{"class":566},[542,1191,1192,1194,1196],{"class":544,"line":721},[542,1193,724],{"class":634},[542,1195,655],{"class":566},[542,1197,729],{"class":552},[596,1199,1200],{},[230,1201,1202],{},"For production deployments, consider using a reverse proxy like Traefik or Caddy to handle SSL termination instead of managing certificates in the container.",[242,1204,1206],{"id":1205},"environment-variables","Environment Variables",[230,1208,1209],{},"The FPM-Apache variation supports extensive customization through environment variables.",[528,1211,1213],{"id":1212},"apache-configuration","Apache Configuration",[307,1215,1216,1229],{},[310,1217,1218],{},[313,1219,1220,1223,1226],{},[316,1221,1222],{},"Variable",[316,1224,1225],{},"Default",[316,1227,1228],{},"Description",[323,1230,1231,1245,1260,1275,1290,1305,1320,1335,1357,1372,1387],{},[313,1232,1233,1238,1242],{},[328,1234,1235],{},[237,1236,1237],{},"APACHE_DOCUMENT_ROOT",[328,1239,1240],{},[237,1241,589],{},[328,1243,1244],{},"Document root for Apache",[313,1246,1247,1252,1257],{},[328,1248,1249],{},[237,1250,1251],{},"APACHE_START_SERVERS",[328,1253,1254],{},[237,1255,1256],{},"2",[328,1258,1259],{},"Number of Apache server processes to start",[313,1261,1262,1267,1272],{},[328,1263,1264],{},[237,1265,1266],{},"APACHE_MIN_SPARE_THREADS",[328,1268,1269],{},[237,1270,1271],{},"10",[328,1273,1274],{},"Minimum idle threads",[313,1276,1277,1282,1287],{},[328,1278,1279],{},[237,1280,1281],{},"APACHE_MAX_SPARE_THREADS",[328,1283,1284],{},[237,1285,1286],{},"75",[328,1288,1289],{},"Maximum idle threads",[313,1291,1292,1297,1302],{},[328,1293,1294],{},[237,1295,1296],{},"APACHE_THREADS_PER_CHILD",[328,1298,1299],{},[237,1300,1301],{},"25",[328,1303,1304],{},"Number of threads per child process",[313,1306,1307,1312,1317],{},[328,1308,1309],{},[237,1310,1311],{},"APACHE_MAX_REQUEST_WORKERS",[328,1313,1314],{},[237,1315,1316],{},"150",[328,1318,1319],{},"Maximum simultaneous connections",[313,1321,1322,1327,1332],{},[328,1323,1324],{},[237,1325,1326],{},"APACHE_MAX_CONNECTIONS_PER_CHILD",[328,1328,1329],{},[237,1330,1331],{},"0",[328,1333,1334],{},"Requests before child process restarts (0 = unlimited)",[313,1336,1337,1342,1346],{},[328,1338,1339],{},[237,1340,1341],{},"SSL_MODE",[328,1343,1344],{},[237,1345,1100],{},[328,1347,1348,1349,1351,1352,1354,1355],{},"SSL mode: ",[237,1350,1100],{},", ",[237,1353,1106],{},", or ",[237,1356,1112],{},[313,1358,1359,1364,1369],{},[328,1360,1361],{},[237,1362,1363],{},"SSL_CERTIFICATE_FILE",[328,1365,1366],{},[237,1367,1368],{},"/etc/ssl/private/self-signed-web.crt",[328,1370,1371],{},"Path to SSL certificate",[313,1373,1374,1379,1384],{},[328,1375,1376],{},[237,1377,1378],{},"SSL_PRIVATE_KEY_FILE",[328,1380,1381],{},[237,1382,1383],{},"/etc/ssl/private/self-signed-web.key",[328,1385,1386],{},"Path to SSL private key",[313,1388,1389,1393,1397],{},[328,1390,1391],{},[237,1392,973],{},[328,1394,1395],{},[237,1396,977],{},[328,1398,1399],{},"Path for health check endpoint",[731,1401,1402],{"to":215},[230,1403,1404,1405,590],{},"For a complete list of available environment variables, see the ",[509,1406,1407],{"href":215},"Environment Variable Specification →",[528,1409,1411],{"id":1410},"php-fpm-configuration","PHP-FPM Configuration",[307,1413,1414,1424],{},[310,1415,1416],{},[313,1417,1418,1420,1422],{},[316,1419,1222],{},[316,1421,1225],{},[316,1423,1228],{},[323,1425,1426,1441,1464,1479,1493,1508,1523,1538,1553,1568],{},[313,1427,1428,1433,1438],{},[328,1429,1430],{},[237,1431,1432],{},"PHP_FPM_POOL_NAME",[328,1434,1435],{},[237,1436,1437],{},"www",[328,1439,1440],{},"Name of the PHP-FPM pool",[313,1442,1443,1448,1453],{},[328,1444,1445],{},[237,1446,1447],{},"PHP_FPM_PM_CONTROL",[328,1449,1450],{},[237,1451,1452],{},"ondemand",[328,1454,1455,1456,1351,1459,1351,1462,573],{},"Process manager control (",[237,1457,1458],{},"dynamic",[237,1460,1461],{},"static",[237,1463,1452],{},[313,1465,1466,1471,1476],{},[328,1467,1468],{},[237,1469,1470],{},"PHP_FPM_PM_MAX_CHILDREN",[328,1472,1473],{},[237,1474,1475],{},"20",[328,1477,1478],{},"Maximum number of child processes",[313,1480,1481,1486,1490],{},[328,1482,1483],{},[237,1484,1485],{},"PHP_FPM_PM_START_SERVERS",[328,1487,1488],{},[237,1489,1256],{},[328,1491,1492],{},"Number of child processes created on startup",[313,1494,1495,1500,1505],{},[328,1496,1497],{},[237,1498,1499],{},"PHP_FPM_PM_MIN_SPARE_SERVERS",[328,1501,1502],{},[237,1503,1504],{},"1",[328,1506,1507],{},"Minimum number of idle processes",[313,1509,1510,1515,1520],{},[328,1511,1512],{},[237,1513,1514],{},"PHP_FPM_PM_MAX_SPARE_SERVERS",[328,1516,1517],{},[237,1518,1519],{},"3",[328,1521,1522],{},"Maximum number of idle processes",[313,1524,1525,1530,1535],{},[328,1526,1527],{},[237,1528,1529],{},"PHP_MEMORY_LIMIT",[328,1531,1532],{},[237,1533,1534],{},"256M",[328,1536,1537],{},"Maximum memory a script can use",[313,1539,1540,1545,1550],{},[328,1541,1542],{},[237,1543,1544],{},"PHP_MAX_EXECUTION_TIME",[328,1546,1547],{},[237,1548,1549],{},"99",[328,1551,1552],{},"Maximum time a script can run (seconds)",[313,1554,1555,1560,1565],{},[328,1556,1557],{},[237,1558,1559],{},"PHP_UPLOAD_MAX_FILE_SIZE",[328,1561,1562],{},[237,1563,1564],{},"100M",[328,1566,1567],{},"Maximum upload file size",[313,1569,1570,1575,1579],{},[328,1571,1572],{},[237,1573,1574],{},"PHP_POST_MAX_SIZE",[328,1576,1577],{},[237,1578,1564],{},[328,1580,1581],{},"Maximum POST request size",[731,1583,1584],{"to":215},[230,1585,1404,1586,590],{},[509,1587,1407],{"href":215},[242,1589,1591],{"id":1590},"further-customization","Further Customization",[230,1593,1594],{},"If you need to customize the container further, reference the docs below:",[250,1596,1597,1602],{},[253,1598,1599,1601],{},[509,1600,214],{"href":215}," - See which environment variables are available to customize PHP and Apache settings.",[253,1603,1604,1606],{},[509,1605,218],{"href":219}," - See which commands are available to run inside the container.",[1608,1609,1610],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}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 .s4JwU, html code.shiki .s4JwU{--shiki-default:#85E89D}",{"title":10,"searchDepth":641,"depth":641,"links":1612},[1613,1614,1615,1621,1625,1629],{"id":244,"depth":641,"text":245},{"id":448,"depth":641,"text":449},{"id":522,"depth":641,"text":523,"children":1616},[1617,1618,1619,1620],{"id":530,"depth":649,"text":531},{"id":593,"depth":649,"text":594},{"id":738,"depth":649,"text":739},{"id":961,"depth":649,"text":962},{"id":1003,"depth":641,"text":1004,"children":1622},[1623,1624],{"id":1018,"depth":649,"text":1019},{"id":1116,"depth":649,"text":1117},{"id":1205,"depth":641,"text":1206,"children":1626},[1627,1628],{"id":1212,"depth":649,"text":1213},{"id":1410,"depth":649,"text":1411},{"id":1590,"depth":641,"text":1591},"Learn how to use the FPM-Apache variation of the serversideup/php image.",null,{},{"title":70,"description":1630},"QtJ3upbPm0xR-sEatDdfXpPcagYhZt6A7oyLE-zmSOw",[1636,1638],{"title":66,"path":67,"stem":68,"description":1637,"children":-1},"Learn how to use the FPM variation of the serversideup/php image.",{"title":74,"path":75,"stem":76,"description":1639,"children":-1},"Learn how to use the FPM-NGINX variation of the serversideup/php image.",1776367053013]