[{"data":1,"prerenderedAt":954},["ShallowReactive",2],{"navigation":3,"/docs/deployment-and-production/packaging-your-app-for-deployment":229,"/docs/deployment-and-production/packaging-your-app-for-deployment-surround":949},[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":142,"body":231,"description":944,"extension":918,"links":945,"meta":946,"navigation":395,"path":143,"redirect":945,"seo":947,"stem":144,"__hash__":948},"docs/docs/4.deployment-and-production/3.packaging-your-app-for-deployment.md",{"type":232,"value":233,"toc":925},"minimark",[234,241,246,249,254,267,346,349,362,366,374,410,413,427,431,437,449,453,456,538,541,554,558,561,588,595,599,602,646,649,670,673,677,681,688,720,724,727,743,754,758,761,788,791,795,798,884,887,898,902,905,921],[235,236,237],"lead-p",{},[238,239,240],"p",{},"In development, you mount your code as a volume for instant changes. In production, you build your code directly into the image for security, reliability, and portability. This guide shows you how to make that transition.",[242,243,245],"h2",{"id":244},"development-vs-production-images","Development vs production images",[238,247,248],{},"Let's revisit what you've been doing in development and why it changes for production.",[250,251,253],"h3",{"id":252},"what-youve-been-doing-development","What you've been doing (development)",[238,255,256,257,261,262,266],{},"In the ",[258,259,260],"a",{"href":25},"installation guide",", your ",[263,264,265],"code",{},"compose.yml"," looked like this:",[268,269,273],"pre",{"className":270,"code":271,"filename":265,"language":272,"meta":10,"style":10},"language-yml shiki shiki-themes github-dark","services:\n  php:\n    image: serversideup/php:8.5-fpm-nginx\n    ports:\n      - 80:8080\n    volumes:\n      - ./:/var/www/html  # Your code mounted as a volume\n","yml",[263,274,275,288,296,309,317,326,334],{"__ignoreMap":10},[276,277,280,284],"span",{"class":278,"line":279},"line",1,[276,281,283],{"class":282},"s4JwU","services",[276,285,287],{"class":286},"s95oV",":\n",[276,289,291,294],{"class":278,"line":290},2,[276,292,293],{"class":282},"  php",[276,295,287],{"class":286},[276,297,299,302,305],{"class":278,"line":298},3,[276,300,301],{"class":282},"    image",[276,303,304],{"class":286},": ",[276,306,308],{"class":307},"sU2Wk","serversideup/php:8.5-fpm-nginx\n",[276,310,312,315],{"class":278,"line":311},4,[276,313,314],{"class":282},"    ports",[276,316,287],{"class":286},[276,318,320,323],{"class":278,"line":319},5,[276,321,322],{"class":286},"      - ",[276,324,325],{"class":307},"80:8080\n",[276,327,329,332],{"class":278,"line":328},6,[276,330,331],{"class":282},"    volumes",[276,333,287],{"class":286},[276,335,337,339,342],{"class":278,"line":336},7,[276,338,322],{"class":286},[276,340,341],{"class":307},"./:/var/www/html",[276,343,345],{"class":344},"sAwPA","  # Your code mounted as a volume\n",[238,347,348],{},"This works great for development because:",[350,351,352,356,359],"ul",{},[353,354,355],"li",{},"You edit files on your computer and see changes instantly",[353,357,358],{},"No rebuild needed between changes",[353,360,361],{},"Fast iteration and debugging",[250,363,365],{"id":364},"what-you-need-for-production","What you need for production",[238,367,368,369,373],{},"For production, you'll create a ",[370,371,372],"strong",{},"custom image"," that includes your application code:",[268,375,380],{"className":376,"code":377,"filename":378,"language":379,"meta":10,"style":10},"language-dockerfile shiki shiki-themes github-dark","FROM serversideup/php:8.5-fpm-nginx\n\n# Copy your application code into the image\nCOPY --chown=www-data:www-data . /var/www/html\n","Dockerfile","dockerfile",[263,381,382,391,397,402],{"__ignoreMap":10},[276,383,384,388],{"class":278,"line":279},[276,385,387],{"class":386},"snl16","FROM",[276,389,390],{"class":286}," serversideup/php:8.5-fpm-nginx\n",[276,392,393],{"class":278,"line":290},[276,394,396],{"emptyLinePlaceholder":395},true,"\n",[276,398,399],{"class":278,"line":298},[276,400,401],{"class":344},"# Copy your application code into the image\n",[276,403,404,407],{"class":278,"line":311},[276,405,406],{"class":386},"COPY",[276,408,409],{"class":286}," --chown=www-data:www-data . /var/www/html\n",[238,411,412],{},"This is better for production because:",[350,414,415,418,421,424],{},[353,416,417],{},"Your code can't be accidentally modified or deleted",[353,419,420],{},"The image is completely portable and self-contained",[353,422,423],{},"You can version and tag each release",[353,425,426],{},"Deployments are atomic — the new version either works or it doesn't",[242,428,430],{"id":429},"creating-your-first-production-dockerfile","Creating your first production Dockerfile",[238,432,433,434,436],{},"Let's create a proper production Dockerfile step by step. Start by creating a file called ",[263,435,378],{}," in your project root.",[438,439,440],"tip",{},[238,441,442,443,445,446,448],{},"The ",[263,444,378],{}," should live at the root of your project, in the same directory as your ",[263,447,265],{},".",[250,450,452],{"id":451},"basic-php-application","Basic PHP application",[238,454,455],{},"For a simple PHP application, your Dockerfile might look like this:",[268,457,459],{"className":376,"code":458,"filename":378,"language":379,"meta":10,"style":10},"FROM serversideup/php:8.5-fpm-nginx\n\n# Switch to root to install dependencies and copy files\nUSER root\n\n# Install PHP dependencies\nRUN install-php-extensions intl bcmath\n\n# Switch back to non-root user for security\nUSER www-data\n\n# Copy application files with correct ownership\nCOPY --chown=www-data:www-data . /var/www/html\n",[263,460,461,467,471,476,484,488,493,501,506,512,520,525,531],{"__ignoreMap":10},[276,462,463,465],{"class":278,"line":279},[276,464,387],{"class":386},[276,466,390],{"class":286},[276,468,469],{"class":278,"line":290},[276,470,396],{"emptyLinePlaceholder":395},[276,472,473],{"class":278,"line":298},[276,474,475],{"class":344},"# Switch to root to install dependencies and copy files\n",[276,477,478,481],{"class":278,"line":311},[276,479,480],{"class":386},"USER",[276,482,483],{"class":286}," root\n",[276,485,486],{"class":278,"line":319},[276,487,396],{"emptyLinePlaceholder":395},[276,489,490],{"class":278,"line":328},[276,491,492],{"class":344},"# Install PHP dependencies\n",[276,494,495,498],{"class":278,"line":336},[276,496,497],{"class":386},"RUN",[276,499,500],{"class":286}," install-php-extensions intl bcmath\n",[276,502,504],{"class":278,"line":503},8,[276,505,396],{"emptyLinePlaceholder":395},[276,507,509],{"class":278,"line":508},9,[276,510,511],{"class":344},"# Switch back to non-root user for security\n",[276,513,515,517],{"class":278,"line":514},10,[276,516,480],{"class":386},[276,518,519],{"class":286}," www-data\n",[276,521,523],{"class":278,"line":522},11,[276,524,396],{"emptyLinePlaceholder":395},[276,526,528],{"class":278,"line":527},12,[276,529,530],{"class":344},"# Copy application files with correct ownership\n",[276,532,534,536],{"class":278,"line":533},13,[276,535,406],{"class":386},[276,537,409],{"class":286},[238,539,540],{},"That's it! This takes your application code and bakes it into the image.",[542,543,544],"note",{},[238,545,546,547,550,551,448],{},"Notice we use ",[263,548,549],{},"--chown=www-data:www-data"," when copying files. This ensures the web server can read your files. Learn more in our ",[258,552,553],{"href":172},"file permissions guide",[242,555,557],{"id":556},"building-your-image","Building your image",[238,559,560],{},"Once you have your Dockerfile, build your image with:",[268,562,567],{"className":563,"code":564,"filename":565,"language":566,"meta":10,"style":10},"language-bash shiki shiki-themes github-dark","docker build -t my-app:latest .\n","Terminal","bash",[263,568,569],{"__ignoreMap":10},[276,570,571,575,578,582,585],{"class":278,"line":279},[276,572,574],{"class":573},"svObZ","docker",[276,576,577],{"class":307}," build",[276,579,581],{"class":580},"sDLfK"," -t",[276,583,584],{"class":307}," my-app:latest",[276,586,587],{"class":307}," .\n",[238,589,590,591,594],{},"This creates an image tagged as ",[263,592,593],{},"my-app:latest"," that contains your application code.",[250,596,598],{"id":597},"testing-your-production-image","Testing your production image",[238,600,601],{},"Before deploying, test your production image locally:",[268,603,606],{"className":270,"code":604,"filename":605,"language":272,"meta":10,"style":10},"services:\n  php:\n    # Use your custom image instead of the base image\n    image: my-app:latest\n    ports:\n      - 80:8080\n","compose.prod.yml",[263,607,608,614,620,625,634,640],{"__ignoreMap":10},[276,609,610,612],{"class":278,"line":279},[276,611,283],{"class":282},[276,613,287],{"class":286},[276,615,616,618],{"class":278,"line":290},[276,617,293],{"class":282},[276,619,287],{"class":286},[276,621,622],{"class":278,"line":298},[276,623,624],{"class":344},"    # Use your custom image instead of the base image\n",[276,626,627,629,631],{"class":278,"line":311},[276,628,301],{"class":282},[276,630,304],{"class":286},[276,632,633],{"class":307},"my-app:latest\n",[276,635,636,638],{"class":278,"line":319},[276,637,314],{"class":282},[276,639,287],{"class":286},[276,641,642,644],{"class":278,"line":328},[276,643,322],{"class":286},[276,645,325],{"class":307},[238,647,648],{},"Then run:",[268,650,652],{"className":563,"code":651,"filename":565,"language":566,"meta":10,"style":10},"docker compose -f compose.prod.yml up\n",[263,653,654],{"__ignoreMap":10},[276,655,656,658,661,664,667],{"class":278,"line":279},[276,657,574],{"class":573},[276,659,660],{"class":307}," compose",[276,662,663],{"class":580}," -f",[276,665,666],{"class":307}," compose.prod.yml",[276,668,669],{"class":307}," up\n",[238,671,672],{},"This lets you verify your production image works correctly before deploying to real servers.",[242,674,676],{"id":675},"best-practices-for-production-images","Best practices for production images",[250,678,680],{"id":679},"_1-use-specific-image-tags","1. Use specific image tags",[238,682,683,684,687],{},"Don't use ",[263,685,686],{},"latest"," tags in production. Use specific versions:",[268,689,691],{"className":376,"code":690,"language":379,"meta":10,"style":10},"# Bad - version can change unexpectedly\nFROM serversideup/php:latest\n\n# Good - explicitly versioned\nFROM serversideup/php:8.5-fpm-nginx\n",[263,692,693,698,705,709,714],{"__ignoreMap":10},[276,694,695],{"class":278,"line":279},[276,696,697],{"class":344},"# Bad - version can change unexpectedly\n",[276,699,700,702],{"class":278,"line":290},[276,701,387],{"class":386},[276,703,704],{"class":286}," serversideup/php:latest\n",[276,706,707],{"class":278,"line":298},[276,708,396],{"emptyLinePlaceholder":395},[276,710,711],{"class":278,"line":311},[276,712,713],{"class":344},"# Good - explicitly versioned\n",[276,715,716,718],{"class":278,"line":319},[276,717,387],{"class":386},[276,719,390],{"class":286},[250,721,723],{"id":722},"_2-run-as-non-root-user","2. Run as non-root user",[238,725,726],{},"Always run your application as a non-root user for security:",[268,728,730],{"className":376,"code":729,"language":379,"meta":10,"style":10},"# Our images default to www-data, but explicitly switch back if you use root\nUSER www-data\n",[263,731,732,737],{"__ignoreMap":10},[276,733,734],{"class":278,"line":279},[276,735,736],{"class":344},"# Our images default to www-data, but explicitly switch back if you use root\n",[276,738,739,741],{"class":278,"line":290},[276,740,480],{"class":386},[276,742,519],{"class":286},[238,744,745,746,749,750,753],{},"All ",[263,747,748],{},"serversideup/php"," images default to running as the ",[263,751,752],{},"www-data"," user for security.",[250,755,757],{"id":756},"_3-keep-secrets-out-of-images","3. Keep secrets out of images",[238,759,760],{},"Never bake secrets into your images:",[268,762,764],{"className":376,"code":763,"language":379,"meta":10,"style":10},"# ❌ Never do this\nENV APP_KEY=base64:your-secret-key\n\n# ✅ Provide secrets at runtime via environment variables\n",[263,765,766,771,779,783],{"__ignoreMap":10},[276,767,768],{"class":278,"line":279},[276,769,770],{"class":344},"# ❌ Never do this\n",[276,772,773,776],{"class":278,"line":290},[276,774,775],{"class":386},"ENV",[276,777,778],{"class":286}," APP_KEY=base64:your-secret-key\n",[276,780,781],{"class":278,"line":298},[276,782,396],{"emptyLinePlaceholder":395},[276,784,785],{"class":278,"line":311},[276,786,787],{"class":344},"# ✅ Provide secrets at runtime via environment variables\n",[238,789,790],{},"Secrets should be provided when the container starts, not built into the image.",[242,792,794],{"id":793},"image-versioning-strategy","Image versioning strategy",[238,796,797],{},"When building images for deployment, tag them with meaningful versions:",[268,799,801],{"className":563,"code":800,"filename":565,"language":566,"meta":10,"style":10},"# Tag with git commit SHA\ndocker build -t my-app:$(git rev-parse --short HEAD) .\n\n# Tag with semantic version\ndocker build -t my-app:1.2.3 .\n\n# Tag with date and build number\ndocker build -t my-app:2024-10-31-build-42 .\n",[263,802,803,808,840,844,849,862,866,871],{"__ignoreMap":10},[276,804,805],{"class":278,"line":279},[276,806,807],{"class":344},"# Tag with git commit SHA\n",[276,809,810,812,814,816,819,822,825,828,831,834,837],{"class":278,"line":290},[276,811,574],{"class":573},[276,813,577],{"class":307},[276,815,581],{"class":580},[276,817,818],{"class":307}," my-app:",[276,820,821],{"class":286},"$(",[276,823,824],{"class":573},"git",[276,826,827],{"class":307}," rev-parse",[276,829,830],{"class":580}," --short",[276,832,833],{"class":307}," HEAD",[276,835,836],{"class":286},") ",[276,838,839],{"class":307},".\n",[276,841,842],{"class":278,"line":298},[276,843,396],{"emptyLinePlaceholder":395},[276,845,846],{"class":278,"line":311},[276,847,848],{"class":344},"# Tag with semantic version\n",[276,850,851,853,855,857,860],{"class":278,"line":319},[276,852,574],{"class":573},[276,854,577],{"class":307},[276,856,581],{"class":580},[276,858,859],{"class":307}," my-app:1.2.3",[276,861,587],{"class":307},[276,863,864],{"class":278,"line":328},[276,865,396],{"emptyLinePlaceholder":395},[276,867,868],{"class":278,"line":336},[276,869,870],{"class":344},"# Tag with date and build number\n",[276,872,873,875,877,879,882],{"class":278,"line":503},[276,874,574],{"class":573},[276,876,577],{"class":307},[276,878,581],{"class":580},[276,880,881],{"class":307}," my-app:2024-10-31-build-42",[276,883,587],{"class":307},[238,885,886],{},"Good versioning lets you:",[350,888,889,892,895],{},[353,890,891],{},"Track which code is running in each environment",[353,893,894],{},"Roll back to previous versions quickly",[353,896,897],{},"Debug issues by knowing exactly what's deployed",[242,899,901],{"id":900},"whats-next","What's next?",[238,903,904],{},"Now that you know how to package your application, you're ready to learn about SSL configuration and choosing the right hosting provider for your containerized application.",[906,907],"u-button",{"ariaLabel":908,"className":909,"color":917,"label":908,"size":918,"to":147,"trailing-icon":919,"variant":920},"Configure SSL for your application",[910,911,912,913,914,915,916],"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",[922,923,924],"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}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":10,"searchDepth":290,"depth":290,"links":926},[927,931,934,937,942,943],{"id":244,"depth":290,"text":245,"children":928},[929,930],{"id":252,"depth":298,"text":253},{"id":364,"depth":298,"text":365},{"id":429,"depth":290,"text":430,"children":932},[933],{"id":451,"depth":298,"text":452},{"id":556,"depth":290,"text":557,"children":935},[936],{"id":597,"depth":298,"text":598},{"id":675,"depth":290,"text":676,"children":938},[939,940,941],{"id":679,"depth":298,"text":680},{"id":722,"depth":298,"text":723},{"id":756,"depth":298,"text":757},{"id":793,"depth":290,"text":794},{"id":900,"depth":290,"text":901},"Learn how to properly package your PHP application into production-ready Docker images.",null,{"layout":7},{"title":142,"description":944},"pfttJ90CY7Ra76ejueC6Y_GaAQlTKf6_NcNi6MlLpJc",[950,952],{"title":138,"path":139,"stem":140,"description":951,"children":-1},"Learn how to take your PHP application from development to production with confidence using Docker.",{"title":146,"path":147,"stem":148,"description":953,"children":-1},"Learn how to use SSL with the serversideup/php images.",1789148864827]