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-24 14:28:03 +02:00
< script type = "module" src = "/assets/chunks/metadata.b7f24d28.js" > < / script >
< script type = "module" src = "/assets/app.DQZaLSC2.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-24 14:28:03 +02:00
< link rel = "modulepreload" href = "/assets/chunks/theme.BTnOYcHU.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-24 14:28:03 +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 > < a class = "VPSocialLink no-icon" href = "https://www.buymeacoffee.com/corecontrol" aria-label = "buymeacoffee" target = "_blank" rel = "noopener" data-v-e71e869c data-v-60a9a2d3 > < span class = "vpi-social-buymeacoffee" > < / 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 = "_bla
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 >