[{"data":1,"prerenderedAt":1380},["ShallowReactive",2],{"navigation":3,"/docs/configuration/adding-databases":96,"/docs/configuration/adding-databases-surround":1375},[4],{"title":5,"path":6,"stem":7,"children":8,"page":43},"Docs","/docs","docs",[9,25,44,64,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,"icon":27,"path":28,"stem":29,"children":30,"page":43},"Configuration","i-lucide-settings-2","/docs/configuration","docs/2.configuration",[31,35,39],{"title":32,"path":33,"stem":34},"Adding a real database","/docs/configuration/adding-databases","docs/2.configuration/1.adding-databases",{"title":36,"path":37,"stem":38},"Customizing the image","/docs/configuration/customizing-the-image","docs/2.configuration/2.customizing-the-image",{"title":40,"path":41,"stem":42},"Common tuning strategies","/docs/configuration/common-tuning-strategies","docs/2.configuration/3.common-tuning-strategies",false,{"title":45,"path":46,"stem":47,"children":48,"icon":63},"Image variations","/docs/image-variations","docs/3.image-variations/1.index",[49,51,55,59],{"title":50,"path":46,"stem":47},"Choosing a variation",{"title":52,"path":53,"stem":54},"FPM-NGINX","/docs/image-variations/fpm-nginx","docs/3.image-variations/2.fpm-nginx",{"title":56,"path":57,"stem":58},"FrankenPHP","/docs/image-variations/frankenphp","docs/3.image-variations/3.frankenphp",{"title":60,"path":61,"stem":62},"FPM-Apache","/docs/image-variations/fpm-apache","docs/3.image-variations/4.fpm-apache","i-lucide-layers",{"title":65,"path":66,"stem":67,"children":68,"icon":79},"Benchmarks & Methodology","/docs/benchmarks","docs/4.benchmarks/1.index",[69,71,75],{"title":70,"path":66,"stem":67},"Methodology",{"title":72,"path":73,"stem":74},"Reading your results","/docs/benchmarks/reading-your-results","docs/4.benchmarks/2.reading-your-results",{"title":76,"path":77,"stem":78},"Testing from another machine","/docs/benchmarks/testing-from-another-machine","docs/4.benchmarks/3.testing-from-another-machine","i-lucide-flask-conical",{"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":32,"body":98,"description":1368,"extension":1369,"links":1370,"meta":1371,"navigation":240,"path":33,"redirect":1370,"seo":1372,"sitemap":1373,"stem":34,"__hash__":1374},"docs/docs/2.configuration/1.adding-databases.md",{"type":99,"value":100,"toc":1363},"minimark",[101,105,110,118,142,145,1274,1277,1300,1315,1322,1326,1337,1341,1348,1353,1359],[102,103,104],"p",{},"BenchKit uses SQLite by default so that it runs with no setup at all. SQLite runs inside the PHP process, which means it has no connection cost and none of the indexing and contention behavior you get from a database server. If you want numbers that reflect how your application talks to a real database, use Laravel's native database drivers to point BenchKit at MySQL, MariaDB, or Postgres.",[106,107,109],"h2",{"id":108},"the-two-files","The two files",[102,111,112,113,117],{},"Put both files in the same directory. Compose reads ",[114,115,116],"code",{},".env"," on its own, so you write each value once and it reaches both containers:",[119,120,121,130],"ul",{},[122,123,124,129],"li",{},[125,126,127],"strong",{},[114,128,116],{}," holds the credentials.",[122,131,132,137,138,141],{},[125,133,134],{},[114,135,136],{},"docker-compose.yml"," hands them to BenchKit as Laravel's ",[114,139,140],{},"DB_*"," variables, and to the database as the variables its own image expects.",[102,143,144],{},"Pick your engine and copy both files.",[146,147,149,610,957],"tabs",{"sync":148},"database",[150,151,154],"tabs-item",{"icon":152,"label":153},"i-simple-icons-mysql","MySQL",[155,156,157,257],"code-tree",{"default-value":116},[158,159,164],"pre",{"className":160,"code":161,"filename":116,"language":162,"meta":163,"style":163},"language-ini shiki shiki-themes github-dark","# BenchKit reads these as Laravel's database config.\n# DB_HOST is the service name below, not localhost.\nDB_CONNECTION=mysql\nDB_HOST=mysql\nDB_PORT=3306\nDB_DATABASE=benchkit\nDB_USERNAME=benchkit\nDB_PASSWORD=benchkit_secret\n\n# Only the database container uses this one.\nDB_ROOT_PASSWORD=root_secret\n","ini","",[114,165,166,175,181,192,200,209,218,226,235,242,248],{"__ignoreMap":163},[167,168,171],"span",{"class":169,"line":170},"line",1,[167,172,174],{"class":173},"sAwPA","# BenchKit reads these as Laravel's database config.\n",[167,176,178],{"class":169,"line":177},2,[167,179,180],{"class":173},"# DB_HOST is the service name below, not localhost.\n",[167,182,184,188],{"class":169,"line":183},3,[167,185,187],{"class":186},"snl16","DB_CONNECTION",[167,189,191],{"class":190},"s95oV","=mysql\n",[167,193,195,198],{"class":169,"line":194},4,[167,196,197],{"class":186},"DB_HOST",[167,199,191],{"class":190},[167,201,203,206],{"class":169,"line":202},5,[167,204,205],{"class":186},"DB_PORT",[167,207,208],{"class":190},"=3306\n",[167,210,212,215],{"class":169,"line":211},6,[167,213,214],{"class":186},"DB_DATABASE",[167,216,217],{"class":190},"=benchkit\n",[167,219,221,224],{"class":169,"line":220},7,[167,222,223],{"class":186},"DB_USERNAME",[167,225,217],{"class":190},[167,227,229,232],{"class":169,"line":228},8,[167,230,231],{"class":186},"DB_PASSWORD",[167,233,234],{"class":190},"=benchkit_secret\n",[167,236,238],{"class":169,"line":237},9,[167,239,241],{"emptyLinePlaceholder":240},true,"\n",[167,243,245],{"class":169,"line":244},10,[167,246,247],{"class":173},"# Only the database container uses this one.\n",[167,249,251,254],{"class":169,"line":250},11,[167,252,253],{"class":186},"DB_ROOT_PASSWORD",[167,255,256],{"class":190},"=root_secret\n",[158,258,262],{"className":259,"code":260,"filename":136,"language":261,"meta":163,"style":163},"language-yaml shiki shiki-themes github-dark","services:\n  benchkit:\n    image: serversideup/benchkit-laravel:latest\n    ports:\n      - \"80:8080\"\n    environment:\n      DB_CONNECTION: ${DB_CONNECTION}\n      DB_HOST: ${DB_HOST}\n      DB_PORT: ${DB_PORT}\n      DB_DATABASE: ${DB_DATABASE}\n      DB_USERNAME: ${DB_USERNAME}\n      DB_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - benchkit-runs:/var/www/html/storage/app/runs\n    depends_on:\n      mysql:\n        condition: service_healthy\n\n  mysql:\n    image: mysql:8.4\n    environment:\n      MYSQL_DATABASE: ${DB_DATABASE}\n      MYSQL_USER: ${DB_USERNAME}\n      MYSQL_PASSWORD: ${DB_PASSWORD}\n      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}\n    volumes:\n      - mysql-data:/var/lib/mysql\n    healthcheck:\n      test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\"]\n      interval: 5s\n      timeout: 5s\n      retries: 10\n\nvolumes:\n  benchkit-runs:\n  mysql-data:\n","yaml",[114,263,264,273,280,292,299,307,314,324,334,344,354,364,375,383,391,399,407,418,423,431,441,448,458,468,478,489,496,504,512,548,559,569,581,586,594,602],{"__ignoreMap":163},[167,265,266,270],{"class":169,"line":170},[167,267,269],{"class":268},"s4JwU","services",[167,271,272],{"class":190},":\n",[167,274,275,278],{"class":169,"line":177},[167,276,277],{"class":268},"  benchkit",[167,279,272],{"class":190},[167,281,282,285,288],{"class":169,"line":183},[167,283,284],{"class":268},"    image",[167,286,287],{"class":190},": ",[167,289,291],{"class":290},"sU2Wk","serversideup/benchkit-laravel:latest\n",[167,293,294,297],{"class":169,"line":194},[167,295,296],{"class":268},"    ports",[167,298,272],{"class":190},[167,300,301,304],{"class":169,"line":202},[167,302,303],{"class":190},"      - ",[167,305,306],{"class":290},"\"80:8080\"\n",[167,308,309,312],{"class":169,"line":211},[167,310,311],{"class":268},"    environment",[167,313,272],{"class":190},[167,315,316,319,321],{"class":169,"line":220},[167,317,318],{"class":268},"      DB_CONNECTION",[167,320,287],{"class":190},[167,322,323],{"class":290},"${DB_CONNECTION}\n",[167,325,326,329,331],{"class":169,"line":228},[167,327,328],{"class":268},"      DB_HOST",[167,330,287],{"class":190},[167,332,333],{"class":290},"${DB_HOST}\n",[167,335,336,339,341],{"class":169,"line":237},[167,337,338],{"class":268},"      DB_PORT",[167,340,287],{"class":190},[167,342,343],{"class":290},"${DB_PORT}\n",[167,345,346,349,351],{"class":169,"line":244},[167,347,348],{"class":268},"      DB_DATABASE",[167,350,287],{"class":190},[167,352,353],{"class":290},"${DB_DATABASE}\n",[167,355,356,359,361],{"class":169,"line":250},[167,357,358],{"class":268},"      DB_USERNAME",[167,360,287],{"class":190},[167,362,363],{"class":290},"${DB_USERNAME}\n",[167,365,367,370,372],{"class":169,"line":366},12,[167,368,369],{"class":268},"      DB_PASSWORD",[167,371,287],{"class":190},[167,373,374],{"class":290},"${DB_PASSWORD}\n",[167,376,378,381],{"class":169,"line":377},13,[167,379,380],{"class":268},"    volumes",[167,382,272],{"class":190},[167,384,386,388],{"class":169,"line":385},14,[167,387,303],{"class":190},[167,389,390],{"class":290},"benchkit-runs:/var/www/html/storage/app/runs\n",[167,392,394,397],{"class":169,"line":393},15,[167,395,396],{"class":268},"    depends_on",[167,398,272],{"class":190},[167,400,402,405],{"class":169,"line":401},16,[167,403,404],{"class":268},"      mysql",[167,406,272],{"class":190},[167,408,410,413,415],{"class":169,"line":409},17,[167,411,412],{"class":268},"        condition",[167,414,287],{"class":190},[167,416,417],{"class":290},"service_healthy\n",[167,419,421],{"class":169,"line":420},18,[167,422,241],{"emptyLinePlaceholder":240},[167,424,426,429],{"class":169,"line":425},19,[167,427,428],{"class":268},"  mysql",[167,430,272],{"class":190},[167,432,434,436,438],{"class":169,"line":433},20,[167,435,284],{"class":268},[167,437,287],{"class":190},[167,439,440],{"class":290},"mysql:8.4\n",[167,442,444,446],{"class":169,"line":443},21,[167,445,311],{"class":268},[167,447,272],{"class":190},[167,449,451,454,456],{"class":169,"line":450},22,[167,452,453],{"class":268},"      MYSQL_DATABASE",[167,455,287],{"class":190},[167,457,353],{"class":290},[167,459,461,464,466],{"class":169,"line":460},23,[167,462,463],{"class":268},"      MYSQL_USER",[167,465,287],{"class":190},[167,467,363],{"class":290},[167,469,471,474,476],{"class":169,"line":470},24,[167,472,473],{"class":268},"      MYSQL_PASSWORD",[167,475,287],{"class":190},[167,477,374],{"class":290},[167,479,481,484,486],{"class":169,"line":480},25,[167,482,483],{"class":268},"      MYSQL_ROOT_PASSWORD",[167,485,287],{"class":190},[167,487,488],{"class":290},"${DB_ROOT_PASSWORD}\n",[167,490,492,494],{"class":169,"line":491},26,[167,493,380],{"class":268},[167,495,272],{"class":190},[167,497,499,501],{"class":169,"line":498},27,[167,500,303],{"class":190},[167,502,503],{"class":290},"mysql-data:/var/lib/mysql\n",[167,505,507,510],{"class":169,"line":506},28,[167,508,509],{"class":268},"    healthcheck",[167,511,272],{"class":190},[167,513,515,518,521,524,527,530,532,535,537,540,542,545],{"class":169,"line":514},29,[167,516,517],{"class":268},"      test",[167,519,520],{"class":190},": [",[167,522,523],{"class":290},"\"CMD\"",[167,525,526],{"class":190},", ",[167,528,529],{"class":290},"\"mysqladmin\"",[167,531,526],{"class":190},[167,533,534],{"class":290},"\"ping\"",[167,536,526],{"class":190},[167,538,539],{"class":290},"\"-h\"",[167,541,526],{"class":190},[167,543,544],{"class":290},"\"localhost\"",[167,546,547],{"class":190},"]\n",[167,549,551,554,556],{"class":169,"line":550},30,[167,552,553],{"class":268},"      interval",[167,555,287],{"class":190},[167,557,558],{"class":290},"5s\n",[167,560,562,565,567],{"class":169,"line":561},31,[167,563,564],{"class":268},"      timeout",[167,566,287],{"class":190},[167,568,558],{"class":290},[167,570,572,575,577],{"class":169,"line":571},32,[167,573,574],{"class":268},"      retries",[167,576,287],{"class":190},[167,578,580],{"class":579},"sDLfK","10\n",[167,582,584],{"class":169,"line":583},33,[167,585,241],{"emptyLinePlaceholder":240},[167,587,589,592],{"class":169,"line":588},34,[167,590,591],{"class":268},"volumes",[167,593,272],{"class":190},[167,595,597,600],{"class":169,"line":596},35,[167,598,599],{"class":268},"  benchkit-runs",[167,601,272],{"class":190},[167,603,605,608],{"class":169,"line":604},36,[167,606,607],{"class":268},"  mysql-data",[167,609,272],{"class":190},[150,611,614],{"icon":612,"label":613},"i-simple-icons-mariadb","MariaDB",[155,615,616,680],{"default-value":116},[158,617,619],{"className":160,"code":618,"filename":116,"language":162,"meta":163,"style":163},"# BenchKit reads these as Laravel's database config.\n# DB_HOST is the service name below, not localhost.\nDB_CONNECTION=mariadb\nDB_HOST=mariadb\nDB_PORT=3306\nDB_DATABASE=benchkit\nDB_USERNAME=benchkit\nDB_PASSWORD=benchkit_secret\n\n# Only the database container uses this one.\nDB_ROOT_PASSWORD=root_secret\n",[114,620,621,625,629,636,642,648,654,660,666,670,674],{"__ignoreMap":163},[167,622,623],{"class":169,"line":170},[167,624,174],{"class":173},[167,626,627],{"class":169,"line":177},[167,628,180],{"class":173},[167,630,631,633],{"class":169,"line":183},[167,632,187],{"class":186},[167,634,635],{"class":190},"=mariadb\n",[167,637,638,640],{"class":169,"line":194},[167,639,197],{"class":186},[167,641,635],{"class":190},[167,643,644,646],{"class":169,"line":202},[167,645,205],{"class":186},[167,647,208],{"class":190},[167,649,650,652],{"class":169,"line":211},[167,651,214],{"class":186},[167,653,217],{"class":190},[167,655,656,658],{"class":169,"line":220},[167,657,223],{"class":186},[167,659,217],{"class":190},[167,661,662,664],{"class":169,"line":228},[167,663,231],{"class":186},[167,665,234],{"class":190},[167,667,668],{"class":169,"line":237},[167,669,241],{"emptyLinePlaceholder":240},[167,671,672],{"class":169,"line":244},[167,673,247],{"class":173},[167,675,676,678],{"class":169,"line":250},[167,677,253],{"class":186},[167,679,256],{"class":190},[158,681,683],{"className":259,"code":682,"filename":136,"language":261,"meta":163,"style":163},"services:\n  benchkit:\n    image: serversideup/benchkit-laravel:latest\n    ports:\n      - \"80:8080\"\n    environment:\n      DB_CONNECTION: ${DB_CONNECTION}\n      DB_HOST: ${DB_HOST}\n      DB_PORT: ${DB_PORT}\n      DB_DATABASE: ${DB_DATABASE}\n      DB_USERNAME: ${DB_USERNAME}\n      DB_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - benchkit-runs:/var/www/html/storage/app/runs\n    depends_on:\n      mariadb:\n        condition: service_healthy\n\n  mariadb:\n    image: mariadb:11.4\n    environment:\n      MARIADB_DATABASE: ${DB_DATABASE}\n      MARIADB_USER: ${DB_USERNAME}\n      MARIADB_PASSWORD: ${DB_PASSWORD}\n      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}\n    volumes:\n      - mariadb-data:/var/lib/mysql\n    healthcheck:\n      test: [\"CMD\", \"healthcheck.sh\", \"--connect\", \"--innodb_initialized\"]\n      interval: 5s\n      timeout: 5s\n      retries: 10\n\nvolumes:\n  benchkit-runs:\n  mariadb-data:\n",[114,684,685,691,697,705,711,717,723,731,739,747,755,763,771,777,783,789,796,804,808,815,824,830,839,848,857,866,872,879,885,910,918,926,934,938,944,950],{"__ignoreMap":163},[167,686,687,689],{"class":169,"line":170},[167,688,269],{"class":268},[167,690,272],{"class":190},[167,692,693,695],{"class":169,"line":177},[167,694,277],{"class":268},[167,696,272],{"class":190},[167,698,699,701,703],{"class":169,"line":183},[167,700,284],{"class":268},[167,702,287],{"class":190},[167,704,291],{"class":290},[167,706,707,709],{"class":169,"line":194},[167,708,296],{"class":268},[167,710,272],{"class":190},[167,712,713,715],{"class":169,"line":202},[167,714,303],{"class":190},[167,716,306],{"class":290},[167,718,719,721],{"class":169,"line":211},[167,720,311],{"class":268},[167,722,272],{"class":190},[167,724,725,727,729],{"class":169,"line":220},[167,726,318],{"class":268},[167,728,287],{"class":190},[167,730,323],{"class":290},[167,732,733,735,737],{"class":169,"line":228},[167,734,328],{"class":268},[167,736,287],{"class":190},[167,738,333],{"class":290},[167,740,741,743,745],{"class":169,"line":237},[167,742,338],{"class":268},[167,744,287],{"class":190},[167,746,343],{"class":290},[167,748,749,751,753],{"class":169,"line":244},[167,750,348],{"class":268},[167,752,287],{"class":190},[167,754,353],{"class":290},[167,756,757,759,761],{"class":169,"line":250},[167,758,358],{"class":268},[167,760,287],{"class":190},[167,762,363],{"class":290},[167,764,765,767,769],{"class":169,"line":366},[167,766,369],{"class":268},[167,768,287],{"class":190},[167,770,374],{"class":290},[167,772,773,775],{"class":169,"line":377},[167,774,380],{"class":268},[167,776,272],{"class":190},[167,778,779,781],{"class":169,"line":385},[167,780,303],{"class":190},[167,782,390],{"class":290},[167,784,785,787],{"class":169,"line":393},[167,786,396],{"class":268},[167,788,272],{"class":190},[167,790,791,794],{"class":169,"line":401},[167,792,793],{"class":268},"      mariadb",[167,795,272],{"class":190},[167,797,798,800,802],{"class":169,"line":409},[167,799,412],{"class":268},[167,801,287],{"class":190},[167,803,417],{"class":290},[167,805,806],{"class":169,"line":420},[167,807,241],{"emptyLinePlaceholder":240},[167,809,810,813],{"class":169,"line":425},[167,811,812],{"class":268},"  mariadb",[167,814,272],{"class":190},[167,816,817,819,821],{"class":169,"line":433},[167,818,284],{"class":268},[167,820,287],{"class":190},[167,822,823],{"class":290},"mariadb:11.4\n",[167,825,826,828],{"class":169,"line":443},[167,827,311],{"class":268},[167,829,272],{"class":190},[167,831,832,835,837],{"class":169,"line":450},[167,833,834],{"class":268},"      MARIADB_DATABASE",[167,836,287],{"class":190},[167,838,353],{"class":290},[167,840,841,844,846],{"class":169,"line":460},[167,842,843],{"class":268},"      MARIADB_USER",[167,845,287],{"class":190},[167,847,363],{"class":290},[167,849,850,853,855],{"class":169,"line":470},[167,851,852],{"class":268},"      MARIADB_PASSWORD",[167,854,287],{"class":190},[167,856,374],{"class":290},[167,858,859,862,864],{"class":169,"line":480},[167,860,861],{"class":268},"      MARIADB_ROOT_PASSWORD",[167,863,287],{"class":190},[167,865,488],{"class":290},[167,867,868,870],{"class":169,"line":491},[167,869,380],{"class":268},[167,871,272],{"class":190},[167,873,874,876],{"class":169,"line":498},[167,875,303],{"class":190},[167,877,878],{"class":290},"mariadb-data:/var/lib/mysql\n",[167,880,881,883],{"class":169,"line":506},[167,882,509],{"class":268},[167,884,272],{"class":190},[167,886,887,889,891,893,895,898,900,903,905,908],{"class":169,"line":514},[167,888,517],{"class":268},[167,890,520],{"class":190},[167,892,523],{"class":290},[167,894,526],{"class":190},[167,896,897],{"class":290},"\"healthcheck.sh\"",[167,899,526],{"class":190},[167,901,902],{"class":290},"\"--connect\"",[167,904,526],{"class":190},[167,906,907],{"class":290},"\"--innodb_initialized\"",[167,909,547],{"class":190},[167,911,912,914,916],{"class":169,"line":550},[167,913,553],{"class":268},[167,915,287],{"class":190},[167,917,558],{"class":290},[167,919,920,922,924],{"class":169,"line":561},[167,921,564],{"class":268},[167,923,287],{"class":190},[167,925,558],{"class":290},[167,927,928,930,932],{"class":169,"line":571},[167,929,574],{"class":268},[167,931,287],{"class":190},[167,933,580],{"class":579},[167,935,936],{"class":169,"line":583},[167,937,241],{"emptyLinePlaceholder":240},[167,939,940,942],{"class":169,"line":588},[167,941,591],{"class":268},[167,943,272],{"class":190},[167,945,946,948],{"class":169,"line":596},[167,947,599],{"class":268},[167,949,272],{"class":190},[167,951,952,955],{"class":169,"line":604},[167,953,954],{"class":268},"  mariadb-data",[167,956,272],{"class":190},[150,958,961],{"icon":959,"label":960},"i-simple-icons-postgresql","PostgreSQL",[155,962,963,1015],{"default-value":116},[158,964,966],{"className":160,"code":965,"filename":116,"language":162,"meta":163,"style":163},"# BenchKit reads these as Laravel's database config.\n# DB_HOST is the service name below, not localhost.\nDB_CONNECTION=pgsql\nDB_HOST=postgres\nDB_PORT=5432\nDB_DATABASE=benchkit\nDB_USERNAME=benchkit\nDB_PASSWORD=benchkit_secret\n",[114,967,968,972,976,983,990,997,1003,1009],{"__ignoreMap":163},[167,969,970],{"class":169,"line":170},[167,971,174],{"class":173},[167,973,974],{"class":169,"line":177},[167,975,180],{"class":173},[167,977,978,980],{"class":169,"line":183},[167,979,187],{"class":186},[167,981,982],{"class":190},"=pgsql\n",[167,984,985,987],{"class":169,"line":194},[167,986,197],{"class":186},[167,988,989],{"class":190},"=postgres\n",[167,991,992,994],{"class":169,"line":202},[167,993,205],{"class":186},[167,995,996],{"class":190},"=5432\n",[167,998,999,1001],{"class":169,"line":211},[167,1000,214],{"class":186},[167,1002,217],{"class":190},[167,1004,1005,1007],{"class":169,"line":220},[167,1006,223],{"class":186},[167,1008,217],{"class":190},[167,1010,1011,1013],{"class":169,"line":228},[167,1012,231],{"class":186},[167,1014,234],{"class":190},[158,1016,1018],{"className":259,"code":1017,"filename":136,"language":261,"meta":163,"style":163},"services:\n  benchkit:\n    image: serversideup/benchkit-laravel:latest\n    ports:\n      - \"80:8080\"\n    environment:\n      DB_CONNECTION: ${DB_CONNECTION}\n      DB_HOST: ${DB_HOST}\n      DB_PORT: ${DB_PORT}\n      DB_DATABASE: ${DB_DATABASE}\n      DB_USERNAME: ${DB_USERNAME}\n      DB_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - benchkit-runs:/var/www/html/storage/app/runs\n    depends_on:\n      postgres:\n        condition: service_healthy\n\n  postgres:\n    image: postgres:17\n    environment:\n      POSTGRES_DB: ${DB_DATABASE}\n      POSTGRES_USER: ${DB_USERNAME}\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n    volumes:\n      - postgres-data:/var/lib/postgresql/data\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U ${DB_USERNAME} -d ${DB_DATABASE}\"]\n      interval: 5s\n      timeout: 5s\n      retries: 10\n\nvolumes:\n  benchkit-runs:\n  postgres-data:\n",[114,1019,1020,1026,1032,1040,1046,1052,1058,1066,1074,1082,1090,1098,1106,1112,1118,1124,1131,1139,1143,1150,1159,1165,1174,1183,1192,1198,1205,1211,1227,1235,1243,1251,1255,1261,1267],{"__ignoreMap":163},[167,1021,1022,1024],{"class":169,"line":170},[167,1023,269],{"class":268},[167,1025,272],{"class":190},[167,1027,1028,1030],{"class":169,"line":177},[167,1029,277],{"class":268},[167,1031,272],{"class":190},[167,1033,1034,1036,1038],{"class":169,"line":183},[167,1035,284],{"class":268},[167,1037,287],{"class":190},[167,1039,291],{"class":290},[167,1041,1042,1044],{"class":169,"line":194},[167,1043,296],{"class":268},[167,1045,272],{"class":190},[167,1047,1048,1050],{"class":169,"line":202},[167,1049,303],{"class":190},[167,1051,306],{"class":290},[167,1053,1054,1056],{"class":169,"line":211},[167,1055,311],{"class":268},[167,1057,272],{"class":190},[167,1059,1060,1062,1064],{"class":169,"line":220},[167,1061,318],{"class":268},[167,1063,287],{"class":190},[167,1065,323],{"class":290},[167,1067,1068,1070,1072],{"class":169,"line":228},[167,1069,328],{"class":268},[167,1071,287],{"class":190},[167,1073,333],{"class":290},[167,1075,1076,1078,1080],{"class":169,"line":237},[167,1077,338],{"class":268},[167,1079,287],{"class":190},[167,1081,343],{"class":290},[167,1083,1084,1086,1088],{"class":169,"line":244},[167,1085,348],{"class":268},[167,1087,287],{"class":190},[167,1089,353],{"class":290},[167,1091,1092,1094,1096],{"class":169,"line":250},[167,1093,358],{"class":268},[167,1095,287],{"class":190},[167,1097,363],{"class":290},[167,1099,1100,1102,1104],{"class":169,"line":366},[167,1101,369],{"class":268},[167,1103,287],{"class":190},[167,1105,374],{"class":290},[167,1107,1108,1110],{"class":169,"line":377},[167,1109,380],{"class":268},[167,1111,272],{"class":190},[167,1113,1114,1116],{"class":169,"line":385},[167,1115,303],{"class":190},[167,1117,390],{"class":290},[167,1119,1120,1122],{"class":169,"line":393},[167,1121,396],{"class":268},[167,1123,272],{"class":190},[167,1125,1126,1129],{"class":169,"line":401},[167,1127,1128],{"class":268},"      postgres",[167,1130,272],{"class":190},[167,1132,1133,1135,1137],{"class":169,"line":409},[167,1134,412],{"class":268},[167,1136,287],{"class":190},[167,1138,417],{"class":290},[167,1140,1141],{"class":169,"line":420},[167,1142,241],{"emptyLinePlaceholder":240},[167,1144,1145,1148],{"class":169,"line":425},[167,1146,1147],{"class":268},"  postgres",[167,1149,272],{"class":190},[167,1151,1152,1154,1156],{"class":169,"line":433},[167,1153,284],{"class":268},[167,1155,287],{"class":190},[167,1157,1158],{"class":290},"postgres:17\n",[167,1160,1161,1163],{"class":169,"line":443},[167,1162,311],{"class":268},[167,1164,272],{"class":190},[167,1166,1167,1170,1172],{"class":169,"line":450},[167,1168,1169],{"class":268},"      POSTGRES_DB",[167,1171,287],{"class":190},[167,1173,353],{"class":290},[167,1175,1176,1179,1181],{"class":169,"line":460},[167,1177,1178],{"class":268},"      POSTGRES_USER",[167,1180,287],{"class":190},[167,1182,363],{"class":290},[167,1184,1185,1188,1190],{"class":169,"line":470},[167,1186,1187],{"class":268},"      POSTGRES_PASSWORD",[167,1189,287],{"class":190},[167,1191,374],{"class":290},[167,1193,1194,1196],{"class":169,"line":480},[167,1195,380],{"class":268},[167,1197,272],{"class":190},[167,1199,1200,1202],{"class":169,"line":491},[167,1201,303],{"class":190},[167,1203,1204],{"class":290},"postgres-data:/var/lib/postgresql/data\n",[167,1206,1207,1209],{"class":169,"line":498},[167,1208,509],{"class":268},[167,1210,272],{"class":190},[167,1212,1213,1215,1217,1220,1222,1225],{"class":169,"line":506},[167,1214,517],{"class":268},[167,1216,520],{"class":190},[167,1218,1219],{"class":290},"\"CMD-SHELL\"",[167,1221,526],{"class":190},[167,1223,1224],{"class":290},"\"pg_isready -U ${DB_USERNAME} -d ${DB_DATABASE}\"",[167,1226,547],{"class":190},[167,1228,1229,1231,1233],{"class":169,"line":514},[167,1230,553],{"class":268},[167,1232,287],{"class":190},[167,1234,558],{"class":290},[167,1236,1237,1239,1241],{"class":169,"line":550},[167,1238,564],{"class":268},[167,1240,287],{"class":190},[167,1242,558],{"class":290},[167,1244,1245,1247,1249],{"class":169,"line":561},[167,1246,574],{"class":268},[167,1248,287],{"class":190},[167,1250,580],{"class":579},[167,1252,1253],{"class":169,"line":571},[167,1254,241],{"emptyLinePlaceholder":240},[167,1256,1257,1259],{"class":169,"line":583},[167,1258,591],{"class":268},[167,1260,272],{"class":190},[167,1262,1263,1265],{"class":169,"line":588},[167,1264,599],{"class":268},[167,1266,272],{"class":190},[167,1268,1269,1272],{"class":169,"line":596},[167,1270,1271],{"class":268},"  postgres-data",[167,1273,272],{"class":190},[102,1275,1276],{},"Then bring both containers up:",[158,1278,1283],{"className":1279,"code":1280,"filename":1281,"language":1282,"meta":163,"style":163},"language-bash shiki shiki-themes github-dark","docker compose up -d\n","Terminal","bash",[114,1284,1285],{"__ignoreMap":163},[167,1286,1287,1291,1294,1297],{"class":169,"line":170},[167,1288,1290],{"class":1289},"svObZ","docker",[167,1292,1293],{"class":290}," compose",[167,1295,1296],{"class":290}," up",[167,1298,1299],{"class":579}," -d\n",[1301,1302,1303],"note",{},[102,1304,1305,1307,1308,1311,1312,1314],{},[114,1306,197],{}," is the service name from the compose file rather than ",[114,1309,1310],{},"localhost",". Containers reach each other by service name on the Compose network, and ",[114,1313,1310],{}," inside the BenchKit container means the BenchKit container itself.",[102,1316,1317,1318,1321],{},"The healthcheck on ",[114,1319,1320],{},"depends_on"," is what keeps your first run honest. Database images accept connections shortly before they are ready to serve them well, and a benchmark that starts in that window measures the warmup rather than the database.",[106,1323,1325],{"id":1324},"on-a-host-without-docker","On a host without Docker",[102,1327,1328,1329,1333,1334,1336],{},"If you are ",[1330,1331,1332],"a",{"href":22},"running from source",", there is no compose file involved. Set the same ",[114,1335,140],{}," variables however your platform manages environment variables, and point them at a database it can reach.",[106,1338,1340],{"id":1339},"there-is-no-migration-step","There is no migration step",[102,1342,1343,1344,1347],{},"BenchKit creates the tables it benchmarks when it needs them, and drops them afterwards. You do not run ",[114,1345,1346],{},"artisan migrate"," and there is no seeder to run. Point BenchKit at a database it can reach, and the database route and the PHP stage use it on the next run.",[1301,1349,1350],{},[102,1351,1352],{},"Your run history is stored as files rather than in the database. Changing the database engine only changes what the benchmark measures. Your saved runs are unaffected.",[1354,1355,1356],"tip",{},[102,1357,1358],{},"The environment panel on a result records which database engine produced it. A MySQL run and a SQLite run are never confused with each other when you compare them later.",[1360,1361,1362],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}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}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 .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}",{"title":163,"searchDepth":177,"depth":177,"links":1364},[1365,1366,1367],{"id":108,"depth":177,"text":109},{"id":1324,"depth":177,"text":1325},{"id":1339,"depth":177,"text":1340},"Point BenchKit at MySQL, MariaDB, or Postgres instead of the default SQLite.","md",null,{},{"title":32,"description":1368},{"loc":33},"MVeGYxoj8jPgIg0_UiOmsyw4TK_tr5jLv5mArYh135U",[1376,1378],{"title":21,"path":22,"stem":23,"description":1377,"children":-1},"Run BenchKit on Laravel Cloud, Railway, or any host that wants a repository instead of a container.",{"title":36,"path":37,"stem":38,"description":1379,"children":-1},"Tune PHP, OPcache, and the web server with environment variables, or add your own php.ini.",1787761544505]