2025-04-21 16:02:55 +02:00
<!DOCTYPE html>
< html lang = "en-US" dir = "ltr" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< title > Installation | CoreControl</ title >
< meta name = "description" content = "Dashboard to manage your entire server infrastructure" >
< meta name = "generator" content = "VitePress v1.6.3" >
< link rel = "preload stylesheet" href = "/assets/style.DEOyzpKL.css" as = "style" >
< link rel = "preload stylesheet" href = "/vp-icons.css" as = "style" >
2025-04-21 16:06:35 +02:00
< script type = "module" src = "/assets/chunks/metadata.87c7e30c.js" ></ script >
< script type = "module" src = "/assets/app.CZwi0YgD.js" ></ script >
2025-04-21 16:02:55 +02:00
< link rel = "preload" href = "/assets/inter-roman-latin.Di8DUHzh.woff2" as = "font" type = "font/woff2" crossorigin = "" >
2025-04-21 16:06:35 +02:00
< link rel = "modulepreload" href = "/assets/chunks/theme.CkdfpqM_.js" >
2025-04-21 16:02:55 +02:00
< link rel = "modulepreload" href = "/assets/chunks/framework.DPDPlp3K.js" >
< link rel = "modulepreload" href = "/assets/installation.md.Cz1eOHOr.lean.js" >
< link rel = "icon" type = "image/png" href = "/logo.png" >
< script id = "check-dark-mode" >(()=>{ const e = localStorage . getItem ( "vitepress-theme-appearance" ) || "auto" , a = window . matchMedia ( "(prefers-color-scheme: dark)" ). matches ;( ! e || e === "auto" ? a : e === "dark" ) && document . documentElement . classList . add ( "dark" )})();</ script >
< script id = "check-mac-os" > document . documentElement . classList . toggle ( "mac" , /Mac|iPhone|iPod|iPad/i . test ( navigator . platform ));</ script >
</ head >
< body >
2025-04-21 16:06:35 +02:00
< div id = "app" >< div class = "Layout" data-v-d8b57b2d > <!--[--><!--]--><!--[--> < span tabindex = "-1" data-v-fcbfc0e0 ></ span >< a href = "#VPContent" class = "VPSkipLink visually-hidden" data-v-fcbfc0e0 > Skip to content</ a > <!--]--><!----> < header class = "VPNav" data-v-d8b57b2d data-v-7ad780c2 >< div class = "VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd >< div class = "wrapper" data-v-9fd4d1dd >< div class = "container" data-v-9fd4d1dd >< div class = "title" data-v-9fd4d1dd >< div class = "VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-9f43907a >< a class = "title" href = "/" data-v-9f43907a > <!--[--><!--]--><!--[--> < img class = "VPImage logo" src = "/logo.png" alt data-v-ab19afbb > <!--]--> < span data-v-9f43907a > CoreControl</ span > <!--[--><!--]--> </ a ></ div ></ div >< div class = "content" data-v-9fd4d1dd >< div class = "content-body" data-v-9fd4d1dd > <!--[--><!--]--> < div class = "VPNavBarSearch search" data-v-9fd4d1dd > <!--[--><!----> < div id = "local-search" >< button type = "button" class = "DocSearch DocSearch-Button" aria-label = "Search" >< span class = "DocSearch-Button-Container" >< span class = "vp-icon DocSearch-Search-Icon" ></ span >< span class = "DocSearch-Button-Placeholder" > Search</ span ></ span >< span class = "DocSearch-Button-Keys" >< kbd class = "DocSearch-Button-Key" ></ kbd >< kbd class = "DocSearch-Button-Key" > K</ kbd ></ span ></ button ></ div > <!--]--> </ div >< nav aria-labelledby = "main-nav-aria-label" class = "VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e >< span id = "main-nav-aria-label" class = "visually-hidden" data-v-afb2845e > Main Navigation </ span > <!--[--><!--[--> < a class = "VPLink link VPNavBarMenuLink" href = "/" tabindex = "0" data-v-afb2845e data-v-815115f5 > <!--[--> < span data-v-815115f5 > Home</ span > <!--]--> </ a > <!--]--><!--[--> < a class = "VPLink link VPNavBarMenuLink active" href = "/installation" tabindex = "0" data-v-afb2845e data-v-815115f5 > <!--[--> < span data-v-815115f5 > Installation</ span > <!--]--> </ a > <!--]--><!--]--> </ nav > <!----> < div class = "VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5 >< button class = "VPSwitch VPSwitchAppearance" type = "button" role = "switch" title aria-checked = "false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88 >< span class = "check" data-v-b4ccac88 >< span class = "icon" data-v-b4ccac88 > <!--[--> < span class = "vpi-sun sun" data-v-be9742d9 ></ span >< span class = "vpi-moon moon" data-v-be9742d9 ></ span > <!--]--> </ span ></ span ></ button ></ div >< div class = "VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c > <!--[--> < a class = "VPSocialLink no-icon" href = "https://github.com/crocofied/corecontrol" aria-label = "github" target = "_blank" rel = "noopener" data-v-e71e869c data-v-60a9a2d3 >< span class = "vpi-social-github" ></ span ></ a > <!--]--> </ div >< div class = "VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f >< button type = "button" class = "button" aria-haspopup = "true" aria-expanded = "false" aria-label = "extra navigation" data-v-bfe7971f >< span class = "vpi-more-horizontal icon" data-v-bfe7971f ></ span ></ button >< div class = "menu" data-v-bfe7971f >< div class = "VPMenu" data-v-bfe7971f data-v-20ed86d6 > <!----><!--[--><!--[--><!----> < div class = "group" data-v-f953d92f >< div class = "item appearance" data-v-f953d92f >< p class = "label" data-v-f953d92f > Appearance</ p >< div class = "appearance-action" data-v-f953d92f >< button class = "VPSwitch VPSwitchAppearance" type = "button" role = "switch" title aria-checked = "false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88 >< span class = "check" data-v-b4ccac88 >< span class = "icon" data-v-b4ccac88 > <!--[--> < span class = "vpi-sun sun" data-v-be9742d9 ></ span >< span class = "vpi-moon moon" data-v-be9742d9 ></ span > <!--]--> </ span ></ span ></ button ></ div ></ div ></ div >< div class = "group" data-v-f953d92f >< div class = "item social-links" data-v-f953d92f >< div class = "VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c > <!--[--> < a class = "VPSocialLink no-icon" href = "https://github.com/crocofied/corecontrol" aria-label = "github" target = "_blank" rel = "noopener" data-v-e71e869c data-v-60a9a2d3 >< span class = "vpi-social-github" ></ span ></ a > <!--]--> </ div ></ div ></ div > <!--]--><!--]--> </ div ></ div ></ div > <!--[--><!--]--> < button type = "button" class = "VPNavBarHamburger h
2025-04-21 16:02:55 +02:00
<span class=" line " >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > web</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > image</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > haedlessdev/corecontrol:latest</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > ports</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > - </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > " 3000:3000" </ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > environment</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > JWT_SECRET</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > RANDOM_SECRET</ span >< span style = "--shiki-light:#6A737D;--shiki-dark:#6A737D;" > # Replace with a secure random string</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > DATABASE_URL</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > " postgresql://postgres:postgres@db:5432/postgres" </ span ></ span >
< span class = "line" ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > agent</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > image</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > haedlessdev/corecontrol-agent:latest</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > environment</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > DATABASE_URL</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > " postgresql://postgres:postgres@db:5432/postgres" </ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > depends_on</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > db</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > condition</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > service_healthy</ span ></ span >
< span class = "line" ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > db</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > image</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > postgres:17</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > restart</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > always</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > environment</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > POSTGRES_USER</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > postgres</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > POSTGRES_PASSWORD</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > postgres</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > POSTGRES_DB</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > postgres</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > volumes</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > - </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > postgres_data:/var/lib/postgresql/data</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > healthcheck</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > test</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : [</ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > " CMD-SHELL" </ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > , </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > " pg_isready -U postgres" </ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > ]</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > interval</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > 2s</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > timeout</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > 2s</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > retries</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > : </ span >< span style = "--shiki-light:#005CC5;--shiki-dark:#79B8FF;" > 10</ span ></ span >
< span class = "line" ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > volumes</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#22863A;--shiki-dark:#85E89D;" > postgres_data</ span >< span style = "--shiki-light:#24292E;--shiki-dark:#E1E4E8;" > :</ span ></ span ></ code ></ pre ></ div >< ol start = "3" >< li > Generate a custom JWT_SECRET with e.g. < a href = "https://jwtsecret.com/generate" target = "_blank" rel = "noreferrer" > jwtsecret.com/generate</ a ></ li >< li > Start CoreControl with the following command:</ li ></ ol >< div class = "language-bash vp-adaptive-theme" >< button title = "Copy Code" class = "copy" ></ button >< span class = "lang" > bash</ span >< pre class = "shiki shiki-themes github-light github-dark vp-code" tabindex = "0" >< code >< span class = "line" >< span style = "--shiki-light:#6F42C1;--shiki-dark:#B392F0;" > docker-compose</ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > up</ span >< span style = "--shiki-light:#005CC5;--shiki-dark:#79B8FF;" > -d</ span ></ span >
< span class = "line" >< span style = "--shiki-light:#6A737D;--shiki-dark:#6A737D;" > # OR</ span ></ span >
2025-04-21 16:06:35 +02:00
< span class = "line" >< span style = "--shiki-light:#6F42C1;--shiki-dark:#B392F0;" > docker</ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > compose</ span >< span style = "--shiki-light:#032F62;--shiki-dark:#9ECBFF;" > up</ span >< span style = "--shiki-light:#005CC5;--shiki-dark:#79B8FF;" > -d</ span ></ span ></ code ></ pre ></ div >< ol start = "5" >< li > The application is now available at < code > http://localhost:3000</ code > .</ li ></ ol >< h2 id = "authentication" tabindex = "-1" > Authentication < a class = "header-anchor" href = "#authentication" aria-label = "Permalink to "Authentication"" > </ a ></ h2 >< p > CoreControl comes with a default administrator account:</ p >< ul >< li >< strong > Email</ strong > : < a href = "mailto:admin@example.com" target = "_blank" rel = "noreferrer" > admin@example.com</ a ></ li >< li >< strong > Password</ strong > : admin</ li ></ ul >< div class = "warning custom-block" >< p class = "custom-block-title" > WARNING</ p >< p > For security reasons, it is strongly recommended to change the default credentials immediately after your first login.</ p ></ div >< p > You can change the administrator password in the settings after logging in.</ p ></ div ></ div ></ main >< footer class = "VPDocFooter" data-v-e6f2a212 data-v-1bcd8184 > <!--[--><!--]--> < div class = "edit-info" data-v-1bcd8184 > <!----> < div class = "last-updated" data-v-1bcd8184 >< p class = "VPLastUpdated" data-v-1bcd8184 data-v-1bb0c8a8 > Last updated: < time datetime = "2025-04-20T17:54:58.000Z" data-v-1bb0c8a8 ></ time ></ p ></ div ></ div >< nav class = "prev-next" aria-labelledby = "doc-footer-aria-label" data-v-1bcd8184 >< span class = "visually-hidden" id = "doc-footer-aria-label" data-v-1bcd8184 > Pager</ span >< div class = "pager" data-v-1bcd8184 > <!----> </ div >< div class = "pager" data-v-1bcd8184 >< a class = "VPLink link pager-link next" href = "/general/Dashboard" data-v-1bcd8184 > <!--[--> < span class = "desc" data-v-1bcd8184 > Next page</ span >< span class = "title" data-v-1bcd8184 > Dashboard</ span > <!--]--> </ a ></ div ></ nav ></ footer > <!--[--><!--]--> </ div ></ div ></ div > <!--[--><!--]--> </ div ></ div >< footer class = "VPFooter has-sidebar" data-v-d8b57b2d data-v-566314d4 >< div class = "container" data-v-566314d4 >< p class = "message" data-v-566314d4 > Released under the MIT License.</ p >< p class = "copyright" data-v-566314d4 > Copyright © 2025-present CoreControl</ p ></ div ></ footer > <!--[--><!--]--> </ div ></ div >
2025-04-21 16:02:55 +02:00
</ body >
</ html >