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