[{"data":1,"prerenderedAt":752},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":77,"-getting-started-installation-surround":747},[4,21],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":20},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",false,{"title":22,"icon":23,"path":24,"stem":25,"children":26,"page":20},"Features","i-lucide-sparkles","\u002Ffeatures","2.features",[27,32,37,42,47,52,57,62,67,72],{"title":28,"path":29,"stem":30,"icon":31},"Servers & Dashboard","\u002Ffeatures\u002Fservers","2.features\u002F1.servers","i-lucide-layout-dashboard",{"title":33,"path":34,"stem":35,"icon":36},"Authentication & Admin","\u002Ffeatures\u002Fauthentication","2.features\u002F10.authentication","i-lucide-fingerprint",{"title":38,"path":39,"stem":40,"icon":41},"Configuration & MOTD","\u002Ffeatures\u002Fconfiguration","2.features\u002F2.configuration","i-lucide-sliders-horizontal",{"title":43,"path":44,"stem":45,"icon":46},"Console","\u002Ffeatures\u002Fconsole","2.features\u002F3.console","i-lucide-terminal",{"title":48,"path":49,"stem":50,"icon":51},"Players","\u002Ffeatures\u002Fplayers","2.features\u002F4.players","i-lucide-users",{"title":53,"path":54,"stem":55,"icon":56},"Analytics","\u002Ffeatures\u002Fanalytics","2.features\u002F5.analytics","i-lucide-chart-line",{"title":58,"path":59,"stem":60,"icon":61},"Backups","\u002Ffeatures\u002Fbackups","2.features\u002F6.backups","i-lucide-archive",{"title":63,"path":64,"stem":65,"icon":66},"World Pre-generation","\u002Ffeatures\u002Fworld-pre-generation","2.features\u002F7.world-pre-generation","i-lucide-globe",{"title":68,"path":69,"stem":70,"icon":71},"BlueMap 3D Map","\u002Ffeatures\u002Fbluemap","2.features\u002F8.bluemap","i-lucide-map",{"title":73,"path":74,"stem":75,"icon":76},"Files & Mods","\u002Ffeatures\u002Ffiles-and-mods","2.features\u002F9.files-and-mods","i-lucide-package",{"id":78,"title":16,"body":79,"description":740,"extension":741,"links":742,"meta":743,"navigation":744,"path":17,"seo":745,"stem":18,"__hash__":746},"docs\u002F1.getting-started\u002F2.installation.md",{"type":80,"value":81,"toc":721},"minimark",[82,86,91,130,134,147,205,313,317,328,381,385,388,430,436,448,453,472,479,483,494,666,670,677,695,699,717],[83,84,85],"p",{},"MCSM ships a turnkey Docker Compose stack that runs the app, the Infrarust\nproxy and a restricted Docker socket proxy — that's the recommended way to\ndeploy it. You can also run it from source for development.",[87,88,90],"h2",{"id":89},"prerequisites","Prerequisites",[92,93,94,103,119],"ul",{},[95,96,97,98,102],"li",{},"A host with ",[99,100,101],"strong",{},"Docker"," installed.",[95,104,105,106,109,110,114,115,118],{},"A ",[99,107,108],{},"domain"," for the dashboard (e.g. ",[111,112,113],"code",{},"mcsm.example.com",") and a domain (or\nwildcard) for your Minecraft servers (e.g. ",[111,116,117],{},"*.mc.example.com","), both\npointing at the host.",[95,120,121,122,125,126,129],{},"For running from source: ",[99,123,124],{},"Node.js 22+"," and ",[99,127,128],{},"pnpm",".",[87,131,133],{"id":132},"deploy-with-docker-compose","Deploy with Docker Compose",[83,135,136,137,146],{},"The repo's ",[138,139,143],"a",{"href":140,"rel":141},"https:\u002F\u002Fgithub.com\u002FNiki2k1\u002Fmcsm\u002Fblob\u002Fmain\u002Fdocker-compose.yml",[142],"nofollow",[111,144,145],{},"docker-compose.yml","\nruns three services:",[148,149,150,163],"table",{},[151,152,153],"thead",{},[154,155,156,160],"tr",{},[157,158,159],"th",{},"Service",[157,161,162],{},"Purpose",[164,165,166,181,195],"tbody",{},[154,167,168,174],{},[169,170,171],"td",{},[111,172,173],{},"mcsm",[169,175,176,177,180],{},"The dashboard and API (port ",[111,178,179],{},"3000",").",[154,182,183,188],{},[169,184,185],{},[111,186,187],{},"infrarust",[169,189,190,191,194],{},"The Minecraft proxy — listens on ",[111,192,193],{},"25565"," and routes each domain to its server container.",[154,196,197,202],{},[169,198,199],{},[111,200,201],{},"docker-socket-proxy",[169,203,204],{},"A restricted proxy in front of the Docker socket, so neither MCSM nor Infrarust ever touches the raw socket.",[206,207,208,213,249,253,278,287,291,294,298],"steps",{},[209,210,212],"h3",{"id":211},"clone-the-repository","Clone the repository",[214,215,221],"pre",{"className":216,"code":217,"filename":218,"language":219,"meta":220,"style":220},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002FNiki2k1\u002Fmcsm.git\ncd mcsm\n","Terminal","bash","",[111,222,223,239],{"__ignoreMap":220},[224,225,228,232,236],"span",{"class":226,"line":227},"line",1,[224,229,231],{"class":230},"sBMFI","git",[224,233,235],{"class":234},"sfazB"," clone",[224,237,238],{"class":234}," https:\u002F\u002Fgithub.com\u002FNiki2k1\u002Fmcsm.git\n",[224,240,242,246],{"class":226,"line":241},2,[224,243,245],{"class":244},"s2Zo4","cd",[224,247,248],{"class":234}," mcsm\n",[209,250,252],{"id":251},"start-the-stack","Start the stack",[214,254,256],{"className":216,"code":255,"filename":218,"language":219,"meta":220,"style":220},"# uncomment the mcsm `ports:` block in docker-compose.yml to expose the UI\ndocker compose up -d\n",[111,257,258,264],{"__ignoreMap":220},[224,259,260],{"class":226,"line":227},[224,261,263],{"class":262},"sHwdD","# uncomment the mcsm `ports:` block in docker-compose.yml to expose the UI\n",[224,265,266,269,272,275],{"class":226,"line":241},[224,267,268],{"class":230},"docker",[224,270,271],{"class":234}," compose",[224,273,274],{"class":234}," up",[224,276,277],{"class":234}," -d\n",[83,279,280,281,284,285,129],{},"The dashboard is now on ",[111,282,283],{},"http:\u002F\u002Flocalhost:3000"," and Minecraft traffic is\naccepted on port ",[111,286,193],{},[209,288,290],{"id":289},"create-the-admin-account","Create the admin account",[83,292,293],{},"On first launch MCSM shows a setup wizard that creates the admin account.\nThere is no open registration — additional users are created later from the\nAdmin panel.",[209,295,297],{"id":296},"add-a-domain","Add a domain",[83,299,300,301,304,305,308,309,312],{},"Open ",[99,302,303],{},"Admin → Domains"," and add at least one domain (e.g. ",[111,306,307],{},"mc.example.com",").\nThe create wizard needs it: the chosen ",[111,310,311],{},"subdomain.domain"," becomes the address\nplayers connect to.",[87,314,316],{"id":315},"deploy-with-coolify","Deploy with Coolify",[83,318,319,320,323,324,327],{},"MCSM publishes a multi-arch image to GHCR on every push to ",[111,321,322],{},"main","\n(",[111,325,326],{},"ghcr.io\u002Fniki2k1\u002Fmcsm","), and the compose file is Coolify-compatible:",[206,329,330,334,343,347,362,366,374,378],{},[209,331,333],{"id":332},"add-the-resource","Add the resource",[83,335,336,337,340,341,180],{},"In Coolify, create a ",[99,338,339],{},"New Resource → Docker Compose"," and point it at the\nMCSM repository (or paste ",[111,342,145],{},[209,344,346],{"id":345},"assign-the-dashboard-domain","Assign the dashboard domain",[83,348,349,350,354,355,357,358,361],{},"Assign a domain to the ",[99,351,352],{},[111,353,173],{}," service on port ",[111,356,179],{},". Coolify fills the\n",[111,359,360],{},"SERVICE_FQDN_MCSM_3000"," magic variable and routes HTTPS to it.",[209,363,365],{"id":364},"point-your-minecraft-dns-at-the-host","Point your Minecraft DNS at the host",[83,367,368,369,371,372,129],{},"Point the DNS for your Minecraft domain — for example a wildcard\n",[111,370,117],{}," — at the host. Infrarust listens on ",[111,373,193],{},[209,375,377],{"id":376},"deploy-and-set-up","Deploy and set up",[83,379,380],{},"Deploy, run the first-launch setup wizard, then add at least one domain in\nthe Admin panel.",[87,382,384],{"id":383},"run-from-source","Run from source",[83,386,387],{},"For development or custom setups:",[214,389,391],{"className":216,"code":390,"filename":218,"language":219,"meta":220,"style":220},"git clone https:\u002F\u002Fgithub.com\u002FNiki2k1\u002Fmcsm.git\ncd mcsm\npnpm install\ncp .env.example .env   # adjust as needed\n",[111,392,393,401,407,415],{"__ignoreMap":220},[224,394,395,397,399],{"class":226,"line":227},[224,396,231],{"class":230},[224,398,235],{"class":234},[224,400,238],{"class":234},[224,402,403,405],{"class":226,"line":241},[224,404,245],{"class":244},[224,406,248],{"class":234},[224,408,410,412],{"class":226,"line":409},3,[224,411,128],{"class":230},[224,413,414],{"class":234}," install\n",[224,416,418,421,424,427],{"class":226,"line":417},4,[224,419,420],{"class":230},"cp",[224,422,423],{"class":234}," .env.example",[224,425,426],{"class":234}," .env",[224,428,429],{"class":262},"   # adjust as needed\n",[83,431,432,435],{},[99,433,434],{},"Development"," (hot reload):",[214,437,439],{"className":216,"code":438,"filename":218,"language":219,"meta":220,"style":220},"pnpm dev\n",[111,440,441],{"__ignoreMap":220},[224,442,443,445],{"class":226,"line":227},[224,444,128],{"class":230},[224,446,447],{"class":234}," dev\n",[83,449,450],{},[99,451,452],{},"Production build and start:",[214,454,456],{"className":216,"code":455,"filename":218,"language":219,"meta":220,"style":220},"pnpm build\npnpm start\n",[111,457,458,465],{"__ignoreMap":220},[224,459,460,462],{"class":226,"line":227},[224,461,128],{"class":230},[224,463,464],{"class":234}," build\n",[224,466,467,469],{"class":226,"line":241},[224,468,128],{"class":230},[224,470,471],{"class":234}," start\n",[473,474,475,476,478],"note",{},"When running from source you also need Infrarust running against the same\nDocker daemon with its docker provider enabled, and a shared Docker network\n(default name ",[111,477,187],{},") that both Infrarust and the Minecraft containers\njoin. The Docker Compose stack wires all of this up for you.",[87,480,482],{"id":481},"configure-environment-variables","Configure environment variables",[83,484,485,486,489,490,493],{},"Configuration is supplied through Nuxt ",[111,487,488],{},"runtimeConfig",", so overrides must use\n",[111,491,492],{},"NUXT_","-prefixed environment variables:",[148,495,496,509],{},[151,497,498],{},[154,499,500,503,506],{},[157,501,502],{},"Variable",[157,504,505],{},"Required",[157,507,508],{},"Description",[164,510,511,528,543,557,573,592,608,623,635,647],{},[154,512,513,518,521],{},[169,514,515],{},[111,516,517],{},"NUXT_SESSION_PASSWORD",[169,519,520],{},"✅",[169,522,523,524,527],{},"Encrypts login session cookies (min. 32 chars, e.g. ",[111,525,526],{},"openssl rand -base64 32","). Without it in production, every restart logs everyone out.",[154,529,530,535,537],{},[169,531,532],{},[111,533,534],{},"NUXT_DOCKER_HOSTS_DEFAULT_SOCKET_PATH",[169,536,520],{},[169,538,539,540,129],{},"Path to the Docker socket (or socket proxy) MCSM provisions on. Default ",[111,541,542],{},"\u002Fvar\u002Frun\u002Fdocker.sock",[154,544,545,550,552],{},[169,546,547],{},[111,548,549],{},"NUXT_DOCKER_NETWORK",[169,551,520],{},[169,553,554,555,129],{},"Shared Docker network Infrarust and the Minecraft containers join. Default ",[111,556,187],{},[154,558,559,564,567],{},[169,560,561],{},[111,562,563],{},"NUXT_DOCKER_IMAGE",[169,565,566],{},"–",[169,568,569,570,129],{},"Server image. Default ",[111,571,572],{},"itzg\u002Fminecraft-server",[154,574,575,580,582],{},[169,576,577],{},[111,578,579],{},"NUXT_RCON_PASSWORD",[169,581,566],{},[169,583,584,585,588,589],{},"RCON password set on every server for the console. Default ",[111,586,587],{},"minecraft",". ",[99,590,591],{},"Change it.",[154,593,594,599,601],{},[169,595,596],{},[111,597,598],{},"NUXT_RCON_PORT",[169,600,566],{},[169,602,603,604,607],{},"RCON port inside the container. Default ",[111,605,606],{},"25575"," (never published).",[154,609,610,615,617],{},[169,611,612],{},[111,613,614],{},"NUXT_INTERNAL_URL",[169,616,566],{},[169,618,619,620,129],{},"URL where Minecraft containers reach MCSM on the shared Docker network (used for icon downloads). Default ",[111,621,622],{},"http:\u002F\u002Fmcsm:3000",[154,624,625,630,632],{},[169,626,627],{},[111,628,629],{},"NUXT_SESSION_MAX_AGE",[169,631,566],{},[169,633,634],{},"Login session lifetime in seconds. Default 1 week.",[154,636,637,642,644],{},[169,638,639],{},[111,640,641],{},"NUXT_DOCKER_HOSTS_DEFAULT_HOST",[169,643,566],{},[169,645,646],{},"Remote Docker daemon host. When set, takes precedence over the socket path.",[154,648,649,661,663],{},[169,650,651,654,655,654,658],{},[111,652,653],{},"NUXT_OAUTH_MICROSOFT_CLIENT_ID"," \u002F ",[111,656,657],{},"..._CLIENT_SECRET",[111,659,660],{},"..._TENANT",[169,662,566],{},[169,664,665],{},"Enables \"Sign in with Microsoft\". The login button only shows when configured.",[87,667,669],{"id":668},"secure-the-docker-socket","Secure the Docker socket",[671,672,673,674,129],"warning",{},"MCSM provisions servers by talking to the Docker Engine API — and a web app\nwith raw socket access is effectively ",[99,675,676],{},"root on the host",[83,678,679,680,683,684,691,692,694],{},"In production, do ",[99,681,682],{},"not"," mount the bare socket into MCSM. Put a restricted\nproxy such as\n",[138,685,688],{"href":686,"rel":687},"https:\u002F\u002Fgithub.com\u002FTecnativa\u002Fdocker-socket-proxy",[142],[111,689,690],{},"tecnativa\u002Fdocker-socket-proxy","\nin front of it, allow only the endpoints MCSM needs (containers, images,\nnetworks, volumes), and point MCSM at the proxy. The bundled\n",[111,693,145],{}," already does this — neither MCSM nor Infrarust touches\nthe raw socket.",[87,696,698],{"id":697},"next-steps","Next steps",[92,700,701,707],{},[95,702,703,704,129],{},"Create your first server — see ",[138,705,706],{"href":29},"Servers & dashboard",[95,708,709,710,713,714,129],{},"Set up ",[138,711,712],{"href":69},"BlueMap"," or ",[138,715,716],{"href":59},"world backups",[718,719,720],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":220,"searchDepth":241,"depth":241,"links":722},[723,724,730,736,737,738,739],{"id":89,"depth":241,"text":90},{"id":132,"depth":241,"text":133,"children":725},[726,727,728,729],{"id":211,"depth":409,"text":212},{"id":251,"depth":409,"text":252},{"id":289,"depth":409,"text":290},{"id":296,"depth":409,"text":297},{"id":315,"depth":241,"text":316,"children":731},[732,733,734,735],{"id":332,"depth":409,"text":333},{"id":345,"depth":409,"text":346},{"id":364,"depth":409,"text":365},{"id":376,"depth":409,"text":377},{"id":383,"depth":241,"text":384},{"id":481,"depth":241,"text":482},{"id":668,"depth":241,"text":669},{"id":697,"depth":241,"text":698},"Deploy MCSM with Docker Compose, Coolify or from source","md",null,{},{"icon":19},{"title":16,"description":740},"jO8spSIdWYDHq5Dulweg_CvUH3UNkLfAVxfdQGHh2A0",[748,750],{"title":11,"path":12,"stem":13,"description":749,"icon":14,"children":-1},"Learn what MCSM is, how it works and when to use it",{"title":28,"path":29,"stem":30,"description":751,"icon":31,"children":-1},"Create, run and manage Minecraft servers from the web dashboard",1780404827042]