{"id":158,"date":"2025-03-15T10:54:00","date_gmt":"2025-03-15T10:54:00","guid":{"rendered":"https:\/\/unifiguy.com\/?p=158"},"modified":"2025-03-15T10:55:41","modified_gmt":"2025-03-15T10:55:41","slug":"installing-core-keeper-on-docker","status":"publish","type":"post","link":"https:\/\/unifiguy.com\/?p=158","title":{"rendered":"Installing Core Keeper on Docker"},"content":{"rendered":"\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"90sswiZ2dV\"><a href=\"https:\/\/eric.frydendal.org\/installing-core-keeper-on-docker\/\">Installing Core Keeper on Docker<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Installing Core Keeper on Docker&#8221; &#8212; Eric Frydendal\" src=\"https:\/\/eric.frydendal.org\/installing-core-keeper-on-docker\/embed\/#?secret=SPYuC1sZhG#?secret=90sswiZ2dV\" data-secret=\"90sswiZ2dV\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Excerpts from the above. I am paranoid about losing things on the internet and have only copied this here for reference. Full credit to the article above, its better formatted over there and Ive definitely cut chunks out that I dont need. <strong>TLDR, go to the above link.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Summary<\/strong>:<\/h2>\n\n\n\n<p>6. First things first, update. Run this command. If Ubuntu asks you to restart services with a pink background, just click &lt;Tab&gt; and :<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update &amp;&amp; sudo apt upgrade -y<\/code><\/pre>\n\n\n\n<p>7. Next, let&#8217;s install docker. I recommend getting the latest version by following the instruction here: <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/\" target=\"_blank\">https:\/\/docs.docker.com\/engine\/install\/ubuntu\/<\/a>. You should follow the steps under &#8220;Install using the repository&#8221;, but if you&#8217;re lazy and trust the Docker folks, you can download the automated script: <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.docker.com\/engine\/install\/ubuntu\/#install-using-the-convenience-script\" target=\"_blank\">https:\/\/docs.docker.com\/engine\/install\/ubuntu\/#install-using-the-convenience-script<\/a>.<\/p>\n\n\n\n<p>8. With Docker installed, let&#8217;s create a location for our game. Use this command to create a new directory:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir \/srv\/core-keeper-dedicated<\/code><\/pre>\n\n\n\n<p>9. Now let&#8217;s hop into that new directory:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/srv\/core-keeper-dedicated<\/code><\/pre>\n\n\n\n<p>10. For this tutorial, we&#8217;ll use this Docker image: https:\/\/hub.docker.com\/r\/escaping\/core-keeper-dedicated. Let&#8217;s pull it down:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker pull escaping\/core-keeper-dedicated<\/code><\/pre>\n\n\n\n<p>11. According to the image&#8217;s owner, we need to create two files. Let&#8217;s create those with nano, a simple text editor.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run this to create the new file:<\/li>\n<\/ul>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano docker-compose.yaml<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy this content and then use right-click to paste into the docker-compose.yaml file:<\/li>\n<\/ul>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>version: \"3\"\n\nservices:\n  core-keeper:\n    image: escaping\/core-keeper-dedicated\n    container_name: core-keeper-1\n    volumes:\n      - .\/server-files:\/home\/steam\/core-keeper-dedicated\n      - .\/server-data:\/home\/steam\/core-keeper-data\n      - \/tmp\/.X11-unix:\/tmp\/.X11-unix\n    env_file:\n      - .\/core.env\n    restart: always\n    stop_grace_period: 2m<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use &lt;Ctrl&gt; + X to save the file. Press &#8220;Y&#8221; to Save your changes, and press &lt;Enter&gt; to keep the same name, docker-compose.yaml<\/li>\n\n\n\n<li>Let&#8217;s create the next file. Same as before:<\/li>\n<\/ul>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano core.env<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy this text and use right-click to paste it into the file:<\/li>\n<\/ul>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WORLD_INDEX=0\nWORLD_NAME=Core Keeper Server\nWORLD_SEED=0\nGAME_ID=\n#DATA_PATH=\nMAX_PLAYERS=10\nDISCORD=0\n#DISCORD_HOOK=https:\/\/discord.com\/api\/webhooks\/{id}\/{token}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>We&#8217;re leaving the GAME_ID blank for now, so a new one will be created. Also, we&#8217;re not using Discord integration. Again, press &lt;Ctrl&gt; + X to save the file and follow the prompts as before.<\/li>\n\n\n\n<li>Finally, let&#8217;s create two new folders to store our data:<\/li>\n<\/ul>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir server-data server-files<\/code><\/pre>\n\n\n\n<p>12. GREAT! Let&#8217;s start up our server for the first time!<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker compose up -d<\/code><\/pre>\n\n\n\n<p>13. Wait for just a minute, and then run:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker exec -it core-keeper-1 cat core-keeper-dedicated\/GameID.txt &amp;&amp; echo -e \"\\n\"<\/code><\/pre>\n\n\n\n<p>14. The server will spit out your customized random GAME_ID, something like: VZdWFlZ24LJuVizKlgh1ZsQbbXKT. Copy that text by highlighting it (Putty will auto copy things that are high-lighted, isn&#8217;t that nice!). To save the ID permanently, first stop the container:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker container kill core-keeper-1<\/code><\/pre>\n\n\n\n<p>15. Now we modify the core.env file:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano core.env<\/code><\/pre>\n\n\n\n<p>16. Paste your unique game id immediately after the &#8220;GAME_ID=&#8221; config:<\/p>\n\n\n\n<p>GAME_ID=VZdWFlZ24LJuVizKlgh1ZsQbbXKT<\/p>\n\n\n\n<p>17. Again, &lt;Ctrl&gt; + X to exit.<\/p>\n\n\n\n<p>18. Let&#8217;s restart Core Keeper:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker compose up -d<\/code><\/pre>\n\n\n\n<p>19. Wait a minute and then check if it&#8217;s running correctly. You should see the same Game ID at the very bottom:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker container logs core-keeper-1<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<p>20. Let&#8217;s test that we can connect! Load up Core Keeper on your machine. On the Main Menu, select Join Game and paste your unique GAME_ID value that we set. Hit Join and wait for it to connect.<\/p>\n\n\n\n<p>21. If you successfully connected, go ahead and quit Core Keeper. We want to move our previous world over now. Open up a new File Explorer window and go to &#8220;%USERPROFILE%\\AppData\\LocalLow\\Pugstorm\\Core Keeper\\Steam&#8221;. Each numbered folder is a different world. Choose the world you&#8217;d like to move and enter the folder. Copy these files somewhere you can find them, like your Desktop:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Admins.json<\/li>\n\n\n\n<li>ServerConfig.json<\/li>\n\n\n\n<li>ServerConfig.json.pugbackup<\/li>\n\n\n\n<li>worlds (the whole folder and everything inside)<\/li>\n<\/ul>\n\n\n\n<p>22. We need a tool to copy this data to your server. I recommend the portable executable version of WinSCP: (<a rel=\"noreferrer noopener\" href=\"https:\/\/winscp.net\/eng\/downloads.php\" target=\"_blank\">https:\/\/winscp.net\/eng\/downloads.php<\/a>). Use the &#8220;Portable Executable&#8221; version. Download it, run it, and click New Site. Enter the details of your Core Keeper server. This will use the same SSH username and password as before.<\/p>\n\n\n\n<p>23. Once you&#8217;re logged in, the right side of the screen represents your Core Keeper server and the location should be \/home\/&lt;yourUserName&gt;\/. Drag and drop the 3 files plus the worlds folder from your Desktop to this location. They should be copied over to the server.<\/p>\n\n\n\n<p>22. Hop back on your server using PuTTY. If you&#8217;re not already there, make sure you go back to the Core Keeper directory and let&#8217;s stop the Core Keeper server temporarily:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/srv\/core-keeper-dedicated\nsudo docker container kill core-keeper-1<\/code><\/pre>\n\n\n\n<p>23. First backup the old files with these commands:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir ~\/core-keeper-backup\nsudo mv \/srv\/core-keeper-dedicated\/server-data\/* ~\/core-keeper-backup\/<\/code><\/pre>\n\n\n\n<p>24. Now let&#8217;s copy our old save files. If you saved them directly to your home folder when using WinSCP, this command should work:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp ~\/Admins.json ~\/ServerConfig.json ~\/ServerConfig.json.pugbackup ~\/worlds \/srv\/core-keeper-dedicated\/server-data\/<\/code><\/pre>\n\n\n\n<p>25. Go ahead and check the folder to make sure the files were correctly copied over:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ls -al \/srv\/core-keeper-dedicated\/server-data\/<\/code><\/pre>\n\n\n\n<p>You should see something like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ ls -al server-data\/\ntotal 24\ndrwxrwxr-x 3 user user 4096 Nov 11 06:35 .\ndrwxr-xr-x 5 user user 4096 Nov 11 07:45 ..\n-rw-rw-r-- 1 user user 315 Nov 11 06:06 Admins.json\n-rw-r--r-- 1 user user 210 Nov 11 06:35 ServerConfig.json\n-rw-r--r-- 1 user user 210 Nov 11 06:35 ServerConfig.json.pugbackup\ndrwxrwxr-x 2 user user 4096 Nov 11 06:22 worlds<\/code><\/pre>\n\n\n\n<p>26. If you see similar, go ahead and start your server again:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/srv\/core-keeper-dedicated\/\nsudo docker compose up -d<\/code><\/pre>\n\n\n\n<p>27. Wait a minute, and then check the logs with:<\/p>\n\n\n\n<p><a>Copy Code<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker container logs core-keeper-1<\/code><\/pre>\n\n\n\n<p>If you see your Game ID at the bottom and no noticeable errors, open Core Keeper and try to login. Once again, use &#8220;Join Game&#8221; and the Game ID is the ID in the log above.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion:<\/h2>\n\n\n\n<p>These steps should allow you to setup your own Core Keeper server. You will be able to share the connection locally with any users on your network. If you want to share with users outside your network, you may need to consult other guides on configuring your network\/firewall. Post navigation<\/p>\n\n\n\n<p><a href=\"https:\/\/eric.frydendal.org\/installing-core-keeper-on-docker\/#top\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Excerpts from the above. I am paranoid about losing things on the internet and have only copied this here for reference. Full credit to the article above, its better formatted over there and Ive definitely cut chunks out that I dont need. TLDR, go to the above link. Summary: 6&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-158","post","type-post","status-publish","format-standard","hentry","category-software"],"_links":{"self":[{"href":"https:\/\/unifiguy.com\/index.php?rest_route=\/wp\/v2\/posts\/158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unifiguy.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unifiguy.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unifiguy.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unifiguy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=158"}],"version-history":[{"count":3,"href":"https:\/\/unifiguy.com\/index.php?rest_route=\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":161,"href":"https:\/\/unifiguy.com\/index.php?rest_route=\/wp\/v2\/posts\/158\/revisions\/161"}],"wp:attachment":[{"href":"https:\/\/unifiguy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unifiguy.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unifiguy.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}