[{"data":1,"prerenderedAt":510},["ShallowReactive",2],{"navigation":3,"/docs/getting-started/quick-start":96,"/docs/getting-started/quick-start-surround":505},[4],{"title":5,"path":6,"stem":7,"children":8,"page":59},"Docs","/docs","docs",[9,25,41,60,80,88],{"title":10,"path":11,"stem":12,"children":13,"icon":24},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[14,16,20],{"title":15,"path":11,"stem":12},"Introduction",{"title":17,"path":18,"stem":19},"Quick start","/docs/getting-started/quick-start","docs/1.getting-started/2.quick-start",{"title":21,"path":22,"stem":23},"Running from source","/docs/getting-started/running-from-source","docs/1.getting-started/3.running-from-source","i-lucide-rocket",{"title":26,"path":27,"stem":28,"children":29,"icon":40},"Benchmarks & Methodology","/docs/benchmarks","docs/2.benchmarks/1.index",[30,32,36],{"title":31,"path":27,"stem":28},"Methodology",{"title":33,"path":34,"stem":35},"Reading your results","/docs/benchmarks/reading-your-results","docs/2.benchmarks/2.reading-your-results",{"title":37,"path":38,"stem":39},"Testing from another machine","/docs/benchmarks/testing-from-another-machine","docs/2.benchmarks/3.testing-from-another-machine","i-lucide-flask-conical",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":59},"Configuration","i-lucide-settings-2","/docs/configuration","docs/3.configuration",[47,51,55],{"title":48,"path":49,"stem":50},"Adding a real database","/docs/configuration/adding-databases","docs/3.configuration/1.adding-databases",{"title":52,"path":53,"stem":54},"Customizing the image","/docs/configuration/customizing-the-image","docs/3.configuration/2.customizing-the-image",{"title":56,"path":57,"stem":58},"Common tuning strategies","/docs/configuration/common-tuning-strategies","docs/3.configuration/3.common-tuning-strategies",false,{"title":61,"path":62,"stem":63,"children":64,"icon":79},"Image variations","/docs/image-variations","docs/4.image-variations/1.index",[65,67,71,75],{"title":66,"path":62,"stem":63},"Choosing a variation",{"title":68,"path":69,"stem":70},"FPM-NGINX","/docs/image-variations/fpm-nginx","docs/4.image-variations/2.fpm-nginx",{"title":72,"path":73,"stem":74},"FrankenPHP","/docs/image-variations/frankenphp","docs/4.image-variations/3.frankenphp",{"title":76,"path":77,"stem":78},"FPM-Apache","/docs/image-variations/fpm-apache","docs/4.image-variations/4.fpm-apache","i-lucide-layers",{"title":81,"path":82,"stem":83,"children":84,"icon":87},"Community Results","/docs/community-results","docs/5.community-results/1.index",[85],{"title":86,"path":82,"stem":83},"Submitting your results","i-lucide-users",{"title":89,"path":90,"stem":91,"children":92,"icon":95},"FAQ","/docs/faq","docs/6.faq/1.index",[93],{"title":94,"path":90,"stem":91},"Frequently asked questions","i-lucide-circle-help",{"id":97,"title":17,"body":98,"description":497,"extension":498,"links":499,"meta":500,"navigation":501,"path":18,"redirect":499,"seo":502,"sitemap":503,"stem":19,"__hash__":504},"docs/docs/1.getting-started/2.quick-start.md",{"type":99,"value":100,"toc":487},"minimark",[101,110,457,462,483],[102,103,104,105,109],"p",{},"BenchKit is available to ",[106,107,108],"a",{"href":22},"deploy from source"," or a container image. The easiest way to deploy BenchKit is with Docker, which is what this quick start guide will cover.",[111,112,114,119,122,126,129,164,174,184,188,196,244,247,251,254,268,319,327,338,342,348,383,395,404,408,420,424,427],"steps",{"level":113},"3",[115,116,118],"h3",{"id":117},"deploy-a-server","Deploy a server",[102,120,121],{},"Pick any size server and host you want to test. BenchKit is designed to be run as a standalone application and since it runs as a container image, it's very easy to clean up after you finish.",[115,123,125],{"id":124},"install-docker","Install Docker",[102,127,128],{},"On a fresh server, the quickest way to install Docker is Docker's own script.",[130,131,137],"pre",{"className":132,"code":133,"filename":134,"language":135,"meta":136,"style":136},"language-bash shiki shiki-themes github-dark","curl -fsSL https://get.docker.com | bash\n","Terminal","bash","",[138,139,140],"code",{"__ignoreMap":136},[141,142,145,149,153,157,161],"span",{"class":143,"line":144},"line",1,[141,146,148],{"class":147},"svObZ","curl",[141,150,152],{"class":151},"sDLfK"," -fsSL",[141,154,156],{"class":155},"sU2Wk"," https://get.docker.com",[141,158,160],{"class":159},"snl16"," |",[141,162,163],{"class":147}," bash\n",[102,165,166,167,170,171,173],{},"Installing Docker needs root. Run the command as root, or put ",[138,168,169],{},"sudo"," in front of ",[138,172,135],{},".",[102,175,176,177,183],{},"On a machine you intend to keep, follow the ",[106,178,182],{"href":179,"rel":180},"https://docs.docker.com/engine/install/",[181],"nofollow","official Docker Engine install guide"," instead. It sets up the package repository, which keeps Docker updated along with the rest of the system.",[115,185,187],{"id":186},"start-the-container","Start the container",[189,190,191],"note",{},[102,192,193,194,173],{},"By default we ship FPM-NGINX. For FrankenPHP and FPM-Apache variations see ",[106,195,61],{"href":62},[130,197,199],{"className":132,"code":198,"filename":134,"language":135,"meta":136,"style":136},"docker run -d --name benchkit -p 80:8080 \\\n  -v benchkit-runs:/var/www/html/storage/app/runs \\\n  serversideup/benchkit-laravel:latest\n",[138,200,201,227,238],{"__ignoreMap":136},[141,202,203,206,209,212,215,218,221,224],{"class":143,"line":144},[141,204,205],{"class":147},"docker",[141,207,208],{"class":155}," run",[141,210,211],{"class":151}," -d",[141,213,214],{"class":151}," --name",[141,216,217],{"class":155}," benchkit",[141,219,220],{"class":151}," -p",[141,222,223],{"class":155}," 80:8080",[141,225,226],{"class":151}," \\\n",[141,228,230,233,236],{"class":143,"line":229},2,[141,231,232],{"class":151},"  -v",[141,234,235],{"class":155}," benchkit-runs:/var/www/html/storage/app/runs",[141,237,226],{"class":151},[141,239,241],{"class":143,"line":240},3,[141,242,243],{"class":155},"  serversideup/benchkit-laravel:latest\n",[102,245,246],{},"The app listens on port 8080 inside the container, and the command above publishes it on port 80 of the host. The volume holds your run history. Without it, your results disappear with the container.",[115,248,250],{"id":249},"run-a-benchmark","Run a benchmark",[102,252,253],{},"Once the container is running, simply visit:",[130,255,257],{"className":132,"code":256,"language":135,"meta":136,"style":136},"http://\u003Cyour-server-ip>/\n",[138,258,259],{"__ignoreMap":136},[141,260,261,264],{"class":143,"line":144},[141,262,263],{"class":147},"http://",[141,265,267],{"class":266},"s95oV","\u003Cyour-server-ip>/\n",[189,269,270,276,312],{},[102,271,272,273,275],{},"Notice the default is ",[138,274,263],{}," since there's no login or sensitive data with BenchKit. If you prefer to use the self-signed certificate, expose the HTTPS port instead:",[130,277,279],{"className":132,"code":278,"filename":134,"language":135,"meta":136,"style":136},"docker run -d --name benchkit -p 443:8443 \\\n  -v benchkit-runs:/var/www/html/storage/app/runs \\\n  serversideup/benchkit-laravel:latest\n",[138,280,281,300,308],{"__ignoreMap":136},[141,282,283,285,287,289,291,293,295,298],{"class":143,"line":144},[141,284,205],{"class":147},[141,286,208],{"class":155},[141,288,211],{"class":151},[141,290,214],{"class":151},[141,292,217],{"class":155},[141,294,220],{"class":151},[141,296,297],{"class":155}," 443:8443",[141,299,226],{"class":151},[141,301,302,304,306],{"class":143,"line":229},[141,303,232],{"class":151},[141,305,235],{"class":155},[141,307,226],{"class":151},[141,309,310],{"class":143,"line":240},[141,311,243],{"class":155},[102,313,314,315,318],{},"Then use ",[138,316,317],{},"https://\u003Cyour-server-ip>/"," to access BenchKit.",[102,320,321,322,326],{},"Open the server in your browser and press ",[323,324,325],"strong",{},"Start Benchmark",". The run happens on the server rather than in the browser. You can close the tab, reload the page, or follow the run from another device without disturbing it.",[102,328,329,330,333,334,337],{},"Before you start, the settings drawer lets you pick the ",[323,331,332],{},"Quick"," preset for a shorter run or ",[323,335,336],{},"Full"," to measure everything, and it estimates how long your choice will take.",[115,339,341],{"id":340},"drive-the-load-from-a-second-machine","Drive the load from a second machine",[102,343,344,345,347],{},"BenchKit runs its load test from another machine by default, because a server generating its own traffic competes with the thing it is measuring. Pressing ",[323,346,325],{}," hands you a command instead of starting straight away:",[130,349,351],{"className":132,"code":350,"filename":134,"language":135,"meta":136,"style":136},"curl -kfsSL https://your-benchkit-instance/bench/generator/\u003Ctoken>/script | sh\n",[138,352,353],{"__ignoreMap":136},[141,354,355,357,360,363,366,369,372,375,378,380],{"class":143,"line":144},[141,356,148],{"class":147},[141,358,359],{"class":151}," -kfsSL",[141,361,362],{"class":155}," https://your-benchkit-instance/bench/generator/",[141,364,365],{"class":159},"\u003C",[141,367,368],{"class":155},"toke",[141,370,371],{"class":266},"n",[141,373,374],{"class":159},">",[141,376,377],{"class":155},"/script",[141,379,160],{"class":159},[141,381,382],{"class":147}," sh\n",[102,384,385,386,391,392,394],{},"Paste it on a machine near your server. That machine needs ",[106,387,390],{"href":388,"rel":389},"https://github.com/hatoo/oha",[181],"oha"," installed first; the command checks and tells you how if it is missing. It connects, and the run starts on its own. ",[106,393,37],{"href":38}," covers how to pick that machine and how to install oha on it.",[189,396,397],{},[102,398,399,400,403],{},"No second machine handy? Choose ",[323,401,402],{},"Test from this server instead"," in the same dialog. The run starts immediately, and the throughput it reports is a floor rather than a maximum.",[115,405,407],{"id":406},"share-your-result","Share your result",[102,409,410,411,414,415,419],{},"When the run finishes, press ",[323,412,413],{},"Submit result",". BenchKit opens a pre-filled GitHub issue containing your numbers. A bot checks the submission and opens a pull request, and your run appears in the ",[106,416,418],{"href":417},"/results","community gallery"," once a maintainer merges it.",[115,421,423],{"id":422},"tear-it-down","Tear it down",[102,425,426],{},"BenchKit is meant to be thrown away once you have your numbers. Submit or download anything you want to keep first, then remove the container and its volume:",[130,428,430],{"className":132,"code":429,"filename":134,"language":135,"meta":136,"style":136},"docker rm -f benchkit\ndocker volume rm benchkit-runs\n",[138,431,432,445],{"__ignoreMap":136},[141,433,434,436,439,442],{"class":143,"line":144},[141,435,205],{"class":147},[141,437,438],{"class":155}," rm",[141,440,441],{"class":151}," -f",[141,443,444],{"class":155}," benchkit\n",[141,446,447,449,452,454],{"class":143,"line":229},[141,448,205],{"class":147},[141,450,451],{"class":155}," volume",[141,453,438],{"class":155},[141,455,456],{"class":155}," benchkit-runs\n",[458,459,461],"h2",{"id":460},"next-steps","Next steps",[463,464,465,471,477],"card-group",{},[466,467,468],"card",{"icon":79,"title":61,"to":62},[102,469,470],{},"Run the same application on FrankenPHP, FPM-NGINX, or FPM-Apache and compare them.",[466,472,474],{"icon":473,"title":52,"to":53},"i-lucide-sliders-horizontal",[102,475,476],{},"Change OPcache, JIT, and the FPM pool with environment variables.",[466,478,480],{"icon":479,"title":21,"to":22},"i-lucide-git-branch",[102,481,482],{},"Deploy to a host that takes a repository instead of a container.",[484,485,486],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}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 .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}",{"title":136,"searchDepth":229,"depth":229,"links":488},[489,490,491,492,493,494,495,496],{"id":117,"depth":240,"text":118},{"id":124,"depth":240,"text":125},{"id":186,"depth":240,"text":187},{"id":249,"depth":240,"text":250},{"id":340,"depth":240,"text":341},{"id":406,"depth":240,"text":407},{"id":422,"depth":240,"text":423},{"id":460,"depth":229,"text":461},"Run BenchKit on the server you want to measure.","md",null,{},true,{"title":17,"description":497},{"loc":18},"4yjSDkfbMhxWsBukaEoyBeHv2Lz-2ffKT93196apDKw",[506,508],{"title":15,"path":11,"stem":12,"description":507,"children":-1},"What BenchKit is and why we built it.",{"title":21,"path":22,"stem":23,"description":509,"children":-1},"Run BenchKit on Laravel Cloud, Railway, or any host that wants a repository instead of a container.",1790284380233]