[{"data":1,"prerenderedAt":395},["ShallowReactive",2],{"docs-nav":3,"docs:\u002Fdocs\u002Fconcepts\u002Fmental-model":139},[4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136],{"path":5,"title":6},"\u002Fdocs\u002Faccess-gating","Protect a local route",{"path":8,"title":9},"\u002Fdocs\u002Farchitecture\u002Fsecurity-and-trust","Security and trust",{"path":11,"title":12},"\u002Fdocs\u002Fconcepts\u002Fbuilds-and-deployments","Build and deploy",{"path":14,"title":15},"\u002Fdocs\u002Fconcepts\u002Fconfiguration-ownership","Where configuration belongs",{"path":17,"title":18},"\u002Fdocs\u002Fconcepts\u002Fenvironments-and-secrets","Environment values and secrets",{"path":20,"title":21},"\u002Fdocs\u002Fconcepts\u002Fmental-model","How projects fit together",{"path":23,"title":24},"\u002Fdocs\u002Fconcepts\u002Fplans-and-apply","Plans and apply",{"path":26,"title":27},"\u002Fdocs\u002Fconcepts\u002Ftargets-and-runtimes","Choose a target and runtime",{"path":29,"title":30},"\u002Fdocs\u002Fcontribute\u002Freleases","Publish a release",{"path":32,"title":33},"\u002Fdocs\u002Fdevelopment-mounts","Development mounts",{"path":35,"title":36},"\u002Fdocs\u002Fgetting-started","Getting started",{"path":38,"title":39},"\u002Fdocs\u002Fhelp\u002Ffaq","FAQ",{"path":41,"title":42},"\u002Fdocs\u002Fhelp\u002Ftroubleshooting","Troubleshooting",{"path":44,"title":45},"\u002Fdocs\u002Fhow-to\u002Fdeploy-production","Prepare a deployment environment",{"path":47,"title":48},"\u002Fdocs\u002Fhow-to\u002Fswarm-cluster","Run on a multi-node Swarm",{"path":50,"title":51},"\u002Fdocs","mm documentation",{"path":53,"title":54},"\u002Fdocs\u002Fjobs-and-schedules","Jobs and schedules",{"path":56,"title":57},"\u002Fdocs\u002Flocal-dashboard","Local dashboard",{"path":59,"title":60},"\u002Fdocs\u002Flocal-https","Local HTTPS",{"path":62,"title":63},"\u002Fdocs\u002Flocal-services","Local services",{"path":65,"title":66},"\u002Fdocs\u002Fmcp","Let an AI agent work on your project",{"path":68,"title":69},"\u002Fdocs\u002Fmulti-project-hosts","Run multiple projects on one host",{"path":71,"title":72},"\u002Fdocs\u002Fonboarding","Set up a project",{"path":74,"title":75},"\u002Fdocs\u002Fopenbao","Use OpenBao",{"path":77,"title":78},"\u002Fdocs\u002Fproject\u002Fcontributing","Contributing",{"path":80,"title":81},"\u002Fdocs\u002Fproject\u002Flicense","License",{"path":83,"title":84},"\u002Fdocs\u002Fproject\u002Fsecurity","Security",{"path":86,"title":87},"\u002Fdocs\u002Freference\u002Fcapability-matrix","Supported features and platforms",{"path":89,"title":90},"\u002Fdocs\u002Freference\u002Fcli","CLI command reference",{"path":92,"title":93},"\u002Fdocs\u002Freference\u002Fconfiguration","Configuration",{"path":95,"title":96},"\u002Fdocs\u002Freference\u002Fenvironment-variables","Environment variables",{"path":98,"title":99},"\u002Fdocs\u002Freference\u002Ferrors-and-exit-codes","Errors and exit codes",{"path":101,"title":102},"\u002Fdocs\u002Freference\u002Fknown-issues","Known limitations",{"path":104,"title":105},"\u002Fdocs\u002Fremote-access","Manage remote access",{"path":107,"title":108},"\u002Fdocs\u002Fremote-daemon","Set up a remote host",{"path":110,"title":111},"\u002Fdocs\u002Fruntime-observability","Status, logs, and commands",{"path":113,"title":114},"\u002Fdocs\u002Fsecret-delivery","Pass secrets to your app",{"path":116,"title":117},"\u002Fdocs\u002Fsecret-providers","Choose a secret store",{"path":119,"title":120},"\u002Fdocs\u002Fstart\u002Finstall","Install mm",{"path":122,"title":123},"\u002Fdocs\u002Fterminal-ui","Terminal UI",{"path":125,"title":126},"\u002Fdocs\u002Ftutorials\u002Fdotnet-web-api",".NET web API example",{"path":128,"title":129},"\u002Fdocs\u002Ftutorials\u002Ffirst-local-app","First local app",{"path":131,"title":132},"\u002Fdocs\u002Ftutorials\u002Flaravel-rust","Laravel and Rust example",{"path":134,"title":135},"\u002Fdocs\u002Ftutorials\u002Fnode-fullstack","Node full stack example",{"path":137,"title":138},"\u002Fdocs\u002Fvault","Use HashiCorp Vault",{"id":140,"title":21,"body":141,"description":388,"extension":389,"meta":390,"navigation":391,"path":20,"seo":392,"stem":393,"__hash__":394},"docs\u002Fdocs\u002Fconcepts\u002Fmental-model.md",{"type":142,"value":143,"toc":380},"minimark",[144,153,158,161,278,281,285,303,312,315,326,337,341,363],[145,146,147,148,152],"p",{},"An mm project is a repository with a ",[149,150,151],"code",{},".config\u002Fmm.yaml"," file. That file connects\nyour application code and Compose services to the environments where you run them.",[154,155,157],"h2",{"id":156},"the-main-pieces","The main pieces",[145,159,160],{},"For a project with an API and a database:",[162,163,164,180],"table",{},[165,166,167],"thead",{},[168,169,170,174,177],"tr",{},[171,172,173],"th",{},"Term",[171,175,176],{},"Meaning",[171,178,179],{},"Example",[181,182,183,197,210,227,240,256,267],"tbody",{},[168,184,185,189,192],{},[186,187,188],"td",{},"Project",[186,190,191],{},"The whole application",[186,193,194],{},[149,195,196],{},"shop",[168,198,199,202,205],{},[186,200,201],{},"Module",[186,203,204],{},"A directory of code or configuration",[186,206,207],{},[149,208,209],{},"services\u002Fapi",[168,211,212,215,218],{},[186,213,214],{},"Service",[186,216,217],{},"A container service declared in Compose",[186,219,220,223,224],{},[149,221,222],{},"api"," or ",[149,225,226],{},"postgres",[168,228,229,232,235],{},[186,230,231],{},"Stack",[186,233,234],{},"A set of Compose files deployed together",[186,236,237],{},[149,238,239],{},"compose.yaml",[168,241,242,245,248],{},[186,243,244],{},"Environment",[186,246,247],{},"Settings for one use of the project",[186,249,250,223,253],{},[149,251,252],{},"local",[149,254,255],{},"production",[168,257,258,261,264],{},[186,259,260],{},"Target",[186,262,263],{},"The machine where services run",[186,265,266],{},"Your workstation",[168,268,269,272,275],{},[186,270,271],{},"Runtime",[186,273,274],{},"The container tool mm uses there",[186,276,277],{},"Docker Compose",[145,279,280],{},"A module can contain several services. For example, a Laravel module might run\nboth a web service and a queue worker from the same image.",[154,282,284],{"id":283},"two-configuration-files","Two configuration files",[286,287,288,296],"ul",{},[289,290,291,295],"li",{},[292,293,294],"strong",{},"Compose"," describes how containers run: commands, health checks, ordinary\nvolumes, and third-party images such as PostgreSQL.",[289,297,298,302],{},[292,299,300],{},[149,301,151],{}," connects those services to image builds, environments,\nsecret references, managed networks, and HTTP routes.",[145,304,305,306,311],{},"See ",[307,308,310],"a",{"href":309},".\u002Fconfiguration-ownership","which settings go where"," for an example.",[154,313,18],{"id":314},"environment-values-and-secrets",[145,316,317,318,321,322,325],{},"A ",[292,319,320],{},"binding"," connects a name used by an environment template to a value. The\nvalue can be public configuration, such as a database hostname, or a reference\nto a ",[292,323,324],{},"secret",", such as its password. Secret values live in a separate store.",[145,327,328,329,332,333,336],{},"An ",[292,330,331],{},"ingress route"," connects an HTTPS hostname and path to a service. Local\nHTTP services can receive automatic addresses such as\n",[149,334,335],{},"https:\u002F\u002Fapi.shop.test",".",[154,338,340],{"id":339},"build-review-run","Build, review, run",[342,343,344,350,353,360],"ol",{},[289,345,346,347,336],{},"Validate the project with ",[149,348,349],{},"mm config validate",[289,351,352],{},"Build and publish application images, if the project has its own builds.",[289,354,355,356,359],{},"Run ",[149,357,358],{},"mm deploy plan"," to see the changes.",[289,361,362],{},"Apply the plan using the hash it prints.",[145,364,365,366,370,371,375,376,336],{},"Read ",[307,367,369],{"href":368},".\u002Fbuilds-and-deployments","builds and deployments"," for the commands.\nJobs, schedules, and access gates are optional; add them when your project\nneeds ",[307,372,374],{"href":373},"..\u002Fjobs-and-schedules","background tasks"," or\n",[307,377,379],{"href":378},"..\u002Faccess-gating","restricted routes",{"title":381,"searchDepth":382,"depth":382,"links":383},"",2,[384,385,386,387],{"id":156,"depth":382,"text":157},{"id":283,"depth":382,"text":284},{"id":314,"depth":382,"text":18},{"id":339,"depth":382,"text":340},"Projects, services, environments, and the few terms you need to configure mm.","md",{},true,{"title":21,"description":388},"docs\u002Fconcepts\u002Fmental-model","qYSQRD4gf9dIBvzu2pS8-oh0Krr2B-7Far315FoDNEY",1794512545911]