diff --git a/404.html b/404.html index ceaeecdd..15684fc4 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + @@ -44,6 +44,6 @@ current

  • - + diff --git a/assets/js/12.2e01246c.js b/assets/js/12.9baa0e57.js similarity index 97% rename from assets/js/12.2e01246c.js rename to assets/js/12.9baa0e57.js index 5c7633e1..03b09f43 100644 --- a/assets/js/12.2e01246c.js +++ b/assets/js/12.9baa0e57.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{340:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Process_Management.516b5b6f.png"},351:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Select.5a2867ee.png"},352:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Copy_Settings_From.e3102cdd.png"},353:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Variables.3962b264.png"},354:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Startup.b6e22637.png"},371:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"creating-a-custom-egg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-egg"}},[e._v("#")]),e._v(" Creating a Custom Egg")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("You should not edit existing services or options that ship with the Panel. Each upgrade we push can make minor\nchanges to these, and you'll lose any changes you've made.")])]),e._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#create-new-option"}},[e._v("Create New Option")])]),s("li",[s("a",{attrs:{href:"#configure-process-management"}},[e._v("Configure Process Management")]),s("ul",[s("li",[s("a",{attrs:{href:"#stop-command"}},[e._v("Stop Command")])]),s("li",[s("a",{attrs:{href:"#log-storage"}},[e._v("Log Storage")])]),s("li",[s("a",{attrs:{href:"#configuration-files"}},[e._v("Configuration Files")])]),s("li",[s("a",{attrs:{href:"#start-configuration"}},[e._v("Start Configuration")])])])]),s("li",[s("a",{attrs:{href:"#copy-settings-from"}},[e._v("Copy Settings From")])]),s("li",[s("a",{attrs:{href:"#egg-variables"}},[e._v("Egg Variables")])]),s("li",[s("a",{attrs:{href:"#list-of-default-variables"}},[e._v("List of default variables")])])])]),s("p"),e._v(" "),s("p",[e._v("The first thing you'll need to do is create a new service. In this case, the name and description speak for themselves\nin this case. The "),s("code",[e._v("Folder Name")]),e._v(" "),s("em",[e._v("must be a unique name")]),e._v(" not being used by any other service, and should only\ncontain letters, numbers, underscores, and dashes. This is the name of the folder where the daemon will be storing\nthe service options on the daemon.")]),e._v(" "),s("p",[e._v("The default start command is also required, however it can be changed per-option.")]),e._v(" "),s("h2",{attrs:{id:"create-new-option"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-new-option"}},[e._v("#")]),e._v(" Create New Option")]),e._v(" "),s("p",[e._v("After creating the service, in the bottom right of the page you should see a button titled "),s("code",[e._v("New Egg")]),e._v(", press it.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(351),alt:""}})]),e._v(" "),s("p",[e._v("You will be taken to a new service option page which is where most of the configuration happens. The first thing\nyou need to do is select your service that you created previously from the "),s("code",[e._v("Associated Nest")]),e._v(" dropdown.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(340),alt:""}})]),e._v(" "),s("p",[e._v("After that, enter an Option Name to describe it, in this case I am using "),s("code",[e._v("Widget")]),e._v(". You will also need to provide a\n"),s("em",[e._v("valid")]),e._v(" docker image, as well as a start command to be assigned to servers under this service option (remember, this\ncan be tweaked per-server if needed).")]),e._v(" "),s("p",[s("em",[e._v("Docker images must be specifically designed to work with Pterodactyl Panel.")]),e._v(" You should read more about that in\nour "),s("RouterLink",{attrs:{to:"/community/config/eggs/creating_a_custom_image.html"}},[e._v("Creating a Docker Image")]),e._v(" guide.")],1),e._v(" "),s("h2",{attrs:{id:"configure-process-management"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-process-management"}},[e._v("#")]),e._v(" Configure Process Management")]),e._v(" "),s("p",[e._v("This is perhaps the most important step in this service option configuration, as this tells the Daemon how to run everything.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(340),alt:""}})]),e._v(" "),s("p",[e._v("The first field you'll encounter is "),s("code",[e._v("Copy Settings From")]),e._v(". The default selection is "),s("code",[e._v("None")]),e._v(". That is expected, and okay.\nThis dropdown is discussed at the end of this article.")]),e._v(" "),s("h3",{attrs:{id:"stop-command"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#stop-command"}},[e._v("#")]),e._v(" Stop Command")]),e._v(" "),s("p",[e._v("Next, you'll encounter "),s("code",[e._v("Stop Command")]),e._v(" and, as the name implies, this should be the command used to safely stop the\noption. For some games, this is "),s("code",[e._v("stop")]),e._v(" or "),s("code",[e._v("end")]),e._v(". Certain programs and games don't have a specified stop command, so\nyou can enter "),s("code",[e._v("^C")]),e._v(" to have the daemon execute a "),s("code",[e._v("SIGINT")]),e._v(" to end the process.")]),e._v(" "),s("h3",{attrs:{id:"log-storage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#log-storage"}},[e._v("#")]),e._v(" Log Storage")]),e._v(" "),s("p",[e._v("Logs are competely handeled by the daemon now and use the docker logs to output the complete output from the server.\nThis can be set like below.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("h3",{attrs:{id:"configuration-files"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-files"}},[e._v("#")]),e._v(" Configuration Files")]),e._v(" "),s("p",[e._v("The next block is one of the most complex blocks, the "),s("code",[e._v("Configuration Files")]),e._v(" descriptor. The Daemon will process this\nblock prior to booting the server to ensure all of the required settings are defined and set correctly.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server.properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-ip"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enable-query"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"true"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"query.port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("In this example, we are telling the Daemon to read "),s("code",[e._v("server.properties")]),e._v(" in "),s("code",[e._v("/home/container")]),e._v(". Within this block, we\ndefine a "),s("code",[e._v("parser")]),e._v(", in this case "),s("code",[e._v("properties")]),e._v(" but the following are "),s("a",{attrs:{href:"https://github.com/pterodactyl/wings/blob/develop/parser/parser.go#L25-L30",target:"_blank",rel:"noopener noreferrer"}},[e._v("valid parsers"),s("OutboundLink")],1),e._v(":")]),e._v(" "),s("ul",[s("li",[s("code",[e._v("file")]),e._v(" — This parser goes based on matching the beginning of lines, and not a specific property like the other five.\nAvoid using this parser if possible.")]),e._v(" "),s("li",[s("code",[e._v("yaml")]),e._v(" (supports "),s("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),s("li",[s("code",[e._v("properties")])]),e._v(" "),s("li",[s("code",[e._v("ini")])]),e._v(" "),s("li",[s("code",[e._v("json")]),e._v(" (supports "),s("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),s("li",[s("code",[e._v("xml")])])]),e._v(" "),s("p",[e._v("Once you have defined a parser, we then define a "),s("code",[e._v("find")]),e._v(" block which tells the Daemon what specific elements to find\nand replace. In this example, we have provided four separate items within the "),s("code",[e._v("server.properties")]),e._v(" file that we want to\nfind and replace to the assigned values. You can use either an exact value, or define a specific server setting from\nthe "),s("code",[e._v("server.json")]),e._v(" file. In this case, we're assigning the default server port to be used as the "),s("code",[e._v("server-port")]),e._v(" and\n"),s("code",[e._v("query.port")]),e._v(". "),s("strong",[e._v("These placeholders are case sensitive, and should have no spaces in them.")])]),e._v(" "),s("p",[e._v("You can have multiple files listed here, the Daemon will process them in parallel before starting the server. When\nusing "),s("code",[e._v("yaml")]),e._v(" or "),s("code",[e._v("json")]),e._v(" you can use more advanced searching for elements.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"config.yml"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"yaml"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_enabled"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].host"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0:{{server.build.default.port}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servers.*.address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("In this example, we are parsing "),s("code",[e._v("config.yml")]),e._v(" using the "),s("code",[e._v("yaml")]),e._v(" parser. The first three find items are simply assigning\nports and IPs for the first listener block. The last one, "),s("code",[e._v("servers.*.address")]),e._v(" uses wildcard matching to match any items\nwithin the "),s("code",[e._v("servers")]),e._v(" block, and then finding each "),s("code",[e._v("address")]),e._v(" block for those items.")]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("An advanced feature of this file configuration is the ability to define multiple find and replace statements for a\nsingle matching line. In this case, we are looking for either "),s("code",[e._v("127.0.0.1")]),e._v(" or "),s("code",[e._v("localhost")]),e._v(" and replacing them with the\ndocker interface defined in the configuration file using "),s("code",[e._v("{{config.docker.interface}}")]),e._v(".")])]),s("h3",{attrs:{id:"start-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-configuration"}},[e._v("#")]),e._v(" Start Configuration")]),e._v(" "),s("p",[e._v("The last block to configure is the "),s("code",[e._v("Start Configuration")]),e._v(" for servers running using this service option.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"done"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('")! For help, type "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"userInteraction"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Go to eula.txt for more info."')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("In the example block above, we define "),s("code",[e._v("done")]),e._v(" as the entire line, or part of a line that indicates a server is done\nstarting, and is ready for players to join. When the Daemon sees this output, it will mark the server as "),s("code",[e._v("ON")]),e._v(" rather\nthan "),s("code",[e._v("STARTING")]),e._v(". We can also define "),s("code",[e._v("userInteraction")]),e._v(" as an array of lines that should indicate that the server\n"),s("em",[e._v("did not crash")]),e._v(", but rather stopped because the user needs to perform some action.")]),e._v(" "),s("p",[e._v("In this case, we define it as the line asking users to agree to the EULA. You are not required to have\n"),s("code",[e._v("userInteraction")]),e._v(" lines, however if you are going to leave it empty, it should still be defined with an empty array,\nas shown below:")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"done"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('")! For help, type "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"userInteraction"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("That concludes basic service option configuration.")]),e._v(" "),s("h2",{attrs:{id:"copy-settings-from"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#copy-settings-from"}},[e._v("#")]),e._v(" Copy Settings From")]),e._v(" "),s("p",[e._v("As mentioned above, there is a unique "),s("code",[e._v("Copy Settings From")]),e._v(" dropdown when adding a new option. This gives you the\nability to, as the name suggests, copy settings defined above from a different option.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(352),alt:""}})]),e._v(" "),s("p",[e._v("In the panel, we use this to copy settings that remain the same between similar service options, such as many of the\nMinecraft options.")]),e._v(" "),s("p",[e._v("For example, lets look at the "),s("code",[e._v("Sponge (SpongeVanilla)")]),e._v(" service option.")]),e._v(" "),s("p",[e._v("As you can see, it as been told to copy settings from "),s("code",[e._v("Vanilla Minecraft")]),e._v(". This means that any of the fields that are\nleft blank will inherit from the assigned parent. We then define a specific "),s("code",[e._v("userInteraction")]),e._v(" line that is different in\nSponge compared to Vanilla, but tell it that everything else should remain the same.")]),e._v(" "),s("p",[s("em",[e._v("Please note that "),s("code",[e._v("Copy Settings From")]),e._v(" does not support nested copies, you can only copy from a single parent,\nand that parent "),s("strong",[e._v("must not be copying from another option.")])])]),e._v(" "),s("h2",{attrs:{id:"egg-variables"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#egg-variables"}},[e._v("#")]),e._v(" Egg Variables")]),e._v(" "),s("p",[e._v("One of the great parts of the Egg Variables is the ability to define specific variables that users and/or admins can\ncontrol to tweak different settings without letting users modify the startup command. To create new variables, or edit\nexisting ones, visit the new service option you created, and click the "),s("code",[e._v("Variables")]),e._v(" tab at the top of the page. Lets take\na look at an example variable that we can create.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(353),alt:""}})]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("The name and description are rather self-explanitory, so I'll skip down to the "),s("code",[e._v("Environment Variable")]),e._v(" box. This should\nbe an Alpha-Numeric name with underscores, and should be uppercase. This will be the name of the environment variable\nwhich can be accessed in the startup command as "),s("code",[e._v("{{WOOZLE_WOO}}")]),e._v(", within file modifications as "),s("code",[e._v("{{env.WOOZLE_WOO}}")]),e._v(", or\njust "),s("code",[e._v("${WOOZLE_WOO}")]),e._v(" in any shell scripts (it is passed through in the environment). We also define a default value for\nthis environment variable in this example, but it is not required to do so.")])]),s("p",[e._v("The next section is "),s("code",[e._v("Permissions")]),e._v(", which is a dropdown with two options: "),s("code",[e._v("Users Can View")]),e._v(" and "),s("code",[e._v("Users Can Edit")]),e._v(".")]),e._v(" "),s("ul",[s("li",[s("code",[e._v("Users Can View")]),e._v(" — allows a user to view the field on the front-end, as well as the assigned value of that variable.\nThey will be able to see it replaced in their startup command.")]),e._v(" "),s("li",[s("code",[e._v("Users Can Edit")]),e._v(" — allows a user to edit the value of the variable, for example the name of their "),s("code",[e._v("server.jar")]),e._v(" file\nif running Minecraft.")])]),e._v(" "),s("p",[e._v("You should use caution here, even if you assign neither of the permissions it does not mean that the value will be\nhidden. Crafty users will still be able to get the environment on their server. In most cases this is simply hiding\nit from the user, and then used within the Dockerfile to perform actions, thus it is not important for the user to see.")]),e._v(" "),s("p",[e._v("Finally, you will need to define some input rules to validate the value against. In this example, we use\n"),s("code",[e._v("required|string|between:1,10")]),e._v(", which means the field is "),s("code",[e._v("required")]),e._v(", must be a "),s("code",[e._v("string")]),e._v(", and must be between "),s("code",[e._v("1")]),e._v(" and\n"),s("code",[e._v("10")]),e._v(" characters in length. You can find "),s("a",{attrs:{href:"https://laravel.com/docs/5.6/validation#available-validation-rules",target:"_blank",rel:"noopener noreferrer"}},[e._v("all of the available validation rules"),s("OutboundLink")],1),e._v("\non the Laravel website. You can also use ReGEX based validation by using the "),s("code",[e._v("regex:")]),e._v(" rule flag. For example,\n"),s("a",{attrs:{href:"https://regex101.com/r/k4oEOn/1",target:"_blank",rel:"noopener noreferrer"}},[s("code",[e._v("required|regex:/^([\\w\\d._-]+)(\\.jar)$/")]),s("OutboundLink")],1),e._v(" will require the field, and will match the\nregex as any letters or numbers ("),s("code",[e._v("\\w\\d")]),e._v(") including underscore ("),s("code",[e._v("_")]),e._v("), periods ("),s("code",[e._v(".")]),e._v("), and dashes ("),s("code",[e._v("-")]),e._v(") ending in "),s("code",[e._v(".jar")]),e._v(".")]),e._v(" "),s("p",[e._v("They will then be visible when managing the startup for a server in both the Admin CP and on the Front-End.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(354),alt:""}})]),e._v(" "),s("h2",{attrs:{id:"list-of-default-variables"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#list-of-default-variables"}},[e._v("#")]),e._v(" List of default variables")]),e._v(" "),s("p",[e._v("The default variables are always accessible to all eggs and don't have to be created separately. They can be used in the egg startup, install script, or the configuration file parser.")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("Variable")]),e._v(" "),s("th",[e._v("Description")]),e._v(" "),s("th",[e._v("Example")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[e._v("TZ")]),e._v(" "),s("td",[e._v("Time Zone")]),e._v(" "),s("td",[s("code",[e._v("Etc/UTC")])])]),e._v(" "),s("tr",[s("td",[e._v("STARTUP")]),e._v(" "),s("td",[e._v("Startup command of the egg")]),e._v(" "),s("td",[s("code",[e._v("java -Xms128M -Xmx"+e._s(e.SERVER_MEMORY)+"M -jar "+e._s(e.SERVER_JARFILE))])])]),e._v(" "),s("tr",[s("td",[e._v("SERVER_MEMORY")]),e._v(" "),s("td",[e._v("Memory available for the server in MB")]),e._v(" "),s("td",[s("code",[e._v("512")])])]),e._v(" "),s("tr",[s("td",[e._v("SERVER_IP")]),e._v(" "),s("td",[e._v("Default ip of the server")]),e._v(" "),s("td",[s("code",[e._v("127.0.0.1")])])]),e._v(" "),s("tr",[s("td",[e._v("SERVER_PORT")]),e._v(" "),s("td",[e._v("Primary Server Port")]),e._v(" "),s("td",[s("code",[e._v("27015")])])]),e._v(" "),s("tr",[s("td",[e._v("P_SERVER_LOCATION")]),e._v(" "),s("td",[e._v("Location of the server")]),e._v(" "),s("td",[s("code",[e._v("Example City")])])]),e._v(" "),s("tr",[s("td",[e._v("P_SERVER_UUID")]),e._v(" "),s("td",[e._v("UUID of the server")]),e._v(" "),s("td",[s("code",[e._v("539fdca8-4a08-4551-a8d2-8ee5475b50d9")])])]),e._v(" "),s("tr",[s("td",[e._v("P_SERVER_ALLOCATION_LIMIT")]),e._v(" "),s("td",[e._v("Limit of allocations allowed for the server")]),e._v(" "),s("td",[s("code",[e._v("0")])])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{340:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Process_Management.516b5b6f.png"},354:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Select.5a2867ee.png"},355:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Copy_Settings_From.e3102cdd.png"},356:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Variables.3962b264.png"},357:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Startup.b6e22637.png"},375:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"creating-a-custom-egg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-egg"}},[e._v("#")]),e._v(" Creating a Custom Egg")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("You should not edit existing services or options that ship with the Panel. Each upgrade we push can make minor\nchanges to these, and you'll lose any changes you've made.")])]),e._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#create-new-option"}},[e._v("Create New Option")])]),s("li",[s("a",{attrs:{href:"#configure-process-management"}},[e._v("Configure Process Management")]),s("ul",[s("li",[s("a",{attrs:{href:"#stop-command"}},[e._v("Stop Command")])]),s("li",[s("a",{attrs:{href:"#log-storage"}},[e._v("Log Storage")])]),s("li",[s("a",{attrs:{href:"#configuration-files"}},[e._v("Configuration Files")])]),s("li",[s("a",{attrs:{href:"#start-configuration"}},[e._v("Start Configuration")])])])]),s("li",[s("a",{attrs:{href:"#copy-settings-from"}},[e._v("Copy Settings From")])]),s("li",[s("a",{attrs:{href:"#egg-variables"}},[e._v("Egg Variables")])]),s("li",[s("a",{attrs:{href:"#list-of-default-variables"}},[e._v("List of default variables")])])])]),s("p"),e._v(" "),s("p",[e._v("The first thing you'll need to do is create a new service. In this case, the name and description speak for themselves\nin this case. The "),s("code",[e._v("Folder Name")]),e._v(" "),s("em",[e._v("must be a unique name")]),e._v(" not being used by any other service, and should only\ncontain letters, numbers, underscores, and dashes. This is the name of the folder where the daemon will be storing\nthe service options on the daemon.")]),e._v(" "),s("p",[e._v("The default start command is also required, however it can be changed per-option.")]),e._v(" "),s("h2",{attrs:{id:"create-new-option"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-new-option"}},[e._v("#")]),e._v(" Create New Option")]),e._v(" "),s("p",[e._v("After creating the service, in the bottom right of the page you should see a button titled "),s("code",[e._v("New Egg")]),e._v(", press it.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(354),alt:""}})]),e._v(" "),s("p",[e._v("You will be taken to a new service option page which is where most of the configuration happens. The first thing\nyou need to do is select your service that you created previously from the "),s("code",[e._v("Associated Nest")]),e._v(" dropdown.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(340),alt:""}})]),e._v(" "),s("p",[e._v("After that, enter an Option Name to describe it, in this case I am using "),s("code",[e._v("Widget")]),e._v(". You will also need to provide a\n"),s("em",[e._v("valid")]),e._v(" docker image, as well as a start command to be assigned to servers under this service option (remember, this\ncan be tweaked per-server if needed).")]),e._v(" "),s("p",[s("em",[e._v("Docker images must be specifically designed to work with Pterodactyl Panel.")]),e._v(" You should read more about that in\nour "),s("RouterLink",{attrs:{to:"/community/config/eggs/creating_a_custom_image.html"}},[e._v("Creating a Docker Image")]),e._v(" guide.")],1),e._v(" "),s("h2",{attrs:{id:"configure-process-management"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-process-management"}},[e._v("#")]),e._v(" Configure Process Management")]),e._v(" "),s("p",[e._v("This is perhaps the most important step in this service option configuration, as this tells the Daemon how to run everything.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(340),alt:""}})]),e._v(" "),s("p",[e._v("The first field you'll encounter is "),s("code",[e._v("Copy Settings From")]),e._v(". The default selection is "),s("code",[e._v("None")]),e._v(". That is expected, and okay.\nThis dropdown is discussed at the end of this article.")]),e._v(" "),s("h3",{attrs:{id:"stop-command"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#stop-command"}},[e._v("#")]),e._v(" Stop Command")]),e._v(" "),s("p",[e._v("Next, you'll encounter "),s("code",[e._v("Stop Command")]),e._v(" and, as the name implies, this should be the command used to safely stop the\noption. For some games, this is "),s("code",[e._v("stop")]),e._v(" or "),s("code",[e._v("end")]),e._v(". Certain programs and games don't have a specified stop command, so\nyou can enter "),s("code",[e._v("^C")]),e._v(" to have the daemon execute a "),s("code",[e._v("SIGINT")]),e._v(" to end the process.")]),e._v(" "),s("h3",{attrs:{id:"log-storage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#log-storage"}},[e._v("#")]),e._v(" Log Storage")]),e._v(" "),s("p",[e._v("Logs are competely handeled by the daemon now and use the docker logs to output the complete output from the server.\nThis can be set like below.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("h3",{attrs:{id:"configuration-files"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-files"}},[e._v("#")]),e._v(" Configuration Files")]),e._v(" "),s("p",[e._v("The next block is one of the most complex blocks, the "),s("code",[e._v("Configuration Files")]),e._v(" descriptor. The Daemon will process this\nblock prior to booting the server to ensure all of the required settings are defined and set correctly.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server.properties"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"properties"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-ip"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enable-query"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"true"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"query.port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("In this example, we are telling the Daemon to read "),s("code",[e._v("server.properties")]),e._v(" in "),s("code",[e._v("/home/container")]),e._v(". Within this block, we\ndefine a "),s("code",[e._v("parser")]),e._v(", in this case "),s("code",[e._v("properties")]),e._v(" but the following are "),s("a",{attrs:{href:"https://github.com/pterodactyl/wings/blob/develop/parser/parser.go#L25-L30",target:"_blank",rel:"noopener noreferrer"}},[e._v("valid parsers"),s("OutboundLink")],1),e._v(":")]),e._v(" "),s("ul",[s("li",[s("code",[e._v("file")]),e._v(" — This parser goes based on matching the beginning of lines, and not a specific property like the other five.\nAvoid using this parser if possible.")]),e._v(" "),s("li",[s("code",[e._v("yaml")]),e._v(" (supports "),s("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),s("li",[s("code",[e._v("properties")])]),e._v(" "),s("li",[s("code",[e._v("ini")])]),e._v(" "),s("li",[s("code",[e._v("json")]),e._v(" (supports "),s("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),s("li",[s("code",[e._v("xml")])])]),e._v(" "),s("p",[e._v("Once you have defined a parser, we then define a "),s("code",[e._v("find")]),e._v(" block which tells the Daemon what specific elements to find\nand replace. In this example, we have provided four separate items within the "),s("code",[e._v("server.properties")]),e._v(" file that we want to\nfind and replace to the assigned values. You can use either an exact value, or define a specific server setting from\nthe "),s("code",[e._v("server.json")]),e._v(" file. In this case, we're assigning the default server port to be used as the "),s("code",[e._v("server-port")]),e._v(" and\n"),s("code",[e._v("query.port")]),e._v(". "),s("strong",[e._v("These placeholders are case sensitive, and should have no spaces in them.")])]),e._v(" "),s("p",[e._v("You can have multiple files listed here, the Daemon will process them in parallel before starting the server. When\nusing "),s("code",[e._v("yaml")]),e._v(" or "),s("code",[e._v("json")]),e._v(" you can use more advanced searching for elements.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"config.yml"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"yaml"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_enabled"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].host"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0:{{server.build.default.port}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servers.*.address"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("In this example, we are parsing "),s("code",[e._v("config.yml")]),e._v(" using the "),s("code",[e._v("yaml")]),e._v(" parser. The first three find items are simply assigning\nports and IPs for the first listener block. The last one, "),s("code",[e._v("servers.*.address")]),e._v(" uses wildcard matching to match any items\nwithin the "),s("code",[e._v("servers")]),e._v(" block, and then finding each "),s("code",[e._v("address")]),e._v(" block for those items.")]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("An advanced feature of this file configuration is the ability to define multiple find and replace statements for a\nsingle matching line. In this case, we are looking for either "),s("code",[e._v("127.0.0.1")]),e._v(" or "),s("code",[e._v("localhost")]),e._v(" and replacing them with the\ndocker interface defined in the configuration file using "),s("code",[e._v("{{config.docker.interface}}")]),e._v(".")])]),s("h3",{attrs:{id:"start-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-configuration"}},[e._v("#")]),e._v(" Start Configuration")]),e._v(" "),s("p",[e._v("The last block to configure is the "),s("code",[e._v("Start Configuration")]),e._v(" for servers running using this service option.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"done"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('")! For help, type "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"userInteraction"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Go to eula.txt for more info."')]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("In the example block above, we define "),s("code",[e._v("done")]),e._v(" as the entire line, or part of a line that indicates a server is done\nstarting, and is ready for players to join. When the Daemon sees this output, it will mark the server as "),s("code",[e._v("ON")]),e._v(" rather\nthan "),s("code",[e._v("STARTING")]),e._v(". We can also define "),s("code",[e._v("userInteraction")]),e._v(" as an array of lines that should indicate that the server\n"),s("em",[e._v("did not crash")]),e._v(", but rather stopped because the user needs to perform some action.")]),e._v(" "),s("p",[e._v("In this case, we define it as the line asking users to agree to the EULA. You are not required to have\n"),s("code",[e._v("userInteraction")]),e._v(" lines, however if you are going to leave it empty, it should still be defined with an empty array,\nas shown below:")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"done"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('")! For help, type "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"userInteraction"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("That concludes basic service option configuration.")]),e._v(" "),s("h2",{attrs:{id:"copy-settings-from"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#copy-settings-from"}},[e._v("#")]),e._v(" Copy Settings From")]),e._v(" "),s("p",[e._v("As mentioned above, there is a unique "),s("code",[e._v("Copy Settings From")]),e._v(" dropdown when adding a new option. This gives you the\nability to, as the name suggests, copy settings defined above from a different option.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(355),alt:""}})]),e._v(" "),s("p",[e._v("In the panel, we use this to copy settings that remain the same between similar service options, such as many of the\nMinecraft options.")]),e._v(" "),s("p",[e._v("For example, lets look at the "),s("code",[e._v("Sponge (SpongeVanilla)")]),e._v(" service option.")]),e._v(" "),s("p",[e._v("As you can see, it as been told to copy settings from "),s("code",[e._v("Vanilla Minecraft")]),e._v(". This means that any of the fields that are\nleft blank will inherit from the assigned parent. We then define a specific "),s("code",[e._v("userInteraction")]),e._v(" line that is different in\nSponge compared to Vanilla, but tell it that everything else should remain the same.")]),e._v(" "),s("p",[s("em",[e._v("Please note that "),s("code",[e._v("Copy Settings From")]),e._v(" does not support nested copies, you can only copy from a single parent,\nand that parent "),s("strong",[e._v("must not be copying from another option.")])])]),e._v(" "),s("h2",{attrs:{id:"egg-variables"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#egg-variables"}},[e._v("#")]),e._v(" Egg Variables")]),e._v(" "),s("p",[e._v("One of the great parts of the Egg Variables is the ability to define specific variables that users and/or admins can\ncontrol to tweak different settings without letting users modify the startup command. To create new variables, or edit\nexisting ones, visit the new service option you created, and click the "),s("code",[e._v("Variables")]),e._v(" tab at the top of the page. Lets take\na look at an example variable that we can create.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(356),alt:""}})]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("The name and description are rather self-explanitory, so I'll skip down to the "),s("code",[e._v("Environment Variable")]),e._v(" box. This should\nbe an Alpha-Numeric name with underscores, and should be uppercase. This will be the name of the environment variable\nwhich can be accessed in the startup command as "),s("code",[e._v("{{WOOZLE_WOO}}")]),e._v(", within file modifications as "),s("code",[e._v("{{env.WOOZLE_WOO}}")]),e._v(", or\njust "),s("code",[e._v("${WOOZLE_WOO}")]),e._v(" in any shell scripts (it is passed through in the environment). We also define a default value for\nthis environment variable in this example, but it is not required to do so.")])]),s("p",[e._v("The next section is "),s("code",[e._v("Permissions")]),e._v(", which is a dropdown with two options: "),s("code",[e._v("Users Can View")]),e._v(" and "),s("code",[e._v("Users Can Edit")]),e._v(".")]),e._v(" "),s("ul",[s("li",[s("code",[e._v("Users Can View")]),e._v(" — allows a user to view the field on the front-end, as well as the assigned value of that variable.\nThey will be able to see it replaced in their startup command.")]),e._v(" "),s("li",[s("code",[e._v("Users Can Edit")]),e._v(" — allows a user to edit the value of the variable, for example the name of their "),s("code",[e._v("server.jar")]),e._v(" file\nif running Minecraft.")])]),e._v(" "),s("p",[e._v("You should use caution here, even if you assign neither of the permissions it does not mean that the value will be\nhidden. Crafty users will still be able to get the environment on their server. In most cases this is simply hiding\nit from the user, and then used within the Dockerfile to perform actions, thus it is not important for the user to see.")]),e._v(" "),s("p",[e._v("Finally, you will need to define some input rules to validate the value against. In this example, we use\n"),s("code",[e._v("required|string|between:1,10")]),e._v(", which means the field is "),s("code",[e._v("required")]),e._v(", must be a "),s("code",[e._v("string")]),e._v(", and must be between "),s("code",[e._v("1")]),e._v(" and\n"),s("code",[e._v("10")]),e._v(" characters in length. You can find "),s("a",{attrs:{href:"https://laravel.com/docs/5.6/validation#available-validation-rules",target:"_blank",rel:"noopener noreferrer"}},[e._v("all of the available validation rules"),s("OutboundLink")],1),e._v("\non the Laravel website. You can also use ReGEX based validation by using the "),s("code",[e._v("regex:")]),e._v(" rule flag. For example,\n"),s("a",{attrs:{href:"https://regex101.com/r/k4oEOn/1",target:"_blank",rel:"noopener noreferrer"}},[s("code",[e._v("required|regex:/^([\\w\\d._-]+)(\\.jar)$/")]),s("OutboundLink")],1),e._v(" will require the field, and will match the\nregex as any letters or numbers ("),s("code",[e._v("\\w\\d")]),e._v(") including underscore ("),s("code",[e._v("_")]),e._v("), periods ("),s("code",[e._v(".")]),e._v("), and dashes ("),s("code",[e._v("-")]),e._v(") ending in "),s("code",[e._v(".jar")]),e._v(".")]),e._v(" "),s("p",[e._v("They will then be visible when managing the startup for a server in both the Admin CP and on the Front-End.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(357),alt:""}})]),e._v(" "),s("h2",{attrs:{id:"list-of-default-variables"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#list-of-default-variables"}},[e._v("#")]),e._v(" List of default variables")]),e._v(" "),s("p",[e._v("The default variables are always accessible to all eggs and don't have to be created separately. They can be used in the egg startup, install script, or the configuration file parser.")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("Variable")]),e._v(" "),s("th",[e._v("Description")]),e._v(" "),s("th",[e._v("Example")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[e._v("TZ")]),e._v(" "),s("td",[e._v("Time Zone")]),e._v(" "),s("td",[s("code",[e._v("Etc/UTC")])])]),e._v(" "),s("tr",[s("td",[e._v("STARTUP")]),e._v(" "),s("td",[e._v("Startup command of the egg")]),e._v(" "),s("td",[s("code",[e._v("java -Xms128M -Xmx"+e._s(e.SERVER_MEMORY)+"M -jar "+e._s(e.SERVER_JARFILE))])])]),e._v(" "),s("tr",[s("td",[e._v("SERVER_MEMORY")]),e._v(" "),s("td",[e._v("Memory available for the server in MB")]),e._v(" "),s("td",[s("code",[e._v("512")])])]),e._v(" "),s("tr",[s("td",[e._v("SERVER_IP")]),e._v(" "),s("td",[e._v("Default ip of the server")]),e._v(" "),s("td",[s("code",[e._v("127.0.0.1")])])]),e._v(" "),s("tr",[s("td",[e._v("SERVER_PORT")]),e._v(" "),s("td",[e._v("Primary Server Port")]),e._v(" "),s("td",[s("code",[e._v("27015")])])]),e._v(" "),s("tr",[s("td",[e._v("P_SERVER_LOCATION")]),e._v(" "),s("td",[e._v("Location of the server")]),e._v(" "),s("td",[s("code",[e._v("Example City")])])]),e._v(" "),s("tr",[s("td",[e._v("P_SERVER_UUID")]),e._v(" "),s("td",[e._v("UUID of the server")]),e._v(" "),s("td",[s("code",[e._v("539fdca8-4a08-4551-a8d2-8ee5475b50d9")])])]),e._v(" "),s("tr",[s("td",[e._v("P_SERVER_ALLOCATION_LIMIT")]),e._v(" "),s("td",[e._v("Limit of allocations allowed for the server")]),e._v(" "),s("td",[s("code",[e._v("0")])])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/17.e3b378b0.js b/assets/js/17.0ee2dc6d.js similarity index 92% rename from assets/js/17.e3b378b0.js rename to assets/js/17.0ee2dc6d.js index d0456a19..494bb73f 100644 --- a/assets/js/17.e3b378b0.js +++ b/assets/js/17.0ee2dc6d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{355:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_create_button.05642c32.png"},356:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_new_page.17d70664.png"},357:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_config.f87f425f.png"},373:function(t,e,o){"use strict";o.r(e);var a=o(48),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"creating-a-new-node"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-new-node"}},[t._v("#")]),t._v(" Creating a New Node")]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#location"}},[t._v("Location")])]),a("li",[a("a",{attrs:{href:"#information-required"}},[t._v("Information Required")])]),a("li",[a("a",{attrs:{href:"#install-the-daemon"}},[t._v("Install the Daemon")])]),a("li",[a("a",{attrs:{href:"#configuring-the-node"}},[t._v("Configuring the Node")]),a("ul",[a("li",[a("a",{attrs:{href:"#auto-deploy"}},[t._v("Auto-Deploy")])])])])])]),a("p"),t._v(" "),a("h2",{attrs:{id:"location"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#location"}},[t._v("#")]),t._v(" Location")]),t._v(" "),a("p",[t._v("Head to the admin panel and click the Nodes tab on the left sidebar. After that, click 'Create New' on the\ntop right side to open the page to add a node.")]),t._v(" "),a("p",[a("img",{attrs:{src:o(355),alt:""}})]),t._v(" "),a("h2",{attrs:{id:"information-required"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#information-required"}},[t._v("#")]),t._v(" Information Required")]),t._v(" "),a("p",[a("img",{attrs:{src:o(356),alt:""}})]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("Name")]),t._v(": a quick identifiable name for the node.")]),t._v(" "),a("li",[a("strong",[t._v("Description")]),t._v(": a long description that is used to help you identify the node.")]),t._v(" "),a("li",[a("strong",[t._v("Location")]),t._v(": the location you want the node in. These are configured in the 'Locations' section of the panel and one\nmust be created before a node can be created. These simply act as categories for nodes and serve no other purpose at\nthis time.")]),t._v(" "),a("li",[a("strong",[t._v("FQDN")]),t._v(": the fully qualified domain name for the node — for example: "),a("code",[t._v("node.pterodactyl.io")])]),t._v(" "),a("li",[a("strong",[t._v("Communicate over SSL")]),t._v(": if the panel is using SSL the Daemon is required to use SSL as well.")]),t._v(" "),a("li",[a("strong",[t._v("Behind Proxy")]),t._v(": if you have the Daemon behind a proxy that terminates SSL connections before arriving at the Daemon\nthen this option should be selected. If none of that sentence made sense, this doesn't affect you.")]),t._v(" "),a("li",[a("strong",[t._v("Server File Directory")]),t._v(": the location on the physical server where the daemon is to store the files the servers\ngenerate. By default this is "),a("code",[t._v("/var/lib/pterodactyl/volumes")]),t._v(".")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("OVH Users")]),t._v(" "),a("p",[t._v("Some OVH users regularly have their "),a("code",[t._v("/home")]),t._v(" folder be the largest filesystem. You may want to change to use\n"),a("code",[t._v("/home/pterodactyl/volumes")]),t._v(" if you are on a default OVH box.")])]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("Total Memory")]),t._v(": the total amount of RAM the node should be able to allocate automatically.")]),t._v(" "),a("li",[a("strong",[t._v("Memory Overallocate")]),t._v(": the percentage of RAM to over-allocate on a node. For example, if you have set a 10GB memory\nlimit, with a 20% overallocation, the Panel will allocate up to 12GB of memory on this node in total.")]),t._v(" "),a("li",[a("strong",[t._v("Total Disk Space")]),t._v(": the total amount of disk space the node should be able to allocate automatically.")]),t._v(" "),a("li",[a("strong",[t._v("Disk Overallocate")]),t._v(": works the same way as memory overallocation.")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),a("p",[t._v("Don't forget to account for OS overhead and other software requirements on machines.")])]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("Daemon Port")]),t._v(": the port that the Daemon should listen on.")]),t._v(" "),a("li",[a("strong",[t._v("Daemon SFTP Port")]),t._v(": the port the Daemon sftp-server or standalone SFTP server should listen on.")])]),t._v(" "),a("h2",{attrs:{id:"install-the-daemon"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-the-daemon"}},[t._v("#")]),t._v(" Install the Daemon")]),t._v(" "),a("p",[t._v("At this point you'll need to have the Daemon installed on your machine. Check out the "),a("RouterLink",{attrs:{to:"/wings/installing.html"}},[t._v("documentation")]),t._v("\nfor more information, or try one of the community guides for "),a("RouterLink",{attrs:{to:"/community/installation-guides/wings/centos7.html"}},[t._v("CentOS")]),t._v(",\n"),a("RouterLink",{attrs:{to:"/community/installation-guides/wings/ubuntu1804.html"}},[t._v("Ubuntu")]),t._v(", or "),a("RouterLink",{attrs:{to:"/community/installation-guides/wings/debian9.html"}},[t._v("Debian")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"configuring-the-node"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuring-the-node"}},[t._v("#")]),t._v(" Configuring the Node")]),t._v(" "),a("p",[t._v("Go to the Node Configuration page")]),t._v(" "),a("p",[a("img",{attrs:{src:o(357),alt:""}})]),t._v(" "),a("p",[t._v("Copy and paste the config into the "),a("code",[t._v("config.yml")]),t._v(" file. (Default location is "),a("code",[t._v("/etc/pterodactyl/config.yml")]),t._v(")")]),t._v(" "),a("h3",{attrs:{id:"auto-deploy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-deploy"}},[t._v("#")]),t._v(" Auto-Deploy")]),t._v(" "),a("p",[t._v("This will generate a command to run on the node server to configure the daemon for you.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{351:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_create_button.05642c32.png"},352:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_new_page.17d70664.png"},353:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_config.f87f425f.png"},371:function(t,e,o){"use strict";o.r(e);var a=o(48),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"creating-a-new-node"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-new-node"}},[t._v("#")]),t._v(" Creating a New Node")]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#location"}},[t._v("Location")])]),a("li",[a("a",{attrs:{href:"#information-required"}},[t._v("Information Required")])]),a("li",[a("a",{attrs:{href:"#install-the-daemon"}},[t._v("Install the Daemon")])]),a("li",[a("a",{attrs:{href:"#configuring-the-node"}},[t._v("Configuring the Node")]),a("ul",[a("li",[a("a",{attrs:{href:"#auto-deploy"}},[t._v("Auto-Deploy")])])])])])]),a("p"),t._v(" "),a("h2",{attrs:{id:"location"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#location"}},[t._v("#")]),t._v(" Location")]),t._v(" "),a("p",[t._v("Head to the admin panel and click the Nodes tab on the left sidebar. After that, click 'Create New' on the\ntop right side to open the page to add a node.")]),t._v(" "),a("p",[a("img",{attrs:{src:o(351),alt:""}})]),t._v(" "),a("h2",{attrs:{id:"information-required"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#information-required"}},[t._v("#")]),t._v(" Information Required")]),t._v(" "),a("p",[a("img",{attrs:{src:o(352),alt:""}})]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("Name")]),t._v(": a quick identifiable name for the node.")]),t._v(" "),a("li",[a("strong",[t._v("Description")]),t._v(": a long description that is used to help you identify the node.")]),t._v(" "),a("li",[a("strong",[t._v("Location")]),t._v(": the location you want the node in. These are configured in the 'Locations' section of the panel and one\nmust be created before a node can be created. These simply act as categories for nodes and serve no other purpose at\nthis time.")]),t._v(" "),a("li",[a("strong",[t._v("FQDN")]),t._v(": the fully qualified domain name for the node — for example: "),a("code",[t._v("node.pterodactyl.io")])]),t._v(" "),a("li",[a("strong",[t._v("Communicate over SSL")]),t._v(": if the panel is using SSL the Daemon is required to use SSL as well.")]),t._v(" "),a("li",[a("strong",[t._v("Behind Proxy")]),t._v(": if you have the Daemon behind a proxy that terminates SSL connections before arriving at the Daemon\nthen this option should be selected. If none of that sentence made sense, this doesn't affect you.")]),t._v(" "),a("li",[a("strong",[t._v("Server File Directory")]),t._v(": the location on the physical server where the daemon is to store the files the servers\ngenerate. By default this is "),a("code",[t._v("/var/lib/pterodactyl/volumes")]),t._v(".")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("OVH Users")]),t._v(" "),a("p",[t._v("Some OVH users regularly have their "),a("code",[t._v("/home")]),t._v(" folder be the largest filesystem. You may want to change to use\n"),a("code",[t._v("/home/pterodactyl/volumes")]),t._v(" if you are on a default OVH box.")])]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("Total Memory")]),t._v(": the total amount of RAM the node should be able to allocate automatically.")]),t._v(" "),a("li",[a("strong",[t._v("Memory Overallocate")]),t._v(": the percentage of RAM to over-allocate on a node. For example, if you have set a 10GB memory\nlimit, with a 20% overallocation, the Panel will allocate up to 12GB of memory on this node in total.")]),t._v(" "),a("li",[a("strong",[t._v("Total Disk Space")]),t._v(": the total amount of disk space the node should be able to allocate automatically.")]),t._v(" "),a("li",[a("strong",[t._v("Disk Overallocate")]),t._v(": works the same way as memory overallocation.")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),a("p",[t._v("Don't forget to account for OS overhead and other software requirements on machines.")])]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("Daemon Port")]),t._v(": the port that the Daemon should listen on.")]),t._v(" "),a("li",[a("strong",[t._v("Daemon SFTP Port")]),t._v(": the port the Daemon sftp-server or standalone SFTP server should listen on.")])]),t._v(" "),a("h2",{attrs:{id:"install-the-daemon"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-the-daemon"}},[t._v("#")]),t._v(" Install the Daemon")]),t._v(" "),a("p",[t._v("At this point you'll need to have the Daemon installed on your machine. Check out the "),a("RouterLink",{attrs:{to:"/wings/installing.html"}},[t._v("documentation")]),t._v("\nfor more information, or try one of the community guides for "),a("RouterLink",{attrs:{to:"/community/installation-guides/wings/centos7.html"}},[t._v("CentOS")]),t._v(",\n"),a("RouterLink",{attrs:{to:"/community/installation-guides/wings/ubuntu1804.html"}},[t._v("Ubuntu")]),t._v(", or "),a("RouterLink",{attrs:{to:"/community/installation-guides/wings/debian9.html"}},[t._v("Debian")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"configuring-the-node"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#configuring-the-node"}},[t._v("#")]),t._v(" Configuring the Node")]),t._v(" "),a("p",[t._v("Go to the Node Configuration page")]),t._v(" "),a("p",[a("img",{attrs:{src:o(353),alt:""}})]),t._v(" "),a("p",[t._v("Copy and paste the config into the "),a("code",[t._v("config.yml")]),t._v(" file. (Default location is "),a("code",[t._v("/etc/pterodactyl/config.yml")]),t._v(")")]),t._v(" "),a("h3",{attrs:{id:"auto-deploy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-deploy"}},[t._v("#")]),t._v(" Auto-Deploy")]),t._v(" "),a("p",[t._v("This will generate a command to run on the node server to configure the daemon for you.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/20.a31cd600.js b/assets/js/20.2be5f73c.js similarity index 99% rename from assets/js/20.a31cd600.js rename to assets/js/20.2be5f73c.js index d4af1648..3a3d1bb6 100644 --- a/assets/js/20.a31cd600.js +++ b/assets/js/20.2be5f73c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{362:function(e,t,a){e.exports=a.p+"assets/img/daemon_configuration_example.7d1665c4.png"},392:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),s("p",[e._v("This documentation is for "),s("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),s("p",[e._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("This specific software is for Pterodactyl v0.7 and "),s("strong",[e._v("must not be used for Pterodactyl v1.0")]),e._v(". If you have installed 1.0 you should use "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" instead.")],1)]),e._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#supported-systems"}},[e._v("Supported Systems")])]),s("li",[s("a",{attrs:{href:"#system-requirements"}},[e._v("System Requirements")])]),s("li",[s("a",{attrs:{href:"#dependencies"}},[e._v("Dependencies")]),s("ul",[s("li",[s("a",{attrs:{href:"#installing-docker"}},[e._v("Installing Docker")])]),s("li",[s("a",{attrs:{href:"#installing-nodejs"}},[e._v("Installing Nodejs")])])])]),s("li",[s("a",{attrs:{href:"#installing-daemon-software"}},[e._v("Installing Daemon Software")])]),s("li",[s("a",{attrs:{href:"#configure-daemon"}},[e._v("Configure Daemon")])]),s("li",[s("a",{attrs:{href:"#starting-the-daemon"}},[e._v("Starting the Daemon")]),s("ul",[s("li",[s("a",{attrs:{href:"#daemonizing-using-systemd"}},[e._v("Daemonizing (using systemd)")])])])])])]),s("p"),e._v(" "),s("h2",{attrs:{id:"supported-systems"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#supported-systems"}},[e._v("#")]),e._v(" Supported Systems")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("Operating System")]),e._v(" "),s("th",[e._v("Version")]),e._v(" "),s("th",{staticStyle:{"text-align":"center"}},[e._v("Supported")]),e._v(" "),s("th",[e._v("Notes")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[s("strong",[e._v("Ubuntu")])]),e._v(" "),s("td",[e._v("18.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td",[e._v("Documentation written assuming Ubuntu 18.04 as the base OS.")])]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/ubuntu2004.html"}},[e._v("20.04")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("CentOS")])]),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/centos7.html"}},[e._v("7")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("⚠️")]),e._v(" "),s("td",[e._v("Extra repos are required")])]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/centos8.html"}},[e._v("8")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("Debian")])]),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/debian9.html"}},[e._v("9")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/debian10.html"}},[e._v("10")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")])])]),e._v(" "),s("h2",{attrs:{id:"system-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[e._v("#")]),e._v(" System Requirements")]),e._v(" "),s("p",[e._v("In order to run the Daemon you will need a system capable of running Docker containers. Most VPS and almost all\ndedicated servers should be capable of running Docker, but there are edge cases.")]),e._v(" "),s("p",[e._v("If your provider makes use of "),s("code",[e._v("Virtuozzo")]),e._v(", "),s("code",[e._v("OpenVZ")]),e._v(" (or "),s("code",[e._v("OVZ")]),e._v("), or "),s("code",[e._v("LXC")]),e._v(" then you will most likely be unable to\nrun the Daemon. If you are unsure what your host is using there are a couple of options. The easiest is to check\ntheir website, or reach out to their support team.")]),e._v(" "),s("p",[e._v("If you want to take a different approach, try using "),s("code",[e._v("lscpu")]),e._v(" and checking what the virtualization type listed is. An\nexample of this is shown below which shows my hypervisor running with full virtualization — this means it will\nsupport Docker without issues. If you see "),s("code",[e._v("KVM")]),e._v(" for the vendor, chances are you're fine as well.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("dane@daemon:~$ lscpu "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("grep")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v("'vendor\\|type'")]),e._v("\nHypervisor vendor: VMware\nVirtualization type: full\n")])])]),s("p",[e._v("If that doesn't work for some reason, or you're still unsure, you can also run the command below and as long as it\ndoesn't report "),s("code",[e._v("Xen")]),e._v(" or "),s("code",[e._v("LXC")]),e._v(" you're probably okay to continue.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("dane@daemon:~$ "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dmidecode -s system-manufacturer\nVMware, Inc.\n")])])]),s("h2",{attrs:{id:"dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),s("p",[e._v("Pterodactyl's Daemon requires the following dependencies be installed on your system in order for it to operate.")]),e._v(" "),s("ul",[s("li",[e._v("Docker")]),e._v(" "),s("li",[e._v("Nodejs ("),s("code",[e._v("v10")]),e._v(", "),s("code",[e._v("v12")]),e._v(", higher versions likely work, but are untested)")]),e._v(" "),s("li",[s("code",[e._v("node-gyp")])]),e._v(" "),s("li",[s("code",[e._v("tar")])]),e._v(" "),s("li",[s("code",[e._v("unzip")])]),e._v(" "),s("li",[s("code",[e._v("make")]),e._v(", "),s("code",[e._v("gcc")]),e._v(" ("),s("code",[e._v("gcc-c++")]),e._v(" on CentOS), "),s("code",[e._v("g++")])]),e._v(" "),s("li",[s("code",[e._v("python")])])]),e._v(" "),s("h3",{attrs:{id:"installing-docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-docker"}},[e._v("#")]),e._v(" Installing Docker")]),e._v(" "),s("p",[e._v("For a quick install of Docker CE, you can execute the command below:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sSL https://get.docker.com/ "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CHANNEL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("stable "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n")])])]),s("p",[e._v("If you would rather do a manual installation, please reference the official Docker documentation for how to install Docker CE on your server. Some quick links\nare listed below for commonly supported systems.")]),e._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),s("OutboundLink")],1)])]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("Check your Kernel")]),e._v(" "),s("p",[e._v("Please be aware that some hosts install a modified kernel that does not support important docker features. Please\ncheck your kernel by running "),s("code",[e._v("uname -r")]),e._v(". If your kernel ends in "),s("code",[e._v("-xxxx-grs-ipv6-64")]),e._v(" or "),s("code",[e._v("-xxxx-mod-std-ipv6-64")]),e._v(" you're\nprobably using a non-supported kernel. Check our "),s("RouterLink",{attrs:{to:"/daemon/0.6/kernel_modifications.html"}},[e._v("Kernel Modifications")]),e._v(" guide for details.")],1)]),e._v(" "),s("h4",{attrs:{id:"start-docker-on-boot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-docker-on-boot"}},[e._v("#")]),e._v(" Start Docker on Boot")]),e._v(" "),s("p",[e._v("If you are on an operating system with systemd (Ubuntu 16+, Debian 8+, CentOS 7+) run the command below to have Docker start when you boot your machine.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" docker\n")])])]),s("h4",{attrs:{id:"enabling-swap"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enabling-swap"}},[e._v("#")]),e._v(" Enabling Swap")]),e._v(" "),s("p",[e._v("On most systems, docker will be unable to setup swap space, you can check if this is the case by running "),s("code",[e._v("docker info")]),e._v(".\nIf it outputs "),s("code",[e._v("WARNING: No swap limit support")]),e._v(" near the bottom, this is the case. Enabling swap is completely optional,\nbut we recommended doing it if you will be hosting for others, and to prevent OOM errors.")]),e._v(" "),s("p",[e._v("To do so, open "),s("code",[e._v("/etc/default/grub")]),e._v(" as a root user, and find the line starting with "),s("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(". Make\nsure the line includes "),s("code",[e._v("swapaccount=1")]),e._v(".")]),e._v(" "),s("p",[e._v("After doing that, simply run "),s("code",[e._v("sudo update-grub")]),e._v(" followed by "),s("code",[e._v("sudo reboot")]),e._v(" to restart the server and have swap enabled.\nBelow is an example of what the line should look like, "),s("em",[e._v("do not copy this line verbatium, it often has additional\nOS specific parameters.")])]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"\n')])])]),s("h3",{attrs:{id:"installing-nodejs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-nodejs"}},[e._v("#")]),e._v(" Installing Nodejs")]),e._v(" "),s("p",[e._v("NodeJS is also super easy to install! Simply run the command below to make the package accessible to your system.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sL https://deb.nodesource.com/setup_10.x "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" -E "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" -\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" nodejs "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" gcc g++\n")])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Other OS Distributions")]),e._v(" "),s("p",[e._v("If you are using CentOS, "),s("a",{attrs:{href:"https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora",target:"_blank",rel:"noopener noreferrer"}},[e._v("please follow these instructions"),s("OutboundLink")],1),e._v(". Ubuntu and Debian users may also follow the "),s("a",{attrs:{href:"https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions",target:"_blank",rel:"noopener noreferrer"}},[e._v("official\ninstructions provided by Nodejs"),s("OutboundLink")],1),e._v(".")])]),e._v(" "),s("h2",{attrs:{id:"installing-daemon-software"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-daemon-software"}},[e._v("#")]),e._v(" Installing Daemon Software")]),e._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),s("p",[e._v("This documentation is for "),s("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),s("p",[e._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),s("p",[e._v("The first step for installing the daemon is to make sure we have the required directory structure setup. To do so,\nrun the commands below.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /srv/daemon /srv/daemon-data\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /srv/daemon\n")])])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("OVH/SYS Servers")]),e._v(" "),s("p",[e._v("If you are using a server provided by OVH or SoYouStart please be aware that your main drive space is probably allocated to\n"),s("code",[e._v("/home")]),e._v(", and not "),s("code",[e._v("/")]),e._v(" by default. Please consider using "),s("code",[e._v("/home/daemon-data")]),e._v(" for server data. This can be easily\nset when creating the node.")])]),e._v(" "),s("p",[e._v("The next step is to download the software and unpack the archive.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" -xzv\n")])])]),s("p",[e._v("Finally, we need to install the dependencies that allow the Daemon to run properly. This command will most likely\ntake a few minutes to run, please do not interrupt it.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --only"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production --no-audit --unsafe-perm\n")])])]),s("h2",{attrs:{id:"configure-daemon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-daemon"}},[e._v("#")]),e._v(" Configure Daemon")]),e._v(" "),s("p",[e._v("Once you have installed the daemon and required components, the next step is to create a node on your installed Panel\nOnce you have done that there will be a tab called Configuration when you view the node.")]),e._v(" "),s("p",[e._v("Simply copy and paste the code block and paste it into a file called "),s("code",[e._v("core.json")]),e._v(" in "),s("code",[e._v("/srv/daemon/config")]),e._v(" and save it.\nYou may also use the Auto-Deployment feature rather than manually creating the files.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(362),alt:""}})]),e._v(" "),s("h2",{attrs:{id:"starting-the-daemon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#starting-the-daemon"}},[e._v("#")]),e._v(" Starting the Daemon")]),e._v(" "),s("p",[e._v("To start your daemon simply move into the daemon directory and run the command below which will start the daemon in\nforeground mode. Once you are done, use "),s("code",[e._v("CTRL+C")]),e._v(" to terminate the process. Depending on your server's internet connection\npulling and starting the Daemon for the first time may take a few minutes.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" start\n")])])]),s("h3",{attrs:{id:"daemonizing-using-systemd"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#daemonizing-using-systemd"}},[e._v("#")]),e._v(" Daemonizing (using systemd)")]),e._v(" "),s("p",[e._v("Running Pterodactyl Daemon in the background is a simple task, just make sure that it runs without errors before doing\nthis. Place the contents below in a file called "),s("code",[e._v("wings.service")]),e._v(" in the "),s("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\n\n[Service]\nUser=root\n#Group=some_group\nWorkingDirectory=/srv/daemon\nLimitNOFILE=4096\nPIDFile=/var/run/wings/daemon.pid\nExecStart=/usr/bin/node /srv/daemon/src/index.js\nRestart=on-failure\nStartLimitInterval=600\n\n[Install]\nWantedBy=multi-user.target\n")])])]),s("p",[e._v("Then, run the commands below to reload systemd and start the daemon.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now wings\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{362:function(e,t,a){e.exports=a.p+"assets/img/daemon_configuration_example.7d1665c4.png"},394:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"installation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),s("p",[e._v("This documentation is for "),s("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),s("p",[e._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("This specific software is for Pterodactyl v0.7 and "),s("strong",[e._v("must not be used for Pterodactyl v1.0")]),e._v(". If you have installed 1.0 you should use "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" instead.")],1)]),e._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#supported-systems"}},[e._v("Supported Systems")])]),s("li",[s("a",{attrs:{href:"#system-requirements"}},[e._v("System Requirements")])]),s("li",[s("a",{attrs:{href:"#dependencies"}},[e._v("Dependencies")]),s("ul",[s("li",[s("a",{attrs:{href:"#installing-docker"}},[e._v("Installing Docker")])]),s("li",[s("a",{attrs:{href:"#installing-nodejs"}},[e._v("Installing Nodejs")])])])]),s("li",[s("a",{attrs:{href:"#installing-daemon-software"}},[e._v("Installing Daemon Software")])]),s("li",[s("a",{attrs:{href:"#configure-daemon"}},[e._v("Configure Daemon")])]),s("li",[s("a",{attrs:{href:"#starting-the-daemon"}},[e._v("Starting the Daemon")]),s("ul",[s("li",[s("a",{attrs:{href:"#daemonizing-using-systemd"}},[e._v("Daemonizing (using systemd)")])])])])])]),s("p"),e._v(" "),s("h2",{attrs:{id:"supported-systems"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#supported-systems"}},[e._v("#")]),e._v(" Supported Systems")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("Operating System")]),e._v(" "),s("th",[e._v("Version")]),e._v(" "),s("th",{staticStyle:{"text-align":"center"}},[e._v("Supported")]),e._v(" "),s("th",[e._v("Notes")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[s("strong",[e._v("Ubuntu")])]),e._v(" "),s("td",[e._v("18.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td",[e._v("Documentation written assuming Ubuntu 18.04 as the base OS.")])]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/ubuntu2004.html"}},[e._v("20.04")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("CentOS")])]),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/centos7.html"}},[e._v("7")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("⚠️")]),e._v(" "),s("td",[e._v("Extra repos are required")])]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/centos8.html"}},[e._v("8")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("Debian")])]),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/debian9.html"}},[e._v("9")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[s("RouterLink",{attrs:{to:"/community/installation-guides/daemon/debian10.html"}},[e._v("10")])],1),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")])])]),e._v(" "),s("h2",{attrs:{id:"system-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[e._v("#")]),e._v(" System Requirements")]),e._v(" "),s("p",[e._v("In order to run the Daemon you will need a system capable of running Docker containers. Most VPS and almost all\ndedicated servers should be capable of running Docker, but there are edge cases.")]),e._v(" "),s("p",[e._v("If your provider makes use of "),s("code",[e._v("Virtuozzo")]),e._v(", "),s("code",[e._v("OpenVZ")]),e._v(" (or "),s("code",[e._v("OVZ")]),e._v("), or "),s("code",[e._v("LXC")]),e._v(" then you will most likely be unable to\nrun the Daemon. If you are unsure what your host is using there are a couple of options. The easiest is to check\ntheir website, or reach out to their support team.")]),e._v(" "),s("p",[e._v("If you want to take a different approach, try using "),s("code",[e._v("lscpu")]),e._v(" and checking what the virtualization type listed is. An\nexample of this is shown below which shows my hypervisor running with full virtualization — this means it will\nsupport Docker without issues. If you see "),s("code",[e._v("KVM")]),e._v(" for the vendor, chances are you're fine as well.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("dane@daemon:~$ lscpu "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("grep")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v("'vendor\\|type'")]),e._v("\nHypervisor vendor: VMware\nVirtualization type: full\n")])])]),s("p",[e._v("If that doesn't work for some reason, or you're still unsure, you can also run the command below and as long as it\ndoesn't report "),s("code",[e._v("Xen")]),e._v(" or "),s("code",[e._v("LXC")]),e._v(" you're probably okay to continue.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("dane@daemon:~$ "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dmidecode -s system-manufacturer\nVMware, Inc.\n")])])]),s("h2",{attrs:{id:"dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),s("p",[e._v("Pterodactyl's Daemon requires the following dependencies be installed on your system in order for it to operate.")]),e._v(" "),s("ul",[s("li",[e._v("Docker")]),e._v(" "),s("li",[e._v("Nodejs ("),s("code",[e._v("v10")]),e._v(", "),s("code",[e._v("v12")]),e._v(", higher versions likely work, but are untested)")]),e._v(" "),s("li",[s("code",[e._v("node-gyp")])]),e._v(" "),s("li",[s("code",[e._v("tar")])]),e._v(" "),s("li",[s("code",[e._v("unzip")])]),e._v(" "),s("li",[s("code",[e._v("make")]),e._v(", "),s("code",[e._v("gcc")]),e._v(" ("),s("code",[e._v("gcc-c++")]),e._v(" on CentOS), "),s("code",[e._v("g++")])]),e._v(" "),s("li",[s("code",[e._v("python")])])]),e._v(" "),s("h3",{attrs:{id:"installing-docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-docker"}},[e._v("#")]),e._v(" Installing Docker")]),e._v(" "),s("p",[e._v("For a quick install of Docker CE, you can execute the command below:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sSL https://get.docker.com/ "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CHANNEL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("stable "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n")])])]),s("p",[e._v("If you would rather do a manual installation, please reference the official Docker documentation for how to install Docker CE on your server. Some quick links\nare listed below for commonly supported systems.")]),e._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),s("OutboundLink")],1)])]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("Check your Kernel")]),e._v(" "),s("p",[e._v("Please be aware that some hosts install a modified kernel that does not support important docker features. Please\ncheck your kernel by running "),s("code",[e._v("uname -r")]),e._v(". If your kernel ends in "),s("code",[e._v("-xxxx-grs-ipv6-64")]),e._v(" or "),s("code",[e._v("-xxxx-mod-std-ipv6-64")]),e._v(" you're\nprobably using a non-supported kernel. Check our "),s("RouterLink",{attrs:{to:"/daemon/0.6/kernel_modifications.html"}},[e._v("Kernel Modifications")]),e._v(" guide for details.")],1)]),e._v(" "),s("h4",{attrs:{id:"start-docker-on-boot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-docker-on-boot"}},[e._v("#")]),e._v(" Start Docker on Boot")]),e._v(" "),s("p",[e._v("If you are on an operating system with systemd (Ubuntu 16+, Debian 8+, CentOS 7+) run the command below to have Docker start when you boot your machine.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" docker\n")])])]),s("h4",{attrs:{id:"enabling-swap"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enabling-swap"}},[e._v("#")]),e._v(" Enabling Swap")]),e._v(" "),s("p",[e._v("On most systems, docker will be unable to setup swap space, you can check if this is the case by running "),s("code",[e._v("docker info")]),e._v(".\nIf it outputs "),s("code",[e._v("WARNING: No swap limit support")]),e._v(" near the bottom, this is the case. Enabling swap is completely optional,\nbut we recommended doing it if you will be hosting for others, and to prevent OOM errors.")]),e._v(" "),s("p",[e._v("To do so, open "),s("code",[e._v("/etc/default/grub")]),e._v(" as a root user, and find the line starting with "),s("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(". Make\nsure the line includes "),s("code",[e._v("swapaccount=1")]),e._v(".")]),e._v(" "),s("p",[e._v("After doing that, simply run "),s("code",[e._v("sudo update-grub")]),e._v(" followed by "),s("code",[e._v("sudo reboot")]),e._v(" to restart the server and have swap enabled.\nBelow is an example of what the line should look like, "),s("em",[e._v("do not copy this line verbatium, it often has additional\nOS specific parameters.")])]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"\n')])])]),s("h3",{attrs:{id:"installing-nodejs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-nodejs"}},[e._v("#")]),e._v(" Installing Nodejs")]),e._v(" "),s("p",[e._v("NodeJS is also super easy to install! Simply run the command below to make the package accessible to your system.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sL https://deb.nodesource.com/setup_10.x "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" -E "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" -\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" nodejs "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("make")]),e._v(" gcc g++\n")])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("Other OS Distributions")]),e._v(" "),s("p",[e._v("If you are using CentOS, "),s("a",{attrs:{href:"https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora",target:"_blank",rel:"noopener noreferrer"}},[e._v("please follow these instructions"),s("OutboundLink")],1),e._v(". Ubuntu and Debian users may also follow the "),s("a",{attrs:{href:"https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions",target:"_blank",rel:"noopener noreferrer"}},[e._v("official\ninstructions provided by Nodejs"),s("OutboundLink")],1),e._v(".")])]),e._v(" "),s("h2",{attrs:{id:"installing-daemon-software"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-daemon-software"}},[e._v("#")]),e._v(" Installing Daemon Software")]),e._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),s("p",[e._v("This documentation is for "),s("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),s("p",[e._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),s("p",[e._v("The first step for installing the daemon is to make sure we have the required directory structure setup. To do so,\nrun the commands below.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /srv/daemon /srv/daemon-data\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /srv/daemon\n")])])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("OVH/SYS Servers")]),e._v(" "),s("p",[e._v("If you are using a server provided by OVH or SoYouStart please be aware that your main drive space is probably allocated to\n"),s("code",[e._v("/home")]),e._v(", and not "),s("code",[e._v("/")]),e._v(" by default. Please consider using "),s("code",[e._v("/home/daemon-data")]),e._v(" for server data. This can be easily\nset when creating the node.")])]),e._v(" "),s("p",[e._v("The next step is to download the software and unpack the archive.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" -xzv\n")])])]),s("p",[e._v("Finally, we need to install the dependencies that allow the Daemon to run properly. This command will most likely\ntake a few minutes to run, please do not interrupt it.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --only"),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production --no-audit --unsafe-perm\n")])])]),s("h2",{attrs:{id:"configure-daemon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure-daemon"}},[e._v("#")]),e._v(" Configure Daemon")]),e._v(" "),s("p",[e._v("Once you have installed the daemon and required components, the next step is to create a node on your installed Panel\nOnce you have done that there will be a tab called Configuration when you view the node.")]),e._v(" "),s("p",[e._v("Simply copy and paste the code block and paste it into a file called "),s("code",[e._v("core.json")]),e._v(" in "),s("code",[e._v("/srv/daemon/config")]),e._v(" and save it.\nYou may also use the Auto-Deployment feature rather than manually creating the files.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(362),alt:""}})]),e._v(" "),s("h2",{attrs:{id:"starting-the-daemon"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#starting-the-daemon"}},[e._v("#")]),e._v(" Starting the Daemon")]),e._v(" "),s("p",[e._v("To start your daemon simply move into the daemon directory and run the command below which will start the daemon in\nforeground mode. Once you are done, use "),s("code",[e._v("CTRL+C")]),e._v(" to terminate the process. Depending on your server's internet connection\npulling and starting the Daemon for the first time may take a few minutes.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" start\n")])])]),s("h3",{attrs:{id:"daemonizing-using-systemd"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#daemonizing-using-systemd"}},[e._v("#")]),e._v(" Daemonizing (using systemd)")]),e._v(" "),s("p",[e._v("Running Pterodactyl Daemon in the background is a simple task, just make sure that it runs without errors before doing\nthis. Place the contents below in a file called "),s("code",[e._v("wings.service")]),e._v(" in the "),s("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\n\n[Service]\nUser=root\n#Group=some_group\nWorkingDirectory=/srv/daemon\nLimitNOFILE=4096\nPIDFile=/var/run/wings/daemon.pid\nExecStart=/usr/bin/node /srv/daemon/src/index.js\nRestart=on-failure\nStartLimitInterval=600\n\n[Install]\nWantedBy=multi-user.target\n")])])]),s("p",[e._v("Then, run the commands below to reload systemd and start the daemon.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now wings\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/32.7effab83.js b/assets/js/32.cc4a61a6.js similarity index 99% rename from assets/js/32.7effab83.js rename to assets/js/32.cc4a61a6.js index 0580c7c6..e0fe1495 100644 --- a/assets/js/32.7effab83.js +++ b/assets/js/32.cc4a61a6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{372:function(e,t,a){"use strict";a.r(t);var n=a(48),s=Object(n.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"creating-a-custom-docker-image"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-docker-image"}},[e._v("#")]),e._v(" Creating a Custom Docker Image")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#creating-the-dockerfile"}},[e._v("Creating the Dockerfile")])]),a("li",[a("a",{attrs:{href:"#installing-dependencies"}},[e._v("Installing Dependencies")])]),a("li",[a("a",{attrs:{href:"#creating-a-container-user"}},[e._v("Creating a Container User")])]),a("li",[a("a",{attrs:{href:"#work-directory-entrypoint"}},[e._v("Work Directory & Entrypoint")])]),a("li",[a("a",{attrs:{href:"#entrypoint-script"}},[e._v("Entrypoint Script")])]),a("li",[a("a",{attrs:{href:"#modifying-the-startup-command"}},[e._v("Modifying the Startup Command")])]),a("li",[a("a",{attrs:{href:"#run-the-command"}},[e._v("Run the Command")]),a("ul",[a("li",[a("a",{attrs:{href:"#note"}},[e._v("Note")])])])])])]),a("p"),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("This tutorial uses examples from our "),a("a",{attrs:{href:"https://github.com/pterodactyl/images/tree/java",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("core:java")]),a("OutboundLink")],1),e._v(" docker image,\nwhich can be found on GitHub. This tutorial also assumes some knowledge of "),a("a",{attrs:{href:"https://docker.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Docker"),a("OutboundLink")],1),e._v(", we suggest\nreading up if this all looks foreign to you.")])]),e._v(" "),a("h2",{attrs:{id:"creating-the-dockerfile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-dockerfile"}},[e._v("#")]),e._v(" Creating the Dockerfile")]),e._v(" "),a("p",[e._v("The most important part of this process is to create the "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("Dockerfile")]),a("OutboundLink")],1),e._v("\nthat will be used by the Daemon. Due to heavy restrictions on server containers, you must setup this file in a specific manner.")]),e._v(" "),a("p",[e._v("We try to make use of "),a("a",{attrs:{href:"https://alpinelinux.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alpine Linux"),a("OutboundLink")],1),e._v(" as much as possible for our images in order to keep their size down.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pterodactyl Core Dockerfile")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Environment: Java")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Minimum Panel Version: 0.6.0")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\nFROM openjdk:8-jdk-alpine\n\nMAINTAINER Pterodactyl Software, "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("support@pterodactyl.io"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n\nRUN apk "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" --no-cache --update "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" ca-certificates openssl "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" sqlite fontconfig "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" adduser --disabled-password --home /home/container container\n\n"),a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")]),e._v(" container\nENV "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("container "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("HOME")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/home/container\n\nWORKDIR /home/container\n\nCOPY ./entrypoint.sh /entrypoint.sh\n\nCMD "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),a("p",[e._v("Lets walk through the "),a("code",[e._v("Dockerfile")]),e._v(" above. The first thing you'll notice is the "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#from",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("FROM")]),a("OutboundLink")],1),e._v(" declaration.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("FROM openjdk:8-jdk-alpine\n")])])]),a("p",[e._v("In this case, we are using "),a("a",{attrs:{href:"https://github.com/docker-library/openjdk",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("openjdk:8-jdk-alpine")]),a("OutboundLink")],1),e._v(" which provides us with Java 8.")]),e._v(" "),a("h2",{attrs:{id:"installing-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-dependencies"}},[e._v("#")]),e._v(" Installing Dependencies")]),e._v(" "),a("p",[e._v("The next thing we do is install the dependencies we will need using Alpine's package manager: "),a("code",[e._v("apk")]),e._v(". You'll notice some\nspecific flags that keep the container small, including "),a("code",[e._v("--no-cache")]),e._v(", as well as everything being contained in a\nsingle "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#run",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("RUN")]),a("OutboundLink")],1),e._v(" block.")]),e._v(" "),a("h2",{attrs:{id:"creating-a-container-user"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-container-user"}},[e._v("#")]),e._v(" Creating a Container User")]),e._v(" "),a("p",[e._v("Within this "),a("code",[e._v("RUN")]),e._v(" block, you'll notice the "),a("code",[e._v("useradd")]),e._v(" command.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("adduser -D -h /home/container container\n")])])]),a("p",{staticClass:"callout warning"},[e._v("All Pterodactyl containers must have a user named `container`, and the user home **must** be `/home/container`.")]),e._v(" "),a("p",[e._v("After we create that user, we then define the default container "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#user",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("USER")]),a("OutboundLink")],1),e._v("\nas well as a few "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#env",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("ENV")]),a("OutboundLink")],1),e._v(" settings to be applied to things running\nwithin the container.")]),e._v(" "),a("h2",{attrs:{id:"work-directory-entrypoint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#work-directory-entrypoint"}},[e._v("#")]),e._v(" Work Directory & Entrypoint")]),e._v(" "),a("p",[e._v("One of the last things we do is define a "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#workdir",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("WORKDIR")]),a("OutboundLink")],1),e._v(" which\nis where everything else will be executed. The "),a("code",[e._v("WORKDIR")]),e._v(" must be set the "),a("code",[e._v("/home/container")]),e._v(".")]),e._v(" "),a("p",[e._v("Finally, we need to copy our "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#entrypoint",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("ENTRYPOINT")]),a("OutboundLink")],1),e._v(" script into\nthe docker image root. This is done using "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#copy",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("COPY")]),a("OutboundLink")],1),e._v(", after which\nwe define the command to be used when the container is started using "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#cmd",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("CMD")]),a("OutboundLink")],1),e._v(".\nThe "),a("code",[e._v("CMD")]),e._v(" line should always point to the "),a("code",[e._v("entrypoint.sh")]),e._v(" file.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("COPY ./entrypoint.sh /entrypoint.sh\nCMD "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),a("h2",{attrs:{id:"entrypoint-script"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entrypoint-script"}},[e._v("#")]),e._v(" Entrypoint Script")]),e._v(" "),a("p",[e._v("In order to complete this "),a("code",[e._v("Dockerfile")]),e._v(", we will need an "),a("code",[e._v("entrypoint.sh")]),e._v(" file which tells Docker how to run this\nspecific server type.")]),e._v(" "),a("p",[e._v("These entrypoint files are actually fairly abstracted, and the Daemon will pass in the start command as an environment\nvariable before processing it and then executing the command.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token shebang important"}},[e._v("#!/bin/bash")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /home/container\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Output Current Java Version")]),e._v("\njava -version "),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## only really needed to show what version is being used. Should be changed for different applications")]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Replace Startup Variables")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('":/home/container$ '),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v('"')]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run the Server")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v("\n")])])]),a("p",[e._v("The second command, "),a("code",[e._v("cd /home/container")]),e._v(", simply ensures we are in the correct directory when running the rest of the\ncommands. We then follow that up with "),a("code",[e._v("java -version")]),e._v(" to output this information to end-users, but that is not necessary.")]),e._v(" "),a("h2",{attrs:{id:"modifying-the-startup-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#modifying-the-startup-command"}},[e._v("#")]),e._v(" Modifying the Startup Command")]),e._v(" "),a("p",[e._v("The most significant part of this file is the "),a("code",[e._v("MODIFIED_STARTUP")]),e._v(" environment variable. What we are doing in this case\nis parsing the environment "),a("code",[e._v("STARTUP")]),e._v(" that is passed into the container by the Daemon. In most cases, this variable\nlooks something like the example below:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("STARTUP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}"')]),e._v("\n")])])]),a("div",{pre:!0},[a("p",[e._v("You'll notice some placeholders there, specifically "),a("code",[e._v("{{SERVER_MEMORY}}")]),e._v(" and "),a("code",[e._v("{{SERVER_JARFILE}}")]),e._v(". These both refer to\nother environment variables being passed in, and they look something like the example below.")])]),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_MEMORY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("1024")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_JARFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("server.jar\n")])])]),a("p",[e._v("There are a host of different environment variables, and they change depending on the specific service option\nconfiguration. However, that is not necessarily anything to worry about here.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n")])])]),a("div",{pre:!0},[a("p",[e._v("The command above simply evaluates the "),a("code",[e._v("STARTUP")]),e._v(" environment variable, and then replaces anything surrounded in\ncurly braces "),a("code",[e._v("{{EXAMPLE}}")]),e._v(" with a matching environment variable (such as "),a("code",[e._v("EXAMPLE")]),e._v("). Thus, our "),a("code",[e._v("STARTUP")]),e._v(" command:")])]),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("java -Xms128M -Xmx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_MEMORY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("M -jar "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_JARFILE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),a("p",[e._v("Becomes:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("java -Xms128M -Xmx1024M -jar server.jar\n")])])]),a("h2",{attrs:{id:"run-the-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#run-the-command"}},[e._v("#")]),e._v(" Run the Command")]),e._v(" "),a("p",[e._v("The last step is to run this modified startup command, which is done with the line "),a("code",[e._v("${MODIFIED_STARTUP}")]),e._v(".")]),e._v(" "),a("h3",{attrs:{id:"note"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#note"}},[e._v("#")]),e._v(" Note")]),e._v(" "),a("p",[e._v("Sometimes you may need to change the permissions of the "),a("code",[e._v("entrypoint.sh")]),e._v(" file, on linux you can do this by executing "),a("code",[e._v("chmod +x entrypoint.sh")]),e._v(" in the directory where the file is.")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{374:function(e,t,a){"use strict";a.r(t);var n=a(48),s=Object(n.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"creating-a-custom-docker-image"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-docker-image"}},[e._v("#")]),e._v(" Creating a Custom Docker Image")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#creating-the-dockerfile"}},[e._v("Creating the Dockerfile")])]),a("li",[a("a",{attrs:{href:"#installing-dependencies"}},[e._v("Installing Dependencies")])]),a("li",[a("a",{attrs:{href:"#creating-a-container-user"}},[e._v("Creating a Container User")])]),a("li",[a("a",{attrs:{href:"#work-directory-entrypoint"}},[e._v("Work Directory & Entrypoint")])]),a("li",[a("a",{attrs:{href:"#entrypoint-script"}},[e._v("Entrypoint Script")])]),a("li",[a("a",{attrs:{href:"#modifying-the-startup-command"}},[e._v("Modifying the Startup Command")])]),a("li",[a("a",{attrs:{href:"#run-the-command"}},[e._v("Run the Command")]),a("ul",[a("li",[a("a",{attrs:{href:"#note"}},[e._v("Note")])])])])])]),a("p"),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("This tutorial uses examples from our "),a("a",{attrs:{href:"https://github.com/pterodactyl/images/tree/java",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("core:java")]),a("OutboundLink")],1),e._v(" docker image,\nwhich can be found on GitHub. This tutorial also assumes some knowledge of "),a("a",{attrs:{href:"https://docker.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Docker"),a("OutboundLink")],1),e._v(", we suggest\nreading up if this all looks foreign to you.")])]),e._v(" "),a("h2",{attrs:{id:"creating-the-dockerfile"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-dockerfile"}},[e._v("#")]),e._v(" Creating the Dockerfile")]),e._v(" "),a("p",[e._v("The most important part of this process is to create the "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("Dockerfile")]),a("OutboundLink")],1),e._v("\nthat will be used by the Daemon. Due to heavy restrictions on server containers, you must setup this file in a specific manner.")]),e._v(" "),a("p",[e._v("We try to make use of "),a("a",{attrs:{href:"https://alpinelinux.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alpine Linux"),a("OutboundLink")],1),e._v(" as much as possible for our images in order to keep their size down.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pterodactyl Core Dockerfile")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Environment: Java")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Minimum Panel Version: 0.6.0")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\nFROM openjdk:8-jdk-alpine\n\nMAINTAINER Pterodactyl Software, "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("support@pterodactyl.io"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n\nRUN apk "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" --no-cache --update "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" ca-certificates openssl "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" sqlite fontconfig "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" adduser --disabled-password --home /home/container container\n\n"),a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")]),e._v(" container\nENV "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("container "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("HOME")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/home/container\n\nWORKDIR /home/container\n\nCOPY ./entrypoint.sh /entrypoint.sh\n\nCMD "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),a("p",[e._v("Lets walk through the "),a("code",[e._v("Dockerfile")]),e._v(" above. The first thing you'll notice is the "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#from",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("FROM")]),a("OutboundLink")],1),e._v(" declaration.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("FROM openjdk:8-jdk-alpine\n")])])]),a("p",[e._v("In this case, we are using "),a("a",{attrs:{href:"https://github.com/docker-library/openjdk",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("openjdk:8-jdk-alpine")]),a("OutboundLink")],1),e._v(" which provides us with Java 8.")]),e._v(" "),a("h2",{attrs:{id:"installing-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-dependencies"}},[e._v("#")]),e._v(" Installing Dependencies")]),e._v(" "),a("p",[e._v("The next thing we do is install the dependencies we will need using Alpine's package manager: "),a("code",[e._v("apk")]),e._v(". You'll notice some\nspecific flags that keep the container small, including "),a("code",[e._v("--no-cache")]),e._v(", as well as everything being contained in a\nsingle "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#run",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("RUN")]),a("OutboundLink")],1),e._v(" block.")]),e._v(" "),a("h2",{attrs:{id:"creating-a-container-user"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-container-user"}},[e._v("#")]),e._v(" Creating a Container User")]),e._v(" "),a("p",[e._v("Within this "),a("code",[e._v("RUN")]),e._v(" block, you'll notice the "),a("code",[e._v("useradd")]),e._v(" command.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("adduser -D -h /home/container container\n")])])]),a("p",{staticClass:"callout warning"},[e._v("All Pterodactyl containers must have a user named `container`, and the user home **must** be `/home/container`.")]),e._v(" "),a("p",[e._v("After we create that user, we then define the default container "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#user",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("USER")]),a("OutboundLink")],1),e._v("\nas well as a few "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#env",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("ENV")]),a("OutboundLink")],1),e._v(" settings to be applied to things running\nwithin the container.")]),e._v(" "),a("h2",{attrs:{id:"work-directory-entrypoint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#work-directory-entrypoint"}},[e._v("#")]),e._v(" Work Directory & Entrypoint")]),e._v(" "),a("p",[e._v("One of the last things we do is define a "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#workdir",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("WORKDIR")]),a("OutboundLink")],1),e._v(" which\nis where everything else will be executed. The "),a("code",[e._v("WORKDIR")]),e._v(" must be set the "),a("code",[e._v("/home/container")]),e._v(".")]),e._v(" "),a("p",[e._v("Finally, we need to copy our "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#entrypoint",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("ENTRYPOINT")]),a("OutboundLink")],1),e._v(" script into\nthe docker image root. This is done using "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#copy",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("COPY")]),a("OutboundLink")],1),e._v(", after which\nwe define the command to be used when the container is started using "),a("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#cmd",target:"_blank",rel:"noopener noreferrer"}},[a("code",[e._v("CMD")]),a("OutboundLink")],1),e._v(".\nThe "),a("code",[e._v("CMD")]),e._v(" line should always point to the "),a("code",[e._v("entrypoint.sh")]),e._v(" file.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("COPY ./entrypoint.sh /entrypoint.sh\nCMD "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),a("h2",{attrs:{id:"entrypoint-script"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entrypoint-script"}},[e._v("#")]),e._v(" Entrypoint Script")]),e._v(" "),a("p",[e._v("In order to complete this "),a("code",[e._v("Dockerfile")]),e._v(", we will need an "),a("code",[e._v("entrypoint.sh")]),e._v(" file which tells Docker how to run this\nspecific server type.")]),e._v(" "),a("p",[e._v("These entrypoint files are actually fairly abstracted, and the Daemon will pass in the start command as an environment\nvariable before processing it and then executing the command.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token shebang important"}},[e._v("#!/bin/bash")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /home/container\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Output Current Java Version")]),e._v("\njava -version "),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## only really needed to show what version is being used. Should be changed for different applications")]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Replace Startup Variables")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('":/home/container$ '),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v('"')]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run the Server")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v("\n")])])]),a("p",[e._v("The second command, "),a("code",[e._v("cd /home/container")]),e._v(", simply ensures we are in the correct directory when running the rest of the\ncommands. We then follow that up with "),a("code",[e._v("java -version")]),e._v(" to output this information to end-users, but that is not necessary.")]),e._v(" "),a("h2",{attrs:{id:"modifying-the-startup-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#modifying-the-startup-command"}},[e._v("#")]),e._v(" Modifying the Startup Command")]),e._v(" "),a("p",[e._v("The most significant part of this file is the "),a("code",[e._v("MODIFIED_STARTUP")]),e._v(" environment variable. What we are doing in this case\nis parsing the environment "),a("code",[e._v("STARTUP")]),e._v(" that is passed into the container by the Daemon. In most cases, this variable\nlooks something like the example below:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("STARTUP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}"')]),e._v("\n")])])]),a("div",{pre:!0},[a("p",[e._v("You'll notice some placeholders there, specifically "),a("code",[e._v("{{SERVER_MEMORY}}")]),e._v(" and "),a("code",[e._v("{{SERVER_JARFILE}}")]),e._v(". These both refer to\nother environment variables being passed in, and they look something like the example below.")])]),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_MEMORY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("1024")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_JARFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("server.jar\n")])])]),a("p",[e._v("There are a host of different environment variables, and they change depending on the specific service option\nconfiguration. However, that is not necessarily anything to worry about here.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" -e "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n")])])]),a("div",{pre:!0},[a("p",[e._v("The command above simply evaluates the "),a("code",[e._v("STARTUP")]),e._v(" environment variable, and then replaces anything surrounded in\ncurly braces "),a("code",[e._v("{{EXAMPLE}}")]),e._v(" with a matching environment variable (such as "),a("code",[e._v("EXAMPLE")]),e._v("). Thus, our "),a("code",[e._v("STARTUP")]),e._v(" command:")])]),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("java -Xms128M -Xmx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_MEMORY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("M -jar "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_JARFILE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),a("p",[e._v("Becomes:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("java -Xms128M -Xmx1024M -jar server.jar\n")])])]),a("h2",{attrs:{id:"run-the-command"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#run-the-command"}},[e._v("#")]),e._v(" Run the Command")]),e._v(" "),a("p",[e._v("The last step is to run this modified startup command, which is done with the line "),a("code",[e._v("${MODIFIED_STARTUP}")]),e._v(".")]),e._v(" "),a("h3",{attrs:{id:"note"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#note"}},[e._v("#")]),e._v(" Note")]),e._v(" "),a("p",[e._v("Sometimes you may need to change the permissions of the "),a("code",[e._v("entrypoint.sh")]),e._v(" file, on linux you can do this by executing "),a("code",[e._v("chmod +x entrypoint.sh")]),e._v(" in the directory where the file is.")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/33.5cb72a20.js b/assets/js/33.76f78169.js similarity index 97% rename from assets/js/33.5cb72a20.js rename to assets/js/33.76f78169.js index c07807fc..36d9b04d 100644 --- a/assets/js/33.5cb72a20.js +++ b/assets/js/33.76f78169.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{374:function(s,t,n){"use strict";n.r(t);var e=n(48),a=Object(e.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"building-panel-assets"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#building-panel-assets"}},[s._v("#")]),s._v(" Building Panel Assets")]),s._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("Do "),n("strong",[s._v("not")]),s._v(" run the following steps on your production nodes.")])]),s._v(" "),n("p",[s._v("Instructions on how to build the panel are also available in the "),n("a",{attrs:{href:"https://github.com/pterodactyl/panel/blob/develop/BUILDING.md",target:"_blank",rel:"noopener noreferrer"}},[s._v("BUILDING.md"),n("OutboundLink")],1),s._v(" file.")]),s._v(" "),n("p",[s._v("The frontend of the Panel is built with React. Any changes to the source files require to recompile it.\nThis also applies to style sheets. The following sections explain how to do so.")]),s._v(" "),n("h2",{attrs:{id:"install-dependencies"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies"}},[s._v("#")]),s._v(" Install Dependencies")]),s._v(" "),n("p",[s._v("The following commands will install the necessary dependencies for building the Panel assets.")]),s._v(" "),n("p",[s._v("The build tools require NodeJS, yarn is used as the package manager.")]),s._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Ubuntu/Debian")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sL https://deb.nodesource.com/setup_14.x "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" -E "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nodejs\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sL https://rpm.nodesource.com/setup_14.x "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" -E "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nodejs "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 7")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" dnf "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nodejs "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 8")]),s._v("\n")])])]),n("p",[s._v("Install required javascript packages.")]),s._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" i -g "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install Yarn")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Installs panel build dependencies")]),s._v("\n")])])]),n("h2",{attrs:{id:"build-panel-assets"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#build-panel-assets"}},[s._v("#")]),s._v(" Build Panel Assets")]),s._v(" "),n("p",[s._v("The following command will rebuild the Panel frontend.")]),s._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" build:production "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Build panel")]),s._v("\n")])])]),n("p",[s._v("You can use command "),n("code",[s._v("yarn run watch")]),s._v(" to view the progress of your changes in almost real-time for easier development. Once you're satisfied with your changes build the panel using the previously mentioned "),n("code",[s._v("yarn build:production")]),s._v(" command.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{372:function(s,t,n){"use strict";n.r(t);var e=n(48),a=Object(e.a)({},(function(){var s=this,t=s.$createElement,n=s._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"building-panel-assets"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#building-panel-assets"}},[s._v("#")]),s._v(" Building Panel Assets")]),s._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),n("p",[s._v("Do "),n("strong",[s._v("not")]),s._v(" run the following steps on your production nodes.")])]),s._v(" "),n("p",[s._v("Instructions on how to build the panel are also available in the "),n("a",{attrs:{href:"https://github.com/pterodactyl/panel/blob/develop/BUILDING.md",target:"_blank",rel:"noopener noreferrer"}},[s._v("BUILDING.md"),n("OutboundLink")],1),s._v(" file.")]),s._v(" "),n("p",[s._v("The frontend of the Panel is built with React. Any changes to the source files require to recompile it.\nThis also applies to style sheets. The following sections explain how to do so.")]),s._v(" "),n("h2",{attrs:{id:"install-dependencies"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies"}},[s._v("#")]),s._v(" Install Dependencies")]),s._v(" "),n("p",[s._v("The following commands will install the necessary dependencies for building the Panel assets.")]),s._v(" "),n("p",[s._v("The build tools require NodeJS, yarn is used as the package manager.")]),s._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Ubuntu/Debian")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sL https://deb.nodesource.com/setup_14.x "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" -E "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nodejs\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sL https://rpm.nodesource.com/setup_14.x "),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" -E "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nodejs "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 7")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" dnf "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nodejs "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 8")]),s._v("\n")])])]),n("p",[s._v("Install required javascript packages.")]),s._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("npm")]),s._v(" i -g "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install Yarn")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Installs panel build dependencies")]),s._v("\n")])])]),n("h2",{attrs:{id:"build-panel-assets"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#build-panel-assets"}},[s._v("#")]),s._v(" Build Panel Assets")]),s._v(" "),n("p",[s._v("The following command will rebuild the Panel frontend.")]),s._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" build:production "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Build panel")]),s._v("\n")])])]),n("p",[s._v("You can use command "),n("code",[s._v("yarn run watch")]),s._v(" to view the progress of your changes in almost real-time for easier development. Once you're satisfied with your changes build the panel using the previously mentioned "),n("code",[s._v("yarn build:production")]),s._v(" command.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/34.f044669f.js b/assets/js/34.ace9f1ce.js similarity index 97% rename from assets/js/34.f044669f.js rename to assets/js/34.ace9f1ce.js index 17017d7d..b8151b96 100644 --- a/assets/js/34.f044669f.js +++ b/assets/js/34.ace9f1ce.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{375:function(t,e,s){"use strict";s.r(e);var a=s(48),i=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"building-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#building-wings"}},[t._v("#")]),t._v(" Building Wings")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("Do "),s("strong",[t._v("not")]),t._v(" run the following steps on your production nodes.")])]),t._v(" "),s("p",[t._v("Wings is written in Go. This makes it very easy to modify and compile it on your own, and distribute your own binaries.\nThis guide will cover the steps necessary to build it yourself.")]),t._v(" "),s("p",[t._v("It will not, however, explain where to look for certain aspects of Wings and which changes are necessary to achieve specific results. Knowledge of the Go language is required if you want to modify it.")]),t._v(" "),s("p",[t._v("Building Go programs is very easy, and the same also applies to Wings. Go is cross-platform, but Wings only supports Linux at the moment. The easiest way to compile it for Linux is to run the commands on a Linux machine.")]),t._v(" "),s("h2",{attrs:{id:"build-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-requirements"}},[t._v("#")]),t._v(" Build Requirements")]),t._v(" "),s("p",[t._v("An up to date version of Go is required to compile Wings. The minimum version can be found at the top of the "),s("a",{attrs:{href:"https://github.com/pterodactyl/wings/blob/develop/go.mod",target:"_blank",rel:"noopener noreferrer"}},[t._v("go.mod"),s("OutboundLink")],1),t._v(" file. See the "),s("a",{attrs:{href:"https://golang.org/doc/install",target:"_blank",rel:"noopener noreferrer"}},[t._v("official instructions"),s("OutboundLink")],1),t._v(" for help with installing Go.")]),t._v(" "),s("h2",{attrs:{id:"building"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#building"}},[t._v("#")]),t._v(" Building")]),t._v(" "),s("p",[t._v("Execute the following command in your local clone of the repository to compile Wings into a binary.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("go build\n")])])]),s("p",[t._v("You should now have a "),s("code",[t._v("wings")]),t._v(" binary file in your wings directory.")]),t._v(" "),s("h2",{attrs:{id:"install-the-new-binary"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-the-new-binary"}},[t._v("#")]),t._v(" Install the new binary")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Root required")]),t._v(" "),s("p",[t._v("Some the following commands require root permissions. Prepend them with "),s("code",[t._v("sudo")]),t._v(" if you are not logged in as root.")])]),t._v(" "),s("ol",[s("li",[t._v("Backup the current installation of wings")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mv")]),t._v(" /usr/local/bin/wings /usr/local/bin/wings-backup\n")])])]),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Place the new binary in "),s("code",[t._v("/usr/local/bin")])])]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("cp ./wings /usr/local/bin\n")])])]),s("ol",{attrs:{start:"3"}},[s("li",[t._v("Restart wings")])]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("systemctl restart wings\n")])])]),s("h2",{attrs:{id:"troubleshooting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[t._v("#")]),t._v(" Troubleshooting")]),t._v(" "),s("p",[t._v("If the wings service does not start properly, you can try to start Wings in a console window.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("wings --debug\n")])])]),s("p",[t._v("Remember to stop the system service before, and re-enable it afterwards.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("systemctl stop wings\n\nsystemctl start wings\n")])])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{373:function(t,e,s){"use strict";s.r(e);var a=s(48),i=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"building-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#building-wings"}},[t._v("#")]),t._v(" Building Wings")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("Do "),s("strong",[t._v("not")]),t._v(" run the following steps on your production nodes.")])]),t._v(" "),s("p",[t._v("Wings is written in Go. This makes it very easy to modify and compile it on your own, and distribute your own binaries.\nThis guide will cover the steps necessary to build it yourself.")]),t._v(" "),s("p",[t._v("It will not, however, explain where to look for certain aspects of Wings and which changes are necessary to achieve specific results. Knowledge of the Go language is required if you want to modify it.")]),t._v(" "),s("p",[t._v("Building Go programs is very easy, and the same also applies to Wings. Go is cross-platform, but Wings only supports Linux at the moment. The easiest way to compile it for Linux is to run the commands on a Linux machine.")]),t._v(" "),s("h2",{attrs:{id:"build-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#build-requirements"}},[t._v("#")]),t._v(" Build Requirements")]),t._v(" "),s("p",[t._v("An up to date version of Go is required to compile Wings. The minimum version can be found at the top of the "),s("a",{attrs:{href:"https://github.com/pterodactyl/wings/blob/develop/go.mod",target:"_blank",rel:"noopener noreferrer"}},[t._v("go.mod"),s("OutboundLink")],1),t._v(" file. See the "),s("a",{attrs:{href:"https://golang.org/doc/install",target:"_blank",rel:"noopener noreferrer"}},[t._v("official instructions"),s("OutboundLink")],1),t._v(" for help with installing Go.")]),t._v(" "),s("h2",{attrs:{id:"building"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#building"}},[t._v("#")]),t._v(" Building")]),t._v(" "),s("p",[t._v("Execute the following command in your local clone of the repository to compile Wings into a binary.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("go build\n")])])]),s("p",[t._v("You should now have a "),s("code",[t._v("wings")]),t._v(" binary file in your wings directory.")]),t._v(" "),s("h2",{attrs:{id:"install-the-new-binary"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-the-new-binary"}},[t._v("#")]),t._v(" Install the new binary")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Root required")]),t._v(" "),s("p",[t._v("Some the following commands require root permissions. Prepend them with "),s("code",[t._v("sudo")]),t._v(" if you are not logged in as root.")])]),t._v(" "),s("ol",[s("li",[t._v("Backup the current installation of wings")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mv")]),t._v(" /usr/local/bin/wings /usr/local/bin/wings-backup\n")])])]),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Place the new binary in "),s("code",[t._v("/usr/local/bin")])])]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("cp ./wings /usr/local/bin\n")])])]),s("ol",{attrs:{start:"3"}},[s("li",[t._v("Restart wings")])]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("systemctl restart wings\n")])])]),s("h2",{attrs:{id:"troubleshooting"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[t._v("#")]),t._v(" Troubleshooting")]),t._v(" "),s("p",[t._v("If the wings service does not start properly, you can try to start Wings in a console window.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("wings --debug\n")])])]),s("p",[t._v("Remember to stop the system service before, and re-enable it afterwards.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("systemctl stop wings\n\nsystemctl start wings\n")])])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/38.e385c788.js b/assets/js/38.b955d4bc.js similarity index 99% rename from assets/js/38.e385c788.js rename to assets/js/38.b955d4bc.js index 3c660902..9052c7c3 100644 --- a/assets/js/38.e385c788.js +++ b/assets/js/38.b955d4bc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{380:function(t,a,s){"use strict";s.r(a);var e=s(48),r=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"debian-9"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#debian-9"}},[t._v("#")]),t._v(" Debian 9")]),t._v(" "),s("p",[t._v("In this guide we will install Pterodactyl v1.x — including all of it's dependencies — and configure our webserver to serve it using SSL.")]),t._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#install-requirements"}},[t._v("Install Requirements")]),s("ul",[s("li",[s("a",{attrs:{href:"#mariadb"}},[t._v("MariaDB")])]),s("li",[s("a",{attrs:{href:"#php-7-4"}},[t._v("PHP 7.4")])]),s("li",[s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),s("li",[s("a",{attrs:{href:"#redis"}},[t._v("Redis")])]),s("li",[s("a",{attrs:{href:"#additional-utilities"}},[t._v("Additional Utilities")])])])]),s("li",[s("a",{attrs:{href:"#server-configuration"}},[t._v("Server Configuration")]),s("ul",[s("li",[s("a",{attrs:{href:"#configuring-mariadb"}},[t._v("Configuring MariaDB")])]),s("li",[s("a",{attrs:{href:"#setup-php"}},[t._v("Setup PHP")])]),s("li",[s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),s("li",[s("a",{attrs:{href:"#redis-setup"}},[t._v("Redis Setup")])])])]),s("li",[s("a",{attrs:{href:"#installing-the-panel"}},[t._v("Installing the Panel")])])])]),s("p"),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("This guide is based off the "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("official installation documentation")]),t._v(" but is tailored specifically for Debian 9.")],1)]),t._v(" "),s("h2",{attrs:{id:"install-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-requirements"}},[t._v("#")]),t._v(" Install Requirements")]),t._v(" "),s("p",[t._v("We will first begin by installing all of Pterodactyl's "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#dependencies"}},[t._v("required")]),t._v(" dependencies.")],1),t._v(" "),s("h3",{attrs:{id:"mariadb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mariadb"}},[t._v("#")]),t._v(" MariaDB")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install the MariaDB repo for debian")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y software-properties-common dirmngr\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("bash")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install MariaDB")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y mariadb-common mariadb-server mariadb-client\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Start maraidb")]),t._v("\nsystemctl start mariadb\nsystemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mariadb\n")])])]),s("h3",{attrs:{id:"php-7-4"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-7-4"}},[t._v("#")]),t._v(" PHP 7.4")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install the PHP 7.4 repo for debian")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y ca-certificates apt-transport-https\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wget")]),t._v(" -q https://packages.sury.org/php/apt.gpg -O- "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" apt-key "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deb https://packages.sury.org/php/ stretch main"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("tee")]),t._v(" /etc/apt/sources.list.d/php.list\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install PHP 7.4")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y php7.4 php7.4-"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"nginx"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y nginx\n")])])]),s("h3",{attrs:{id:"redis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redis"}},[t._v("#")]),t._v(" Redis")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y redis-server\n\nsystemctl start redis-server\nsystemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" redis-server\n")])])]),s("h3",{attrs:{id:"additional-utilities"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#additional-utilities"}},[t._v("#")]),t._v(" Additional Utilities")]),t._v(" "),s("h4",{attrs:{id:"certbot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#certbot"}},[t._v("#")]),t._v(" Certbot")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y certbot "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v("\n")])])]),s("h4",{attrs:{id:"composer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#composer"}},[t._v("#")]),t._v(" Composer")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://getcomposer.org/installer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" php -- --install-dir"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/usr/local/bin --filename"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("composer\n")])])]),s("h2",{attrs:{id:"server-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#server-configuration"}},[t._v("#")]),t._v(" Server Configuration")]),t._v(" "),s("p",[t._v("This following section covers the configuration of parts of the server to run the panel.")]),t._v(" "),s("h3",{attrs:{id:"configuring-mariadb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuring-mariadb"}},[t._v("#")]),t._v(" Configuring MariaDB")]),t._v(" "),s("p",[t._v("The fastest way to set up mariadb is to use the "),s("code",[t._v("mysql_secure_installation")]),t._v(" command and follow prompts")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("mysql_secure_installation\n")])])]),s("p",[t._v("The following are safe defaults.")]),t._v(" "),s("p",[t._v("Change to your own secure password"),s("br"),t._v(" "),s("code",[t._v("Set root password? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Get rid of users that could access the db by default"),s("br"),t._v(" "),s("code",[t._v("Remove anonymous users? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Keep root off the external interfaces"),s("br"),t._v(" "),s("code",[t._v("Disallow root login remotely? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Extra databases that aren't needed"),s("br"),t._v(" "),s("code",[t._v("Remove test database and access to it? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Clears and sets all the changes made"),s("br"),t._v(" "),s("code",[t._v("Reload privilege tables now? [Y/n] Y")])]),t._v(" "),s("p",[t._v("All done! If you've completed all of the above steps, your MariaDB installation should now be secure.")]),t._v(" "),s("h4",{attrs:{id:"adding-mariadb-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-mariadb-user"}},[t._v("#")]),t._v(" Adding MariaDB user")]),t._v(" "),s("p",[t._v("To add your first user to the database, see our tutorial on "),s("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[t._v("setting up MySQL")]),t._v(".")],1),t._v(" "),s("h3",{attrs:{id:"setup-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-php"}},[t._v("#")]),t._v(" Setup PHP")]),t._v(" "),s("p",[t._v("The default php-fpm configuration is fine to use and can be started and then enabled on the system using the\ncommands below.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" php7.4-fpm\nsystemctl start php7.4-fpm\n")])])]),s("h3",{attrs:{id:"nginx-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx-2"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),s("p",[t._v("Please check our "),s("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("tutorial")]),t._v(" on generating SSL certificates for more information.")],1),t._v(" "),s("h4",{attrs:{id:"ssl-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ssl-configuration"}},[t._v("#")]),t._v(" SSL Configuration")]),t._v(" "),s("div",{staticClass:"language-conf extra-class"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('server_tokens off;\n\nserver {\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.php;\n\n access_log /var/log/nginx/pterodactyl.app-access.log;\n error_log /var/log/nginx/pterodactyl.app-error.log error;\n\n # allow larger file uploads and longer script runtimes\n client_max_body_size 100m;\n client_body_timeout 120s;\n\n sendfile off;\n\n # SSL Configuration\n ssl_certificate /etc/letsencrypt/live//fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live//privkey.pem;\n ssl_session_cache shared:SSL:10m;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";\n ssl_prefer_server_ciphers on;\n\n # See https://hstspreload.org/ before uncommenting the line below.\n # add_header Strict-Transport-Security "max-age=15768000; preload;";\n add_header X-Content-Type-Options nosniff;\n add_header X-XSS-Protection "1; mode=block";\n add_header X-Robots-Tag none;\n add_header Content-Security-Policy "frame-ancestors \'self\'";\n add_header X-Frame-Options DENY;\n add_header Referrer-Policy same-origin;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n include fastcgi_params;\n fastcgi_param PHP_VALUE "upload_max_filesize = 100M \\n post_max_size=100M";\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n fastcgi_param HTTP_PROXY "";\n fastcgi_intercept_errors off;\n fastcgi_buffer_size 16k;\n fastcgi_buffers 4 16k;\n fastcgi_connect_timeout 300;\n fastcgi_send_timeout 300;\n fastcgi_read_timeout 300;\n include /etc/nginx/fastcgi_params;\n }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),s("h3",{attrs:{id:"redis-setup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redis-setup"}},[t._v("#")]),t._v(" Redis Setup")]),t._v(" "),s("p",[t._v("The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into\n"),s("a",{attrs:{href:"https://community.pivotal.io/s/article/How-to-setup-and-run-multiple-Redis-server-instances-on-a-Linux-host",target:"_blank",rel:"noopener noreferrer"}},[t._v("running another Redis instance"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"installing-the-panel"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-panel"}},[t._v("#")]),t._v(" Installing the Panel")]),t._v(" "),s("p",[t._v("Excellent, we now have all of the required dependencies installed and configured. From here, follow the "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#download-files"}},[t._v("official Panel installation documentation")]),t._v(".")],1)])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{381:function(t,a,s){"use strict";s.r(a);var e=s(48),r=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"debian-9"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#debian-9"}},[t._v("#")]),t._v(" Debian 9")]),t._v(" "),s("p",[t._v("In this guide we will install Pterodactyl v1.x — including all of it's dependencies — and configure our webserver to serve it using SSL.")]),t._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#install-requirements"}},[t._v("Install Requirements")]),s("ul",[s("li",[s("a",{attrs:{href:"#mariadb"}},[t._v("MariaDB")])]),s("li",[s("a",{attrs:{href:"#php-7-4"}},[t._v("PHP 7.4")])]),s("li",[s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),s("li",[s("a",{attrs:{href:"#redis"}},[t._v("Redis")])]),s("li",[s("a",{attrs:{href:"#additional-utilities"}},[t._v("Additional Utilities")])])])]),s("li",[s("a",{attrs:{href:"#server-configuration"}},[t._v("Server Configuration")]),s("ul",[s("li",[s("a",{attrs:{href:"#configuring-mariadb"}},[t._v("Configuring MariaDB")])]),s("li",[s("a",{attrs:{href:"#setup-php"}},[t._v("Setup PHP")])]),s("li",[s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),s("li",[s("a",{attrs:{href:"#redis-setup"}},[t._v("Redis Setup")])])])]),s("li",[s("a",{attrs:{href:"#installing-the-panel"}},[t._v("Installing the Panel")])])])]),s("p"),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("This guide is based off the "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("official installation documentation")]),t._v(" but is tailored specifically for Debian 9.")],1)]),t._v(" "),s("h2",{attrs:{id:"install-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-requirements"}},[t._v("#")]),t._v(" Install Requirements")]),t._v(" "),s("p",[t._v("We will first begin by installing all of Pterodactyl's "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#dependencies"}},[t._v("required")]),t._v(" dependencies.")],1),t._v(" "),s("h3",{attrs:{id:"mariadb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mariadb"}},[t._v("#")]),t._v(" MariaDB")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install the MariaDB repo for debian")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y software-properties-common dirmngr\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("bash")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install MariaDB")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y mariadb-common mariadb-server mariadb-client\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Start maraidb")]),t._v("\nsystemctl start mariadb\nsystemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mariadb\n")])])]),s("h3",{attrs:{id:"php-7-4"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-7-4"}},[t._v("#")]),t._v(" PHP 7.4")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install the PHP 7.4 repo for debian")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y ca-certificates apt-transport-https\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wget")]),t._v(" -q https://packages.sury.org/php/apt.gpg -O- "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" apt-key "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deb https://packages.sury.org/php/ stretch main"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("tee")]),t._v(" /etc/apt/sources.list.d/php.list\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install PHP 7.4")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y php7.4 php7.4-"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"nginx"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y nginx\n")])])]),s("h3",{attrs:{id:"redis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redis"}},[t._v("#")]),t._v(" Redis")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y redis-server\n\nsystemctl start redis-server\nsystemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" redis-server\n")])])]),s("h3",{attrs:{id:"additional-utilities"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#additional-utilities"}},[t._v("#")]),t._v(" Additional Utilities")]),t._v(" "),s("h4",{attrs:{id:"certbot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#certbot"}},[t._v("#")]),t._v(" Certbot")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y certbot "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v("\n")])])]),s("h4",{attrs:{id:"composer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#composer"}},[t._v("#")]),t._v(" Composer")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://getcomposer.org/installer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" php -- --install-dir"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/usr/local/bin --filename"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("composer\n")])])]),s("h2",{attrs:{id:"server-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#server-configuration"}},[t._v("#")]),t._v(" Server Configuration")]),t._v(" "),s("p",[t._v("This following section covers the configuration of parts of the server to run the panel.")]),t._v(" "),s("h3",{attrs:{id:"configuring-mariadb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuring-mariadb"}},[t._v("#")]),t._v(" Configuring MariaDB")]),t._v(" "),s("p",[t._v("The fastest way to set up mariadb is to use the "),s("code",[t._v("mysql_secure_installation")]),t._v(" command and follow prompts")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("mysql_secure_installation\n")])])]),s("p",[t._v("The following are safe defaults.")]),t._v(" "),s("p",[t._v("Change to your own secure password"),s("br"),t._v(" "),s("code",[t._v("Set root password? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Get rid of users that could access the db by default"),s("br"),t._v(" "),s("code",[t._v("Remove anonymous users? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Keep root off the external interfaces"),s("br"),t._v(" "),s("code",[t._v("Disallow root login remotely? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Extra databases that aren't needed"),s("br"),t._v(" "),s("code",[t._v("Remove test database and access to it? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Clears and sets all the changes made"),s("br"),t._v(" "),s("code",[t._v("Reload privilege tables now? [Y/n] Y")])]),t._v(" "),s("p",[t._v("All done! If you've completed all of the above steps, your MariaDB installation should now be secure.")]),t._v(" "),s("h4",{attrs:{id:"adding-mariadb-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-mariadb-user"}},[t._v("#")]),t._v(" Adding MariaDB user")]),t._v(" "),s("p",[t._v("To add your first user to the database, see our tutorial on "),s("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[t._v("setting up MySQL")]),t._v(".")],1),t._v(" "),s("h3",{attrs:{id:"setup-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-php"}},[t._v("#")]),t._v(" Setup PHP")]),t._v(" "),s("p",[t._v("The default php-fpm configuration is fine to use and can be started and then enabled on the system using the\ncommands below.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" php7.4-fpm\nsystemctl start php7.4-fpm\n")])])]),s("h3",{attrs:{id:"nginx-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx-2"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),s("p",[t._v("Please check our "),s("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("tutorial")]),t._v(" on generating SSL certificates for more information.")],1),t._v(" "),s("h4",{attrs:{id:"ssl-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ssl-configuration"}},[t._v("#")]),t._v(" SSL Configuration")]),t._v(" "),s("div",{staticClass:"language-conf extra-class"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('server_tokens off;\n\nserver {\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.php;\n\n access_log /var/log/nginx/pterodactyl.app-access.log;\n error_log /var/log/nginx/pterodactyl.app-error.log error;\n\n # allow larger file uploads and longer script runtimes\n client_max_body_size 100m;\n client_body_timeout 120s;\n\n sendfile off;\n\n # SSL Configuration\n ssl_certificate /etc/letsencrypt/live//fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live//privkey.pem;\n ssl_session_cache shared:SSL:10m;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";\n ssl_prefer_server_ciphers on;\n\n # See https://hstspreload.org/ before uncommenting the line below.\n # add_header Strict-Transport-Security "max-age=15768000; preload;";\n add_header X-Content-Type-Options nosniff;\n add_header X-XSS-Protection "1; mode=block";\n add_header X-Robots-Tag none;\n add_header Content-Security-Policy "frame-ancestors \'self\'";\n add_header X-Frame-Options DENY;\n add_header Referrer-Policy same-origin;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n include fastcgi_params;\n fastcgi_param PHP_VALUE "upload_max_filesize = 100M \\n post_max_size=100M";\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n fastcgi_param HTTP_PROXY "";\n fastcgi_intercept_errors off;\n fastcgi_buffer_size 16k;\n fastcgi_buffers 4 16k;\n fastcgi_connect_timeout 300;\n fastcgi_send_timeout 300;\n fastcgi_read_timeout 300;\n include /etc/nginx/fastcgi_params;\n }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),s("h3",{attrs:{id:"redis-setup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redis-setup"}},[t._v("#")]),t._v(" Redis Setup")]),t._v(" "),s("p",[t._v("The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into\n"),s("a",{attrs:{href:"https://community.pivotal.io/s/article/How-to-setup-and-run-multiple-Redis-server-instances-on-a-Linux-host",target:"_blank",rel:"noopener noreferrer"}},[t._v("running another Redis instance"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"installing-the-panel"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-panel"}},[t._v("#")]),t._v(" Installing the Panel")]),t._v(" "),s("p",[t._v("Excellent, we now have all of the required dependencies installed and configured. From here, follow the "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#download-files"}},[t._v("official Panel installation documentation")]),t._v(".")],1)])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/39.a7036ff5.js b/assets/js/39.d6779512.js similarity index 99% rename from assets/js/39.a7036ff5.js rename to assets/js/39.d6779512.js index e038d039..9541cf1f 100644 --- a/assets/js/39.a7036ff5.js +++ b/assets/js/39.d6779512.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{381:function(t,a,e){"use strict";e.r(a);var s=e(48),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ubuntu-18-04"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ubuntu-18-04"}},[t._v("#")]),t._v(" Ubuntu 18.04")]),t._v(" "),e("p",[t._v("In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#install-requirements"}},[t._v("Install Requirements")]),e("ul",[e("li",[e("a",{attrs:{href:"#mariadb"}},[t._v("MariaDB")])]),e("li",[e("a",{attrs:{href:"#php-7-4"}},[t._v("PHP 7.4")])]),e("li",[e("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),e("li",[e("a",{attrs:{href:"#redis"}},[t._v("Redis")])]),e("li",[e("a",{attrs:{href:"#additional-utilities"}},[t._v("Additional Utilities")])])])]),e("li",[e("a",{attrs:{href:"#server-configuration"}},[t._v("Server Configuration")]),e("ul",[e("li",[e("a",{attrs:{href:"#configuring-mariadb"}},[t._v("Configuring MariaDB")])]),e("li",[e("a",{attrs:{href:"#setup-php"}},[t._v("Setup PHP")])]),e("li",[e("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),e("li",[e("a",{attrs:{href:"#redis-setup"}},[t._v("Redis Setup")])])])]),e("li",[e("a",{attrs:{href:"#installing-the-panel"}},[t._v("Installing the Panel")])])])]),e("p"),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("This guide is based off the "),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("official installation documentation")]),t._v(" but is tailored specifically for Ubuntu 18.04.")],1)]),t._v(" "),e("h2",{attrs:{id:"install-requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-requirements"}},[t._v("#")]),t._v(" Install Requirements")]),t._v(" "),e("p",[t._v("We will first begin by installing all of Pterodactyl's "),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#dependencies"}},[t._v("required")]),t._v(" dependencies.")],1),t._v(" "),e("h3",{attrs:{id:"mariadb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#mariadb"}},[t._v("#")]),t._v(" MariaDB")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update -y\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install MariaDB")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y mariadb-common mariadb-server mariadb-client\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Start MariaDB")]),t._v("\nsystemctl start mariadb\nsystemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mariadb\n")])])]),e("h3",{attrs:{id:"php-7-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#php-7-4"}},[t._v("#")]),t._v(" PHP 7.4")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update -y\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install PHP 7.4")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y php7.4 php7.4-"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h3",{attrs:{id:"nginx"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y nginx\n")])])]),e("h3",{attrs:{id:"redis"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#redis"}},[t._v("#")]),t._v(" Redis")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y redis-server\n\nsystemctl start redis-server\nsystemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" redis-server\n")])])]),e("h3",{attrs:{id:"additional-utilities"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-utilities"}},[t._v("#")]),t._v(" Additional Utilities")]),t._v(" "),e("h4",{attrs:{id:"certbot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#certbot"}},[t._v("#")]),t._v(" Certbot")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y certbot\n")])])]),e("h4",{attrs:{id:"composer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#composer"}},[t._v("#")]),t._v(" Composer")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://getcomposer.org/installer "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" php -- --install-dir"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/usr/local/bin --filename"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("composer\n")])])]),e("h2",{attrs:{id:"server-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#server-configuration"}},[t._v("#")]),t._v(" Server Configuration")]),t._v(" "),e("p",[t._v("This following section covers the configuration of parts of the server to run the panel.")]),t._v(" "),e("h3",{attrs:{id:"configuring-mariadb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuring-mariadb"}},[t._v("#")]),t._v(" Configuring MariaDB")]),t._v(" "),e("p",[t._v("The fastest way to set up MariaDB is to use the "),e("code",[t._v("mysql_secure_installation")]),t._v(" command and follow prompts")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("mysql_secure_installation\n")])])]),e("p",[t._v("The following are safe defaults.")]),t._v(" "),e("p",[t._v("Change to your own secure password"),e("br"),t._v(" "),e("code",[t._v("Set root password? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Get rid of users that could access the db by default"),e("br"),t._v(" "),e("code",[t._v("Remove anonymous users? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Keep root off the external interfaces"),e("br"),t._v(" "),e("code",[t._v("Disallow root login remotely? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Extra databases that aren't needed"),e("br"),t._v(" "),e("code",[t._v("Remove test database and access to it? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Clears and sets all the changes made"),e("br"),t._v(" "),e("code",[t._v("Reload privilege tables now? [Y/n] Y")])]),t._v(" "),e("p",[t._v("All done! If you've completed all of the above steps, your MariaDB installation should now be secure.")]),t._v(" "),e("h4",{attrs:{id:"adding-mariadb-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#adding-mariadb-user"}},[t._v("#")]),t._v(" Adding MariaDB user")]),t._v(" "),e("p",[t._v("To add your first user to the database, see our tutorial on "),e("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[t._v("setting up MySQL")]),t._v(".")],1),t._v(" "),e("h3",{attrs:{id:"setup-php"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setup-php"}},[t._v("#")]),t._v(" Setup PHP")]),t._v(" "),e("p",[t._v("The default php-fpm configuration is fine to use and can be started and then enabled on the system using the\ncommands below.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" php7.4-fpm\nsystemctl start php7.4-fpm\n")])])]),e("h3",{attrs:{id:"nginx-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nginx-2"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),e("p",[t._v("Please check our "),e("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("tutorial")]),t._v(" on generating SSL certificates for more information.")],1),t._v(" "),e("h4",{attrs:{id:"ssl-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssl-configuration"}},[t._v("#")]),t._v(" SSL Configuration")]),t._v(" "),e("div",{staticClass:"language-conf extra-class"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('server_tokens off;\n\nserver {\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.php;\n\n access_log /var/log/nginx/pterodactyl.app-access.log;\n error_log /var/log/nginx/pterodactyl.app-error.log error;\n\n # allow larger file uploads and longer script runtimes\n client_max_body_size 100m;\n client_body_timeout 120s;\n\n sendfile off;\n\n # SSL Configuration\n ssl_certificate /etc/letsencrypt/live//fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live//privkey.pem;\n ssl_session_cache shared:SSL:10m;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";\n ssl_prefer_server_ciphers on;\n\n # See https://hstspreload.org/ before uncommenting the line below.\n # add_header Strict-Transport-Security "max-age=15768000; preload;";\n add_header X-Content-Type-Options nosniff;\n add_header X-XSS-Protection "1; mode=block";\n add_header X-Robots-Tag none;\n add_header Content-Security-Policy "frame-ancestors \'self\'";\n add_header X-Frame-Options DENY;\n add_header Referrer-Policy same-origin;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n include fastcgi_params;\n fastcgi_param PHP_VALUE "upload_max_filesize = 100M \\n post_max_size=100M";\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n fastcgi_param HTTP_PROXY "";\n fastcgi_intercept_errors off;\n fastcgi_buffer_size 16k;\n fastcgi_buffers 4 16k;\n fastcgi_connect_timeout 300;\n fastcgi_send_timeout 300;\n fastcgi_read_timeout 300;\n include /etc/nginx/fastcgi_params;\n }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),e("h3",{attrs:{id:"redis-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#redis-setup"}},[t._v("#")]),t._v(" Redis Setup")]),t._v(" "),e("p",[t._v("The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into\n"),e("a",{attrs:{href:"https://community.pivotal.io/s/article/How-to-setup-and-run-multiple-Redis-server-instances-on-a-Linux-host",target:"_blank",rel:"noopener noreferrer"}},[t._v("running another Redis instance"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"installing-the-panel"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-panel"}},[t._v("#")]),t._v(" Installing the Panel")]),t._v(" "),e("p",[t._v("Excellent, we now have all of the required dependencies installed and configured. From here, follow the "),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#download-files"}},[t._v("official Panel installation documentation")]),t._v(".")],1)])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{380:function(t,a,e){"use strict";e.r(a);var s=e(48),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"ubuntu-18-04"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ubuntu-18-04"}},[t._v("#")]),t._v(" Ubuntu 18.04")]),t._v(" "),e("p",[t._v("In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#install-requirements"}},[t._v("Install Requirements")]),e("ul",[e("li",[e("a",{attrs:{href:"#mariadb"}},[t._v("MariaDB")])]),e("li",[e("a",{attrs:{href:"#php-7-4"}},[t._v("PHP 7.4")])]),e("li",[e("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),e("li",[e("a",{attrs:{href:"#redis"}},[t._v("Redis")])]),e("li",[e("a",{attrs:{href:"#additional-utilities"}},[t._v("Additional Utilities")])])])]),e("li",[e("a",{attrs:{href:"#server-configuration"}},[t._v("Server Configuration")]),e("ul",[e("li",[e("a",{attrs:{href:"#configuring-mariadb"}},[t._v("Configuring MariaDB")])]),e("li",[e("a",{attrs:{href:"#setup-php"}},[t._v("Setup PHP")])]),e("li",[e("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),e("li",[e("a",{attrs:{href:"#redis-setup"}},[t._v("Redis Setup")])])])]),e("li",[e("a",{attrs:{href:"#installing-the-panel"}},[t._v("Installing the Panel")])])])]),e("p"),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("p",[t._v("This guide is based off the "),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("official installation documentation")]),t._v(" but is tailored specifically for Ubuntu 18.04.")],1)]),t._v(" "),e("h2",{attrs:{id:"install-requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-requirements"}},[t._v("#")]),t._v(" Install Requirements")]),t._v(" "),e("p",[t._v("We will first begin by installing all of Pterodactyl's "),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#dependencies"}},[t._v("required")]),t._v(" dependencies.")],1),t._v(" "),e("h3",{attrs:{id:"mariadb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#mariadb"}},[t._v("#")]),t._v(" MariaDB")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update -y\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install MariaDB")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y mariadb-common mariadb-server mariadb-client\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Start MariaDB")]),t._v("\nsystemctl start mariadb\nsystemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mariadb\n")])])]),e("h3",{attrs:{id:"php-7-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#php-7-4"}},[t._v("#")]),t._v(" PHP 7.4")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update -y\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install PHP 7.4")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y php7.4 php7.4-"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h3",{attrs:{id:"nginx"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y nginx\n")])])]),e("h3",{attrs:{id:"redis"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#redis"}},[t._v("#")]),t._v(" Redis")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y redis-server\n\nsystemctl start redis-server\nsystemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" redis-server\n")])])]),e("h3",{attrs:{id:"additional-utilities"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-utilities"}},[t._v("#")]),t._v(" Additional Utilities")]),t._v(" "),e("h4",{attrs:{id:"certbot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#certbot"}},[t._v("#")]),t._v(" Certbot")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y certbot\n")])])]),e("h4",{attrs:{id:"composer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#composer"}},[t._v("#")]),t._v(" Composer")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://getcomposer.org/installer "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" php -- --install-dir"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/usr/local/bin --filename"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("composer\n")])])]),e("h2",{attrs:{id:"server-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#server-configuration"}},[t._v("#")]),t._v(" Server Configuration")]),t._v(" "),e("p",[t._v("This following section covers the configuration of parts of the server to run the panel.")]),t._v(" "),e("h3",{attrs:{id:"configuring-mariadb"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuring-mariadb"}},[t._v("#")]),t._v(" Configuring MariaDB")]),t._v(" "),e("p",[t._v("The fastest way to set up MariaDB is to use the "),e("code",[t._v("mysql_secure_installation")]),t._v(" command and follow prompts")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("mysql_secure_installation\n")])])]),e("p",[t._v("The following are safe defaults.")]),t._v(" "),e("p",[t._v("Change to your own secure password"),e("br"),t._v(" "),e("code",[t._v("Set root password? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Get rid of users that could access the db by default"),e("br"),t._v(" "),e("code",[t._v("Remove anonymous users? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Keep root off the external interfaces"),e("br"),t._v(" "),e("code",[t._v("Disallow root login remotely? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Extra databases that aren't needed"),e("br"),t._v(" "),e("code",[t._v("Remove test database and access to it? [Y/n] Y")])]),t._v(" "),e("p",[t._v("Clears and sets all the changes made"),e("br"),t._v(" "),e("code",[t._v("Reload privilege tables now? [Y/n] Y")])]),t._v(" "),e("p",[t._v("All done! If you've completed all of the above steps, your MariaDB installation should now be secure.")]),t._v(" "),e("h4",{attrs:{id:"adding-mariadb-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#adding-mariadb-user"}},[t._v("#")]),t._v(" Adding MariaDB user")]),t._v(" "),e("p",[t._v("To add your first user to the database, see our tutorial on "),e("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[t._v("setting up MySQL")]),t._v(".")],1),t._v(" "),e("h3",{attrs:{id:"setup-php"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setup-php"}},[t._v("#")]),t._v(" Setup PHP")]),t._v(" "),e("p",[t._v("The default php-fpm configuration is fine to use and can be started and then enabled on the system using the\ncommands below.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" php7.4-fpm\nsystemctl start php7.4-fpm\n")])])]),e("h3",{attrs:{id:"nginx-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#nginx-2"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),e("p",[t._v("Please check our "),e("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("tutorial")]),t._v(" on generating SSL certificates for more information.")],1),t._v(" "),e("h4",{attrs:{id:"ssl-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#ssl-configuration"}},[t._v("#")]),t._v(" SSL Configuration")]),t._v(" "),e("div",{staticClass:"language-conf extra-class"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('server_tokens off;\n\nserver {\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.php;\n\n access_log /var/log/nginx/pterodactyl.app-access.log;\n error_log /var/log/nginx/pterodactyl.app-error.log error;\n\n # allow larger file uploads and longer script runtimes\n client_max_body_size 100m;\n client_body_timeout 120s;\n\n sendfile off;\n\n # SSL Configuration\n ssl_certificate /etc/letsencrypt/live//fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live//privkey.pem;\n ssl_session_cache shared:SSL:10m;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";\n ssl_prefer_server_ciphers on;\n\n # See https://hstspreload.org/ before uncommenting the line below.\n # add_header Strict-Transport-Security "max-age=15768000; preload;";\n add_header X-Content-Type-Options nosniff;\n add_header X-XSS-Protection "1; mode=block";\n add_header X-Robots-Tag none;\n add_header Content-Security-Policy "frame-ancestors \'self\'";\n add_header X-Frame-Options DENY;\n add_header Referrer-Policy same-origin;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n include fastcgi_params;\n fastcgi_param PHP_VALUE "upload_max_filesize = 100M \\n post_max_size=100M";\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n fastcgi_param HTTP_PROXY "";\n fastcgi_intercept_errors off;\n fastcgi_buffer_size 16k;\n fastcgi_buffers 4 16k;\n fastcgi_connect_timeout 300;\n fastcgi_send_timeout 300;\n fastcgi_read_timeout 300;\n include /etc/nginx/fastcgi_params;\n }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),e("h3",{attrs:{id:"redis-setup"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#redis-setup"}},[t._v("#")]),t._v(" Redis Setup")]),t._v(" "),e("p",[t._v("The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into\n"),e("a",{attrs:{href:"https://community.pivotal.io/s/article/How-to-setup-and-run-multiple-Redis-server-instances-on-a-Linux-host",target:"_blank",rel:"noopener noreferrer"}},[t._v("running another Redis instance"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"installing-the-panel"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-panel"}},[t._v("#")]),t._v(" Installing the Panel")]),t._v(" "),e("p",[t._v("Excellent, we now have all of the required dependencies installed and configured. From here, follow the "),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#download-files"}},[t._v("official Panel installation documentation")]),t._v(".")],1)])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/4.b7752185.js b/assets/js/4.f8721b3a.js similarity index 69% rename from assets/js/4.b7752185.js rename to assets/js/4.f8721b3a.js index 41f2b129..a5a31f77 100644 --- a/assets/js/4.b7752185.js +++ b/assets/js/4.f8721b3a.js @@ -1,3 +1,3 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4,9,26,27],{315:function(t,e,s){"use strict";s.r(e);s(179),s(71),s(317);var n=s(312),i={props:{item:{required:!0}},computed:{link:function(){return Object(n.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link}},methods:{isExternal:n.f,isMailto:n.g,isTel:n.h}},a=s(48),r=Object(a.a)(i,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isExternal(t.link)?s("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"}},[t._v("\n "+t._s(t.item.text)+"\n "),s("OutboundLink")],1):s("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact}},[t._v(t._s(t.item.text)+"\n")])}),[],!1,null,null,null);e.default=r.exports},317:function(t,e,s){"use strict";var n=s(0),i=s(318);n({target:"String",proto:!0,forced:s(319)("link")},{link:function(t){return i(this,"a","href",t)}})},318:function(t,e,s){var n=s(25),i=/"/g;t.exports=function(t,e,s,a){var r=String(n(t)),o="<"+e;return""!==s&&(o+=" "+s+'="'+String(a).replace(i,""")+'"'),o+">"+r+""}},319:function(t,e,s){var n=s(2);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},324:function(t,e,s){"use strict";s.r(e);var n=s(315),i=s(321),a={components:{NavLink:n.default,DropdownTransition:i.default},data:function(){return{open:!1}},props:{item:{required:!0}},methods:{toggle:function(){this.open=!this.open}}},r=s(48),o=Object(r.a)(a,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[s("a",{staticClass:"dropdown-title",on:{click:t.toggle}},[s("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),s("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),s("DropdownTransition",[s("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,n){return s("li",{key:e.link||n,staticClass:"dropdown-item"},["links"===e.type?s("h4",[t._v(t._s(e.text))]):t._e(),t._v(" "),"links"===e.type?s("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(t){return s("li",{key:t.link,staticClass:"dropdown-subitem"},[s("NavLink",{attrs:{item:t}})],1)})),0):s("NavLink",{attrs:{item:e}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=o.exports},325:function(t,e,s){"use strict";s.r(e);s(109),s(49),s(179),s(71),s(181),s(50),s(74),s(313),s(70);var n=s(31),i=s(324),a=s(312),r={components:{NavLink:s(315).default,DropdownLink:i.default},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var s=this.$page.path,i=this.$router.options.routes,a=this.$site.themeConfig.locales||{},r={text:this.$themeLocaleConfig.selectText||"Languages",items:Object.keys(e).map((function(n){var r,o=e[n],c=a[n]&&a[n].label||o.lang;return o.lang===t.$lang?r=s:(r=s.replace(t.$localeConfig.path,n),i.some((function(t){return t.path===r}))||(r=n)),{text:c,link:r}}))};return[].concat(Object(n.a)(this.userNav),[r])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(a.k)(t),{items:(t.items||[]).map(a.k)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;if(t)return/^https?:/.test(t)?t:"https://github.com/".concat(t)},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],s=0;s-1},r=[],o=0;o=n);o++){var c=s[o];if(this.getPageLocalePath(c)===i)if(a(c))r.push(c);else if(c.headers)for(var l=0;l=n);l++){var u=c.headers[l];a(u)&&r.push(Object.assign({},c,{path:c.path+"#"+u.slug,header:u}))}}return r}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},methods:{getPageLocalePath:function(t){for(var e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+t._s(e.header.title))]):t._e()])])})),0)]):t._e()])}),[],!1,null,null,null);e.default=a.exports},333:function(t,e,s){"use strict";s.r(e);var n=s(48),i=Object(n.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[s("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[s("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null);e.default=i.exports},337:function(t,e,s){},338:function(t,e,s){},341:function(t,e,s){"use strict";s.r(e);var n=s(315),i=s(330),a={components:{NavLink:n.default,Slick:i.default},data:function(){return{slickOptions:{slidesToShow:1,centerMode:!0,centerPadding:"0",speed:1e3,autoplay:!0,variableWidth:!0,arrows:!1,dots:!0,pauseOnHover:!1,pauseOnDotsHover:!0}}},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},r=s(48),o=Object(r.a)(a,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"home"},[s("div",{staticClass:"header section bg-blue text-grey-lightest less-padding emphasize"},[s("div",{staticClass:"container z-10"},[s("div",{staticClass:"text-center"},[t._m(0),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/panel/getting_started.html"}},[t._v("Let's Get Started!")])],1)])])]),t._v(" "),t._m(1),t._v(" "),t._m(2),t._v(" "),s("div",{staticClass:"section bg-white"},[s("div",{staticClass:"text-center"},[s("h1",[t._v("Screenshots")]),t._v(" "),s("div",{staticClass:"screenshots"},[s("slick",{ref:"slick",attrs:{options:t.slickOptions}},[s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}})])])],1)])]),t._v(" "),s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",[t._v("Get Started")]),t._v(" "),s("p",{staticClass:"m-4"},[t._v("Ready to fly on the Pterodactyl?")]),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/project/introduction.html"}},[t._v("About the project")]),t._v(" "),s("a",{staticClass:"btn inline-block",attrs:{href:"https://discord.gg/pterodactyl"}},[t._v("Discord")])],1)])]),t._v(" "),s("div",{staticClass:"section bg-black text-grey-lighter text-sm less-padding"},[s("div",{staticClass:"container text-center"},[s("div",[s("img",{staticClass:"h-20",attrs:{src:t.$withBase("logos/banner_logo.png"),alt:"pterodactyl banner logo"}})]),t._v(" "),t._m(3),t._v(" "),s("div",{staticClass:"footer"},[t._v("MIT Licensed | Pterodactyl® Copyright © 2015 - 2022 Dane Everitt & contributors.")])])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("img",{staticClass:"max-w-xl w-full inline-block",attrs:{src:"https://cdn.pterodactyl.io/logos/new/pterodactyl_logo_transparent.png",alt:"Pterodactyl"}})])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"section bg-white"},[e("div",{staticClass:"container text-center"},[e("h1",{staticClass:"text-blue mb-4"},[this._v("Pterodactyl Panel")]),this._v(" "),e("h3",{staticClass:"border-0 font-normal leading-normal mx-auto",staticStyle:{"max-width":"50rem"}},[this._v("\n Pterodactyl is a free, open-source game server management panel built with PHP, React, and Go.\n Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers\n while exposing a beautiful and intuitive UI to end users.\n ")]),this._v(" "),e("h3",{staticClass:"border-0 leading-normal mx-auto mt-4",staticStyle:{"max-width":"50rem"}},[this._v("\n Stop settling for less. Make game servers a first class citizen on your platform.\n ")]),this._v(" "),e("img",{staticClass:"max-w-lg w-full m-4 inline-block",attrs:{src:"https://cdn.pterodactyl.io/site-assets/mockup-macbook-grey-1.0.png"}})])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",{staticClass:"mb-4"},[t._v("Why Pterodactyl")]),t._v(" "),s("div",{staticClass:"flex flex-wrap"},[s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-lock"})]),t._v(" "),s("h3",[t._v("Security First")]),t._v(" "),s("p",[t._v("Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-beaker"})]),t._v(" "),s("h3",[t._v("Modern Tooling")]),t._v(" "),s("p",[t._v("Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-anchor"})]),t._v(" "),s("h3",[t._v("Docker to the Core")]),t._v(" "),s("p",[t._v("All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-wallet"})]),t._v(" "),s("h3",[t._v("Free & Open Source")]),t._v(" "),s("p",[t._v("Pterodactyl is 100% free and licensed under a MIT license. All of our code is completely open source as well.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-browser"})]),t._v(" "),s("h3",[t._v("User Friendly")]),t._v(" "),s("p",[t._v("Save the furious clicking and screaming for Overwatch. Pterodactyl's interface is designed so well even Hanzo can use it.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-expand"})]),t._v(" "),s("h3",[t._v("Scalable")]),t._v(" "),s("p",[t._v("Whether you're a hosting company, the next Hyplex, or just some dudes playing video games, we've got you covered.")])])])])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"text-left md:flex"},[s("div",{staticClass:"flex-none w-full md:w-1/2 md:pr-12"},[s("p",{staticClass:"my-4"},[t._v("\n Since 2015 Pterodactyl has been delivering robust, performant, and secure software that allows\n individuals, networks, and hosting companies to run game servers at scale; easily. Best of all?\n No exorbitant monthly costs.\n ")]),t._v(" "),s("p",{staticClass:"my-4"},[t._v("\n Take the plunge today and discover why thousands of users trust Pterodactyl to manage their\n game servers.\n ")])]),t._v(" "),s("div",{staticClass:"hidden md:block md:flex-1 md:pr-12"},[s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/pterodactyl"}},[t._v("GitHub")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/sponsors/DaneEveritt"}},[t._v("Sponsor")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://paypal.me/PterodactylSoftware"}},[t._v("Donate")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"/panel/troubleshooting.html"}},[t._v("Troubleshooting")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/parkervcp/eggs"}},[t._v("Additional Game Configurations")])])]),t._v(" "),s("div",{staticClass:"text-center mt-8 md:flex-1 md:mt-0"},[s("a",{attrs:{href:"https://discord.gg/pterodactyl",target:"_blank",rel:"nofollow noopener"}},[s("img",{staticClass:"w-3/4",attrs:{src:"https://cdn.pterodactyl.io/site-assets/discord.png"}})])])])}],!1,null,null,null);e.default=o.exports},342:function(t,e,s){"use strict";s.r(e);var n=s(333),i=s(331),a=s(325),r={components:{SidebarButton:n.default,NavLinks:a.default,SearchBox:i.default},computed:{}},o=s(48),c=Object(o.a)(r,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("header",{staticClass:"nav"},[s("SidebarButton",{staticClass:"block md:hidden flex-no-shrink",on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),s("div",{staticClass:"logo-container"},[s("router-link",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?s("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo)}}):t._e(),t._v(" "),t.$siteTitle?s("span",{staticClass:"site-name hidden md:inline",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()])],1),t._v(" "),s("div",{staticClass:"w-full"},[s("div",{staticClass:"flex"},[s("SearchBox"),t._v(" "),s("NavLinks",{staticClass:"hidden md:flex"})],1)])],1)}),[],!1,null,null,null);e.default=c.exports},343:function(t,e,s){"use strict";s.r(e);s(51),s(77),s(50),s(70),s(52);var n=s(31),i=s(312);function a(t,e,s){var i=[];e.forEach((function(t){"group"===t.type?i.push.apply(i,Object(n.a)(t.children||[])):i.push(t)}));for(var a=0;a-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(r.e)(this.$route,t.path)}}},c=s(48),l=Object(c.a)(o,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"sidebar"},[s("NavLinks",{staticClass:"block md:hidden"}),t._v(" "),t._t("top"),t._v(" "),t.items.length?s("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,n){return s("li",{key:e.path},["group"===e.type?s("SidebarGroup",{attrs:{item:e,first:0===n,open:n===t.openGroupIndex,collapsable:e.collapsable},on:{toggle:function(e){return t.toggleGroup(n)}}}):s("SidebarLink",{attrs:{item:e}})],1)})),0):t._e(),t._v(" "),t._t("bottom")],2)}),[],!1,null,null,null);e.default=l.exports},347:function(t,e,s){var n,i; +(window.webpackJsonp=window.webpackJsonp||[]).push([[4,9,26,27],{315:function(t,e,s){"use strict";s.r(e);s(179),s(71),s(317);var n=s(312),i={props:{item:{required:!0}},computed:{link:function(){return Object(n.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link}},methods:{isExternal:n.f,isMailto:n.g,isTel:n.h}},a=s(48),r=Object(a.a)(i,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isExternal(t.link)?s("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"}},[t._v("\n "+t._s(t.item.text)+"\n "),s("OutboundLink")],1):s("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact}},[t._v(t._s(t.item.text)+"\n")])}),[],!1,null,null,null);e.default=r.exports},317:function(t,e,s){"use strict";var n=s(0),i=s(318);n({target:"String",proto:!0,forced:s(319)("link")},{link:function(t){return i(this,"a","href",t)}})},318:function(t,e,s){var n=s(25),i=/"/g;t.exports=function(t,e,s,a){var r=String(n(t)),o="<"+e;return""!==s&&(o+=" "+s+'="'+String(a).replace(i,""")+'"'),o+">"+r+""}},319:function(t,e,s){var n=s(2);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},324:function(t,e,s){"use strict";s.r(e);var n=s(315),i=s(321),a={components:{NavLink:n.default,DropdownTransition:i.default},data:function(){return{open:!1}},props:{item:{required:!0}},methods:{toggle:function(){this.open=!this.open}}},r=s(48),o=Object(r.a)(a,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[s("a",{staticClass:"dropdown-title",on:{click:t.toggle}},[s("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),s("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),s("DropdownTransition",[s("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,n){return s("li",{key:e.link||n,staticClass:"dropdown-item"},["links"===e.type?s("h4",[t._v(t._s(e.text))]):t._e(),t._v(" "),"links"===e.type?s("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(t){return s("li",{key:t.link,staticClass:"dropdown-subitem"},[s("NavLink",{attrs:{item:t}})],1)})),0):s("NavLink",{attrs:{item:e}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=o.exports},325:function(t,e,s){"use strict";s.r(e);s(109),s(49),s(179),s(71),s(181),s(50),s(74),s(313),s(70);var n=s(31),i=s(324),a=s(312),r={components:{NavLink:s(315).default,DropdownLink:i.default},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var s=this.$page.path,i=this.$router.options.routes,a=this.$site.themeConfig.locales||{},r={text:this.$themeLocaleConfig.selectText||"Languages",items:Object.keys(e).map((function(n){var r,o=e[n],c=a[n]&&a[n].label||o.lang;return o.lang===t.$lang?r=s:(r=s.replace(t.$localeConfig.path,n),i.some((function(t){return t.path===r}))||(r=n)),{text:c,link:r}}))};return[].concat(Object(n.a)(this.userNav),[r])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(a.k)(t),{items:(t.items||[]).map(a.k)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;if(t)return/^https?:/.test(t)?t:"https://github.com/".concat(t)},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],s=0;s-1},r=[],o=0;o=n);o++){var c=s[o];if(this.getPageLocalePath(c)===i)if(a(c))r.push(c);else if(c.headers)for(var l=0;l=n);l++){var u=c.headers[l];a(u)&&r.push(Object.assign({},c,{path:c.path+"#"+u.slug,header:u}))}}return r}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},methods:{getPageLocalePath:function(t){for(var e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+t._s(e.header.title))]):t._e()])])})),0)]):t._e()])}),[],!1,null,null,null);e.default=a.exports},333:function(t,e,s){"use strict";s.r(e);var n=s(48),i=Object(n.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[s("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[s("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null);e.default=i.exports},337:function(t,e,s){},338:function(t,e,s){},341:function(t,e,s){"use strict";s.r(e);var n=s(315),i=s(330),a={components:{NavLink:n.default,Slick:i.default},data:function(){return{slickOptions:{slidesToShow:1,centerMode:!0,centerPadding:"0",speed:1e3,autoplay:!0,variableWidth:!0,arrows:!1,dots:!0,pauseOnHover:!1,pauseOnDotsHover:!0}}},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},r=s(48),o=Object(r.a)(a,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"home"},[s("div",{staticClass:"header section bg-blue text-grey-lightest less-padding emphasize"},[s("div",{staticClass:"container z-10"},[s("div",{staticClass:"text-center"},[t._m(0),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/panel/getting_started.html"}},[t._v("Let's Get Started!")])],1)])])]),t._v(" "),t._m(1),t._v(" "),t._m(2),t._v(" "),s("div",{staticClass:"section bg-white"},[s("div",{staticClass:"text-center"},[s("h1",[t._v("Screenshots")]),t._v(" "),s("div",{staticClass:"screenshots"},[s("slick",{ref:"slick",attrs:{options:t.slickOptions}},[s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}})])])],1)])]),t._v(" "),s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",[t._v("Get Started")]),t._v(" "),s("p",{staticClass:"m-4"},[t._v("Ready to fly on the Pterodactyl?")]),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/project/introduction.html"}},[t._v("About the project")]),t._v(" "),s("a",{staticClass:"btn inline-block",attrs:{href:"https://discord.gg/pterodactyl"}},[t._v("Discord")])],1)])]),t._v(" "),s("div",{staticClass:"section bg-black text-grey-lighter text-sm less-padding"},[s("div",{staticClass:"container text-center"},[s("div",[s("img",{staticClass:"h-20",attrs:{src:t.$withBase("logos/banner_logo.png"),alt:"pterodactyl banner logo"}})]),t._v(" "),t._m(3),t._v(" "),s("div",{staticClass:"footer"},[t._v("MIT Licensed | Pterodactyl® Copyright © 2015 - 2022 Dane Everitt & contributors.")])])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("img",{staticClass:"max-w-xl w-full inline-block",attrs:{src:"https://cdn.pterodactyl.io/logos/new/pterodactyl_logo_transparent.png",alt:"Pterodactyl"}})])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"section bg-white"},[e("div",{staticClass:"container text-center"},[e("h1",{staticClass:"text-blue mb-4"},[this._v("Pterodactyl Panel")]),this._v(" "),e("h3",{staticClass:"border-0 font-normal leading-normal mx-auto",staticStyle:{"max-width":"50rem"}},[this._v("\n Pterodactyl® is a free, open-source game server management panel built with PHP, React, and Go.\n Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers\n while exposing a beautiful and intuitive UI to end users.\n ")]),this._v(" "),e("h3",{staticClass:"border-0 leading-normal mx-auto mt-4",staticStyle:{"max-width":"50rem"}},[this._v("\n Stop settling for less. Make game servers a first class citizen on your platform.\n ")]),this._v(" "),e("img",{staticClass:"max-w-lg w-full m-4 inline-block",attrs:{src:"https://cdn.pterodactyl.io/site-assets/mockup-macbook-grey-1.0.png"}})])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",{staticClass:"mb-4"},[t._v("Why Pterodactyl®")]),t._v(" "),s("div",{staticClass:"flex flex-wrap"},[s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-lock"})]),t._v(" "),s("h3",[t._v("Security First")]),t._v(" "),s("p",[t._v("Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-beaker"})]),t._v(" "),s("h3",[t._v("Modern Tooling")]),t._v(" "),s("p",[t._v("Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-anchor"})]),t._v(" "),s("h3",[t._v("Docker to the Core")]),t._v(" "),s("p",[t._v("All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-wallet"})]),t._v(" "),s("h3",[t._v("Free & Open Source")]),t._v(" "),s("p",[t._v("Pterodactyl is 100% free and licensed under a MIT license. All of our code is completely open source as well.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-browser"})]),t._v(" "),s("h3",[t._v("User Friendly")]),t._v(" "),s("p",[t._v("Save the furious clicking and screaming for Overwatch. Pterodactyl's interface is designed so well even Hanzo can use it.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-expand"})]),t._v(" "),s("h3",[t._v("Scalable")]),t._v(" "),s("p",[t._v("Whether you're a hosting company, the next Hyplex, or just some dudes playing video games, we've got you covered.")])])])])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"text-left md:flex"},[s("div",{staticClass:"flex-none w-full md:w-1/2 md:pr-12"},[s("p",{staticClass:"my-4"},[t._v("\n Since 2015 Pterodactyl® has been delivering robust, performant, and secure software that allows\n individuals, networks, and hosting companies to run game servers at scale; easily. Best of all?\n No exorbitant monthly costs.\n ")]),t._v(" "),s("p",{staticClass:"my-4"},[t._v("\n Take the plunge today and discover why thousands of users trust Pterodactyl® to manage their\n game servers.\n ")])]),t._v(" "),s("div",{staticClass:"hidden md:block md:flex-1 md:pr-12"},[s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/pterodactyl"}},[t._v("GitHub")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/sponsors/DaneEveritt"}},[t._v("Sponsor")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://paypal.me/PterodactylSoftware"}},[t._v("Donate")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"/panel/troubleshooting.html"}},[t._v("Troubleshooting")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/parkervcp/eggs"}},[t._v("Additional Game Configurations")])])]),t._v(" "),s("div",{staticClass:"text-center mt-8 md:flex-1 md:mt-0"},[s("a",{attrs:{href:"https://discord.gg/pterodactyl",target:"_blank",rel:"nofollow noopener"}},[s("img",{staticClass:"w-3/4",attrs:{src:"https://cdn.pterodactyl.io/site-assets/discord.png"}})])])])}],!1,null,null,null);e.default=o.exports},342:function(t,e,s){"use strict";s.r(e);var n=s(333),i=s(331),a=s(325),r={components:{SidebarButton:n.default,NavLinks:a.default,SearchBox:i.default},computed:{}},o=s(48),c=Object(o.a)(r,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("header",{staticClass:"nav"},[s("SidebarButton",{staticClass:"block md:hidden flex-no-shrink",on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),s("div",{staticClass:"logo-container"},[s("router-link",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?s("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo)}}):t._e(),t._v(" "),t.$siteTitle?s("span",{staticClass:"site-name hidden md:inline",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()])],1),t._v(" "),s("div",{staticClass:"w-full"},[s("div",{staticClass:"flex"},[s("SearchBox"),t._v(" "),s("NavLinks",{staticClass:"hidden md:flex"})],1)])],1)}),[],!1,null,null,null);e.default=c.exports},343:function(t,e,s){"use strict";s.r(e);s(51),s(77),s(50),s(70),s(52);var n=s(31),i=s(312);function a(t,e,s){var i=[];e.forEach((function(t){"group"===t.type?i.push.apply(i,Object(n.a)(t.children||[])):i.push(t)}));for(var a=0;a-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(r.e)(this.$route,t.path)}}},c=s(48),l=Object(c.a)(o,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"sidebar"},[s("NavLinks",{staticClass:"block md:hidden"}),t._v(" "),t._t("top"),t._v(" "),t.items.length?s("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,n){return s("li",{key:e.path},["group"===e.type?s("SidebarGroup",{attrs:{item:e,first:0===n,open:n===t.openGroupIndex,collapsable:e.collapsable},on:{toggle:function(e){return t.toggleGroup(n)}}}):s("SidebarLink",{attrs:{item:e}})],1)})),0):t._e(),t._v(" "),t._t("bottom")],2)}),[],!1,null,null,null);e.default=l.exports},347:function(t,e,s){var n,i; /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */void 0===(i="function"==typeof(n=function(){var t,e,s={version:"0.2.0"},n=s.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
    '};function i(t,e,s){return ts?s:t}function a(t){return 100*(-1+t)}s.configure=function(t){var e,s;for(e in t)void 0!==(s=t[e])&&t.hasOwnProperty(e)&&(n[e]=s);return this},s.status=null,s.set=function(t){var e=s.isStarted();t=i(t,n.minimum,1),s.status=1===t?null:t;var c=s.render(!e),l=c.querySelector(n.barSelector),u=n.speed,d=n.easing;return c.offsetWidth,r((function(e){""===n.positionUsing&&(n.positionUsing=s.getPositioningCSS()),o(l,function(t,e,s){var i;return(i="translate3d"===n.positionUsing?{transform:"translate3d("+a(t)+"%,0,0)"}:"translate"===n.positionUsing?{transform:"translate("+a(t)+"%,0)"}:{"margin-left":a(t)+"%"}).transition="all "+e+"ms "+s,i}(t,u,d)),1===t?(o(c,{transition:"none",opacity:1}),c.offsetWidth,setTimeout((function(){o(c,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){s.remove(),e()}),u)}),u)):setTimeout(e,u)})),this},s.isStarted=function(){return"number"==typeof s.status},s.start=function(){s.status||s.set(0);var t=function(){setTimeout((function(){s.status&&(s.trickle(),t())}),n.trickleSpeed)};return n.trickle&&t(),this},s.done=function(t){return t||s.status?s.inc(.3+.5*Math.random()).set(1):this},s.inc=function(t){var e=s.status;return e?("number"!=typeof t&&(t=(1-e)*i(Math.random()*e,.1,.95)),e=i(e+t,0,.994),s.set(e)):s.start()},s.trickle=function(){return s.inc(Math.random()*n.trickleRate)},t=0,e=0,s.promise=function(n){return n&&"resolved"!==n.state()?(0===e&&s.start(),t++,e++,n.always((function(){0==--e?(t=0,s.done()):s.set((t-e)/t)})),this):this},s.render=function(t){if(s.isRendered())return document.getElementById("nprogress");l(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=n.template;var i,r=e.querySelector(n.barSelector),c=t?"-100":a(s.status||0),u=document.querySelector(n.parent);return o(r,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),n.showSpinner||(i=e.querySelector(n.spinnerSelector))&&h(i),u!=document.body&&l(u,"nprogress-custom-parent"),u.appendChild(e),e},s.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(n.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&h(t)},s.isRendered=function(){return!!document.getElementById("nprogress")},s.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var r=function(){var t=[];function e(){var s=t.shift();s&&s(e)}return function(s){t.push(s),1==t.length&&e()}}(),o=function(){var t=["Webkit","O","Moz","ms"],e={};function s(s){return s=s.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[s]||(e[s]=function(e){var s=document.body.style;if(e in s)return e;for(var n,i=t.length,a=e.charAt(0).toUpperCase()+e.slice(1);i--;)if((n=t[i]+a)in s)return n;return e}(s))}function n(t,e,n){e=s(e),t.style[e]=n}return function(t,e){var s,i,a=arguments;if(2==a.length)for(s in e)void 0!==(i=e[s])&&e.hasOwnProperty(s)&&n(t,s,i);else n(t,a[1],a[2])}}();function c(t,e){return("string"==typeof t?t:d(t)).indexOf(" "+e+" ")>=0}function l(t,e){var s=d(t),n=s+e;c(s,e)||(t.className=n.substring(1))}function u(t,e){var s,n=d(t);c(t,e)&&(s=n.replace(" "+e+" "," "),t.className=s.substring(1,s.length-1))}function d(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function h(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return s})?n.call(e,s,e,t):n)||(t.exports=i)},349:function(t,e,s){"use strict";var n=s(337);s.n(n).a},350:function(t,e,s){"use strict";var n=s(338);s.n(n).a},366:function(t,e,s){"use strict";s.r(e);s(104);var n=s(1),i=s(347),a=s.n(i),r=s(341),o=s(342),c=s(343),l=s(344),u=s(312),d={components:{Home:r.default,Page:c.default,Sidebar:l.default,Navbar:o.default},data:function(){return{isSidebarOpen:!1}},computed:{shouldShowNavbar:function(){var t=this.$site.themeConfig;return!1!==this.$page.frontmatter.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar:function(){var t=this.$page.frontmatter;return!t.layout&&!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems:function(){return Object(u.m)(this.$page,this.$route,this.$site,this.$localePath)},pageClasses:function(){var t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted:function(){var t=this;window.addEventListener("scroll",this.onScroll),a.a.configure({showSpinner:!1}),this.$router.beforeEach((function(t,e,s){t.path===e.path||n.a.component(t.name)||a.a.start(),s()})),this.$router.afterEach((function(){a.a.done(),t.isSidebarOpen=!1}))},methods:{toggleSidebar:function(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen},onTouchStart:function(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd:function(t){var e=t.changedTouches[0].clientX-this.touchStart.x,s=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(s)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},h=(s(349),s(350),s(48)),p=Object(h.a)(d,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?s("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),s("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),s("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar}},[t._t("sidebar-top",null,{slot:"top"}),t._v(" "),t._t("sidebar-bottom",null,{slot:"bottom"})],2),t._v(" "),t.$page.frontmatter.layout?s("div",{staticClass:"custom-layout"},[s(t.$page.frontmatter.layout,{tag:"component"})],1):t.$page.frontmatter.home?s("Home"):s("Page",{attrs:{"sidebar-items":t.sidebarItems}},[t._t("page-top",null,{slot:"top"}),t._v(" "),t._t("page-bottom",null,{slot:"bottom"})],2)],1)}),[],!1,null,null,null);e.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/48.8b4df094.js b/assets/js/48.b7aa2e4e.js similarity index 99% rename from assets/js/48.8b4df094.js rename to assets/js/48.b7aa2e4e.js index 6a5e8f6f..958ae3c6 100644 --- a/assets/js/48.8b4df094.js +++ b/assets/js/48.b7aa2e4e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{390:function(t,e,a){"use strict";a.r(e);var s=a(48),o=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"additional-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),a("p",[t._v("This documentation is for "),a("strong",[t._v("abandoned software")]),t._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),t._v(" "),a("p",[t._v("You should be installing and using "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),a("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#output-throttles"}},[t._v("Output Throttles")])]),a("li",[a("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")])]),a("li",[a("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")])]),a("li",[a("a",{attrs:{href:"#security-policies"}},[t._v("Security Policies")])]),a("li",[a("a",{attrs:{href:"#container-policy"}},[t._v("Container Policy")]),a("ul",[a("li",[a("a",{attrs:{href:"#default-security-opts-array"}},[t._v("Default Security Opts Array")])]),a("li",[a("a",{attrs:{href:"#default-capabilities-drop-array"}},[t._v("Default Capabilities Drop Array")])])])]),a("li",[a("a",{attrs:{href:"#enabling-cloudflare"}},[t._v("Enabling Cloudflare")])])])]),a("p"),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("These are advanced configurations for the daemon. You risk breaking your daemon and making containers un-usable if\nyou modify something incorrectly. Proceed at your own risk, and only if you know what each configuration value does.")])]),t._v(" "),a("p",[t._v("The documentation below uses dot-notated JSON to explain where each setting should live. You will need to manually\nexpand this syntax when adding to the "),a("code",[t._v("core.json")]),t._v(" file for the Daemon. For example, something like "),a("code",[t._v("internals.throttle.enabled")]),t._v("\nwould be expanded to the JSON below.")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"internals"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"throttle"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"enabled"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"output-throttles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#output-throttles"}},[t._v("#")]),t._v(" Output Throttles")]),t._v(" "),a("p",[t._v("There are a few throttle limits built into the Daemon to keep people from causing issues with data volume and CPU usage.\nUnder normal circumstances users should not encounter these limits. You might see the occasional data throttling\nwarning while starting a server or when there is a sudden spike in data output.")]),t._v(" "),a("p",[t._v("If you're seeing more servers than you expected being killed as a result of the Daemon throttler, you can make\nadjustments to the settings below. Please note the configs below are in JSON dot-notation and should be expanded\nout into a normal JSON object.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("enabled")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Determines if the throttle (and associated values below) should be used.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("kill_at_count")])]),t._v(" "),a("td",[t._v("5")]),t._v(" "),a("td",[t._v("The number of warnings that can accumulate for a particular instance before the server process is killed. The decay time below affects how quickly this value is decreased.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("decay")])]),t._v(" "),a("td",[t._v("10")]),t._v(" "),a("td",[t._v("The number of seconds that a server process must go without triggering a data throttle warning before the throttle count begins decreasing. This loop is processed every 5 seconds and will decrement the throttle count by one when the process goes more than this number of seconds without a data throttle occurring.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("bytes")])]),t._v(" "),a("td",[t._v("30720")]),t._v(" "),a("td",[t._v("⚠️ "),a("em",[t._v("(removed in v0.5.5)")]),t._v(" The maximum number of bytes of data that can be output in the defined interval before a warning occurs.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("lines")])]),t._v(" "),a("td",[t._v("1000")]),t._v(" "),a("td",[t._v("⚠️ "),a("em",[t._v("(added in v0.5.6)")]),t._v(" The number of lines that can be output by the server process in the defined check interval time. By default, 5,000 lines in ~500ms results in a server process kill.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("check_interval_ms")])]),t._v(" "),a("td",[t._v("100")]),t._v(" "),a("td",[t._v("The number of milliseconds between the throttle resetting the used bytes or line count.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("internals.throttle.X")]),t._v(" path. So, "),a("code",[t._v("enabled")]),t._v(" is actually "),a("code",[t._v("internals.throttle.enabled")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"custom-network-interfaces"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),a("p",[t._v("If for whatever reason you need to modify the network interfaces used for Pterodactyl's local Docker network you\ncan do so by modifying the "),a("code",[t._v("core.json")]),t._v(" file for the daemon. In most cases you'll just be modifying the network\nname to allow your servers to use the host network stack. To do so, just change "),a("code",[t._v("docker.network.name")]),t._v(" to be "),a("code",[t._v("host")]),t._v("\nrather than "),a("code",[t._v("pterodactyl_nw")]),t._v(" as shown below.")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("While changing to the host network stack does allow servers running on Pterodactyl to have direct access to local\ninterfaces and bind to specific IP addresses (required for some Steam games), it is not recommended on public\ninstallations of Pterodactyl (where you have other users running servers).")]),t._v(" "),a("p",[t._v("Using the "),a("code",[t._v("host")]),t._v(" stack removes many network specific protections afforded by Docker, and will allow server processes\nto access anything on the host, as well as bind to any IP or Port they wish.")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),a("p",[t._v("Any changes to the network after the daemon has been started will require you to remove the docker network and restart the daemon. Any servers on the host need to be stopped before and most likely rebuilt.")]),t._v(" "),a("p",[t._v("The following will stop the daemon, remove the network, and start the daemon again. Run at your own risk."),a("br"),t._v(" "),a("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])])]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"docker"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"socket"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/var/run/docker.sock"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"autoupdate_images"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"network"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pterodactyl_nw"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interfaces"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"v4"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"subnet"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.0/16"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gateway"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interface"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),a("h2",{attrs:{id:"private-registries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("username")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("The username to use when connecting to the registry.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("password")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("The password associated with the account.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("images")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("An array of images that are associated with the private registry.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("auth")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("code",[t._v("email")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("code",[t._v("serveraddress")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("The address to the server the registry is located on.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("key")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("A pre-generated base64 encoded authentication string. If provided none of the above options are required.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("docker.registry.X")]),t._v(" path. So, "),a("code",[t._v("username")]),t._v(" is actually "),a("code",[t._v("docker.registry.username")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"security-policies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#security-policies"}},[t._v("#")]),t._v(" Security Policies")]),t._v(" "),a("p",[t._v("This daemon ships with a very strict security configuration designed to limit access to the host system, and mitigate\na large range of potential attack vectors. However, some users might need to tweak these settings, or are running on\na private instance and are willing to decrease some of the security measures.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("ipv6")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Set this to false to disable IPv6 networking on the pterodactyl0 interface.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("internal")])]),t._v(" "),a("td",[t._v("false")]),t._v(" "),a("td",[t._v("Set this to true to prevent any external network access to all containers on the pterodactyl0 interface.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("enable_icc")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Set this to false to disallow containers to access services running on the host system's non-public IP addresses. Setting this to false does make it impossible to connect (from a container) to MySQL/Redis/etc. running on the host system without using the public IP address.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("enable_ip_masquerade")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Set this to false to disable IP Masquerading on the pterodactyl0 interface.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("docker.policy.network.X")]),t._v(" path. So, "),a("code",[t._v("ipv6")]),t._v(" is actually "),a("code",[t._v("docker.policy.network.ipv6")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"container-policy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#container-policy"}},[t._v("#")]),t._v(" Container Policy")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("tmpfs")])]),t._v(" "),a("td",[a("code",[t._v("rw,exec,nosuid,size=50M")])]),t._v(" "),a("td",[t._v("These are the arguments used for mounting a "),a("code",[t._v("tmpfs")]),t._v(" directory into containers to allow certain programs to run.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_driver")])]),t._v(" "),a("td",[t._v("none")]),t._v(" "),a("td",[t._v("⚠️ This option was "),a("strong",[t._v("removed")]),t._v(" in "),a("code",[t._v("v0.6")]),t._v(" and is forcibly set to "),a("code",[t._v("json-file")]),t._v(". The log driver to use for containers. We default to "),a("code",[t._v("none")]),t._v(" to mitigate a potential DoS attack vector if a server were to spam log output.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_opts")])]),t._v(" "),a("td",[t._v("array")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_opts.max_size")])]),t._v(" "),a("td",[a("code",[t._v("5m")])]),t._v(" "),a("td",[t._v("The maximum size of the server output log file created by Docker.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_opts.max_files")])]),t._v(" "),a("td",[a("code",[t._v("1")])]),t._v(" "),a("td",[t._v("The maximum number of files that Docker will create with output from the server.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("readonly_root")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Determines if the root filesystem of the container should be readonly.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("securityopts")])]),t._v(" "),a("td",[t._v("array")]),t._v(" "),a("td",[t._v("An array of security options to apply to a container. The default array is provided below.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("cap_drop")])]),t._v(" "),a("td",[t._v("array")]),t._v(" "),a("td",[t._v("An array of linux capabilities to drop from the container (in addition to ones "),a("a",{attrs:{href:"https://docs.docker.com/engine/security/security/#linux-kernel-capabilities",target:"_blank",rel:"noopener noreferrer"}},[t._v("dropped by docker already"),a("OutboundLink")],1),t._v(". A listing of the default array is below.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("docker.policy.container.X")]),t._v(" path. So, "),a("code",[t._v("tmpfs")]),t._v(" is actually "),a("code",[t._v("docker.policy.container.tmpfs")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"default-security-opts-array"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-security-opts-array"}},[t._v("#")]),t._v(" Default Security Opts Array")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'no-new-privileges'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h3",{attrs:{id:"default-capabilities-drop-array"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-capabilities-drop-array"}},[t._v("#")]),t._v(" Default Capabilities Drop Array")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Starting with "),a("code",[t._v("v0.6")]),t._v(" of the Daemon, the following previously "),a("em",[t._v("dropped")]),t._v(" capabilities are available in containers: "),a("code",[t._v("chown")]),t._v(", "),a("code",[t._v("kill")]),t._v(", "),a("code",[t._v("setgid")]),t._v(", and "),a("code",[t._v("setuid")]),t._v(".")])]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'setpcap'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'mknod'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'audit_write'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_raw'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'dac_override'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fowner'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fsetid'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_bind_service'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'sys_chroot'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'setfcap'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h2",{attrs:{id:"enabling-cloudflare"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare"}},[t._v("#")]),t._v(" Enabling Cloudflare")]),t._v(" "),a("p",[t._v("Enabling Cloudflare on the daemon isn't particularly useful since users do not connect directly to the daemon port, and users need an unproxied hostname to access any servers on the node. As a result it's not possible to conceal the IP address of your node machine, but some people want to enable it regardless.")]),t._v(" "),a("p",[t._v("Cloudflare only proxies the default daemon port (8080) when using HTTP. In order to get the daemon to work with Cloudflare when HTTPS is enabled you must change the daemon port to one that Cloudflare will proxy such as 8443. Since Cloudflare only proxies HTTP/HTTPS traffic for non-enterprise plans you cannot proxy the SFTP port.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{396:function(t,e,a){"use strict";a.r(e);var s=a(48),o=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"additional-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),a("p",[t._v("This documentation is for "),a("strong",[t._v("abandoned software")]),t._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),t._v(" "),a("p",[t._v("You should be installing and using "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),a("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#output-throttles"}},[t._v("Output Throttles")])]),a("li",[a("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")])]),a("li",[a("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")])]),a("li",[a("a",{attrs:{href:"#security-policies"}},[t._v("Security Policies")])]),a("li",[a("a",{attrs:{href:"#container-policy"}},[t._v("Container Policy")]),a("ul",[a("li",[a("a",{attrs:{href:"#default-security-opts-array"}},[t._v("Default Security Opts Array")])]),a("li",[a("a",{attrs:{href:"#default-capabilities-drop-array"}},[t._v("Default Capabilities Drop Array")])])])]),a("li",[a("a",{attrs:{href:"#enabling-cloudflare"}},[t._v("Enabling Cloudflare")])])])]),a("p"),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("These are advanced configurations for the daemon. You risk breaking your daemon and making containers un-usable if\nyou modify something incorrectly. Proceed at your own risk, and only if you know what each configuration value does.")])]),t._v(" "),a("p",[t._v("The documentation below uses dot-notated JSON to explain where each setting should live. You will need to manually\nexpand this syntax when adding to the "),a("code",[t._v("core.json")]),t._v(" file for the Daemon. For example, something like "),a("code",[t._v("internals.throttle.enabled")]),t._v("\nwould be expanded to the JSON below.")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"internals"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"throttle"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"enabled"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"output-throttles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#output-throttles"}},[t._v("#")]),t._v(" Output Throttles")]),t._v(" "),a("p",[t._v("There are a few throttle limits built into the Daemon to keep people from causing issues with data volume and CPU usage.\nUnder normal circumstances users should not encounter these limits. You might see the occasional data throttling\nwarning while starting a server or when there is a sudden spike in data output.")]),t._v(" "),a("p",[t._v("If you're seeing more servers than you expected being killed as a result of the Daemon throttler, you can make\nadjustments to the settings below. Please note the configs below are in JSON dot-notation and should be expanded\nout into a normal JSON object.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("enabled")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Determines if the throttle (and associated values below) should be used.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("kill_at_count")])]),t._v(" "),a("td",[t._v("5")]),t._v(" "),a("td",[t._v("The number of warnings that can accumulate for a particular instance before the server process is killed. The decay time below affects how quickly this value is decreased.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("decay")])]),t._v(" "),a("td",[t._v("10")]),t._v(" "),a("td",[t._v("The number of seconds that a server process must go without triggering a data throttle warning before the throttle count begins decreasing. This loop is processed every 5 seconds and will decrement the throttle count by one when the process goes more than this number of seconds without a data throttle occurring.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("bytes")])]),t._v(" "),a("td",[t._v("30720")]),t._v(" "),a("td",[t._v("⚠️ "),a("em",[t._v("(removed in v0.5.5)")]),t._v(" The maximum number of bytes of data that can be output in the defined interval before a warning occurs.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("lines")])]),t._v(" "),a("td",[t._v("1000")]),t._v(" "),a("td",[t._v("⚠️ "),a("em",[t._v("(added in v0.5.6)")]),t._v(" The number of lines that can be output by the server process in the defined check interval time. By default, 5,000 lines in ~500ms results in a server process kill.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("check_interval_ms")])]),t._v(" "),a("td",[t._v("100")]),t._v(" "),a("td",[t._v("The number of milliseconds between the throttle resetting the used bytes or line count.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("internals.throttle.X")]),t._v(" path. So, "),a("code",[t._v("enabled")]),t._v(" is actually "),a("code",[t._v("internals.throttle.enabled")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"custom-network-interfaces"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),a("p",[t._v("If for whatever reason you need to modify the network interfaces used for Pterodactyl's local Docker network you\ncan do so by modifying the "),a("code",[t._v("core.json")]),t._v(" file for the daemon. In most cases you'll just be modifying the network\nname to allow your servers to use the host network stack. To do so, just change "),a("code",[t._v("docker.network.name")]),t._v(" to be "),a("code",[t._v("host")]),t._v("\nrather than "),a("code",[t._v("pterodactyl_nw")]),t._v(" as shown below.")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("While changing to the host network stack does allow servers running on Pterodactyl to have direct access to local\ninterfaces and bind to specific IP addresses (required for some Steam games), it is not recommended on public\ninstallations of Pterodactyl (where you have other users running servers).")]),t._v(" "),a("p",[t._v("Using the "),a("code",[t._v("host")]),t._v(" stack removes many network specific protections afforded by Docker, and will allow server processes\nto access anything on the host, as well as bind to any IP or Port they wish.")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),a("p",[t._v("Any changes to the network after the daemon has been started will require you to remove the docker network and restart the daemon. Any servers on the host need to be stopped before and most likely rebuilt.")]),t._v(" "),a("p",[t._v("The following will stop the daemon, remove the network, and start the daemon again. Run at your own risk."),a("br"),t._v(" "),a("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])])]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"docker"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"socket"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/var/run/docker.sock"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"autoupdate_images"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"network"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pterodactyl_nw"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interfaces"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"v4"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"subnet"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.0/16"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gateway"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interface"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),a("h2",{attrs:{id:"private-registries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("username")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("The username to use when connecting to the registry.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("password")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("The password associated with the account.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("images")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("An array of images that are associated with the private registry.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("auth")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("code",[t._v("email")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("code",[t._v("serveraddress")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("The address to the server the registry is located on.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("key")])]),t._v(" "),a("td",[a("em",[t._v("none")])]),t._v(" "),a("td",[t._v("A pre-generated base64 encoded authentication string. If provided none of the above options are required.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("docker.registry.X")]),t._v(" path. So, "),a("code",[t._v("username")]),t._v(" is actually "),a("code",[t._v("docker.registry.username")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"security-policies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#security-policies"}},[t._v("#")]),t._v(" Security Policies")]),t._v(" "),a("p",[t._v("This daemon ships with a very strict security configuration designed to limit access to the host system, and mitigate\na large range of potential attack vectors. However, some users might need to tweak these settings, or are running on\na private instance and are willing to decrease some of the security measures.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("ipv6")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Set this to false to disable IPv6 networking on the pterodactyl0 interface.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("internal")])]),t._v(" "),a("td",[t._v("false")]),t._v(" "),a("td",[t._v("Set this to true to prevent any external network access to all containers on the pterodactyl0 interface.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("enable_icc")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Set this to false to disallow containers to access services running on the host system's non-public IP addresses. Setting this to false does make it impossible to connect (from a container) to MySQL/Redis/etc. running on the host system without using the public IP address.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("enable_ip_masquerade")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Set this to false to disable IP Masquerading on the pterodactyl0 interface.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("docker.policy.network.X")]),t._v(" path. So, "),a("code",[t._v("ipv6")]),t._v(" is actually "),a("code",[t._v("docker.policy.network.ipv6")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"container-policy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#container-policy"}},[t._v("#")]),t._v(" Container Policy")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Path")]),t._v(" "),a("th",[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("code",[t._v("tmpfs")])]),t._v(" "),a("td",[a("code",[t._v("rw,exec,nosuid,size=50M")])]),t._v(" "),a("td",[t._v("These are the arguments used for mounting a "),a("code",[t._v("tmpfs")]),t._v(" directory into containers to allow certain programs to run.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_driver")])]),t._v(" "),a("td",[t._v("none")]),t._v(" "),a("td",[t._v("⚠️ This option was "),a("strong",[t._v("removed")]),t._v(" in "),a("code",[t._v("v0.6")]),t._v(" and is forcibly set to "),a("code",[t._v("json-file")]),t._v(". The log driver to use for containers. We default to "),a("code",[t._v("none")]),t._v(" to mitigate a potential DoS attack vector if a server were to spam log output.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_opts")])]),t._v(" "),a("td",[t._v("array")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_opts.max_size")])]),t._v(" "),a("td",[a("code",[t._v("5m")])]),t._v(" "),a("td",[t._v("The maximum size of the server output log file created by Docker.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("log_opts.max_files")])]),t._v(" "),a("td",[a("code",[t._v("1")])]),t._v(" "),a("td",[t._v("The maximum number of files that Docker will create with output from the server.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("readonly_root")])]),t._v(" "),a("td",[t._v("true")]),t._v(" "),a("td",[t._v("Determines if the root filesystem of the container should be readonly.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("securityopts")])]),t._v(" "),a("td",[t._v("array")]),t._v(" "),a("td",[t._v("An array of security options to apply to a container. The default array is provided below.")])]),t._v(" "),a("tr",[a("td",[a("code",[t._v("cap_drop")])]),t._v(" "),a("td",[t._v("array")]),t._v(" "),a("td",[t._v("An array of linux capabilities to drop from the container (in addition to ones "),a("a",{attrs:{href:"https://docs.docker.com/engine/security/security/#linux-kernel-capabilities",target:"_blank",rel:"noopener noreferrer"}},[t._v("dropped by docker already"),a("OutboundLink")],1),t._v(". A listing of the default array is below.")])])])]),t._v(" "),a("p",[t._v("Please note that all of the settings above are in the "),a("code",[t._v("docker.policy.container.X")]),t._v(" path. So, "),a("code",[t._v("tmpfs")]),t._v(" is actually "),a("code",[t._v("docker.policy.container.tmpfs")]),t._v(".")]),t._v(" "),a("h3",{attrs:{id:"default-security-opts-array"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-security-opts-array"}},[t._v("#")]),t._v(" Default Security Opts Array")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'no-new-privileges'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h3",{attrs:{id:"default-capabilities-drop-array"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-capabilities-drop-array"}},[t._v("#")]),t._v(" Default Capabilities Drop Array")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Starting with "),a("code",[t._v("v0.6")]),t._v(" of the Daemon, the following previously "),a("em",[t._v("dropped")]),t._v(" capabilities are available in containers: "),a("code",[t._v("chown")]),t._v(", "),a("code",[t._v("kill")]),t._v(", "),a("code",[t._v("setgid")]),t._v(", and "),a("code",[t._v("setuid")]),t._v(".")])]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'setpcap'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'mknod'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'audit_write'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_raw'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'dac_override'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fowner'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fsetid'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_bind_service'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'sys_chroot'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'setfcap'"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h2",{attrs:{id:"enabling-cloudflare"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare"}},[t._v("#")]),t._v(" Enabling Cloudflare")]),t._v(" "),a("p",[t._v("Enabling Cloudflare on the daemon isn't particularly useful since users do not connect directly to the daemon port, and users need an unproxied hostname to access any servers on the node. As a result it's not possible to conceal the IP address of your node machine, but some people want to enable it regardless.")]),t._v(" "),a("p",[t._v("Cloudflare only proxies the default daemon port (8080) when using HTTP. In order to get the daemon to work with Cloudflare when HTTPS is enabled you must change the daemon port to one that Cloudflare will proxy such as 8443. Since Cloudflare only proxies HTTP/HTTPS traffic for non-enterprise plans you cannot proxy the SFTP port.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/49.1e699f40.js b/assets/js/49.cfd7c84c.js similarity index 98% rename from assets/js/49.1e699f40.js rename to assets/js/49.cfd7c84c.js index 01a001b4..9df8eb54 100644 --- a/assets/js/49.1e699f40.js +++ b/assets/js/49.cfd7c84c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{391:function(e,t,a){"use strict";a.r(t);var s=a(48),o=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"docker-on-debian-8"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker-on-debian-8"}},[e._v("#")]),e._v(" Docker on Debian 8")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#install-docker"}},[e._v("Install Docker")])]),a("li",[a("a",{attrs:{href:"#update-grub-startup"}},[e._v("Update GRUB Startup")])]),a("li",[a("a",{attrs:{href:"#add-backports-repo"}},[e._v("Add Backports Repo")])]),a("li",[a("a",{attrs:{href:"#update-software-setup-docker"}},[e._v("Update Software & Setup Docker")])])])]),a("p"),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("There is a potential for broken software after this upgrade as we are moving to a non-stable kernel (in regards\nto mainline Debian). Please take backups and only proceed if you are comfortable with this process.")])]),e._v(" "),a("h2",{attrs:{id:"install-docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-docker"}},[e._v("#")]),e._v(" Install Docker")]),e._v(" "),a("p",[e._v("To begin with, we're going to install docker just like we would for any other OS by following Docker's\n"),a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("official documentation for Debian"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("Once you've done that, if you run "),a("code",[e._v("docker info")]),e._v(" you'll notice some missing features at the bottom, something\nlike the output below.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("WARNING: No memory limit support\nWARNING: No swap limit support\nWARNING: No kernel memory limit support\nWARNING: No oom kill disable support\nWARNING: No cpu cfs quota support\nWARNING: No cpu cfs period support\n")])])]),a("h2",{attrs:{id:"update-grub-startup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-grub-startup"}},[e._v("#")]),e._v(" Update GRUB Startup")]),e._v(" "),a("p",[e._v("To fix the memory limit support issues, we just need to add two arguments to our default grub startup. Start by\nopening "),a("code",[e._v("/etc/default/grub")]),e._v(" and adding the following arguments to "),a("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(".")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("swapaccount=1 cgroup_enable=memory\n")])])]),a("p",[e._v("The line should then look like the one below — assuming nothing else was in the quote to begin with.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1 cgroup_enable=memory"\n')])])]),a("p",[e._v("After doing that, run "),a("code",[e._v("sudo update-grub")]),e._v(" to update our grub configuration.")]),e._v(" "),a("h2",{attrs:{id:"add-backports-repo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-backports-repo"}},[e._v("#")]),e._v(" Add Backports Repo")]),e._v(" "),a("p",[e._v("We then need to enable the "),a("code",[e._v("jessie-backports")]),e._v(" apt repository to install a newer kernel. To do this, run the commands below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" deb http://http.debian.net/debian jessie-backports main "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" deb http://http.debian.net/debian jessie-backports main contrib non-free "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n")])])]),a("p",[e._v("To find the most recent kernels, run "),a("code",[e._v("apt-cache search linux-image")]),e._v(" which will list all of the ones available. In this\ncase, we'll install the "),a("code",[e._v("4.9.0")]),e._v(" kernel using the command below. Once we've done that, it is time to reboot the server\nto start using this kernel.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -t jessie-backports linux-image-4.9.0-0.bpo.3-amd64\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),a("h2",{attrs:{id:"update-software-setup-docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-software-setup-docker"}},[e._v("#")]),e._v(" Update Software & Setup Docker")]),e._v(" "),a("p",[e._v("Now that we're on the new kernel you probably need to update some software to take advantage of it. To do this,\nsimply run the command below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" upgrade\n")])])]),a("p",[e._v("Once that is done, we need to make an adjustment to docker to use "),a("code",[e._v("overlay2")]),e._v(" rather than "),a("code",[e._v("aufs")]),e._v(" since "),a("code",[e._v("aufs")]),e._v(" is not\nsupported on this kernel currently. Run the command below to do so.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" -i "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s,/usr/bin/dockerd,/usr/bin/dockerd --storage-driver=overlay2,g'")]),e._v(" /lib/systemd/system/docker.service\n")])])]),a("p",[e._v("Finally, update "),a("code",[e._v("systemd")]),e._v(" and start docker using the following commands.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl daemon-reload\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("service")]),e._v(" docker start\n")])])]),a("p",[e._v("Docker should now be running and reporting no errors if you run "),a("code",[e._v("docker info")]),e._v("!")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{390:function(e,t,a){"use strict";a.r(t);var s=a(48),o=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"docker-on-debian-8"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker-on-debian-8"}},[e._v("#")]),e._v(" Docker on Debian 8")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#install-docker"}},[e._v("Install Docker")])]),a("li",[a("a",{attrs:{href:"#update-grub-startup"}},[e._v("Update GRUB Startup")])]),a("li",[a("a",{attrs:{href:"#add-backports-repo"}},[e._v("Add Backports Repo")])]),a("li",[a("a",{attrs:{href:"#update-software-setup-docker"}},[e._v("Update Software & Setup Docker")])])])]),a("p"),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("There is a potential for broken software after this upgrade as we are moving to a non-stable kernel (in regards\nto mainline Debian). Please take backups and only proceed if you are comfortable with this process.")])]),e._v(" "),a("h2",{attrs:{id:"install-docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-docker"}},[e._v("#")]),e._v(" Install Docker")]),e._v(" "),a("p",[e._v("To begin with, we're going to install docker just like we would for any other OS by following Docker's\n"),a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("official documentation for Debian"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("Once you've done that, if you run "),a("code",[e._v("docker info")]),e._v(" you'll notice some missing features at the bottom, something\nlike the output below.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("WARNING: No memory limit support\nWARNING: No swap limit support\nWARNING: No kernel memory limit support\nWARNING: No oom kill disable support\nWARNING: No cpu cfs quota support\nWARNING: No cpu cfs period support\n")])])]),a("h2",{attrs:{id:"update-grub-startup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-grub-startup"}},[e._v("#")]),e._v(" Update GRUB Startup")]),e._v(" "),a("p",[e._v("To fix the memory limit support issues, we just need to add two arguments to our default grub startup. Start by\nopening "),a("code",[e._v("/etc/default/grub")]),e._v(" and adding the following arguments to "),a("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(".")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("swapaccount=1 cgroup_enable=memory\n")])])]),a("p",[e._v("The line should then look like the one below — assuming nothing else was in the quote to begin with.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1 cgroup_enable=memory"\n')])])]),a("p",[e._v("After doing that, run "),a("code",[e._v("sudo update-grub")]),e._v(" to update our grub configuration.")]),e._v(" "),a("h2",{attrs:{id:"add-backports-repo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-backports-repo"}},[e._v("#")]),e._v(" Add Backports Repo")]),e._v(" "),a("p",[e._v("We then need to enable the "),a("code",[e._v("jessie-backports")]),e._v(" apt repository to install a newer kernel. To do this, run the commands below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" deb http://http.debian.net/debian jessie-backports main "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" deb http://http.debian.net/debian jessie-backports main contrib non-free "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n")])])]),a("p",[e._v("To find the most recent kernels, run "),a("code",[e._v("apt-cache search linux-image")]),e._v(" which will list all of the ones available. In this\ncase, we'll install the "),a("code",[e._v("4.9.0")]),e._v(" kernel using the command below. Once we've done that, it is time to reboot the server\nto start using this kernel.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -t jessie-backports linux-image-4.9.0-0.bpo.3-amd64\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),a("h2",{attrs:{id:"update-software-setup-docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-software-setup-docker"}},[e._v("#")]),e._v(" Update Software & Setup Docker")]),e._v(" "),a("p",[e._v("Now that we're on the new kernel you probably need to update some software to take advantage of it. To do this,\nsimply run the command below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" upgrade\n")])])]),a("p",[e._v("Once that is done, we need to make an adjustment to docker to use "),a("code",[e._v("overlay2")]),e._v(" rather than "),a("code",[e._v("aufs")]),e._v(" since "),a("code",[e._v("aufs")]),e._v(" is not\nsupported on this kernel currently. Run the command below to do so.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" -i "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s,/usr/bin/dockerd,/usr/bin/dockerd --storage-driver=overlay2,g'")]),e._v(" /lib/systemd/system/docker.service\n")])])]),a("p",[e._v("Finally, update "),a("code",[e._v("systemd")]),e._v(" and start docker using the following commands.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl daemon-reload\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("service")]),e._v(" docker start\n")])])]),a("p",[e._v("Docker should now be running and reporting no errors if you run "),a("code",[e._v("docker info")]),e._v("!")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/50.fb545b0b.js b/assets/js/50.bb5d310a.js similarity index 98% rename from assets/js/50.fb545b0b.js rename to assets/js/50.bb5d310a.js index 5c0538b5..7a2f0afc 100644 --- a/assets/js/50.fb545b0b.js +++ b/assets/js/50.bb5d310a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{393:function(e,t,n){"use strict";n.r(t);var s=n(48),a=Object(s.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"kernel-modifications"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#kernel-modifications"}},[e._v("#")]),e._v(" Kernel Modifications")]),e._v(" "),n("p"),n("div",{staticClass:"table-of-contents"},[n("ul",[n("li",[n("a",{attrs:{href:"#update-kernel"}},[e._v("Update Kernel")])]),n("li",[n("a",{attrs:{href:"#confirm-kernel"}},[e._v("Confirm Kernel")])]),n("li",[n("a",{attrs:{href:"#set-default-boot"}},[e._v("Set Default Boot")])]),n("li",[n("a",{attrs:{href:"#boot-from-hard-disk"}},[e._v("Boot from hard disk")])])])]),n("p"),e._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),n("p",[e._v("In most cases, only users with a server provided by OVH will need to make any modifications to their kernel.")])]),e._v(" "),n("h2",{attrs:{id:"update-kernel"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#update-kernel"}},[e._v("#")]),e._v(" Update Kernel")]),e._v(" "),n("p",[e._v("Install the new kernels using apt-get. In this case we are installing the latest version of the kernel,\nbut feel free to browse using apt-cache search linux-image-extra to find all possible image versions you can\ninstall. You'll want to install the latest.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt-get")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" linux-image-generic linux-image-extra-virtual\n")])])]),n("p",[e._v("After you've installed the new kernel you'll need to update the grub loader using the command below. After that, a\nserver reboot is in order.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("mv")]),e._v(" /etc/grub.d/06_OVHkernel /etc/grub.d/96_OVHkernel\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),n("h2",{attrs:{id:"confirm-kernel"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#confirm-kernel"}},[e._v("#")]),e._v(" Confirm Kernel")]),e._v(" "),n("p",[e._v("Once you've rebooted, check that the latest kernel is installed using "),n("code",[e._v("uname -r")]),e._v(", it should output "),n("code",[e._v("4.4.0-131-generic")]),e._v("\n(in this case) or similar.")]),e._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),n("p",[e._v("If it still includes "),n("code",[e._v("-xxxx-grs-ipv6-64")]),e._v(" or similar, it didn't work and you should move on top the steps below.")])]),e._v(" "),n("h2",{attrs:{id:"set-default-boot"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#set-default-boot"}},[e._v("#")]),e._v(" Set Default Boot")]),e._v(" "),n("p",[e._v("Ok, so unfortunately the easiest way didn't work, but don't worry, we can still fix this. Firstly, lets run a quick\ncommand to list potential kernels, just look at the output and make sure you see your newly installed kernel listed.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("grep")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[e._v('"menuentry \'"')]),e._v(" /boot/grub/grub.cfg\n")])])]),n("p",[e._v("After running that you should see output similar to the example below.")]),e._v(" "),n("div",{staticClass:"language-text extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-131-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-131-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-131-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-131-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-127-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-127-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-127-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-127-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-116-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-116-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-116-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-116-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n")])])]),n("p",[e._v("As you can see, we have "),n("code",[e._v("Ubuntu, with Linux 4.4.0-131-generic")]),e._v(" listed as the first indented option. To boot using this\nspecific kernel, we will need to modify our grub file.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("nano")]),e._v(" /etc/default/grub\n")])])]),n("p",[e._v("Find "),n("code",[e._v("GRUB_DEFAULT")]),e._v(", it is most likely set to "),n("code",[e._v("GRUB_DEFAULT=0")]),e._v(". We're going to modify it a bit to boot our new kernel.")]),e._v(" "),n("div",{staticClass:"language-text extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-131-generic'\n")])])]),n("p",[e._v("The only part of the code above that you might need to change is the "),n("code",[e._v("4.4.0-131-generic")]),e._v(", which you can find based on\nthe kernel version you install. You might also notice that it matches the first indented entry from the grep menuentry\ncommand and also the version of the kernel that we installed above. Once you've done that, run the commands below to\nupdate grub and reboot, and you should be set.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),n("h2",{attrs:{id:"boot-from-hard-disk"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#boot-from-hard-disk"}},[e._v("#")]),e._v(" Boot from hard disk")]),e._v(" "),n("p",[e._v("It's possible that even after you modified the GRUB configuration the server's still booted into a OVH kernel. If this happens to you, go to the OVH control panel and check the server's booting settings and make sure it's booting from hard disk instead of network boot.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{391:function(e,t,n){"use strict";n.r(t);var s=n(48),a=Object(s.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"kernel-modifications"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#kernel-modifications"}},[e._v("#")]),e._v(" Kernel Modifications")]),e._v(" "),n("p"),n("div",{staticClass:"table-of-contents"},[n("ul",[n("li",[n("a",{attrs:{href:"#update-kernel"}},[e._v("Update Kernel")])]),n("li",[n("a",{attrs:{href:"#confirm-kernel"}},[e._v("Confirm Kernel")])]),n("li",[n("a",{attrs:{href:"#set-default-boot"}},[e._v("Set Default Boot")])]),n("li",[n("a",{attrs:{href:"#boot-from-hard-disk"}},[e._v("Boot from hard disk")])])])]),n("p"),e._v(" "),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),n("p",[e._v("In most cases, only users with a server provided by OVH will need to make any modifications to their kernel.")])]),e._v(" "),n("h2",{attrs:{id:"update-kernel"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#update-kernel"}},[e._v("#")]),e._v(" Update Kernel")]),e._v(" "),n("p",[e._v("Install the new kernels using apt-get. In this case we are installing the latest version of the kernel,\nbut feel free to browse using apt-cache search linux-image-extra to find all possible image versions you can\ninstall. You'll want to install the latest.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt-get")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" linux-image-generic linux-image-extra-virtual\n")])])]),n("p",[e._v("After you've installed the new kernel you'll need to update the grub loader using the command below. After that, a\nserver reboot is in order.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("mv")]),e._v(" /etc/grub.d/06_OVHkernel /etc/grub.d/96_OVHkernel\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),n("h2",{attrs:{id:"confirm-kernel"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#confirm-kernel"}},[e._v("#")]),e._v(" Confirm Kernel")]),e._v(" "),n("p",[e._v("Once you've rebooted, check that the latest kernel is installed using "),n("code",[e._v("uname -r")]),e._v(", it should output "),n("code",[e._v("4.4.0-131-generic")]),e._v("\n(in this case) or similar.")]),e._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),n("p",[e._v("If it still includes "),n("code",[e._v("-xxxx-grs-ipv6-64")]),e._v(" or similar, it didn't work and you should move on top the steps below.")])]),e._v(" "),n("h2",{attrs:{id:"set-default-boot"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#set-default-boot"}},[e._v("#")]),e._v(" Set Default Boot")]),e._v(" "),n("p",[e._v("Ok, so unfortunately the easiest way didn't work, but don't worry, we can still fix this. Firstly, lets run a quick\ncommand to list potential kernels, just look at the output and make sure you see your newly installed kernel listed.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("grep")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[e._v('"menuentry \'"')]),e._v(" /boot/grub/grub.cfg\n")])])]),n("p",[e._v("After running that you should see output similar to the example below.")]),e._v(" "),n("div",{staticClass:"language-text extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-131-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-131-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-131-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-131-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-127-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-127-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-127-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-127-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-116-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-116-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n menuentry 'Ubuntu, with Linux 4.4.0-116-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-116-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {\n")])])]),n("p",[e._v("As you can see, we have "),n("code",[e._v("Ubuntu, with Linux 4.4.0-131-generic")]),e._v(" listed as the first indented option. To boot using this\nspecific kernel, we will need to modify our grub file.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("nano")]),e._v(" /etc/default/grub\n")])])]),n("p",[e._v("Find "),n("code",[e._v("GRUB_DEFAULT")]),e._v(", it is most likely set to "),n("code",[e._v("GRUB_DEFAULT=0")]),e._v(". We're going to modify it a bit to boot our new kernel.")]),e._v(" "),n("div",{staticClass:"language-text extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-131-generic'\n")])])]),n("p",[e._v("The only part of the code above that you might need to change is the "),n("code",[e._v("4.4.0-131-generic")]),e._v(", which you can find based on\nthe kernel version you install. You might also notice that it matches the first indented entry from the grep menuentry\ncommand and also the version of the kernel that we installed above. Once you've done that, run the commands below to\nupdate grub and reboot, and you should be set.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),n("h2",{attrs:{id:"boot-from-hard-disk"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#boot-from-hard-disk"}},[e._v("#")]),e._v(" Boot from hard disk")]),e._v(" "),n("p",[e._v("It's possible that even after you modified the GRUB configuration the server's still booted into a OVH kernel. If this happens to you, go to the OVH control panel and check the server's booting settings and make sure it's booting from hard disk instead of network boot.")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/51.8bf819d3.js b/assets/js/51.d64eea25.js similarity index 98% rename from assets/js/51.8bf819d3.js rename to assets/js/51.d64eea25.js index 9366941e..7e28fe46 100644 --- a/assets/js/51.8bf819d3.js +++ b/assets/js/51.d64eea25.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{394:function(e,t,s){"use strict";s.r(t);var a=s(48),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"standalone-sftp-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#standalone-sftp-server"}},[e._v("#")]),e._v(" Standalone SFTP Server")]),e._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),s("p",[e._v("This documentation is for "),s("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),s("p",[e._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("Standalone SFTP support was introduced in "),s("code",[e._v("Panel@v0.7.11")]),e._v(" and "),s("code",[e._v("Daemon@v0.6.8")]),e._v(" and will not work with prior versions.")])]),e._v(" "),s("p",[e._v("Pterodactyl now ships with the option to use a "),s("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server",target:"_blank",rel:"noopener noreferrer"}},[e._v("standalone SFTP server"),s("OutboundLink")],1),e._v("\nrather than using the one that was built into the Daemon. This provides better compatibility with SFTP clients, improved\ntransfer speeds, and a more native approach to file handling and server operation.")]),e._v(" "),s("p",[e._v("Because this functionality is new, we've decided to make it an opt-in process, rather than an opt-out process. This page\nwill cover how to setup your standalone SFTP server.")]),e._v(" "),s("h2",{attrs:{id:"disable-daemon-s-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#disable-daemon-s-server"}},[e._v("#")]),e._v(" Disable Daemon's Server")]),e._v(" "),s("p",[e._v("To disable the Daemon SFTP server, you only need to add "),s("code",[e._v("sftp.enabled=false")]),e._v(" to your Daemon's "),s("code",[e._v("core.json")]),e._v(" file.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"sftp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"ip"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enabled"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("Once you've done that, restarting the Daemon will apply the change and not boot the built-in server.")]),e._v(" "),s("h2",{attrs:{id:"run-the-standalone-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-the-standalone-server"}},[e._v("#")]),e._v(" Run the Standalone Server")]),e._v(" "),s("p",[e._v("To download the standalone server, execute the command below in your Daemon's base directory (generally "),s("code",[e._v("/srv/daemon")]),e._v(").")]),e._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -Lo sftp-server https://github.com/pterodactyl/sftp-server/releases/download/v1.0.5/sftp-server\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" +x sftp-server\n")])])]),s("p",[e._v("Excellent, now you've got the server binary. Because we've written this server using "),s("a",{attrs:{href:"https://golang.org",target:"_blank",rel:"noopener noreferrer"}},[s("code",[e._v("go")]),s("OutboundLink")],1),e._v(" there\nare no additional dependencies you need to install.")]),e._v(" "),s("h3",{attrs:{id:"start-the-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-the-server"}},[e._v("#")]),e._v(" Start the Server")]),e._v(" "),s("p",[e._v("Finally, start the SFTP server so that you can then use it to access your files.")]),e._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("./sftp-server\n")])])]),s("p",[e._v("By default, this will start the SFTP server on the old port of "),s("code",[e._v("2022")]),e._v(". If you want to use a different port it can be\nspecified by passing the "),s("code",[e._v("--port")]),e._v(" flag. For more advanced usage, please refer to the "),s("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server/tree/release/v1.0.4#running",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub README"),s("OutboundLink")],1),e._v("\nwhich includes all of the flags and their default values.")]),e._v(" "),s("h2",{attrs:{id:"daemonize-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-server"}},[e._v("#")]),e._v(" Daemonize Server")]),e._v(" "),s("p",[e._v("Chances are you'll want to daemonize the SFTP server using something like "),s("code",[e._v("systemd")]),e._v(" so that it will run in the\nbackground. Place the contents below in a file called "),s("code",[e._v("pterosftp.service")]),e._v(" in the "),s("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("[Unit]\nDescription=Pterodactyl Standalone SFTP Server\nAfter=wings.service\n\n[Service]\nUser=root\nWorkingDirectory=/srv/daemon\nLimitNOFILE=4096\nPIDFile=/var/run/wings/sftp.pid\nExecStart=/srv/daemon/sftp-server\nRestart=on-failure\nStartLimitInterval=600\n\n[Install]\nWantedBy=multi-user.target\n")])])]),s("p",[e._v("Then, run the command below to enable it in systemd and start the SFTP server.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now pterosftp\n")])])]),s("h3",{attrs:{id:"customizing-startup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#customizing-startup"}},[e._v("#")]),e._v(" Customizing Startup")]),e._v(" "),s("p",[e._v("If you're trying to pass additional arguments to the server when starting it using SystemD you'll want to modify\nthe "),s("code",[e._v("ExecStart")]),e._v(" line. Something like "),s("code",[e._v("ExecStart=/srv/daemon/sftp-server --port 2022")]),e._v(" for example.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{392:function(e,t,s){"use strict";s.r(t);var a=s(48),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"standalone-sftp-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#standalone-sftp-server"}},[e._v("#")]),e._v(" Standalone SFTP Server")]),e._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),s("p",[e._v("This documentation is for "),s("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),s("p",[e._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("Standalone SFTP support was introduced in "),s("code",[e._v("Panel@v0.7.11")]),e._v(" and "),s("code",[e._v("Daemon@v0.6.8")]),e._v(" and will not work with prior versions.")])]),e._v(" "),s("p",[e._v("Pterodactyl now ships with the option to use a "),s("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server",target:"_blank",rel:"noopener noreferrer"}},[e._v("standalone SFTP server"),s("OutboundLink")],1),e._v("\nrather than using the one that was built into the Daemon. This provides better compatibility with SFTP clients, improved\ntransfer speeds, and a more native approach to file handling and server operation.")]),e._v(" "),s("p",[e._v("Because this functionality is new, we've decided to make it an opt-in process, rather than an opt-out process. This page\nwill cover how to setup your standalone SFTP server.")]),e._v(" "),s("h2",{attrs:{id:"disable-daemon-s-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#disable-daemon-s-server"}},[e._v("#")]),e._v(" Disable Daemon's Server")]),e._v(" "),s("p",[e._v("To disable the Daemon SFTP server, you only need to add "),s("code",[e._v("sftp.enabled=false")]),e._v(" to your Daemon's "),s("code",[e._v("core.json")]),e._v(" file.")]),e._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"sftp"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"ip"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enabled"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[e._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),s("p",[e._v("Once you've done that, restarting the Daemon will apply the change and not boot the built-in server.")]),e._v(" "),s("h2",{attrs:{id:"run-the-standalone-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#run-the-standalone-server"}},[e._v("#")]),e._v(" Run the Standalone Server")]),e._v(" "),s("p",[e._v("To download the standalone server, execute the command below in your Daemon's base directory (generally "),s("code",[e._v("/srv/daemon")]),e._v(").")]),e._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -Lo sftp-server https://github.com/pterodactyl/sftp-server/releases/download/v1.0.5/sftp-server\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" +x sftp-server\n")])])]),s("p",[e._v("Excellent, now you've got the server binary. Because we've written this server using "),s("a",{attrs:{href:"https://golang.org",target:"_blank",rel:"noopener noreferrer"}},[s("code",[e._v("go")]),s("OutboundLink")],1),e._v(" there\nare no additional dependencies you need to install.")]),e._v(" "),s("h3",{attrs:{id:"start-the-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-the-server"}},[e._v("#")]),e._v(" Start the Server")]),e._v(" "),s("p",[e._v("Finally, start the SFTP server so that you can then use it to access your files.")]),e._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[e._v("./sftp-server\n")])])]),s("p",[e._v("By default, this will start the SFTP server on the old port of "),s("code",[e._v("2022")]),e._v(". If you want to use a different port it can be\nspecified by passing the "),s("code",[e._v("--port")]),e._v(" flag. For more advanced usage, please refer to the "),s("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server/tree/release/v1.0.4#running",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub README"),s("OutboundLink")],1),e._v("\nwhich includes all of the flags and their default values.")]),e._v(" "),s("h2",{attrs:{id:"daemonize-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-server"}},[e._v("#")]),e._v(" Daemonize Server")]),e._v(" "),s("p",[e._v("Chances are you'll want to daemonize the SFTP server using something like "),s("code",[e._v("systemd")]),e._v(" so that it will run in the\nbackground. Place the contents below in a file called "),s("code",[e._v("pterosftp.service")]),e._v(" in the "),s("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("[Unit]\nDescription=Pterodactyl Standalone SFTP Server\nAfter=wings.service\n\n[Service]\nUser=root\nWorkingDirectory=/srv/daemon\nLimitNOFILE=4096\nPIDFile=/var/run/wings/sftp.pid\nExecStart=/srv/daemon/sftp-server\nRestart=on-failure\nStartLimitInterval=600\n\n[Install]\nWantedBy=multi-user.target\n")])])]),s("p",[e._v("Then, run the command below to enable it in systemd and start the SFTP server.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now pterosftp\n")])])]),s("h3",{attrs:{id:"customizing-startup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#customizing-startup"}},[e._v("#")]),e._v(" Customizing Startup")]),e._v(" "),s("p",[e._v("If you're trying to pass additional arguments to the server when starting it using SystemD you'll want to modify\nthe "),s("code",[e._v("ExecStart")]),e._v(" line. Something like "),s("code",[e._v("ExecStart=/srv/daemon/sftp-server --port 2022")]),e._v(" for example.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/52.c0fa38e2.js b/assets/js/52.f8d82074.js similarity index 98% rename from assets/js/52.c0fa38e2.js rename to assets/js/52.f8d82074.js index 07041936..230f961d 100644 --- a/assets/js/52.c0fa38e2.js +++ b/assets/js/52.f8d82074.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{395:function(e,t,a){"use strict";a.r(t);var o=a(48),n=Object(o.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"upgrading-0-4-x-to-0-5-x"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-4-x-to-0-5-x"}},[e._v("#")]),e._v(" Upgrading 0.4.X to 0.5.X")]),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),a("p",[e._v("This documentation is for "),a("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),a("p",[e._v("You should be installing and using "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),a("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#docker-adjustments"}},[e._v("Docker Adjustments")])]),a("li",[a("a",{attrs:{href:"#download-files"}},[e._v("Download Files")])]),a("li",[a("a",{attrs:{href:"#sftp-cleanup"}},[e._v("SFTP Cleanup")])]),a("li",[a("a",{attrs:{href:"#file-migration"}},[e._v("File Migration")]),a("ul",[a("li",[a("a",{attrs:{href:"#rebuild-containers"}},[e._v("Rebuild Containers")])])])])])]),a("p"),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),a("p",[e._v("This upgrade process will require that "),a("strong",[e._v("all")]),e._v(" servers running through the Daemon be offline for a short period\nof time while data is reorganized and server containers are rebuilt. Please plan accordingly for this.")]),e._v(" "),a("p",[e._v("You will need to update your Panel to the 0.7.X series in order to complete this process as well.")])]),e._v(" "),a("h2",{attrs:{id:"docker-adjustments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker-adjustments"}},[e._v("#")]),e._v(" Docker Adjustments")]),e._v(" "),a("p",[e._v("Previously we provided a quick Docker installation script in our installation instructions. We made the regrettable\nmistake of not reading deeper into it and realizing it enabled edge release channels for Docker. You'll want to take\na look at the official documentation for Docker and change your channel to be a stable release channel.")]),e._v(" "),a("p",[e._v("Please reference the official Docker documentation for how to install Docker CE on your server. Some quick links\nare listed below for commonly supported systems.")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"download-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),a("p",[e._v("To upgrade from v0.4.X first switch the directory where you installed your Daemon. If you followed the installation\nguide your Daemon is most likely located in "),a("code",[e._v("/srv/daemon")]),e._v(". Then, download and unpack the archive using the\ncommand below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" -xzv\n")])])]),a("p",[e._v("Then, update the core dependencies for the Daemon with the following command.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" update --only"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production\n")])])]),a("h2",{attrs:{id:"sftp-cleanup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sftp-cleanup"}},[e._v("#")]),e._v(" SFTP Cleanup")]),e._v(" "),a("p",[e._v("This version of the Daemon ships with an internal SFTP subsystem, no more need for a special Docker container or\nconfusing file permissions. For the most part the Daemon can handle all of the internal changes that make this possible,\nyou'll just need to remove the old Docker container for SFTP.")]),e._v(" "),a("p",[e._v("To do so, simply run the following commands, changing "),a("code",[e._v("2022")]),e._v(" if you are using a different port.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("docker rmi -f quay.io/pterodactyl/scrappy\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("kill")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("lsof")]),e._v(" -i:2022 -t "),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n")])])]),a("p",[e._v("Once you have completed that step, you will need to boot the Daemon in order to have the new system user created\nautomatically. This can be done by running "),a("code",[e._v("sudo npm start")]),e._v(" in the Daemon directory. You'll want to run it in the\nforeground in order to monitor progress and make sure it executes without issues. Once it has finished running and\nthe Daemon is up and running, stop it again using "),a("code",[e._v("CTRL+C")]),e._v(".")]),e._v(" "),a("p",[e._v("If for whatever reason you need your user to be named something other than "),a("code",[e._v("pterodactyl")]),e._v(" you can change that in the\n"),a("code",[e._v("core.json")]),e._v(" before booting the Daemon by setting the "),a("code",[e._v("docker.container.username")]),e._v(" key. 99.9% of users will not need\nto change the username.")]),e._v(" "),a("h2",{attrs:{id:"file-migration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#file-migration"}},[e._v("#")]),e._v(" File Migration")]),e._v(" "),a("p",[e._v("Now for the longest part of the upgrade: data migration. You only need to migrate data once when updating from v0.4.X.")]),e._v(" "),a("p",[e._v("You'll need all of your servers to be stopped for this part of the migration. All of their containers will also need\nto be rebuilt, but this will be completed on the Panel with a console command since we also need to update their\nconfigurations with some new data. We will run that command after we migrate all of the data.")]),e._v(" "),a("p",[e._v("To perform this migration, simply run the command below in the Daemon directory and follow its prompts. Be aware it\nmight take a few minutes to run, especially with large volumes of data.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run migrate\ndocker system prune\n")])])]),a("h3",{attrs:{id:"rebuild-containers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rebuild-containers"}},[e._v("#")]),e._v(" Rebuild Containers")]),e._v(" "),a("p",[e._v("After migrating your data, you'll also need to run a command on the Panel in order to update all of the configurations\nfor these servers. First, be sure to boot the Daemon in foreground mode ("),a("code",[e._v("sudo npm start")]),e._v("). You'll then want to run the\nfollowing command in the Panel directory, "),a("strong",[e._v("not the Daemon directory")]),e._v(".")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan p:server:rebuild --node"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])]),a("p",[e._v("Replace "),a("code",[e._v("###")]),e._v(" above with the ID of your node that is being updated. This will toggle all servers for a rebuild, as\nwell as push the latest information to their configurations. Once this is done, stop the Daemon, run the command below,\nand then boot it. If you have all daemons running and wish to update them all at once, remove the "),a("code",[e._v("--node")]),e._v(" flag.")]),e._v(" "),a("p",[e._v("Boot the Daemon one last time in the foreground, make sure it completes without errors, and then you can stop it and\nrestart it using your service: "),a("code",[e._v("sudo systemctl start wings")]),e._v(".")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Thanks!")]),e._v(" "),a("p",[e._v("You're all finished! Thanks for bearing with us, this update addresses a lot of flaws in the previous implementations\nof the software, and also prepares your data for the eventual migration to our new daemon — which is still in the works.")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{393:function(e,t,a){"use strict";a.r(t);var o=a(48),n=Object(o.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"upgrading-0-4-x-to-0-5-x"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-4-x-to-0-5-x"}},[e._v("#")]),e._v(" Upgrading 0.4.X to 0.5.X")]),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),a("p",[e._v("This documentation is for "),a("strong",[e._v("abandoned software")]),e._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),e._v(" "),a("p",[e._v("You should be installing and using "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),a("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#docker-adjustments"}},[e._v("Docker Adjustments")])]),a("li",[a("a",{attrs:{href:"#download-files"}},[e._v("Download Files")])]),a("li",[a("a",{attrs:{href:"#sftp-cleanup"}},[e._v("SFTP Cleanup")])]),a("li",[a("a",{attrs:{href:"#file-migration"}},[e._v("File Migration")]),a("ul",[a("li",[a("a",{attrs:{href:"#rebuild-containers"}},[e._v("Rebuild Containers")])])])])])]),a("p"),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),a("p",[e._v("This upgrade process will require that "),a("strong",[e._v("all")]),e._v(" servers running through the Daemon be offline for a short period\nof time while data is reorganized and server containers are rebuilt. Please plan accordingly for this.")]),e._v(" "),a("p",[e._v("You will need to update your Panel to the 0.7.X series in order to complete this process as well.")])]),e._v(" "),a("h2",{attrs:{id:"docker-adjustments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker-adjustments"}},[e._v("#")]),e._v(" Docker Adjustments")]),e._v(" "),a("p",[e._v("Previously we provided a quick Docker installation script in our installation instructions. We made the regrettable\nmistake of not reading deeper into it and realizing it enabled edge release channels for Docker. You'll want to take\na look at the official documentation for Docker and change your channel to be a stable release channel.")]),e._v(" "),a("p",[e._v("Please reference the official Docker documentation for how to install Docker CE on your server. Some quick links\nare listed below for commonly supported systems.")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),a("OutboundLink")],1)]),e._v(" "),a("li",[a("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),a("OutboundLink")],1)])]),e._v(" "),a("h2",{attrs:{id:"download-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),a("p",[e._v("To upgrade from v0.4.X first switch the directory where you installed your Daemon. If you followed the installation\nguide your Daemon is most likely located in "),a("code",[e._v("/srv/daemon")]),e._v(". Then, download and unpack the archive using the\ncommand below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" -xzv\n")])])]),a("p",[e._v("Then, update the core dependencies for the Daemon with the following command.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" update --only"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production\n")])])]),a("h2",{attrs:{id:"sftp-cleanup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sftp-cleanup"}},[e._v("#")]),e._v(" SFTP Cleanup")]),e._v(" "),a("p",[e._v("This version of the Daemon ships with an internal SFTP subsystem, no more need for a special Docker container or\nconfusing file permissions. For the most part the Daemon can handle all of the internal changes that make this possible,\nyou'll just need to remove the old Docker container for SFTP.")]),e._v(" "),a("p",[e._v("To do so, simply run the following commands, changing "),a("code",[e._v("2022")]),e._v(" if you are using a different port.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("docker rmi -f quay.io/pterodactyl/scrappy\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("kill")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("lsof")]),e._v(" -i:2022 -t "),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n")])])]),a("p",[e._v("Once you have completed that step, you will need to boot the Daemon in order to have the new system user created\nautomatically. This can be done by running "),a("code",[e._v("sudo npm start")]),e._v(" in the Daemon directory. You'll want to run it in the\nforeground in order to monitor progress and make sure it executes without issues. Once it has finished running and\nthe Daemon is up and running, stop it again using "),a("code",[e._v("CTRL+C")]),e._v(".")]),e._v(" "),a("p",[e._v("If for whatever reason you need your user to be named something other than "),a("code",[e._v("pterodactyl")]),e._v(" you can change that in the\n"),a("code",[e._v("core.json")]),e._v(" before booting the Daemon by setting the "),a("code",[e._v("docker.container.username")]),e._v(" key. 99.9% of users will not need\nto change the username.")]),e._v(" "),a("h2",{attrs:{id:"file-migration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#file-migration"}},[e._v("#")]),e._v(" File Migration")]),e._v(" "),a("p",[e._v("Now for the longest part of the upgrade: data migration. You only need to migrate data once when updating from v0.4.X.")]),e._v(" "),a("p",[e._v("You'll need all of your servers to be stopped for this part of the migration. All of their containers will also need\nto be rebuilt, but this will be completed on the Panel with a console command since we also need to update their\nconfigurations with some new data. We will run that command after we migrate all of the data.")]),e._v(" "),a("p",[e._v("To perform this migration, simply run the command below in the Daemon directory and follow its prompts. Be aware it\nmight take a few minutes to run, especially with large volumes of data.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run migrate\ndocker system prune\n")])])]),a("h3",{attrs:{id:"rebuild-containers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rebuild-containers"}},[e._v("#")]),e._v(" Rebuild Containers")]),e._v(" "),a("p",[e._v("After migrating your data, you'll also need to run a command on the Panel in order to update all of the configurations\nfor these servers. First, be sure to boot the Daemon in foreground mode ("),a("code",[e._v("sudo npm start")]),e._v("). You'll then want to run the\nfollowing command in the Panel directory, "),a("strong",[e._v("not the Daemon directory")]),e._v(".")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan p:server:rebuild --node"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])]),a("p",[e._v("Replace "),a("code",[e._v("###")]),e._v(" above with the ID of your node that is being updated. This will toggle all servers for a rebuild, as\nwell as push the latest information to their configurations. Once this is done, stop the Daemon, run the command below,\nand then boot it. If you have all daemons running and wish to update them all at once, remove the "),a("code",[e._v("--node")]),e._v(" flag.")]),e._v(" "),a("p",[e._v("Boot the Daemon one last time in the foreground, make sure it completes without errors, and then you can stop it and\nrestart it using your service: "),a("code",[e._v("sudo systemctl start wings")]),e._v(".")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Thanks!")]),e._v(" "),a("p",[e._v("You're all finished! Thanks for bearing with us, this update addresses a lot of flaws in the previous implementations\nof the software, and also prepares your data for the eventual migration to our new daemon — which is still in the works.")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/53.acaa8c4b.js b/assets/js/53.d13c315a.js similarity index 97% rename from assets/js/53.acaa8c4b.js rename to assets/js/53.d13c315a.js index 5f8f090a..cc95080b 100644 --- a/assets/js/53.acaa8c4b.js +++ b/assets/js/53.d13c315a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{396:function(t,e,s){"use strict";s.r(e);var a=s(48),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"upgrading-0-5-series"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-5-series"}},[t._v("#")]),t._v(" Upgrading 0.5 Series")]),t._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),s("p",[t._v("This documentation is for "),s("strong",[t._v("abandoned software")]),t._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),t._v(" "),s("p",[t._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("Your servers will not go offline during this process thanks to Docker. Clients will briefly lose connection\nto the Daemon from the Panel, but only during the restart phase.")])]),t._v(" "),s("h2",{attrs:{id:"download-newest-release"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-newest-release"}},[t._v("#")]),t._v(" Download Newest Release")]),t._v(" "),s("p",[t._v("First, ensure you're in the Daemon directory, "),s("code",[t._v("/srv/daemon")]),t._v(", before continuing through this process. After you've done\nthat, run the command below to pull down the latest files and unpack them in the daemon directory.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -L https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("tar")]),t._v(" --strip-components"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" -xzv\n")])])]),s("h2",{attrs:{id:"update-components"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#update-components"}},[t._v("#")]),t._v(" Update Components")]),t._v(" "),s("p",[t._v("After you've pulled down the latest files the last thing you need to do is run the commands below to update the\ncomponents and then restart the daemon.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" update --only"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("production\nsystemctl restart wings\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{395:function(t,e,s){"use strict";s.r(e);var a=s(48),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"upgrading-0-5-series"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-5-series"}},[t._v("#")]),t._v(" Upgrading 0.5 Series")]),t._v(" "),s("div",{staticClass:"custom-block danger"},[s("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),s("p",[t._v("This documentation is for "),s("strong",[t._v("abandoned software")]),t._v(" which does not recieve any security updates or support\nfrom the community. This documentation has been left accessible for historial reasons.")]),t._v(" "),s("p",[t._v("You should be installing and using "),s("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("Your servers will not go offline during this process thanks to Docker. Clients will briefly lose connection\nto the Daemon from the Panel, but only during the restart phase.")])]),t._v(" "),s("h2",{attrs:{id:"download-newest-release"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-newest-release"}},[t._v("#")]),t._v(" Download Newest Release")]),t._v(" "),s("p",[t._v("First, ensure you're in the Daemon directory, "),s("code",[t._v("/srv/daemon")]),t._v(", before continuing through this process. After you've done\nthat, run the command below to pull down the latest files and unpack them in the daemon directory.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -L https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("tar")]),t._v(" --strip-components"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" -xzv\n")])])]),s("h2",{attrs:{id:"update-components"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#update-components"}},[t._v("#")]),t._v(" Update Components")]),t._v(" "),s("p",[t._v("After you've pulled down the latest files the last thing you need to do is run the commands below to update the\ncomponents and then restart the daemon.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("npm")]),t._v(" update --only"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("production\nsystemctl restart wings\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/8.e59205fd.js b/assets/js/8.f62ead52.js similarity index 75% rename from assets/js/8.e59205fd.js rename to assets/js/8.f62ead52.js index ba73680c..f0f2bcb3 100644 --- a/assets/js/8.e59205fd.js +++ b/assets/js/8.f62ead52.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8,10,27],{312:function(t,e,s){"use strict";s.d(e,"d",(function(){return i})),s.d(e,"a",(function(){return a})),s.d(e,"j",(function(){return o})),s.d(e,"i",(function(){return c})),s.d(e,"f",(function(){return l})),s.d(e,"g",(function(){return u})),s.d(e,"h",(function(){return h})),s.d(e,"b",(function(){return d})),s.d(e,"e",(function(){return p})),s.d(e,"l",(function(){return f})),s.d(e,"m",(function(){return v})),s.d(e,"c",(function(){return g})),s.d(e,"k",(function(){return m}));s(26),s(51),s(180),s(73),s(107),s(49),s(104),s(50),s(313),s(70),s(316),s(52);var n=s(108),i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,o=/^(https?:|mailto:|tel:)/;function c(t){return decodeURI(t).replace(i,"").replace(r,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function h(t){return/^tel:/.test(t)}function d(t){if(l(t))return t;var e=t.match(i),s=e?e[0]:"",n=c(t);return a.test(n)?t:n+".html"+s}function p(t,e){var s=t.hash,n=function(t){var e=t.match(i);if(e)return e[0]}(e);return(!n||s===n)&&c(t.path)===c(e)}function f(t,e,s){s&&(e=function(t,e,s){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var i=e.split("/");s&&i[i.length-1]||i.pop();for(var r=t.replace(/^\//,"").split("/"),a=0;a1||"".split(/.?/).length?function(t,s){var n=String(a(this)),r=void 0===s?4294967295:s>>>0;if(0===r)return[];if(void 0===t)return[n];if(!i(t))return e.call(n,t,r);for(var o,c,l,u=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),f=0,v=new RegExp(t.source,d+"g");(o=h.call(v,n))&&!((c=v.lastIndex)>f&&(u.push(n.slice(f,o.index)),o.length>1&&o.index=r));)v.lastIndex===o.index&&v.lastIndex++;return f===n.length?!l&&v.test("")||u.push(""):u.push(n.slice(f)),u.length>r?u.slice(0,r):u}:"0".split(void 0,0).length?function(t,s){return void 0===t&&0===s?[]:e.call(this,t,s)}:e,[function(e,s){var i=a(this),r=null==e?void 0:e[t];return void 0!==r?r.call(e,i,s):n.call(String(i),e,s)},function(t,i){var a=s(n,t,this,i,n!==e);if(a.done)return a.value;var h=r(t),d=String(this),p=o(h,RegExp),g=h.unicode,m=(h.ignoreCase?"i":"")+(h.multiline?"m":"")+(h.unicode?"u":"")+(v?"y":"g"),y=new p(v?h:"^(?:"+h.source+")",m),_=void 0===i?4294967295:i>>>0;if(0===_)return[];if(0===d.length)return null===u(y,d)?[d]:[];for(var k=0,b=0,C=[];b"+a+""}},319:function(t,e,s){var n=s(2);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},330:function(t,e,s){"use strict";s.r(e);var n=s(328),i=s.n(n);if("undefined"!=typeof window)s(335);var r={props:{options:{type:Object,default:function(){return{}}}},mounted:function(){this.create()},destroyed:function(){i()(this.$el).slick("unslick")},methods:{create:function(){var t=i()(this.$el);t.on("afterChange",this.onAfterChange),t.on("beforeChange",this.onBeforeChange),t.on("breakpoint",this.onBreakpoint),t.on("destroy",this.onDestroy),t.on("edge",this.onEdge),t.on("init",this.onInit),t.on("reInit",this.onReInit),t.on("setPosition",this.onSetPosition),t.on("swipe",this.onSwipe),t.on("lazyLoaded",this.onLazyLoaded),t.on("lazyLoadError",this.onLazyLoadError),t.slick(this.options)},destroy:function(){var t=i()(this.$el);t.off("afterChange",this.onAfterChange),t.off("beforeChange",this.onBeforeChange),t.off("breakpoint",this.onBreakpoint),t.off("destroy",this.onDestroy),t.off("edge",this.onEdge),t.off("init",this.onInit),t.off("reInit",this.onReInit),t.off("setPosition",this.onSetPosition),t.off("swipe",this.onSwipe),t.off("lazyLoaded",this.onLazyLoaded),t.off("lazyLoadError",this.onLazyLoadError),i()(this.$el).slick("unslick")},reSlick:function(){this.destroy(),this.create()},next:function(){i()(this.$el).slick("slickNext")},prev:function(){i()(this.$el).slick("slickPrev")},pause:function(){i()(this.$el).slick("slickPause")},play:function(){i()(this.$el).slick("slickPlay")},goTo:function(t,e){i()(this.$el).slick("slickGoTo",t,e)},currentSlide:function(){return i()(this.$el).slick("slickCurrentSlide")},add:function(t,e,s){i()(this.$el).slick("slickAdd",t,e,s)},remove:function(t,e){i()(this.$el).slick("slickRemove",t,e)},filter:function(t){i()(this.$el).slick("slickFilter",t)},unfilter:function(){i()(this.$el).slick("slickUnfilter")},getOption:function(t){i()(this.$el).slick("slickGetOption",t)},setOption:function(t,e,s){i()(this.$el).slick("slickSetOption",t,e,s)},setPosition:function(){i()(this.$el).slick("setPosition")},onAfterChange:function(t,e,s){this.$emit("afterChange",t,e,s)},onBeforeChange:function(t,e,s,n){this.$emit("beforeChange",t,e,s,n)},onBreakpoint:function(t,e,s){this.$emit("breakpoint",t,e,s)},onDestroy:function(t,e){this.$emit("destroy",t,e)},onEdge:function(t,e,s){this.$emit("edge",t,e,s)},onInit:function(t,e){this.$emit("init",t,e)},onReInit:function(t,e){this.$emit("reInit",t,e)},onSetPosition:function(t,e){this.$emit("setPosition",t,e)},onSwipe:function(t,e,s){this.$emit("swipe",t,e,s)},onLazyLoaded:function(t,e,s,n){this.$emit("lazyLoaded",t,e,s,n)},onLazyLoadError:function(t,e,s,n){this.$emit("lazyLoadError",t,e,s,n)}}},a=s(48),o=Object(a.a)(r,(function(){var t=this.$createElement;return(this._self._c||t)("div",[this._t("default")],2)}),[],!1,null,null,null);e.default=o.exports},341:function(t,e,s){"use strict";s.r(e);var n=s(315),i=s(330),r={components:{NavLink:n.default,Slick:i.default},data:function(){return{slickOptions:{slidesToShow:1,centerMode:!0,centerPadding:"0",speed:1e3,autoplay:!0,variableWidth:!0,arrows:!1,dots:!0,pauseOnHover:!1,pauseOnDotsHover:!0}}},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},a=s(48),o=Object(a.a)(r,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"home"},[s("div",{staticClass:"header section bg-blue text-grey-lightest less-padding emphasize"},[s("div",{staticClass:"container z-10"},[s("div",{staticClass:"text-center"},[t._m(0),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/panel/getting_started.html"}},[t._v("Let's Get Started!")])],1)])])]),t._v(" "),t._m(1),t._v(" "),t._m(2),t._v(" "),s("div",{staticClass:"section bg-white"},[s("div",{staticClass:"text-center"},[s("h1",[t._v("Screenshots")]),t._v(" "),s("div",{staticClass:"screenshots"},[s("slick",{ref:"slick",attrs:{options:t.slickOptions}},[s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}})])])],1)])]),t._v(" "),s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",[t._v("Get Started")]),t._v(" "),s("p",{staticClass:"m-4"},[t._v("Ready to fly on the Pterodactyl?")]),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/project/introduction.html"}},[t._v("About the project")]),t._v(" "),s("a",{staticClass:"btn inline-block",attrs:{href:"https://discord.gg/pterodactyl"}},[t._v("Discord")])],1)])]),t._v(" "),s("div",{staticClass:"section bg-black text-grey-lighter text-sm less-padding"},[s("div",{staticClass:"container text-center"},[s("div",[s("img",{staticClass:"h-20",attrs:{src:t.$withBase("logos/banner_logo.png"),alt:"pterodactyl banner logo"}})]),t._v(" "),t._m(3),t._v(" "),s("div",{staticClass:"footer"},[t._v("MIT Licensed | Pterodactyl® Copyright © 2015 - 2022 Dane Everitt & contributors.")])])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("img",{staticClass:"max-w-xl w-full inline-block",attrs:{src:"https://cdn.pterodactyl.io/logos/new/pterodactyl_logo_transparent.png",alt:"Pterodactyl"}})])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"section bg-white"},[e("div",{staticClass:"container text-center"},[e("h1",{staticClass:"text-blue mb-4"},[this._v("Pterodactyl Panel")]),this._v(" "),e("h3",{staticClass:"border-0 font-normal leading-normal mx-auto",staticStyle:{"max-width":"50rem"}},[this._v("\n Pterodactyl is a free, open-source game server management panel built with PHP, React, and Go.\n Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers\n while exposing a beautiful and intuitive UI to end users.\n ")]),this._v(" "),e("h3",{staticClass:"border-0 leading-normal mx-auto mt-4",staticStyle:{"max-width":"50rem"}},[this._v("\n Stop settling for less. Make game servers a first class citizen on your platform.\n ")]),this._v(" "),e("img",{staticClass:"max-w-lg w-full m-4 inline-block",attrs:{src:"https://cdn.pterodactyl.io/site-assets/mockup-macbook-grey-1.0.png"}})])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",{staticClass:"mb-4"},[t._v("Why Pterodactyl")]),t._v(" "),s("div",{staticClass:"flex flex-wrap"},[s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-lock"})]),t._v(" "),s("h3",[t._v("Security First")]),t._v(" "),s("p",[t._v("Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-beaker"})]),t._v(" "),s("h3",[t._v("Modern Tooling")]),t._v(" "),s("p",[t._v("Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-anchor"})]),t._v(" "),s("h3",[t._v("Docker to the Core")]),t._v(" "),s("p",[t._v("All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-wallet"})]),t._v(" "),s("h3",[t._v("Free & Open Source")]),t._v(" "),s("p",[t._v("Pterodactyl is 100% free and licensed under a MIT license. All of our code is completely open source as well.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-browser"})]),t._v(" "),s("h3",[t._v("User Friendly")]),t._v(" "),s("p",[t._v("Save the furious clicking and screaming for Overwatch. Pterodactyl's interface is designed so well even Hanzo can use it.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-expand"})]),t._v(" "),s("h3",[t._v("Scalable")]),t._v(" "),s("p",[t._v("Whether you're a hosting company, the next Hyplex, or just some dudes playing video games, we've got you covered.")])])])])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"text-left md:flex"},[s("div",{staticClass:"flex-none w-full md:w-1/2 md:pr-12"},[s("p",{staticClass:"my-4"},[t._v("\n Since 2015 Pterodactyl has been delivering robust, performant, and secure software that allows\n individuals, networks, and hosting companies to run game servers at scale; easily. Best of all?\n No exorbitant monthly costs.\n ")]),t._v(" "),s("p",{staticClass:"my-4"},[t._v("\n Take the plunge today and discover why thousands of users trust Pterodactyl to manage their\n game servers.\n ")])]),t._v(" "),s("div",{staticClass:"hidden md:block md:flex-1 md:pr-12"},[s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/pterodactyl"}},[t._v("GitHub")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/sponsors/DaneEveritt"}},[t._v("Sponsor")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://paypal.me/PterodactylSoftware"}},[t._v("Donate")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"/panel/troubleshooting.html"}},[t._v("Troubleshooting")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/parkervcp/eggs"}},[t._v("Additional Game Configurations")])])]),t._v(" "),s("div",{staticClass:"text-center mt-8 md:flex-1 md:mt-0"},[s("a",{attrs:{href:"https://discord.gg/pterodactyl",target:"_blank",rel:"nofollow noopener"}},[s("img",{staticClass:"w-3/4",attrs:{src:"https://cdn.pterodactyl.io/site-assets/discord.png"}})])])])}],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[8,10,27],{312:function(t,e,s){"use strict";s.d(e,"d",(function(){return i})),s.d(e,"a",(function(){return a})),s.d(e,"j",(function(){return o})),s.d(e,"i",(function(){return c})),s.d(e,"f",(function(){return l})),s.d(e,"g",(function(){return u})),s.d(e,"h",(function(){return h})),s.d(e,"b",(function(){return d})),s.d(e,"e",(function(){return p})),s.d(e,"l",(function(){return f})),s.d(e,"m",(function(){return v})),s.d(e,"c",(function(){return g})),s.d(e,"k",(function(){return m}));s(26),s(51),s(180),s(73),s(107),s(49),s(104),s(50),s(313),s(70),s(316),s(52);var n=s(108),i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,o=/^(https?:|mailto:|tel:)/;function c(t){return decodeURI(t).replace(i,"").replace(r,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function h(t){return/^tel:/.test(t)}function d(t){if(l(t))return t;var e=t.match(i),s=e?e[0]:"",n=c(t);return a.test(n)?t:n+".html"+s}function p(t,e){var s=t.hash,n=function(t){var e=t.match(i);if(e)return e[0]}(e);return(!n||s===n)&&c(t.path)===c(e)}function f(t,e,s){s&&(e=function(t,e,s){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var i=e.split("/");s&&i[i.length-1]||i.pop();for(var r=t.replace(/^\//,"").split("/"),a=0;a1||"".split(/.?/).length?function(t,s){var n=String(a(this)),r=void 0===s?4294967295:s>>>0;if(0===r)return[];if(void 0===t)return[n];if(!i(t))return e.call(n,t,r);for(var o,c,l,u=[],d=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),f=0,v=new RegExp(t.source,d+"g");(o=h.call(v,n))&&!((c=v.lastIndex)>f&&(u.push(n.slice(f,o.index)),o.length>1&&o.index=r));)v.lastIndex===o.index&&v.lastIndex++;return f===n.length?!l&&v.test("")||u.push(""):u.push(n.slice(f)),u.length>r?u.slice(0,r):u}:"0".split(void 0,0).length?function(t,s){return void 0===t&&0===s?[]:e.call(this,t,s)}:e,[function(e,s){var i=a(this),r=null==e?void 0:e[t];return void 0!==r?r.call(e,i,s):n.call(String(i),e,s)},function(t,i){var a=s(n,t,this,i,n!==e);if(a.done)return a.value;var h=r(t),d=String(this),p=o(h,RegExp),g=h.unicode,m=(h.ignoreCase?"i":"")+(h.multiline?"m":"")+(h.unicode?"u":"")+(v?"y":"g"),y=new p(v?h:"^(?:"+h.source+")",m),_=void 0===i?4294967295:i>>>0;if(0===_)return[];if(0===d.length)return null===u(y,d)?[d]:[];for(var k=0,b=0,C=[];b"+a+""}},319:function(t,e,s){var n=s(2);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},330:function(t,e,s){"use strict";s.r(e);var n=s(328),i=s.n(n);if("undefined"!=typeof window)s(335);var r={props:{options:{type:Object,default:function(){return{}}}},mounted:function(){this.create()},destroyed:function(){i()(this.$el).slick("unslick")},methods:{create:function(){var t=i()(this.$el);t.on("afterChange",this.onAfterChange),t.on("beforeChange",this.onBeforeChange),t.on("breakpoint",this.onBreakpoint),t.on("destroy",this.onDestroy),t.on("edge",this.onEdge),t.on("init",this.onInit),t.on("reInit",this.onReInit),t.on("setPosition",this.onSetPosition),t.on("swipe",this.onSwipe),t.on("lazyLoaded",this.onLazyLoaded),t.on("lazyLoadError",this.onLazyLoadError),t.slick(this.options)},destroy:function(){var t=i()(this.$el);t.off("afterChange",this.onAfterChange),t.off("beforeChange",this.onBeforeChange),t.off("breakpoint",this.onBreakpoint),t.off("destroy",this.onDestroy),t.off("edge",this.onEdge),t.off("init",this.onInit),t.off("reInit",this.onReInit),t.off("setPosition",this.onSetPosition),t.off("swipe",this.onSwipe),t.off("lazyLoaded",this.onLazyLoaded),t.off("lazyLoadError",this.onLazyLoadError),i()(this.$el).slick("unslick")},reSlick:function(){this.destroy(),this.create()},next:function(){i()(this.$el).slick("slickNext")},prev:function(){i()(this.$el).slick("slickPrev")},pause:function(){i()(this.$el).slick("slickPause")},play:function(){i()(this.$el).slick("slickPlay")},goTo:function(t,e){i()(this.$el).slick("slickGoTo",t,e)},currentSlide:function(){return i()(this.$el).slick("slickCurrentSlide")},add:function(t,e,s){i()(this.$el).slick("slickAdd",t,e,s)},remove:function(t,e){i()(this.$el).slick("slickRemove",t,e)},filter:function(t){i()(this.$el).slick("slickFilter",t)},unfilter:function(){i()(this.$el).slick("slickUnfilter")},getOption:function(t){i()(this.$el).slick("slickGetOption",t)},setOption:function(t,e,s){i()(this.$el).slick("slickSetOption",t,e,s)},setPosition:function(){i()(this.$el).slick("setPosition")},onAfterChange:function(t,e,s){this.$emit("afterChange",t,e,s)},onBeforeChange:function(t,e,s,n){this.$emit("beforeChange",t,e,s,n)},onBreakpoint:function(t,e,s){this.$emit("breakpoint",t,e,s)},onDestroy:function(t,e){this.$emit("destroy",t,e)},onEdge:function(t,e,s){this.$emit("edge",t,e,s)},onInit:function(t,e){this.$emit("init",t,e)},onReInit:function(t,e){this.$emit("reInit",t,e)},onSetPosition:function(t,e){this.$emit("setPosition",t,e)},onSwipe:function(t,e,s){this.$emit("swipe",t,e,s)},onLazyLoaded:function(t,e,s,n){this.$emit("lazyLoaded",t,e,s,n)},onLazyLoadError:function(t,e,s,n){this.$emit("lazyLoadError",t,e,s,n)}}},a=s(48),o=Object(a.a)(r,(function(){var t=this.$createElement;return(this._self._c||t)("div",[this._t("default")],2)}),[],!1,null,null,null);e.default=o.exports},341:function(t,e,s){"use strict";s.r(e);var n=s(315),i=s(330),r={components:{NavLink:n.default,Slick:i.default},data:function(){return{slickOptions:{slidesToShow:1,centerMode:!0,centerPadding:"0",speed:1e3,autoplay:!0,variableWidth:!0,arrows:!1,dots:!0,pauseOnHover:!1,pauseOnDotsHover:!0}}},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},a=s(48),o=Object(a.a)(r,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"home"},[s("div",{staticClass:"header section bg-blue text-grey-lightest less-padding emphasize"},[s("div",{staticClass:"container z-10"},[s("div",{staticClass:"text-center"},[t._m(0),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/panel/getting_started.html"}},[t._v("Let's Get Started!")])],1)])])]),t._v(" "),t._m(1),t._v(" "),t._m(2),t._v(" "),s("div",{staticClass:"section bg-white"},[s("div",{staticClass:"text-center"},[s("h1",[t._v("Screenshots")]),t._v(" "),s("div",{staticClass:"screenshots"},[s("slick",{ref:"slick",attrs:{options:t.slickOptions}},[s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-1.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-2.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-3.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-4.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-5.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-6.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-7.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-8.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-9.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-10.png"}})]),t._v(" "),s("a",{attrs:{href:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}},[s("img",{attrs:{src:"https://cdn.pterodactyl.io/site-assets/carousel/screenshot-11.png"}})])])],1)])]),t._v(" "),s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",[t._v("Get Started")]),t._v(" "),s("p",{staticClass:"m-4"},[t._v("Ready to fly on the Pterodactyl?")]),t._v(" "),s("div",{staticClass:"mt-4"},[s("router-link",{staticClass:"btn inline-block",attrs:{to:"/project/introduction.html"}},[t._v("About the project")]),t._v(" "),s("a",{staticClass:"btn inline-block",attrs:{href:"https://discord.gg/pterodactyl"}},[t._v("Discord")])],1)])]),t._v(" "),s("div",{staticClass:"section bg-black text-grey-lighter text-sm less-padding"},[s("div",{staticClass:"container text-center"},[s("div",[s("img",{staticClass:"h-20",attrs:{src:t.$withBase("logos/banner_logo.png"),alt:"pterodactyl banner logo"}})]),t._v(" "),t._m(3),t._v(" "),s("div",{staticClass:"footer"},[t._v("MIT Licensed | Pterodactyl® Copyright © 2015 - 2022 Dane Everitt & contributors.")])])])])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",[e("img",{staticClass:"max-w-xl w-full inline-block",attrs:{src:"https://cdn.pterodactyl.io/logos/new/pterodactyl_logo_transparent.png",alt:"Pterodactyl"}})])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"section bg-white"},[e("div",{staticClass:"container text-center"},[e("h1",{staticClass:"text-blue mb-4"},[this._v("Pterodactyl Panel")]),this._v(" "),e("h3",{staticClass:"border-0 font-normal leading-normal mx-auto",staticStyle:{"max-width":"50rem"}},[this._v("\n Pterodactyl® is a free, open-source game server management panel built with PHP, React, and Go.\n Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers\n while exposing a beautiful and intuitive UI to end users.\n ")]),this._v(" "),e("h3",{staticClass:"border-0 leading-normal mx-auto mt-4",staticStyle:{"max-width":"50rem"}},[this._v("\n Stop settling for less. Make game servers a first class citizen on your platform.\n ")]),this._v(" "),e("img",{staticClass:"max-w-lg w-full m-4 inline-block",attrs:{src:"https://cdn.pterodactyl.io/site-assets/mockup-macbook-grey-1.0.png"}})])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"section bg-blue text-grey-lightest"},[s("div",{staticClass:"container text-center"},[s("h1",{staticClass:"mb-4"},[t._v("Why Pterodactyl®")]),t._v(" "),s("div",{staticClass:"flex flex-wrap"},[s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-lock"})]),t._v(" "),s("h3",[t._v("Security First")]),t._v(" "),s("p",[t._v("Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-beaker"})]),t._v(" "),s("h3",[t._v("Modern Tooling")]),t._v(" "),s("p",[t._v("Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-anchor"})]),t._v(" "),s("h3",[t._v("Docker to the Core")]),t._v(" "),s("p",[t._v("All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-wallet"})]),t._v(" "),s("h3",[t._v("Free & Open Source")]),t._v(" "),s("p",[t._v("Pterodactyl is 100% free and licensed under a MIT license. All of our code is completely open source as well.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-browser"})]),t._v(" "),s("h3",[t._v("User Friendly")]),t._v(" "),s("p",[t._v("Save the furious clicking and screaming for Overwatch. Pterodactyl's interface is designed so well even Hanzo can use it.")])]),t._v(" "),s("div",{staticClass:"feature"},[s("span",[s("i",{staticClass:"icon icon-expand"})]),t._v(" "),s("h3",[t._v("Scalable")]),t._v(" "),s("p",[t._v("Whether you're a hosting company, the next Hyplex, or just some dudes playing video games, we've got you covered.")])])])])])},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"text-left md:flex"},[s("div",{staticClass:"flex-none w-full md:w-1/2 md:pr-12"},[s("p",{staticClass:"my-4"},[t._v("\n Since 2015 Pterodactyl® has been delivering robust, performant, and secure software that allows\n individuals, networks, and hosting companies to run game servers at scale; easily. Best of all?\n No exorbitant monthly costs.\n ")]),t._v(" "),s("p",{staticClass:"my-4"},[t._v("\n Take the plunge today and discover why thousands of users trust Pterodactyl® to manage their\n game servers.\n ")])]),t._v(" "),s("div",{staticClass:"hidden md:block md:flex-1 md:pr-12"},[s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/pterodactyl"}},[t._v("GitHub")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/sponsors/DaneEveritt"}},[t._v("Sponsor")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://paypal.me/PterodactylSoftware"}},[t._v("Donate")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"/panel/troubleshooting.html"}},[t._v("Troubleshooting")])]),t._v(" "),s("p",[s("a",{staticClass:"text-grey-lightest",attrs:{href:"https://github.com/parkervcp/eggs"}},[t._v("Additional Game Configurations")])])]),t._v(" "),s("div",{staticClass:"text-center mt-8 md:flex-1 md:mt-0"},[s("a",{attrs:{href:"https://discord.gg/pterodactyl",target:"_blank",rel:"nofollow noopener"}},[s("img",{staticClass:"w-3/4",attrs:{src:"https://cdn.pterodactyl.io/site-assets/discord.png"}})])])])}],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/app.1d244dc9.js b/assets/js/app.b43c3837.js similarity index 95% rename from assets/js/app.1d244dc9.js rename to assets/js/app.b43c3837.js index c5ffab65..447df131 100644 --- a/assets/js/app.1d244dc9.js +++ b/assets/js/app.b43c3837.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],u=e[1],l=e[2],f=0,p=[];f=0&&(e=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{path:t,query:n,hash:e}}(i.path||""),c=e&&e.path||"/",f=l.path?k(l.path,c,n||i.append):c,h=function(t,e,n){void 0===e&&(e={});var r,i=n||d;try{r=i(t||"")}catch(t){r={}}for(var o in e){var a=e[o];r[o]=Array.isArray(a)?a.map(p):p(a)}return r}(l.query,i.query,r&&r.options.parseQuery),v=i.hash||l.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:f,query:h,hash:v}}var G,K=function(){},X={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),o=i.location,s=i.route,u=i.href,l={},c=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,m=null==this.exactActiveClass?d:this.exactActiveClass,y=s.redirectedFrom?g(null,W(s.redirectedFrom),null,n):s;l[m]=w(r,y,this.exactPath),l[h]=this.exact||this.exactPath?l[m]:function(t,e){return 0===t.path.replace(v,"/").indexOf(e.path.replace(v,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var b=l[m]?this.ariaCurrentValue:null,_=function(t){Q(t)&&(e.replace?n.replace(o,K):n.push(o,K))},x={click:Q};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=_})):x[this.event]=_;var S={class:l},C=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:s,navigate:_,isActive:l[h],isExactActive:l[m]});if(C){if(1===C.length)return C[0];if(C.length>1||!C.length)return 0===C.length?t():t("span",{},C)}if("a"===this.tag)S.on=x,S.attrs={href:u,"aria-current":b};else{var O=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=H(c.path,s.params),u(c,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[i]?e(t[i],(function(){r(i+1)})):r(i+1)};r(0)}var xt={redirected:2,aborted:4,cancelled:8,duplicated:16};function St(t,e){return Ot(t,e,xt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return kt.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Ct(t,e){return Ot(t,e,xt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Ot(t,e,n,r){var i=new Error(r);return i._isRouter=!0,i.from=t,i.to=e,i.type=n,i}var kt=["params","query","hash"];function Pt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Et(t,e){return Pt(t)&&t._isRouter&&(null==e||t.type===e)}function jt(t){return function(e,n,r){var i=!1,o=0,a=null;At(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){i=!0,o++;var u,l=Lt((function(e){var i;((i=e).__esModule||Tt&&"Module"===i[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:G.extend(e),n.components[s]=e,--o<=0&&r()})),c=Lt((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Pt(t)?t:new Error(e),r(a))}));try{u=t(l,c)}catch(t){c(t)}if(u)if("function"==typeof u.then)u.then(l,c);else{var f=u.component;f&&"function"==typeof f.then&&f.then(l,c)}}})),i||r()}}function At(t,e){return $t(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function $t(t){return Array.prototype.concat.apply([],t)}var Tt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Lt(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Rt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=y,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Dt(t,e,n,r){var i=At(t,(function(t,r,i,o){var a=function(t,e){"function"!=typeof t&&(t=G.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,i,o)})):n(a,r,i,o)}));return $t(r?i.reverse():i)}function It(t,e){if(e)return function(){return t.apply(e,arguments)}}Rt.prototype.listen=function(t){this.cb=t},Rt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Rt.prototype.onError=function(t){this.errorCbs.push(t)},Rt.prototype.transitionTo=function(t,e,n){var r,i=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var o=this.current;this.confirmTransition(r,(function(){i.updateRoute(r),e&&e(r),i.ensureURL(),i.router.afterHooks.forEach((function(t){t&&t(r,o)})),i.ready||(i.ready=!0,i.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!i.ready&&(Et(t,xt.redirected)&&o===y||(i.ready=!0,i.readyErrorCbs.forEach((function(e){e(t)}))))}))},Rt.prototype.confirmTransition=function(t,e,n){var r=this,i=this.current;this.pending=t;var o,a,s=function(t){!Et(t)&&Pt(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,l=i.matched.length-1;if(w(t,i)&&u===l&&t.matched[u]===i.matched[l])return this.ensureURL(),s(((a=Ot(o=i,t,xt.duplicated,'Avoided redundant navigation to current location: "'+o.fullPath+'".')).name="NavigationDuplicated",a));var c=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=yt&&n;r&&this.listeners.push(ut());var i=function(){var n=t.current,i=Nt(t.base);t.current===y&&i===t._startLocation||t.transitionTo(i,(function(t){r&<(e,t,n,!0)}))};window.addEventListener("popstate",i),this.listeners.push((function(){window.removeEventListener("popstate",i)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){bt(P(r.base+t.fullPath)),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){_t(P(r.base+t.fullPath)),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Nt(this.base)!==this.current.fullPath){var e=P(this.base+this.current.fullPath);t?bt(e):_t(e)}},e.prototype.getCurrentLocation=function(){return Nt(this.base)},e}(Rt);function Nt(t){var e=window.location.pathname;return t&&0===e.toLowerCase().indexOf(t.toLowerCase())&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ut=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Nt(t);if(!/^\/#/.test(e))return window.location.replace(P(t+"/#"+e)),!0}(this.base)||Ft()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=yt&&e;n&&this.listeners.push(ut());var r=function(){var e=t.current;Ft()&&t.transitionTo(Bt(),(function(r){n&<(t.router,r,e,!0),yt||Vt(r.fullPath)}))},i=yt?"popstate":"hashchange";window.addEventListener(i,r),this.listeners.push((function(){window.removeEventListener(i,r)}))}},e.prototype.push=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){qt(t.fullPath),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){Vt(t.fullPath),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Bt()!==e&&(t?qt(e):Vt(e))},e.prototype.getCurrentLocation=function(){return Bt()},e}(Rt);function Ft(){var t=Bt();return"/"===t.charAt(0)||(Vt("/"+t),!1)}function Bt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function zt(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function qt(t){yt?bt(zt(t)):window.location.hash=t}function Vt(t){yt?_t(zt(t)):window.location.replace(zt(t))}var Ht=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Et(t,xt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Rt),Wt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=tt(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!yt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Mt(this,t.base);break;case"hash":this.history=new Ut(this,t.base,this.fallback);break;case"abstract":this.history=new Ht(this,t.base);break;default:0}},Gt={currentRoute:{configurable:!0}};function Kt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Wt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Gt.currentRoute.get=function(){return this.history&&this.history.current},Wt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Mt||n instanceof Ut){var r=function(t){n.setupListeners(),function(t){var r=n.current,i=e.options.scrollBehavior;yt&&i&&"fullPath"in t&<(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Wt.prototype.beforeEach=function(t){return Kt(this.beforeHooks,t)},Wt.prototype.beforeResolve=function(t){return Kt(this.resolveHooks,t)},Wt.prototype.afterEach=function(t){return Kt(this.afterHooks,t)},Wt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Wt.prototype.onError=function(t){this.history.onError(t)},Wt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Wt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Wt.prototype.go=function(t){this.history.go(t)},Wt.prototype.back=function(){this.go(-1)},Wt.prototype.forward=function(){this.go(1)},Wt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Wt.prototype.resolve=function(t,e,n){var r=W(t,e=e||this.history.current,n,this),i=this.match(r,e),o=i.redirectedFrom||i.fullPath;return{location:r,route:i,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?P(t+"/"+r):r}(this.history.base,o,this.mode),normalizedTo:r,resolved:i}},Wt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Wt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Wt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Wt.prototype,Gt),Wt.install=function t(e){if(!t.installed||G!==e){t.installed=!0,G=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",C),e.component("RouterLink",X);var i=e.config.optionMergeStrategies;i.beforeRouteEnter=i.beforeRouteLeave=i.beforeRouteUpdate=i.created}},Wt.version="3.5.1",Wt.isNavigationFailure=Et,Wt.NavigationFailureType=xt,Wt.START_LOCATION=y,J&&window.Vue&&window.Vue.use(Wt);var Xt=Wt;n(51),n(197),n(199),n(144),n(145),n(71),n(110),n(52);function Qt(t){t.locales&&Object.keys(t.locales).forEach((function(e){t.locales[e].path=e})),Object.freeze(t)}n(201),n(146),n(50),n(202),n(70),n(44),n(61),n(93);function Jt(t){return(Jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Yt=n(31),Zt={DropdownLink:function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,324))},DropdownTransition:function(){return Promise.all([n.e(0),n.e(18)]).then(n.bind(null,321))},Home:function(){return Promise.all([n.e(2),n.e(8)]).then(n.bind(null,341))},Layout:function(){return Promise.all([n.e(0),n.e(2),n.e(1),n.e(4)]).then(n.bind(null,366))},NavLink:function(){return n.e(10).then(n.bind(null,315))},NavLinks:function(){return Promise.all([n.e(0),n.e(6)]).then(n.bind(null,325))},Navbar:function(){return Promise.all([n.e(0),n.e(5)]).then(n.bind(null,342))},NotFound:function(){return n.e(25).then(n.bind(null,367))},Page:function(){return n.e(15).then(n.bind(null,343))},SearchBox:function(){return n.e(13).then(n.bind(null,331))},Sidebar:function(){return Promise.all([n.e(0),n.e(1),n.e(9)]).then(n.bind(null,344))},SidebarButton:function(){return n.e(26).then(n.bind(null,333))},SidebarGroup:function(){return Promise.all([n.e(0),n.e(1)]).then(n.bind(null,345))},SidebarLink:function(){return n.e(16).then(n.bind(null,334))},SlickCarousel:function(){return Promise.all([n.e(2),n.e(27)]).then(n.bind(null,330))},VersionSelect:function(){return n.e(11).then(n.bind(null,346))},VersionSelectItem:function(){return n.e(28).then(n.bind(null,332))}},te={"v-680eebc3":function(){return n.e(29).then(n.bind(null,368))},"v-4e72e1d8":function(){return n.e(30).then(n.bind(null,369))},"v-7d127123":function(){return n.e(31).then(n.bind(null,370))},"v-4a1e6e3a":function(){return n.e(12).then(n.bind(null,371))},"v-10fe793a":function(){return n.e(32).then(n.bind(null,372))},"v-622f23e3":function(){return n.e(17).then(n.bind(null,373))},"v-ef34fffa":function(){return n.e(33).then(n.bind(null,374))},"v-090070fa":function(){return n.e(34).then(n.bind(null,375))},"v-67c3f2ba":function(){return n.e(14).then(n.bind(null,376))},"v-0af75f63":function(){return n.e(35).then(n.bind(null,377))},"v-cc322cfa":function(){return n.e(36).then(n.bind(null,378))},"v-4d5d0f9b":function(){return n.e(37).then(n.bind(null,379))},"v-22a01883":function(){return n.e(38).then(n.bind(null,380))},"v-047b1c1f":function(){return n.e(39).then(n.bind(null,381))},"v-030337f1":function(){return n.e(40).then(n.bind(null,382))},"v-26037fe3":function(){return n.e(41).then(n.bind(null,383))},"v-9619ebfa":function(){return n.e(42).then(n.bind(null,384))},"v-432db923":function(){return n.e(43).then(n.bind(null,385))},"v-3dac3903":function(){return n.e(44).then(n.bind(null,386))},"v-e046bab2":function(){return n.e(45).then(n.bind(null,387))},"v-e336830e":function(){return n.e(46).then(n.bind(null,388))},"v-7c7b3203":function(){return n.e(47).then(n.bind(null,389))},"v-07a77f72":function(){return n.e(48).then(n.bind(null,390))},"v-00d38f11":function(){return n.e(49).then(n.bind(null,391))},"v-d39223ba":function(){return n.e(20).then(n.bind(null,392))},"v-a31c3dba":function(){return n.e(50).then(n.bind(null,393))},"v-6f0eac21":function(){return n.e(51).then(n.bind(null,394))},"v-481dea23":function(){return n.e(52).then(n.bind(null,395))},"v-15b388aa":function(){return n.e(53).then(n.bind(null,396))},"v-8a6363ba":function(){return n.e(54).then(n.bind(null,397))},"v-7f0b5429":function(){return n.e(55).then(n.bind(null,398))},"v-29055241":function(){return n.e(56).then(n.bind(null,399))},"v-c0e60bfa":function(){return n.e(21).then(n.bind(null,400))},"v-589003f5":function(){return n.e(57).then(n.bind(null,401))},"v-2339aa03":function(){return n.e(58).then(n.bind(null,402))},"v-019cb63a":function(){return n.e(59).then(n.bind(null,403))},"v-7ffeb723":function(){return n.e(60).then(n.bind(null,404))},"v-9478f2ba":function(){return n.e(61).then(n.bind(null,405))},"v-4f03fe0f":function(){return n.e(62).then(n.bind(null,406))},"v-5baa92ba":function(){return n.e(63).then(n.bind(null,407))},"v-c249e07a":function(){return n.e(64).then(n.bind(null,408))},"v-27941b23":function(){return n.e(65).then(n.bind(null,409))},"v-6f4baca5":function(){return n.e(66).then(n.bind(null,410))},"v-fa75e63a":function(){return n.e(67).then(n.bind(null,411))},"v-dacf6e56":function(){return n.e(68).then(n.bind(null,412))},"v-8eec473a":function(){return n.e(69).then(n.bind(null,413))},"v-29d5bc56":function(){return n.e(70).then(n.bind(null,414))},"v-cbda523a":function(){return n.e(71).then(n.bind(null,415))},"v-a75af93a":function(){return n.e(72).then(n.bind(null,416))},"v-22ba6d3a":function(){return n.e(73).then(n.bind(null,417))},"v-d6319362":function(){return n.e(74).then(n.bind(null,418))},"v-7b99cfba":function(){return n.e(22).then(n.bind(null,419))},"v-6ec4d123":function(){return n.e(75).then(n.bind(null,420))},"v-5c5d50fa":function(){return n.e(76).then(n.bind(null,421))},"v-6cd19ba3":function(){return n.e(77).then(n.bind(null,422))},"v-55eb8eca":function(){return n.e(19).then(n.bind(null,423))},"v-1ec46263":function(){return n.e(23).then(n.bind(null,424))},"v-9213d4fa":function(){return n.e(78).then(n.bind(null,425))}};function ee(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var ne=/-(\w)/g,re=ee((function(t){return t.replace(ne,(function(t,e){return e?e.toUpperCase():""}))})),ie=/\B([A-Z])/g,oe=ee((function(t){return t.replace(ie,"-$1").toLowerCase()})),ae=ee((function(t){return t.charAt(0).toUpperCase()+t.slice(1)}));function se(t,e){if(e)return t(e)?t(e):e.includes("-")?t(ae(re(e))):t(ae(e))||t(oe(e))}var ue=Object.assign({},Zt,te),le=function(t){return ue[t]},ce=function(t){return te[t]},fe=function(t){return Zt[t]},pe=function(t){return o.a.component(t)};function de(t){return se(ce,t)}function he(t){return se(fe,t)}function ve(t){return se(le,t)}function ge(t){return se(pe,t)}function me(){for(var t=arguments.length,e=new Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:"";return t?''):""}function Oe(t,e){if(e&&Object(Yt.a)(e).filter((function(t){return t.parentNode===document.head})).forEach((function(t){return document.head.removeChild(t)})),t)return t.map((function(t){var e=document.createElement("meta");return Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])})),document.head.appendChild(e),e}))}function ke(t){for(var e=0,n=["name","property","itemprop"];e"})).join("\n "):"",this.$ssrContext.canonicalLink=Ce(this.$canonicalUrl)}var e},mounted:function(){this.currentMetaTags=Object(Yt.a)(document.querySelectorAll("meta")),this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta:function(){document.title=this.$title,document.documentElement.lang=this.$lang;var t=this.getMergedMetaTags();this.currentMetaTags=Oe(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return xe()([{name:"description",content:this.$description}],t,this.siteMeta,ke)},updateCanonicalLink:function(){Se(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",Ce(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){Oe(null,this.currentMetaTags),Se()}}],Ee={name:"GlobalLayout",computed:{layout:function(){var t=this.getLayout();return ye("layout",t),o.a.component(t)}},methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},je=n(48),Ae=Object(je.a)(Ee,(function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){var r;switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),(r=t[e]).push.apply(r,Object(Yt.a)(n));break;default:throw new Error("Unknown option name.")}}(Ae,"mixins",Pe);var $e=[{name:"v-680eebc3",path:"/404.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-680eebc3").then(n)}},{name:"v-4e72e1d8",path:"/",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4e72e1d8").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-7d127123",path:"/community/about.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7d127123").then(n)}},{name:"v-4a1e6e3a",path:"/community/config/eggs/creating_a_custom_egg.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4a1e6e3a").then(n)}},{name:"v-10fe793a",path:"/community/config/eggs/creating_a_custom_image.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-10fe793a").then(n)}},{name:"v-622f23e3",path:"/community/config/nodes/add_node.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-622f23e3").then(n)}},{name:"v-ef34fffa",path:"/community/customization/panel.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-ef34fffa").then(n)}},{name:"v-090070fa",path:"/community/customization/wings.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-090070fa").then(n)}},{name:"v-67c3f2ba",path:"/community/games/minecraft.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-67c3f2ba").then(n)}},{name:"v-0af75f63",path:"/community/installation-guides/panel/centos7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-0af75f63").then(n)}},{name:"v-cc322cfa",path:"/community/installation-guides/panel/centos8.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-cc322cfa").then(n)}},{name:"v-4d5d0f9b",path:"/community/installation-guides/panel/debian10.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4d5d0f9b").then(n)}},{name:"v-22a01883",path:"/community/installation-guides/panel/debian9.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-22a01883").then(n)}},{name:"v-047b1c1f",path:"/community/installation-guides/panel/ubuntu1804.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-047b1c1f").then(n)}},{name:"v-030337f1",path:"/community/installation-guides/panel/ubuntu2004.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-030337f1").then(n)}},{name:"v-26037fe3",path:"/community/installation-guides/wings/centos7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-26037fe3").then(n)}},{name:"v-9619ebfa",path:"/community/installation-guides/wings/centos8.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-9619ebfa").then(n)}},{name:"v-432db923",path:"/community/installation-guides/wings/debian10.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-432db923").then(n)}},{name:"v-3dac3903",path:"/community/installation-guides/wings/debian9.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-3dac3903").then(n)}},{name:"v-e046bab2",path:"/community/installation-guides/wings/ubuntu1804.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-e046bab2").then(n)}},{name:"v-e336830e",path:"/community/installation-guides/wings/ubuntu2004.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-e336830e").then(n)}},{name:"v-7c7b3203",path:"/community/tutorials/artisan.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7c7b3203").then(n)}},{name:"v-07a77f72",path:"/daemon/0.6/configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-07a77f72").then(n)}},{name:"v-00d38f11",path:"/daemon/0.6/debian_8_docker.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-00d38f11").then(n)}},{name:"v-d39223ba",path:"/daemon/0.6/installing.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-d39223ba").then(n)}},{name:"v-a31c3dba",path:"/daemon/0.6/kernel_modifications.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-a31c3dba").then(n)}},{name:"v-6f0eac21",path:"/daemon/0.6/standalone_sftp.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6f0eac21").then(n)}},{name:"v-481dea23",path:"/daemon/0.6/upgrade/0.4_to_0.5.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-481dea23").then(n)}},{name:"v-15b388aa",path:"/daemon/0.6/upgrade/0.5.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-15b388aa").then(n)}},{name:"v-8a6363ba",path:"/daemon/0.6/upgrade/0.5_to_0.6.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-8a6363ba").then(n)}},{name:"v-7f0b5429",path:"/daemon/0.6/upgrade/0.6.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7f0b5429").then(n)}},{name:"v-29055241",path:"/daemon/0.6/upgrading.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-29055241").then(n)}},{name:"v-c0e60bfa",path:"/guides/mounts.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-c0e60bfa").then(n)}},{name:"v-589003f5",path:"/guides/php_upgrade.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-589003f5").then(n)}},{name:"v-2339aa03",path:"/ops/publish_release.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-2339aa03").then(n)}},{name:"v-019cb63a",path:"/panel/0.7/configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-019cb63a").then(n)}},{name:"v-7ffeb723",path:"/panel/0.7/getting_started.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7ffeb723").then(n)}},{name:"v-9478f2ba",path:"/panel/0.7/troubleshooting.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-9478f2ba").then(n)}},{name:"v-4f03fe0f",path:"/panel/0.7/upgrade/0.6_to_0.7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4f03fe0f").then(n)}},{name:"v-5baa92ba",path:"/panel/0.7/upgrade/0.7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-5baa92ba").then(n)}},{name:"v-c249e07a",path:"/panel/0.7/upgrading.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-c249e07a").then(n)}},{name:"v-27941b23",path:"/panel/0.7/webserver_configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-27941b23").then(n)}},{name:"v-6f4baca5",path:"/panel/1.0/additional_configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6f4baca5").then(n)}},{name:"v-fa75e63a",path:"/panel/1.0/getting_started.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-fa75e63a").then(n)}},{name:"v-dacf6e56",path:"/panel/1.0/legacy_upgrade.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-dacf6e56").then(n)}},{name:"v-8eec473a",path:"/panel/1.0/troubleshooting.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-8eec473a").then(n)}},{name:"v-29d5bc56",path:"/panel/1.0/updating.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-29d5bc56").then(n)}},{name:"v-cbda523a",path:"/panel/1.0/webserver_configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-cbda523a").then(n)}},{name:"v-a75af93a",path:"/project/about.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-a75af93a").then(n)}},{name:"v-22ba6d3a",path:"/project/community.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-22ba6d3a").then(n)}},{name:"v-d6319362",path:"/project/introduction.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-d6319362").then(n)}},{name:"v-7b99cfba",path:"/project/terms.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7b99cfba").then(n)}},{name:"v-6ec4d123",path:"/tutorials/creating_ssl_certificates.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6ec4d123").then(n)}},{name:"v-5c5d50fa",path:"/tutorials/mysql_setup.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-5c5d50fa").then(n)}},{name:"v-6cd19ba3",path:"/wings/1.0/configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6cd19ba3").then(n)}},{name:"v-55eb8eca",path:"/wings/1.0/installing.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-55eb8eca").then(n)}},{name:"v-1ec46263",path:"/wings/1.0/migrating.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-1ec46263").then(n)}},{name:"v-9213d4fa",path:"/wings/1.0/upgrading.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-9213d4fa").then(n)}},{path:"*",component:Ae}],Te={title:"Pterodactyl",description:"Pterodactyl is an open-source game server management panel built with PHP 7, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful and intuitive UI to end users.",base:"/",headTags:[["link",{rel:"apple-touch-icon",sizes:"180x180",href:"/favicons/apple-touch-icon.png"}],["link",{rel:"icon",type:"image/png",href:"/favicons/favicon-32x32.png",sizes:"32x32"}],["link",{rel:"icon",type:"image/png",href:"/favicons/favicon-16x16.png",sizes:"16x16"}],["link",{rel:"mask-icon",href:"/favicons/safari-pinned-tab.svg",color:"#0e4688"}],["link",{rel:"manifest",href:"/favicons/site.webmanifest"}],["link",{rel:"shortcut icon",href:"/favicons/favicon.ico"}],["meta",{name:"msapplication-config",content:"/favicons/browserconfig.xml"}],["meta",{name:"theme-color",content:"#0e4688"}]],pages:[{frontmatter:{},regularPath:"/404.html",relativePath:"404.md",key:"v-680eebc3",path:"/404.html"},{title:"Home",frontmatter:{home:!0,heroImage:"/doc_pterry.png",actionText:"Get Started →",actionLink:"/project/introduction",features:[{title:"Security First",details:"Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box."},{title:"Modern Tooling",details:"Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications."},{title:"Docker to the Core",details:"All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game."}],footer:"MIT Licensed | Copyright © 2015 - 2018 Dane Everitt & Contributors"},regularPath:"/",relativePath:"README.md",key:"v-4e72e1d8",path:"/"},{title:"Community Guides and Tutorials",frontmatter:{},regularPath:"/community/about.html",relativePath:"community/about.md",key:"v-7d127123",path:"/community/about.html",headers:[{level:2,title:"About",slug:"about"}]},{title:"Creating a Custom Egg",frontmatter:{},regularPath:"/community/config/eggs/creating_a_custom_egg.html",relativePath:"community/config/eggs/creating_a_custom_egg.md",key:"v-4a1e6e3a",path:"/community/config/eggs/creating_a_custom_egg.html",headers:[{level:2,title:"Create New Option",slug:"create-new-option"},{level:2,title:"Configure Process Management",slug:"configure-process-management"},{level:3,title:"Stop Command",slug:"stop-command"},{level:3,title:"Log Storage",slug:"log-storage"},{level:3,title:"Configuration Files",slug:"configuration-files"},{level:3,title:"Start Configuration",slug:"start-configuration"},{level:2,title:"Copy Settings From",slug:"copy-settings-from"},{level:2,title:"Egg Variables",slug:"egg-variables"},{level:2,title:"List of default variables",slug:"list-of-default-variables"}]},{title:"Creating a Custom Docker Image",frontmatter:{},regularPath:"/community/config/eggs/creating_a_custom_image.html",relativePath:"community/config/eggs/creating_a_custom_image.md",key:"v-10fe793a",path:"/community/config/eggs/creating_a_custom_image.html",headers:[{level:2,title:"Creating the Dockerfile",slug:"creating-the-dockerfile"},{level:2,title:"Installing Dependencies",slug:"installing-dependencies"},{level:2,title:"Creating a Container User",slug:"creating-a-container-user"},{level:2,title:"Work Directory & Entrypoint",slug:"work-directory-entrypoint"},{level:2,title:"Entrypoint Script",slug:"entrypoint-script"},{level:2,title:"Modifying the Startup Command",slug:"modifying-the-startup-command"},{level:2,title:"Run the Command",slug:"run-the-command"},{level:3,title:"Note",slug:"note"}]},{title:"Creating a New Node",frontmatter:{},regularPath:"/community/config/nodes/add_node.html",relativePath:"community/config/nodes/add_node.md",key:"v-622f23e3",path:"/community/config/nodes/add_node.html",headers:[{level:2,title:"Location",slug:"location"},{level:2,title:"Information Required",slug:"information-required"},{level:2,title:"Install the Daemon",slug:"install-the-daemon"},{level:2,title:"Configuring the Node",slug:"configuring-the-node"},{level:3,title:"Auto-Deploy",slug:"auto-deploy"}]},{title:"Building Panel Assets",frontmatter:{},regularPath:"/community/customization/panel.html",relativePath:"community/customization/panel.md",key:"v-ef34fffa",path:"/community/customization/panel.html",headers:[{level:2,title:"Install Dependencies",slug:"install-dependencies"},{level:2,title:"Build Panel Assets",slug:"build-panel-assets"}]},{title:"Building Wings",frontmatter:{},regularPath:"/community/customization/wings.html",relativePath:"community/customization/wings.md",key:"v-090070fa",path:"/community/customization/wings.html",headers:[{level:2,title:"Build Requirements",slug:"build-requirements"},{level:2,title:"Building",slug:"building"},{level:2,title:"Install the new binary",slug:"install-the-new-binary"},{level:2,title:"Troubleshooting",slug:"troubleshooting"}]},{title:"Minecraft",frontmatter:{},regularPath:"/community/games/minecraft.html",relativePath:"community/games/minecraft.md",key:"v-67c3f2ba",path:"/community/games/minecraft.html",headers:[{level:2,title:"Configuring a Server Network (BungeeCord, Waterfall, HexaCord, etc.)",slug:"configuring-a-server-network-bungeecord-waterfall-hexacord-etc"},{level:3,title:"Allocations in the Panel",slug:"allocations-in-the-panel"},{level:3,title:"proxy server settings",slug:"proxy-server-settings"},{level:3,title:"paper/spigot/bukkit settings",slug:"paper-spigot-bukkit-settings"},{level:3,title:"Firewalls",slug:"firewalls"}]},{title:"CentOS 7",frontmatter:{},regularPath:"/community/installation-guides/panel/centos7.html",relativePath:"community/installation-guides/panel/centos7.md",key:"v-0af75f63",path:"/community/installation-guides/panel/centos7.html",headers:[{level:2,title:"Install Requirements and Additional Utilities",slug:"install-requirements-and-additional-utilities"},{level:3,title:"SELinux tools",slug:"selinux-tools"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Composer",slug:"composer"},{level:2,title:"Install Utility Packages",slug:"install-utility-packages"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"CentOS 8, Rocky Linux 8, AlmaLinux 8",frontmatter:{},regularPath:"/community/installation-guides/panel/centos8.html",relativePath:"community/installation-guides/panel/centos8.md",key:"v-cc322cfa",path:"/community/installation-guides/panel/centos8.html",headers:[{level:2,title:"Install Requirements and Additional Utilities",slug:"install-requirements-and-additional-utilities"},{level:3,title:"SELinux tools",slug:"selinux-tools"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Composer",slug:"composer"},{level:2,title:"Install Utility Packages",slug:"install-utility-packages"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Debian 10",frontmatter:{},regularPath:"/community/installation-guides/panel/debian10.html",relativePath:"community/installation-guides/panel/debian10.md",key:"v-4d5d0f9b",path:"/community/installation-guides/panel/debian10.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 8.0",slug:"php-8-0"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Debian 9",frontmatter:{},regularPath:"/community/installation-guides/panel/debian9.html",relativePath:"community/installation-guides/panel/debian9.md",key:"v-22a01883",path:"/community/installation-guides/panel/debian9.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Ubuntu 18.04",frontmatter:{},regularPath:"/community/installation-guides/panel/ubuntu1804.html",relativePath:"community/installation-guides/panel/ubuntu1804.md",key:"v-047b1c1f",path:"/community/installation-guides/panel/ubuntu1804.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Ubuntu 20.04",frontmatter:{},regularPath:"/community/installation-guides/panel/ubuntu2004.html",relativePath:"community/installation-guides/panel/ubuntu2004.md",key:"v-030337f1",path:"/community/installation-guides/panel/ubuntu2004.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 8.0",slug:"php-8-0"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx Configuration",slug:"nginx-configuration"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"CentOS 7",frontmatter:{},regularPath:"/community/installation-guides/wings/centos7.html",relativePath:"community/installation-guides/wings/centos7.md",key:"v-26037fe3",path:"/community/installation-guides/wings/centos7.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:3,title:"FirewallD Changes",slug:"firewalld-changes"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"CentOS 8, Rocky Linux 8, AlmaLinux 8",frontmatter:{},regularPath:"/community/installation-guides/wings/centos8.html",relativePath:"community/installation-guides/wings/centos8.md",key:"v-9619ebfa",path:"/community/installation-guides/wings/centos8.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:3,title:"FirewallD Changes",slug:"firewalld-changes"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Debian 10",frontmatter:{},regularPath:"/community/installation-guides/wings/debian10.html",relativePath:"community/installation-guides/wings/debian10.md",key:"v-432db923",path:"/community/installation-guides/wings/debian10.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Debian 9",frontmatter:{},regularPath:"/community/installation-guides/wings/debian9.html",relativePath:"community/installation-guides/wings/debian9.md",key:"v-3dac3903",path:"/community/installation-guides/wings/debian9.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Ubuntu 18.04",frontmatter:{},regularPath:"/community/installation-guides/wings/ubuntu1804.html",relativePath:"community/installation-guides/wings/ubuntu1804.md",key:"v-e046bab2",path:"/community/installation-guides/wings/ubuntu1804.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Ubuntu 20.04",frontmatter:{},regularPath:"/community/installation-guides/wings/ubuntu2004.html",relativePath:"community/installation-guides/wings/ubuntu2004.md",key:"v-e336830e",path:"/community/installation-guides/wings/ubuntu2004.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Artisan CLI",frontmatter:{},regularPath:"/community/tutorials/artisan.html",relativePath:"community/tutorials/artisan.md",key:"v-7c7b3203",path:"/community/tutorials/artisan.html",headers:[{level:2,title:"User Management",slug:"user-management"},{level:3,title:"Create User",slug:"create-user"},{level:3,title:"Delete User",slug:"delete-user"},{level:3,title:"Disable 2FA",slug:"disable-2fa"},{level:2,title:"Server & Node Management",slug:"server-node-management"},{level:3,title:"Create Location",slug:"create-location"},{level:3,title:"Delete Location",slug:"delete-location"},{level:3,title:"Server Bulk Power",slug:"server-bulk-power"},{level:2,title:"Panel Management",slug:"panel-management"},{level:3,title:"View Panel Info",slug:"view-panel-info"},{level:3,title:"Update Panel",slug:"update-panel"}]},{title:"Additional Configuration",frontmatter:{},regularPath:"/daemon/0.6/configuration.html",relativePath:"daemon/0.6/configuration.md",key:"v-07a77f72",path:"/daemon/0.6/configuration.html",headers:[{level:2,title:"Output Throttles",slug:"output-throttles"},{level:2,title:"Custom Network Interfaces",slug:"custom-network-interfaces"},{level:2,title:"Private Registries",slug:"private-registries"},{level:2,title:"Security Policies",slug:"security-policies"},{level:2,title:"Container Policy",slug:"container-policy"},{level:3,title:"Default Security Opts Array",slug:"default-security-opts-array"},{level:3,title:"Default Capabilities Drop Array",slug:"default-capabilities-drop-array"},{level:2,title:"Enabling Cloudflare",slug:"enabling-cloudflare"}]},{title:"Docker on Debian 8",frontmatter:{},regularPath:"/daemon/0.6/debian_8_docker.html",relativePath:"daemon/0.6/debian_8_docker.md",key:"v-00d38f11",path:"/daemon/0.6/debian_8_docker.html",headers:[{level:2,title:"Install Docker",slug:"install-docker"},{level:2,title:"Update GRUB Startup",slug:"update-grub-startup"},{level:2,title:"Add Backports Repo",slug:"add-backports-repo"},{level:2,title:"Update Software & Setup Docker",slug:"update-software-setup-docker"}]},{title:"Installation",frontmatter:{},regularPath:"/daemon/0.6/installing.html",relativePath:"daemon/0.6/installing.md",key:"v-d39223ba",path:"/daemon/0.6/installing.html",headers:[{level:2,title:"Supported Systems",slug:"supported-systems"},{level:2,title:"System Requirements",slug:"system-requirements"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Installing Docker",slug:"installing-docker"},{level:3,title:"Installing Nodejs",slug:"installing-nodejs"},{level:2,title:"Installing Daemon Software",slug:"installing-daemon-software"},{level:2,title:"Configure Daemon",slug:"configure-daemon"},{level:2,title:"Starting the Daemon",slug:"starting-the-daemon"},{level:3,title:"Daemonizing (using systemd)",slug:"daemonizing-using-systemd"}]},{title:"Kernel Modifications",frontmatter:{},regularPath:"/daemon/0.6/kernel_modifications.html",relativePath:"daemon/0.6/kernel_modifications.md",key:"v-a31c3dba",path:"/daemon/0.6/kernel_modifications.html",headers:[{level:2,title:"Update Kernel",slug:"update-kernel"},{level:2,title:"Confirm Kernel",slug:"confirm-kernel"},{level:2,title:"Set Default Boot",slug:"set-default-boot"},{level:2,title:"Boot from hard disk",slug:"boot-from-hard-disk"}]},{title:"Standalone SFTP Server",frontmatter:{},regularPath:"/daemon/0.6/standalone_sftp.html",relativePath:"daemon/0.6/standalone_sftp.md",key:"v-6f0eac21",path:"/daemon/0.6/standalone_sftp.html",headers:[{level:2,title:"Disable Daemon's Server",slug:"disable-daemon-s-server"},{level:2,title:"Run the Standalone Server",slug:"run-the-standalone-server"},{level:3,title:"Start the Server",slug:"start-the-server"},{level:2,title:"Daemonize Server",slug:"daemonize-server"},{level:3,title:"Customizing Startup",slug:"customizing-startup"}]},{title:"Upgrading 0.4.X to 0.5.X",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.4_to_0.5.html",relativePath:"daemon/0.6/upgrade/0.4_to_0.5.md",key:"v-481dea23",path:"/daemon/0.6/upgrade/0.4_to_0.5.html",headers:[{level:2,title:"Docker Adjustments",slug:"docker-adjustments"},{level:2,title:"Download Files",slug:"download-files"},{level:2,title:"SFTP Cleanup",slug:"sftp-cleanup"},{level:2,title:"File Migration",slug:"file-migration"},{level:3,title:"Rebuild Containers",slug:"rebuild-containers"}]},{title:"Upgrading 0.5 Series",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.5.html",relativePath:"daemon/0.6/upgrade/0.5.md",key:"v-15b388aa",path:"/daemon/0.6/upgrade/0.5.html",headers:[{level:2,title:"Download Newest Release",slug:"download-newest-release"},{level:2,title:"Update Components",slug:"update-components"}]},{title:"Upgrading 0.5.X to 0.6.X",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.5_to_0.6.html",relativePath:"daemon/0.6/upgrade/0.5_to_0.6.md",key:"v-8a6363ba",path:"/daemon/0.6/upgrade/0.5_to_0.6.html",headers:[{level:2,title:"Breaking Changes",slug:"breaking-changes"},{level:2,title:"Download Files",slug:"download-files"},{level:3,title:"Start the Daemon",slug:"start-the-daemon"},{level:2,title:"Rebuild Containers",slug:"rebuild-containers"}]},{title:"Upgrading 0.6 Series",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.6.html",relativePath:"daemon/0.6/upgrade/0.6.md",key:"v-7f0b5429",path:"/daemon/0.6/upgrade/0.6.html",headers:[{level:2,title:"Download Newest Release",slug:"download-newest-release"},{level:2,title:"Update Components",slug:"update-components"}]},{title:"Upgrading",frontmatter:{},regularPath:"/daemon/0.6/upgrading.html",relativePath:"daemon/0.6/upgrading.md",key:"v-29055241",path:"/daemon/0.6/upgrading.html",headers:[{level:2,title:"Version Specific Guides",slug:"version-specific-guides"}]},{title:"Using Mounts",frontmatter:{},regularPath:"/guides/mounts.html",relativePath:"guides/mounts.md",key:"v-c0e60bfa",path:"/guides/mounts.html",headers:[{level:2,title:"Wings Configuration",slug:"wings-configuration"},{level:2,title:"Panel Configuration",slug:"panel-configuration"},{level:3,title:"Creating a Mount",slug:"creating-a-mount"},{level:3,title:"Assigning a Mount to a Server",slug:"assigning-a-mount-to-a-server"},{level:3,title:"Example Mount",slug:"example-mount"}]},{title:"Upgrading PHP",frontmatter:{},regularPath:"/guides/php_upgrade.html",relativePath:"guides/php_upgrade.md",key:"v-589003f5",path:"/guides/php_upgrade.html",headers:[{level:2,title:"Install PHP",slug:"install-php"},{level:2,title:"Update Composer",slug:"update-composer"},{level:2,title:"Webserver Configuration",slug:"webserver-configuration"}]},{title:"Publishing a Release",frontmatter:{},regularPath:"/ops/publish_release.html",relativePath:"ops/publish_release.md",key:"v-2339aa03",path:"/ops/publish_release.html",headers:[{level:2,title:"Pick a Codename",slug:"pick-a-codename"},{level:2,title:"Create the Release Branch",slug:"create-the-release-branch"},{level:2,title:"Tag a Release",slug:"tag-a-release"},{level:3,title:"Update the Release on GitHub",slug:"update-the-release-on-github"},{level:2,title:"Generate Signatures & Hashes",slug:"generate-signatures-hashes"},{level:3,title:"Create Checksum",slug:"create-checksum"},{level:3,title:"GPG Sign Release",slug:"gpg-sign-release"},{level:3,title:"Attach to Release",slug:"attach-to-release"},{level:2,title:"Update Documentation",slug:"update-documentation"},{level:2,title:"Update CDN",slug:"update-cdn"},{level:2,title:"Make Discord Announcement",slug:"make-discord-announcement"},{level:2,title:"Example Process",slug:"example-process"}]},{title:"Environment Configuration",frontmatter:{},regularPath:"/panel/0.7/configuration.html",relativePath:"panel/0.7/configuration.md",key:"v-019cb63a",path:"/panel/0.7/configuration.html",headers:[{level:2,title:"Reporting All Exceptions",slug:"reporting-all-exceptions"},{level:2,title:"Client Databases",slug:"client-databases"},{level:2,title:"Reverse Proxy Setup",slug:"reverse-proxy-setup"},{level:3,title:"NGINX Specific Configuration",slug:"nginx-specific-configuration"},{level:3,title:"Cloudflare Specific Configuration",slug:"cloudflare-specific-configuration"},{level:2,title:"Increasing the Editable File Size",slug:"increasing-the-editable-file-size"},{level:2,title:"Disable or Modify ReCaptcha",slug:"disable-or-modify-recaptcha"},{level:3,title:"Using Your Own Keys",slug:"using-your-own-keys"}]},{title:"Getting Started",frontmatter:{},regularPath:"/panel/0.7/getting_started.html",relativePath:"panel/0.7/getting_started.md",key:"v-7ffeb723",path:"/panel/0.7/getting_started.html",headers:[{level:2,title:"Picking a Server OS",slug:"picking-a-server-os"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Example Dependency Installation",slug:"example-dependency-installation"},{level:3,title:"Installing Composer",slug:"installing-composer"},{level:2,title:"Download Files",slug:"download-files"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Environment Configuration",slug:"environment-configuration"},{level:3,title:"Database Setup",slug:"database-setup"},{level:3,title:"Add The First User",slug:"add-the-first-user"},{level:3,title:"Set Permissions",slug:"set-permissions"},{level:2,title:"Queue Listeners",slug:"queue-listeners"},{level:3,title:"Crontab Configuration",slug:"crontab-configuration"},{level:3,title:"Create Queue Worker",slug:"create-queue-worker"}]},{title:"Troubleshooting",frontmatter:{},regularPath:"/panel/0.7/troubleshooting.html",relativePath:"panel/0.7/troubleshooting.md",key:"v-9478f2ba",path:"/panel/0.7/troubleshooting.html",headers:[{level:2,title:"Reading Error Logs",slug:"reading-error-logs"},{level:3,title:"Parsing the Error",slug:"parsing-the-error"},{level:3,title:"Understanding the Error",slug:"understanding-the-error"},{level:3,title:"Utilizing GREP",slug:"utilizing-grep"},{level:2,title:"Transfer Exceptions / XHR Poll Error",slug:"transfer-exceptions-xhr-poll-error"},{level:3,title:"Example Errors",slug:"example-errors"},{level:3,title:"Basic Debugging Steps",slug:"basic-debugging-steps"},{level:3,title:"More Advanced Debugging Steps",slug:"more-advanced-debugging-steps"},{level:2,title:"Invalid MAC Exception",slug:"invalid-mac-exception"},{level:2,title:"SELinux Issues",slug:"selinux-issues"},{level:3,title:"Redis Permissions Errors",slug:"redis-permissions-errors"},{level:3,title:"In case there is any weirdness with parts of the panel",slug:"in-case-there-is-any-weirdness-with-parts-of-the-panel"},{level:3,title:"Daemon Connection Errors",slug:"daemon-connection-errors"},{level:2,title:"FirewallD issues",slug:"firewalld-issues"},{level:2,title:"Database Errors",slug:"database-errors"},{level:3,title:"DatabaseController.php:142",slug:"databasecontroller-php-142"}]},{title:"Upgrading 0.6 to 0.7",frontmatter:{},regularPath:"/panel/0.7/upgrade/0.6_to_0.7.html",relativePath:"panel/0.7/upgrade/0.6_to_0.7.md",key:"v-4f03fe0f",path:"/panel/0.7/upgrade/0.6_to_0.7.html",headers:[{level:2,title:"Fetch Updated Files",slug:"fetch-updated-files"},{level:2,title:"Clear Compiled Assets",slug:"clear-compiled-assets"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Update Environment",slug:"update-environment"},{level:2,title:"Database Updates",slug:"database-updates"},{level:2,title:"Cleanup API Keys",slug:"cleanup-api-keys"},{level:2,title:"Set Permissions",slug:"set-permissions"}]},{title:"Upgrading 0.7 Series",frontmatter:{},regularPath:"/panel/0.7/upgrade/0.7.html",relativePath:"panel/0.7/upgrade/0.7.md",key:"v-5baa92ba",path:"/panel/0.7/upgrade/0.7.html",headers:[{level:2,title:"Fetch Updated Files",slug:"fetch-updated-files"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Clear Compiled Template Cache",slug:"clear-compiled-template-cache"},{level:2,title:"Database Updates",slug:"database-updates"},{level:2,title:"Set Permissions",slug:"set-permissions"}]},{title:"Upgrading",frontmatter:{},regularPath:"/panel/0.7/upgrading.html",relativePath:"panel/0.7/upgrading.md",key:"v-c249e07a",path:"/panel/0.7/upgrading.html",headers:[{level:2,title:"Maintenance Mode",slug:"maintenance-mode"},{level:2,title:"Restarting Queue Workers",slug:"restarting-queue-workers"},{level:2,title:"Version Specific Guides",slug:"version-specific-guides"}]},{title:"Webserver Configuration",frontmatter:{},regularPath:"/panel/0.7/webserver_configuration.html",relativePath:"panel/0.7/webserver_configuration.md",key:"v-27941b23",path:"/panel/0.7/webserver_configuration.html",headers:[{level:2,title:"NGINX",slug:"nginx"},{level:3,title:"NGINX With SSL",slug:"nginx-with-ssl"},{level:3,title:"NGINX Without SSL",slug:"nginx-without-ssl"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration"},{level:2,title:"Apache",slug:"apache"},{level:3,title:"Apache With SSL",slug:"apache-with-ssl"},{level:3,title:"Apache Without SSL",slug:"apache-without-ssl"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-2"}]},{title:"Additional Configuration",frontmatter:{},regularPath:"/panel/1.0/additional_configuration.html",relativePath:"panel/1.0/additional_configuration.md",key:"v-6f4baca5",path:"/panel/1.0/additional_configuration.html",headers:[{level:2,title:"Backups",slug:"backups"},{level:3,title:"Using Local Backups",slug:"using-local-backups"},{level:3,title:"Using S3 Backups",slug:"using-s3-backups"},{level:2,title:"Reverse Proxy Setup",slug:"reverse-proxy-setup"},{level:3,title:"NGINX Specific Configuration",slug:"nginx-specific-configuration"},{level:3,title:"Cloudflare Specific Configuration",slug:"cloudflare-specific-configuration"},{level:2,title:"reCAPTCHA",slug:"recaptcha"},{level:3,title:"Configuring reCAPTCHA",slug:"configuring-recaptcha"},{level:3,title:"Disabling reCAPTCHA",slug:"disabling-recaptcha"},{level:2,title:"2FA",slug:"_2fa"},{level:3,title:"Disable 2FA requirement",slug:"disable-2fa-requirement"},{level:3,title:"Disable 2FA for a specific user",slug:"disable-2fa-for-a-specific-user"}]},{title:"Getting Started",frontmatter:{},regularPath:"/panel/1.0/getting_started.html",relativePath:"panel/1.0/getting_started.md",key:"v-fa75e63a",path:"/panel/1.0/getting_started.html",headers:[{level:2,title:"Picking a Server OS",slug:"picking-a-server-os"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Example Dependency Installation",slug:"example-dependency-installation"},{level:3,title:"Installing Composer",slug:"installing-composer"},{level:2,title:"Download Files",slug:"download-files"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Environment Configuration",slug:"environment-configuration"},{level:3,title:"Database Setup",slug:"database-setup"},{level:3,title:"Add The First User",slug:"add-the-first-user"},{level:3,title:"Set Permissions",slug:"set-permissions"},{level:2,title:"Queue Listeners",slug:"queue-listeners"},{level:3,title:"Crontab Configuration",slug:"crontab-configuration"},{level:3,title:"Create Queue Worker",slug:"create-queue-worker"}]},{title:"Legacy Upgrades",frontmatter:{},regularPath:"/panel/1.0/legacy_upgrade.html",relativePath:"panel/1.0/legacy_upgrade.md",key:"v-dacf6e56",path:"/panel/1.0/legacy_upgrade.html",headers:[{level:2,title:"Enter Maintenance Mode",slug:"enter-maintenance-mode"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Fetch Updated Files",slug:"fetch-updated-files"},{level:2,title:"Update Dependencies",slug:"update-dependencies-2"},{level:2,title:"Clear Compiled Template Cache",slug:"clear-compiled-template-cache"},{level:2,title:"Database Updates",slug:"database-updates"},{level:2,title:"Set Permissions",slug:"set-permissions"},{level:2,title:"Restarting Queue Workers",slug:"restarting-queue-workers"},{level:2,title:"Exit Maintenance Mode",slug:"exit-maintenance-mode"},{level:2,title:"Switch to Wings",slug:"switch-to-wings"}]},{title:"Troubleshooting",frontmatter:{},regularPath:"/panel/1.0/troubleshooting.html",relativePath:"panel/1.0/troubleshooting.md",key:"v-8eec473a",path:"/panel/1.0/troubleshooting.html",headers:[{level:2,title:"Reading Error Logs",slug:"reading-error-logs"},{level:3,title:"Parsing the Error",slug:"parsing-the-error"},{level:3,title:"Understanding the Error",slug:"understanding-the-error"},{level:3,title:"Utilizing GREP",slug:"utilizing-grep"},{level:2,title:"Cannot Connect to Server Errors",slug:"cannot-connect-to-server-errors"},{level:3,title:"Basic Debugging Steps",slug:"basic-debugging-steps"},{level:3,title:"More Advanced Debugging Steps",slug:"more-advanced-debugging-steps"},{level:2,title:"Invalid MAC Exception",slug:"invalid-mac-exception"},{level:2,title:"SELinux Issues",slug:"selinux-issues"},{level:3,title:"Redis Permissions Errors",slug:"redis-permissions-errors"},{level:3,title:"Wings Connection Errors",slug:"wings-connection-errors"},{level:2,title:"FirewallD issues",slug:"firewalld-issues"}]},{title:"Updating the Panel",frontmatter:{},regularPath:"/panel/1.0/updating.html",relativePath:"panel/1.0/updating.md",key:"v-29d5bc56",path:"/panel/1.0/updating.html",headers:[{level:2,title:"Panel Version Requirements",slug:"panel-version-requirements"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Self Upgrade",slug:"self-upgrade"},{level:2,title:"Manual Upgrade",slug:"manual-upgrade"},{level:3,title:"Enter Maintenance Mode",slug:"enter-maintenance-mode"},{level:3,title:"Download the Update",slug:"download-the-update"},{level:3,title:"Update Dependencies",slug:"update-dependencies-2"},{level:3,title:"Clear Compiled Template Cache",slug:"clear-compiled-template-cache"},{level:3,title:"Database Updates",slug:"database-updates"},{level:3,title:"Set Permissions",slug:"set-permissions"},{level:3,title:"Restarting Queue Workers",slug:"restarting-queue-workers"},{level:3,title:"Exit Maintenance Mode",slug:"exit-maintenance-mode"}]},{title:"Webserver Configuration",frontmatter:{},regularPath:"/panel/1.0/webserver_configuration.html",relativePath:"panel/1.0/webserver_configuration.md",key:"v-cbda523a",path:"/panel/1.0/webserver_configuration.html",headers:[{level:3,title:"Enabling Configuration",slug:"enabling-configuration"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-2"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-3"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-4"}]},{title:"About",frontmatter:{},regularPath:"/project/about.html",relativePath:"project/about.md",key:"v-a75af93a",path:"/project/about.html",headers:[{level:2,title:"Core Project Team",slug:"core-project-team"},{level:2,title:"Community Team",slug:"community-team"},{level:2,title:"Sponsors",slug:"sponsors"},{level:2,title:"License",slug:"license"},{level:2,title:"GPG Signature",slug:"gpg-signature"}]},{title:"Community Standards",frontmatter:{},regularPath:"/project/community.html",relativePath:"project/community.md",key:"v-22ba6d3a",path:"/project/community.html",headers:[{level:2,title:"Community Guidelines",slug:"community-guidelines"},{level:3,title:"Be Mature",slug:"be-mature"},{level:3,title:"Limit the Drama",slug:"limit-the-drama"},{level:3,title:"Be Patient",slug:"be-patient"},{level:3,title:"No Commercial Services",slug:"no-commercial-services"},{level:3,title:"No Mention or Ping Spam",slug:"no-mention-or-ping-spam"}]},{title:"Introduction",frontmatter:{},regularPath:"/project/introduction.html",relativePath:"project/introduction.md",key:"v-d6319362",path:"/project/introduction.html",headers:[{level:2,title:"Supported Games",slug:"supported-games"},{level:2,title:"Responsible Disclosure",slug:"responsible-disclosure"}]},{title:"Terminology",frontmatter:{},regularPath:"/project/terms.html",relativePath:"project/terms.md",key:"v-7b99cfba",path:"/project/terms.html",headers:[{level:2,title:"Example Setup Diagram",slug:"example-setup-diagram"}]},{title:"Creating SSL Certificates",frontmatter:{},regularPath:"/tutorials/creating_ssl_certificates.html",relativePath:"tutorials/creating_ssl_certificates.md",key:"v-6ec4d123",path:"/tutorials/creating_ssl_certificates.html",headers:[{level:3,title:"Creating a Certificate",slug:"creating-a-certificate"},{level:3,title:"Auto Renewal",slug:"auto-renewal"},{level:3,title:"Troubleshooting",slug:"troubleshooting"},{level:3,title:"Obtaining CloudFlare API Key",slug:"obtaining-cloudflare-api-key"},{level:3,title:"Creating a Certificate",slug:"creating-a-certificate-2"},{level:3,title:"Auto Renewal",slug:"auto-renewal-2"}]},{title:"Setting up MySQL",frontmatter:{},regularPath:"/tutorials/mysql_setup.html",relativePath:"tutorials/mysql_setup.md",key:"v-5c5d50fa",path:"/tutorials/mysql_setup.html",headers:[{level:2,title:"Creating a database for Pterodactyl",slug:"creating-a-database-for-pterodactyl"},{level:3,title:"Logging In",slug:"logging-in"},{level:3,title:"Creating a user",slug:"creating-a-user"},{level:3,title:"Create a database",slug:"create-a-database"},{level:3,title:"Assigning permissions",slug:"assigning-permissions"},{level:2,title:"Creating a Database Host for Nodes",slug:"creating-a-database-host-for-nodes"},{level:3,title:"Creating a user",slug:"creating-a-user-2"},{level:3,title:"Assigning permissions",slug:"assigning-permissions-2"},{level:3,title:"Allowing external database access",slug:"allowing-external-database-access"}]},{title:"Additional Configuration",frontmatter:{},regularPath:"/wings/1.0/configuration.html",relativePath:"wings/1.0/configuration.md",key:"v-6cd19ba3",path:"/wings/1.0/configuration.html",headers:[{level:2,title:"Private Registries",slug:"private-registries"},{level:3,title:"Available Keys",slug:"available-keys"},{level:3,title:"Example of usage",slug:"example-of-usage"},{level:2,title:"Custom Network Interfaces",slug:"custom-network-interfaces"},{level:3,title:"Example of usage",slug:"example-of-usage-2"},{level:2,title:"Enabling Cloudflare proxy",slug:"enabling-cloudflare-proxy"},{level:2,title:"Throttles Limits",slug:"throttles-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-3"},{level:2,title:"Installer Limits",slug:"installer-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-4"},{level:2,title:"Other values",slug:"other-values"}]},{title:"Installing Wings",frontmatter:{},regularPath:"/wings/1.0/installing.html",relativePath:"wings/1.0/installing.md",key:"v-55eb8eca",path:"/wings/1.0/installing.html",headers:[{level:2,title:"Supported Systems",slug:"supported-systems"},{level:2,title:"System Requirements",slug:"system-requirements"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Installing Docker",slug:"installing-docker"},{level:2,title:"Installing Wings",slug:"installing-wings-2"},{level:2,title:"Configure",slug:"configure"},{level:3,title:"Starting Wings",slug:"starting-wings"},{level:3,title:"Daemonizing (using systemd)",slug:"daemonizing-using-systemd"},{level:3,title:"Node Allocations",slug:"node-allocations"}]},{title:"Migrating to Wings",frontmatter:{},regularPath:"/wings/1.0/migrating.html",relativePath:"wings/1.0/migrating.md",key:"v-1ec46263",path:"/wings/1.0/migrating.html",headers:[{level:2,title:"Install Wings",slug:"install-wings"},{level:2,title:"Copy New Configuration File",slug:"copy-new-configuration-file"},{level:2,title:"Remove Old Daemon",slug:"remove-old-daemon"},{level:3,title:"Remove Standalone SFTP",slug:"remove-standalone-sftp"},{level:2,title:"Daemonize Wings",slug:"daemonize-wings"}]},{title:"Upgrading Wings",frontmatter:{},regularPath:"/wings/1.0/upgrading.html",relativePath:"wings/1.0/upgrading.md",key:"v-9213d4fa",path:"/wings/1.0/upgrading.html",headers:[{level:2,title:"Wings Version Requirements",slug:"wings-version-requirements"},{level:2,title:"Download Updated Binary",slug:"download-updated-binary"},{level:2,title:"Restart Process",slug:"restart-process"}]}],themeConfig:{repo:"pterodactyl/panel",docsRepo:"pterodactyl/documentation",repoLabel:"GitHub",editLinkText:"Help us improve this page.",editLinks:!0,logo:"/logos/pterry.svg",nav:[{text:"Documentation",link:"/project/introduction.md"},{text:"Community Guides",link:"/community/about.md"},{text:"Get Help",link:"https://discord.gg/pterodactyl"},{text:"API",link:"https://dashflo.net/docs/api/pterodactyl/v1/"}],sidebar:{"/community/":[{title:"Community Guides",collapsable:!1,children:["/community/about.md"]},{title:"Panel Installation",collapsable:!1,children:["/community/installation-guides/panel/centos7.md","/community/installation-guides/panel/centos8.md","/community/installation-guides/panel/debian9.md","/community/installation-guides/panel/debian10.md","/community/installation-guides/panel/ubuntu1804.md","/community/installation-guides/panel/ubuntu2004.md"]},{title:"Wings Installation",collapsable:!1,children:["/community/installation-guides/wings/centos7.md","/community/installation-guides/wings/centos8.md","/community/installation-guides/wings/debian9.md","/community/installation-guides/wings/debian10.md","/community/installation-guides/wings/ubuntu1804.md","/community/installation-guides/wings/ubuntu2004.md"]},{title:"Creating Eggs",collapsable:!1,children:["/community/config/eggs/creating_a_custom_egg.md","/community/config/eggs/creating_a_custom_image.md"]},{title:"Game Configuration",collapsable:!1,children:["/community/games/minecraft.md"]},{title:"Tutorials",collapsable:!1,children:["/community/config/nodes/add_node.md","/community/tutorials/artisan.md"]},{title:"Customization",collapsable:!1,children:["/community/customization/panel.md","/community/customization/wings.md"]}],"/":[{title:"Project Information",collapsable:!1,children:["/project/introduction.md","/project/about.md","/project/terms.md","/project/community.md"]},{title:"Panel",collapsable:!1,path:"/panel/",currentVersion:"1.0",versions:[{title:"1.6",name:"1.0",status:"stable",children:["/getting_started","/webserver_configuration","/additional_configuration","/updating","/troubleshooting","/legacy_upgrade"]}]},{title:"Wings",collapsable:!1,path:"/wings/",currentVersion:"1.0",versions:[{title:"1.5",name:"1.0",status:"stable",children:["/installing","/upgrading","/migrating","/configuration"]}]},{title:"Tutorials",collapsable:!1,children:["/tutorials/mysql_setup.md","/tutorials/creating_ssl_certificates.md"]},{title:"Guides",collapsable:!1,children:["/guides/mounts.md"]},{title:"Development & Ops",collapsable:!0,children:["/ops/publish_release.md"]}]}}},Le=(n(300),n(302),n(303),n(181),n(74),n(108));function Re(){for(var t="/",e=new RegExp(t+"{1,}","g"),n=arguments.length,r=new Array(n),i=0;i2&&void 0!==arguments[2]?arguments[2]:o.a;Qt(e),n.$vuepress.$set("siteData",e);var r=t(n.$vuepress.$get("siteData")),i=new r,a=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(i)),s={};return Object.keys(a).reduce((function(t,e){return e.startsWith("$")&&(t[e]=a[e].get),t}),s),{computed:s}}((function(t){return function(){function e(){Ue(this,e)}return Be(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var i in r)"/"===i?e=r[i]:0===this.$page.path.indexOf(i)&&(t=r[i]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$canonicalUrl",get:function(){var t=this.$page.frontmatter.canonicalUrl;return"string"==typeof t&&t}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n=0&&(e=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{path:t,query:n,hash:e}}(i.path||""),c=e&&e.path||"/",f=l.path?k(l.path,c,n||i.append):c,h=function(t,e,n){void 0===e&&(e={});var r,i=n||d;try{r=i(t||"")}catch(t){r={}}for(var o in e){var a=e[o];r[o]=Array.isArray(a)?a.map(p):p(a)}return r}(l.query,i.query,r&&r.options.parseQuery),v=i.hash||l.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:f,query:h,hash:v}}var G,K=function(){},X={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),o=i.location,s=i.route,u=i.href,l={},c=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,m=null==this.exactActiveClass?d:this.exactActiveClass,y=s.redirectedFrom?g(null,W(s.redirectedFrom),null,n):s;l[m]=w(r,y,this.exactPath),l[h]=this.exact||this.exactPath?l[m]:function(t,e){return 0===t.path.replace(v,"/").indexOf(e.path.replace(v,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var b=l[m]?this.ariaCurrentValue:null,_=function(t){Q(t)&&(e.replace?n.replace(o,K):n.push(o,K))},x={click:Q};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=_})):x[this.event]=_;var S={class:l},C=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:s,navigate:_,isActive:l[h],isExactActive:l[m]});if(C){if(1===C.length)return C[0];if(C.length>1||!C.length)return 0===C.length?t():t("span",{},C)}if("a"===this.tag)S.on=x,S.attrs={href:u,"aria-current":b};else{var O=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=H(c.path,s.params),u(c,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[i]?e(t[i],(function(){r(i+1)})):r(i+1)};r(0)}var xt={redirected:2,aborted:4,cancelled:8,duplicated:16};function St(t,e){return Ot(t,e,xt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return kt.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Ct(t,e){return Ot(t,e,xt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Ot(t,e,n,r){var i=new Error(r);return i._isRouter=!0,i.from=t,i.to=e,i.type=n,i}var kt=["params","query","hash"];function Pt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Et(t,e){return Pt(t)&&t._isRouter&&(null==e||t.type===e)}function jt(t){return function(e,n,r){var i=!1,o=0,a=null;At(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){i=!0,o++;var u,l=Lt((function(e){var i;((i=e).__esModule||Tt&&"Module"===i[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:G.extend(e),n.components[s]=e,--o<=0&&r()})),c=Lt((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Pt(t)?t:new Error(e),r(a))}));try{u=t(l,c)}catch(t){c(t)}if(u)if("function"==typeof u.then)u.then(l,c);else{var f=u.component;f&&"function"==typeof f.then&&f.then(l,c)}}})),i||r()}}function At(t,e){return $t(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function $t(t){return Array.prototype.concat.apply([],t)}var Tt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Lt(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Rt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=y,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Dt(t,e,n,r){var i=At(t,(function(t,r,i,o){var a=function(t,e){"function"!=typeof t&&(t=G.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,i,o)})):n(a,r,i,o)}));return $t(r?i.reverse():i)}function It(t,e){if(e)return function(){return t.apply(e,arguments)}}Rt.prototype.listen=function(t){this.cb=t},Rt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Rt.prototype.onError=function(t){this.errorCbs.push(t)},Rt.prototype.transitionTo=function(t,e,n){var r,i=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var o=this.current;this.confirmTransition(r,(function(){i.updateRoute(r),e&&e(r),i.ensureURL(),i.router.afterHooks.forEach((function(t){t&&t(r,o)})),i.ready||(i.ready=!0,i.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!i.ready&&(Et(t,xt.redirected)&&o===y||(i.ready=!0,i.readyErrorCbs.forEach((function(e){e(t)}))))}))},Rt.prototype.confirmTransition=function(t,e,n){var r=this,i=this.current;this.pending=t;var o,a,s=function(t){!Et(t)&&Pt(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,l=i.matched.length-1;if(w(t,i)&&u===l&&t.matched[u]===i.matched[l])return this.ensureURL(),s(((a=Ot(o=i,t,xt.duplicated,'Avoided redundant navigation to current location: "'+o.fullPath+'".')).name="NavigationDuplicated",a));var c=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=yt&&n;r&&this.listeners.push(ut());var i=function(){var n=t.current,i=Nt(t.base);t.current===y&&i===t._startLocation||t.transitionTo(i,(function(t){r&<(e,t,n,!0)}))};window.addEventListener("popstate",i),this.listeners.push((function(){window.removeEventListener("popstate",i)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){bt(P(r.base+t.fullPath)),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){_t(P(r.base+t.fullPath)),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Nt(this.base)!==this.current.fullPath){var e=P(this.base+this.current.fullPath);t?bt(e):_t(e)}},e.prototype.getCurrentLocation=function(){return Nt(this.base)},e}(Rt);function Nt(t){var e=window.location.pathname;return t&&0===e.toLowerCase().indexOf(t.toLowerCase())&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ut=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Nt(t);if(!/^\/#/.test(e))return window.location.replace(P(t+"/#"+e)),!0}(this.base)||Ft()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=yt&&e;n&&this.listeners.push(ut());var r=function(){var e=t.current;Ft()&&t.transitionTo(Bt(),(function(r){n&<(t.router,r,e,!0),yt||Vt(r.fullPath)}))},i=yt?"popstate":"hashchange";window.addEventListener(i,r),this.listeners.push((function(){window.removeEventListener(i,r)}))}},e.prototype.push=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){qt(t.fullPath),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){Vt(t.fullPath),lt(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Bt()!==e&&(t?qt(e):Vt(e))},e.prototype.getCurrentLocation=function(){return Bt()},e}(Rt);function Ft(){var t=Bt();return"/"===t.charAt(0)||(Vt("/"+t),!1)}function Bt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function zt(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function qt(t){yt?bt(zt(t)):window.location.hash=t}function Vt(t){yt?_t(zt(t)):window.location.replace(zt(t))}var Ht=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Et(t,xt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Rt),Wt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=tt(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!yt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Mt(this,t.base);break;case"hash":this.history=new Ut(this,t.base,this.fallback);break;case"abstract":this.history=new Ht(this,t.base);break;default:0}},Gt={currentRoute:{configurable:!0}};function Kt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Wt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Gt.currentRoute.get=function(){return this.history&&this.history.current},Wt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Mt||n instanceof Ut){var r=function(t){n.setupListeners(),function(t){var r=n.current,i=e.options.scrollBehavior;yt&&i&&"fullPath"in t&<(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Wt.prototype.beforeEach=function(t){return Kt(this.beforeHooks,t)},Wt.prototype.beforeResolve=function(t){return Kt(this.resolveHooks,t)},Wt.prototype.afterEach=function(t){return Kt(this.afterHooks,t)},Wt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Wt.prototype.onError=function(t){this.history.onError(t)},Wt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Wt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Wt.prototype.go=function(t){this.history.go(t)},Wt.prototype.back=function(){this.go(-1)},Wt.prototype.forward=function(){this.go(1)},Wt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Wt.prototype.resolve=function(t,e,n){var r=W(t,e=e||this.history.current,n,this),i=this.match(r,e),o=i.redirectedFrom||i.fullPath;return{location:r,route:i,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?P(t+"/"+r):r}(this.history.base,o,this.mode),normalizedTo:r,resolved:i}},Wt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Wt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Wt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Wt.prototype,Gt),Wt.install=function t(e){if(!t.installed||G!==e){t.installed=!0,G=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",C),e.component("RouterLink",X);var i=e.config.optionMergeStrategies;i.beforeRouteEnter=i.beforeRouteLeave=i.beforeRouteUpdate=i.created}},Wt.version="3.5.1",Wt.isNavigationFailure=Et,Wt.NavigationFailureType=xt,Wt.START_LOCATION=y,J&&window.Vue&&window.Vue.use(Wt);var Xt=Wt;n(51),n(197),n(199),n(144),n(145),n(71),n(110),n(52);function Qt(t){t.locales&&Object.keys(t.locales).forEach((function(e){t.locales[e].path=e})),Object.freeze(t)}n(201),n(146),n(50),n(202),n(70),n(44),n(61),n(93);function Jt(t){return(Jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Yt=n(31),Zt={DropdownLink:function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,324))},DropdownTransition:function(){return Promise.all([n.e(0),n.e(18)]).then(n.bind(null,321))},Home:function(){return Promise.all([n.e(2),n.e(8)]).then(n.bind(null,341))},Layout:function(){return Promise.all([n.e(0),n.e(2),n.e(1),n.e(4)]).then(n.bind(null,366))},NavLink:function(){return n.e(10).then(n.bind(null,315))},NavLinks:function(){return Promise.all([n.e(0),n.e(6)]).then(n.bind(null,325))},Navbar:function(){return Promise.all([n.e(0),n.e(5)]).then(n.bind(null,342))},NotFound:function(){return n.e(25).then(n.bind(null,367))},Page:function(){return n.e(15).then(n.bind(null,343))},SearchBox:function(){return n.e(13).then(n.bind(null,331))},Sidebar:function(){return Promise.all([n.e(0),n.e(1),n.e(9)]).then(n.bind(null,344))},SidebarButton:function(){return n.e(26).then(n.bind(null,333))},SidebarGroup:function(){return Promise.all([n.e(0),n.e(1)]).then(n.bind(null,345))},SidebarLink:function(){return n.e(16).then(n.bind(null,334))},SlickCarousel:function(){return Promise.all([n.e(2),n.e(27)]).then(n.bind(null,330))},VersionSelect:function(){return n.e(11).then(n.bind(null,346))},VersionSelectItem:function(){return n.e(28).then(n.bind(null,332))}},te={"v-680eebc3":function(){return n.e(29).then(n.bind(null,368))},"v-4e72e1d8":function(){return n.e(30).then(n.bind(null,369))},"v-7d127123":function(){return n.e(31).then(n.bind(null,370))},"v-622f23e3":function(){return n.e(17).then(n.bind(null,371))},"v-ef34fffa":function(){return n.e(33).then(n.bind(null,372))},"v-090070fa":function(){return n.e(34).then(n.bind(null,373))},"v-10fe793a":function(){return n.e(32).then(n.bind(null,374))},"v-4a1e6e3a":function(){return n.e(12).then(n.bind(null,375))},"v-67c3f2ba":function(){return n.e(14).then(n.bind(null,376))},"v-0af75f63":function(){return n.e(35).then(n.bind(null,377))},"v-cc322cfa":function(){return n.e(36).then(n.bind(null,378))},"v-4d5d0f9b":function(){return n.e(37).then(n.bind(null,379))},"v-047b1c1f":function(){return n.e(39).then(n.bind(null,380))},"v-22a01883":function(){return n.e(38).then(n.bind(null,381))},"v-030337f1":function(){return n.e(40).then(n.bind(null,382))},"v-26037fe3":function(){return n.e(41).then(n.bind(null,383))},"v-9619ebfa":function(){return n.e(42).then(n.bind(null,384))},"v-432db923":function(){return n.e(43).then(n.bind(null,385))},"v-3dac3903":function(){return n.e(44).then(n.bind(null,386))},"v-e046bab2":function(){return n.e(45).then(n.bind(null,387))},"v-e336830e":function(){return n.e(46).then(n.bind(null,388))},"v-7c7b3203":function(){return n.e(47).then(n.bind(null,389))},"v-00d38f11":function(){return n.e(49).then(n.bind(null,390))},"v-a31c3dba":function(){return n.e(50).then(n.bind(null,391))},"v-6f0eac21":function(){return n.e(51).then(n.bind(null,392))},"v-481dea23":function(){return n.e(52).then(n.bind(null,393))},"v-d39223ba":function(){return n.e(20).then(n.bind(null,394))},"v-15b388aa":function(){return n.e(53).then(n.bind(null,395))},"v-07a77f72":function(){return n.e(48).then(n.bind(null,396))},"v-8a6363ba":function(){return n.e(54).then(n.bind(null,397))},"v-7f0b5429":function(){return n.e(55).then(n.bind(null,398))},"v-29055241":function(){return n.e(56).then(n.bind(null,399))},"v-c0e60bfa":function(){return n.e(21).then(n.bind(null,400))},"v-589003f5":function(){return n.e(57).then(n.bind(null,401))},"v-2339aa03":function(){return n.e(58).then(n.bind(null,402))},"v-019cb63a":function(){return n.e(59).then(n.bind(null,403))},"v-7ffeb723":function(){return n.e(60).then(n.bind(null,404))},"v-9478f2ba":function(){return n.e(61).then(n.bind(null,405))},"v-4f03fe0f":function(){return n.e(62).then(n.bind(null,406))},"v-5baa92ba":function(){return n.e(63).then(n.bind(null,407))},"v-c249e07a":function(){return n.e(64).then(n.bind(null,408))},"v-27941b23":function(){return n.e(65).then(n.bind(null,409))},"v-6f4baca5":function(){return n.e(66).then(n.bind(null,410))},"v-fa75e63a":function(){return n.e(67).then(n.bind(null,411))},"v-dacf6e56":function(){return n.e(68).then(n.bind(null,412))},"v-8eec473a":function(){return n.e(69).then(n.bind(null,413))},"v-29d5bc56":function(){return n.e(70).then(n.bind(null,414))},"v-cbda523a":function(){return n.e(71).then(n.bind(null,415))},"v-a75af93a":function(){return n.e(72).then(n.bind(null,416))},"v-22ba6d3a":function(){return n.e(73).then(n.bind(null,417))},"v-d6319362":function(){return n.e(74).then(n.bind(null,418))},"v-7b99cfba":function(){return n.e(22).then(n.bind(null,419))},"v-6ec4d123":function(){return n.e(75).then(n.bind(null,420))},"v-5c5d50fa":function(){return n.e(76).then(n.bind(null,421))},"v-6cd19ba3":function(){return n.e(77).then(n.bind(null,422))},"v-55eb8eca":function(){return n.e(19).then(n.bind(null,423))},"v-1ec46263":function(){return n.e(23).then(n.bind(null,424))},"v-9213d4fa":function(){return n.e(78).then(n.bind(null,425))}};function ee(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var ne=/-(\w)/g,re=ee((function(t){return t.replace(ne,(function(t,e){return e?e.toUpperCase():""}))})),ie=/\B([A-Z])/g,oe=ee((function(t){return t.replace(ie,"-$1").toLowerCase()})),ae=ee((function(t){return t.charAt(0).toUpperCase()+t.slice(1)}));function se(t,e){if(e)return t(e)?t(e):e.includes("-")?t(ae(re(e))):t(ae(e))||t(oe(e))}var ue=Object.assign({},Zt,te),le=function(t){return ue[t]},ce=function(t){return te[t]},fe=function(t){return Zt[t]},pe=function(t){return o.a.component(t)};function de(t){return se(ce,t)}function he(t){return se(fe,t)}function ve(t){return se(le,t)}function ge(t){return se(pe,t)}function me(){for(var t=arguments.length,e=new Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:"";return t?''):""}function Oe(t,e){if(e&&Object(Yt.a)(e).filter((function(t){return t.parentNode===document.head})).forEach((function(t){return document.head.removeChild(t)})),t)return t.map((function(t){var e=document.createElement("meta");return Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])})),document.head.appendChild(e),e}))}function ke(t){for(var e=0,n=["name","property","itemprop"];e"})).join("\n "):"",this.$ssrContext.canonicalLink=Ce(this.$canonicalUrl)}var e},mounted:function(){this.currentMetaTags=Object(Yt.a)(document.querySelectorAll("meta")),this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta:function(){document.title=this.$title,document.documentElement.lang=this.$lang;var t=this.getMergedMetaTags();this.currentMetaTags=Oe(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return xe()([{name:"description",content:this.$description}],t,this.siteMeta,ke)},updateCanonicalLink:function(){Se(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",Ce(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){Oe(null,this.currentMetaTags),Se()}}],Ee={name:"GlobalLayout",computed:{layout:function(){var t=this.getLayout();return ye("layout",t),o.a.component(t)}},methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},je=n(48),Ae=Object(je.a)(Ee,(function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){var r;switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),(r=t[e]).push.apply(r,Object(Yt.a)(n));break;default:throw new Error("Unknown option name.")}}(Ae,"mixins",Pe);var $e=[{name:"v-680eebc3",path:"/404.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-680eebc3").then(n)}},{name:"v-4e72e1d8",path:"/",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4e72e1d8").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-7d127123",path:"/community/about.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7d127123").then(n)}},{name:"v-622f23e3",path:"/community/config/nodes/add_node.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-622f23e3").then(n)}},{name:"v-ef34fffa",path:"/community/customization/panel.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-ef34fffa").then(n)}},{name:"v-090070fa",path:"/community/customization/wings.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-090070fa").then(n)}},{name:"v-10fe793a",path:"/community/config/eggs/creating_a_custom_image.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-10fe793a").then(n)}},{name:"v-4a1e6e3a",path:"/community/config/eggs/creating_a_custom_egg.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4a1e6e3a").then(n)}},{name:"v-67c3f2ba",path:"/community/games/minecraft.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-67c3f2ba").then(n)}},{name:"v-0af75f63",path:"/community/installation-guides/panel/centos7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-0af75f63").then(n)}},{name:"v-cc322cfa",path:"/community/installation-guides/panel/centos8.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-cc322cfa").then(n)}},{name:"v-4d5d0f9b",path:"/community/installation-guides/panel/debian10.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4d5d0f9b").then(n)}},{name:"v-047b1c1f",path:"/community/installation-guides/panel/ubuntu1804.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-047b1c1f").then(n)}},{name:"v-22a01883",path:"/community/installation-guides/panel/debian9.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-22a01883").then(n)}},{name:"v-030337f1",path:"/community/installation-guides/panel/ubuntu2004.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-030337f1").then(n)}},{name:"v-26037fe3",path:"/community/installation-guides/wings/centos7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-26037fe3").then(n)}},{name:"v-9619ebfa",path:"/community/installation-guides/wings/centos8.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-9619ebfa").then(n)}},{name:"v-432db923",path:"/community/installation-guides/wings/debian10.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-432db923").then(n)}},{name:"v-3dac3903",path:"/community/installation-guides/wings/debian9.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-3dac3903").then(n)}},{name:"v-e046bab2",path:"/community/installation-guides/wings/ubuntu1804.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-e046bab2").then(n)}},{name:"v-e336830e",path:"/community/installation-guides/wings/ubuntu2004.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-e336830e").then(n)}},{name:"v-7c7b3203",path:"/community/tutorials/artisan.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7c7b3203").then(n)}},{name:"v-00d38f11",path:"/daemon/0.6/debian_8_docker.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-00d38f11").then(n)}},{name:"v-a31c3dba",path:"/daemon/0.6/kernel_modifications.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-a31c3dba").then(n)}},{name:"v-6f0eac21",path:"/daemon/0.6/standalone_sftp.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6f0eac21").then(n)}},{name:"v-481dea23",path:"/daemon/0.6/upgrade/0.4_to_0.5.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-481dea23").then(n)}},{name:"v-d39223ba",path:"/daemon/0.6/installing.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-d39223ba").then(n)}},{name:"v-15b388aa",path:"/daemon/0.6/upgrade/0.5.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-15b388aa").then(n)}},{name:"v-07a77f72",path:"/daemon/0.6/configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-07a77f72").then(n)}},{name:"v-8a6363ba",path:"/daemon/0.6/upgrade/0.5_to_0.6.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-8a6363ba").then(n)}},{name:"v-7f0b5429",path:"/daemon/0.6/upgrade/0.6.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7f0b5429").then(n)}},{name:"v-29055241",path:"/daemon/0.6/upgrading.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-29055241").then(n)}},{name:"v-c0e60bfa",path:"/guides/mounts.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-c0e60bfa").then(n)}},{name:"v-589003f5",path:"/guides/php_upgrade.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-589003f5").then(n)}},{name:"v-2339aa03",path:"/ops/publish_release.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-2339aa03").then(n)}},{name:"v-019cb63a",path:"/panel/0.7/configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-019cb63a").then(n)}},{name:"v-7ffeb723",path:"/panel/0.7/getting_started.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7ffeb723").then(n)}},{name:"v-9478f2ba",path:"/panel/0.7/troubleshooting.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-9478f2ba").then(n)}},{name:"v-4f03fe0f",path:"/panel/0.7/upgrade/0.6_to_0.7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-4f03fe0f").then(n)}},{name:"v-5baa92ba",path:"/panel/0.7/upgrade/0.7.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-5baa92ba").then(n)}},{name:"v-c249e07a",path:"/panel/0.7/upgrading.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-c249e07a").then(n)}},{name:"v-27941b23",path:"/panel/0.7/webserver_configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-27941b23").then(n)}},{name:"v-6f4baca5",path:"/panel/1.0/additional_configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6f4baca5").then(n)}},{name:"v-fa75e63a",path:"/panel/1.0/getting_started.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-fa75e63a").then(n)}},{name:"v-dacf6e56",path:"/panel/1.0/legacy_upgrade.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-dacf6e56").then(n)}},{name:"v-8eec473a",path:"/panel/1.0/troubleshooting.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-8eec473a").then(n)}},{name:"v-29d5bc56",path:"/panel/1.0/updating.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-29d5bc56").then(n)}},{name:"v-cbda523a",path:"/panel/1.0/webserver_configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-cbda523a").then(n)}},{name:"v-a75af93a",path:"/project/about.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-a75af93a").then(n)}},{name:"v-22ba6d3a",path:"/project/community.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-22ba6d3a").then(n)}},{name:"v-d6319362",path:"/project/introduction.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-d6319362").then(n)}},{name:"v-7b99cfba",path:"/project/terms.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-7b99cfba").then(n)}},{name:"v-6ec4d123",path:"/tutorials/creating_ssl_certificates.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6ec4d123").then(n)}},{name:"v-5c5d50fa",path:"/tutorials/mysql_setup.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-5c5d50fa").then(n)}},{name:"v-6cd19ba3",path:"/wings/1.0/configuration.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-6cd19ba3").then(n)}},{name:"v-55eb8eca",path:"/wings/1.0/installing.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-55eb8eca").then(n)}},{name:"v-1ec46263",path:"/wings/1.0/migrating.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-1ec46263").then(n)}},{name:"v-9213d4fa",path:"/wings/1.0/upgrading.html",component:Ae,beforeEnter:function(t,e,n){me("Layout","v-9213d4fa").then(n)}},{path:"*",component:Ae}],Te={title:"Pterodactyl",description:"Pterodactyl is an open-source game server management panel built with PHP 7, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful and intuitive UI to end users.",base:"/",headTags:[["link",{rel:"apple-touch-icon",sizes:"180x180",href:"/favicons/apple-touch-icon.png"}],["link",{rel:"icon",type:"image/png",href:"/favicons/favicon-32x32.png",sizes:"32x32"}],["link",{rel:"icon",type:"image/png",href:"/favicons/favicon-16x16.png",sizes:"16x16"}],["link",{rel:"mask-icon",href:"/favicons/safari-pinned-tab.svg",color:"#0e4688"}],["link",{rel:"manifest",href:"/favicons/site.webmanifest"}],["link",{rel:"shortcut icon",href:"/favicons/favicon.ico"}],["meta",{name:"msapplication-config",content:"/favicons/browserconfig.xml"}],["meta",{name:"theme-color",content:"#0e4688"}]],pages:[{frontmatter:{},regularPath:"/404.html",relativePath:"404.md",key:"v-680eebc3",path:"/404.html"},{title:"Home",frontmatter:{home:!0,heroImage:"/doc_pterry.png",actionText:"Get Started →",actionLink:"/project/introduction",features:[{title:"Security First",details:"Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box."},{title:"Modern Tooling",details:"Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications."},{title:"Docker to the Core",details:"All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game."}],footer:"MIT Licensed | Copyright © 2015 - 2018 Dane Everitt & Contributors"},regularPath:"/",relativePath:"README.md",key:"v-4e72e1d8",path:"/"},{title:"Community Guides and Tutorials",frontmatter:{},regularPath:"/community/about.html",relativePath:"community/about.md",key:"v-7d127123",path:"/community/about.html",headers:[{level:2,title:"About",slug:"about"}]},{title:"Creating a New Node",frontmatter:{},regularPath:"/community/config/nodes/add_node.html",relativePath:"community/config/nodes/add_node.md",key:"v-622f23e3",path:"/community/config/nodes/add_node.html",headers:[{level:2,title:"Location",slug:"location"},{level:2,title:"Information Required",slug:"information-required"},{level:2,title:"Install the Daemon",slug:"install-the-daemon"},{level:2,title:"Configuring the Node",slug:"configuring-the-node"},{level:3,title:"Auto-Deploy",slug:"auto-deploy"}]},{title:"Building Panel Assets",frontmatter:{},regularPath:"/community/customization/panel.html",relativePath:"community/customization/panel.md",key:"v-ef34fffa",path:"/community/customization/panel.html",headers:[{level:2,title:"Install Dependencies",slug:"install-dependencies"},{level:2,title:"Build Panel Assets",slug:"build-panel-assets"}]},{title:"Building Wings",frontmatter:{},regularPath:"/community/customization/wings.html",relativePath:"community/customization/wings.md",key:"v-090070fa",path:"/community/customization/wings.html",headers:[{level:2,title:"Build Requirements",slug:"build-requirements"},{level:2,title:"Building",slug:"building"},{level:2,title:"Install the new binary",slug:"install-the-new-binary"},{level:2,title:"Troubleshooting",slug:"troubleshooting"}]},{title:"Creating a Custom Docker Image",frontmatter:{},regularPath:"/community/config/eggs/creating_a_custom_image.html",relativePath:"community/config/eggs/creating_a_custom_image.md",key:"v-10fe793a",path:"/community/config/eggs/creating_a_custom_image.html",headers:[{level:2,title:"Creating the Dockerfile",slug:"creating-the-dockerfile"},{level:2,title:"Installing Dependencies",slug:"installing-dependencies"},{level:2,title:"Creating a Container User",slug:"creating-a-container-user"},{level:2,title:"Work Directory & Entrypoint",slug:"work-directory-entrypoint"},{level:2,title:"Entrypoint Script",slug:"entrypoint-script"},{level:2,title:"Modifying the Startup Command",slug:"modifying-the-startup-command"},{level:2,title:"Run the Command",slug:"run-the-command"},{level:3,title:"Note",slug:"note"}]},{title:"Creating a Custom Egg",frontmatter:{},regularPath:"/community/config/eggs/creating_a_custom_egg.html",relativePath:"community/config/eggs/creating_a_custom_egg.md",key:"v-4a1e6e3a",path:"/community/config/eggs/creating_a_custom_egg.html",headers:[{level:2,title:"Create New Option",slug:"create-new-option"},{level:2,title:"Configure Process Management",slug:"configure-process-management"},{level:3,title:"Stop Command",slug:"stop-command"},{level:3,title:"Log Storage",slug:"log-storage"},{level:3,title:"Configuration Files",slug:"configuration-files"},{level:3,title:"Start Configuration",slug:"start-configuration"},{level:2,title:"Copy Settings From",slug:"copy-settings-from"},{level:2,title:"Egg Variables",slug:"egg-variables"},{level:2,title:"List of default variables",slug:"list-of-default-variables"}]},{title:"Minecraft",frontmatter:{},regularPath:"/community/games/minecraft.html",relativePath:"community/games/minecraft.md",key:"v-67c3f2ba",path:"/community/games/minecraft.html",headers:[{level:2,title:"Configuring a Server Network (BungeeCord, Waterfall, HexaCord, etc.)",slug:"configuring-a-server-network-bungeecord-waterfall-hexacord-etc"},{level:3,title:"Allocations in the Panel",slug:"allocations-in-the-panel"},{level:3,title:"proxy server settings",slug:"proxy-server-settings"},{level:3,title:"paper/spigot/bukkit settings",slug:"paper-spigot-bukkit-settings"},{level:3,title:"Firewalls",slug:"firewalls"}]},{title:"CentOS 7",frontmatter:{},regularPath:"/community/installation-guides/panel/centos7.html",relativePath:"community/installation-guides/panel/centos7.md",key:"v-0af75f63",path:"/community/installation-guides/panel/centos7.html",headers:[{level:2,title:"Install Requirements and Additional Utilities",slug:"install-requirements-and-additional-utilities"},{level:3,title:"SELinux tools",slug:"selinux-tools"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Composer",slug:"composer"},{level:2,title:"Install Utility Packages",slug:"install-utility-packages"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"CentOS 8, Rocky Linux 8, AlmaLinux 8",frontmatter:{},regularPath:"/community/installation-guides/panel/centos8.html",relativePath:"community/installation-guides/panel/centos8.md",key:"v-cc322cfa",path:"/community/installation-guides/panel/centos8.html",headers:[{level:2,title:"Install Requirements and Additional Utilities",slug:"install-requirements-and-additional-utilities"},{level:3,title:"SELinux tools",slug:"selinux-tools"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Composer",slug:"composer"},{level:2,title:"Install Utility Packages",slug:"install-utility-packages"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Debian 10",frontmatter:{},regularPath:"/community/installation-guides/panel/debian10.html",relativePath:"community/installation-guides/panel/debian10.md",key:"v-4d5d0f9b",path:"/community/installation-guides/panel/debian10.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 8.0",slug:"php-8-0"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Ubuntu 18.04",frontmatter:{},regularPath:"/community/installation-guides/panel/ubuntu1804.html",relativePath:"community/installation-guides/panel/ubuntu1804.md",key:"v-047b1c1f",path:"/community/installation-guides/panel/ubuntu1804.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Debian 9",frontmatter:{},regularPath:"/community/installation-guides/panel/debian9.html",relativePath:"community/installation-guides/panel/debian9.md",key:"v-22a01883",path:"/community/installation-guides/panel/debian9.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 7.4",slug:"php-7-4"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx",slug:"nginx-2"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Ubuntu 20.04",frontmatter:{},regularPath:"/community/installation-guides/panel/ubuntu2004.html",relativePath:"community/installation-guides/panel/ubuntu2004.md",key:"v-030337f1",path:"/community/installation-guides/panel/ubuntu2004.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"MariaDB",slug:"mariadb"},{level:3,title:"PHP 8.0",slug:"php-8-0"},{level:3,title:"Nginx",slug:"nginx"},{level:3,title:"Redis",slug:"redis"},{level:3,title:"Additional Utilities",slug:"additional-utilities"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"Configuring MariaDB",slug:"configuring-mariadb"},{level:3,title:"Setup PHP",slug:"setup-php"},{level:3,title:"Nginx Configuration",slug:"nginx-configuration"},{level:3,title:"Redis Setup",slug:"redis-setup"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"CentOS 7",frontmatter:{},regularPath:"/community/installation-guides/wings/centos7.html",relativePath:"community/installation-guides/wings/centos7.md",key:"v-26037fe3",path:"/community/installation-guides/wings/centos7.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:3,title:"FirewallD Changes",slug:"firewalld-changes"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"CentOS 8, Rocky Linux 8, AlmaLinux 8",frontmatter:{},regularPath:"/community/installation-guides/wings/centos8.html",relativePath:"community/installation-guides/wings/centos8.md",key:"v-9619ebfa",path:"/community/installation-guides/wings/centos8.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:3,title:"FirewallD Changes",slug:"firewalld-changes"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Debian 10",frontmatter:{},regularPath:"/community/installation-guides/wings/debian10.html",relativePath:"community/installation-guides/wings/debian10.md",key:"v-432db923",path:"/community/installation-guides/wings/debian10.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Debian 9",frontmatter:{},regularPath:"/community/installation-guides/wings/debian9.html",relativePath:"community/installation-guides/wings/debian9.md",key:"v-3dac3903",path:"/community/installation-guides/wings/debian9.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Ubuntu 18.04",frontmatter:{},regularPath:"/community/installation-guides/wings/ubuntu1804.html",relativePath:"community/installation-guides/wings/ubuntu1804.md",key:"v-e046bab2",path:"/community/installation-guides/wings/ubuntu1804.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Ubuntu 20.04",frontmatter:{},regularPath:"/community/installation-guides/wings/ubuntu2004.html",relativePath:"community/installation-guides/wings/ubuntu2004.md",key:"v-e336830e",path:"/community/installation-guides/wings/ubuntu2004.html",headers:[{level:2,title:"Install Requirements",slug:"install-requirements"},{level:3,title:"Docker",slug:"docker"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Artisan CLI",frontmatter:{},regularPath:"/community/tutorials/artisan.html",relativePath:"community/tutorials/artisan.md",key:"v-7c7b3203",path:"/community/tutorials/artisan.html",headers:[{level:2,title:"User Management",slug:"user-management"},{level:3,title:"Create User",slug:"create-user"},{level:3,title:"Delete User",slug:"delete-user"},{level:3,title:"Disable 2FA",slug:"disable-2fa"},{level:2,title:"Server & Node Management",slug:"server-node-management"},{level:3,title:"Create Location",slug:"create-location"},{level:3,title:"Delete Location",slug:"delete-location"},{level:3,title:"Server Bulk Power",slug:"server-bulk-power"},{level:2,title:"Panel Management",slug:"panel-management"},{level:3,title:"View Panel Info",slug:"view-panel-info"},{level:3,title:"Update Panel",slug:"update-panel"}]},{title:"Docker on Debian 8",frontmatter:{},regularPath:"/daemon/0.6/debian_8_docker.html",relativePath:"daemon/0.6/debian_8_docker.md",key:"v-00d38f11",path:"/daemon/0.6/debian_8_docker.html",headers:[{level:2,title:"Install Docker",slug:"install-docker"},{level:2,title:"Update GRUB Startup",slug:"update-grub-startup"},{level:2,title:"Add Backports Repo",slug:"add-backports-repo"},{level:2,title:"Update Software & Setup Docker",slug:"update-software-setup-docker"}]},{title:"Kernel Modifications",frontmatter:{},regularPath:"/daemon/0.6/kernel_modifications.html",relativePath:"daemon/0.6/kernel_modifications.md",key:"v-a31c3dba",path:"/daemon/0.6/kernel_modifications.html",headers:[{level:2,title:"Update Kernel",slug:"update-kernel"},{level:2,title:"Confirm Kernel",slug:"confirm-kernel"},{level:2,title:"Set Default Boot",slug:"set-default-boot"},{level:2,title:"Boot from hard disk",slug:"boot-from-hard-disk"}]},{title:"Standalone SFTP Server",frontmatter:{},regularPath:"/daemon/0.6/standalone_sftp.html",relativePath:"daemon/0.6/standalone_sftp.md",key:"v-6f0eac21",path:"/daemon/0.6/standalone_sftp.html",headers:[{level:2,title:"Disable Daemon's Server",slug:"disable-daemon-s-server"},{level:2,title:"Run the Standalone Server",slug:"run-the-standalone-server"},{level:3,title:"Start the Server",slug:"start-the-server"},{level:2,title:"Daemonize Server",slug:"daemonize-server"},{level:3,title:"Customizing Startup",slug:"customizing-startup"}]},{title:"Upgrading 0.4.X to 0.5.X",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.4_to_0.5.html",relativePath:"daemon/0.6/upgrade/0.4_to_0.5.md",key:"v-481dea23",path:"/daemon/0.6/upgrade/0.4_to_0.5.html",headers:[{level:2,title:"Docker Adjustments",slug:"docker-adjustments"},{level:2,title:"Download Files",slug:"download-files"},{level:2,title:"SFTP Cleanup",slug:"sftp-cleanup"},{level:2,title:"File Migration",slug:"file-migration"},{level:3,title:"Rebuild Containers",slug:"rebuild-containers"}]},{title:"Installation",frontmatter:{},regularPath:"/daemon/0.6/installing.html",relativePath:"daemon/0.6/installing.md",key:"v-d39223ba",path:"/daemon/0.6/installing.html",headers:[{level:2,title:"Supported Systems",slug:"supported-systems"},{level:2,title:"System Requirements",slug:"system-requirements"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Installing Docker",slug:"installing-docker"},{level:3,title:"Installing Nodejs",slug:"installing-nodejs"},{level:2,title:"Installing Daemon Software",slug:"installing-daemon-software"},{level:2,title:"Configure Daemon",slug:"configure-daemon"},{level:2,title:"Starting the Daemon",slug:"starting-the-daemon"},{level:3,title:"Daemonizing (using systemd)",slug:"daemonizing-using-systemd"}]},{title:"Upgrading 0.5 Series",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.5.html",relativePath:"daemon/0.6/upgrade/0.5.md",key:"v-15b388aa",path:"/daemon/0.6/upgrade/0.5.html",headers:[{level:2,title:"Download Newest Release",slug:"download-newest-release"},{level:2,title:"Update Components",slug:"update-components"}]},{title:"Additional Configuration",frontmatter:{},regularPath:"/daemon/0.6/configuration.html",relativePath:"daemon/0.6/configuration.md",key:"v-07a77f72",path:"/daemon/0.6/configuration.html",headers:[{level:2,title:"Output Throttles",slug:"output-throttles"},{level:2,title:"Custom Network Interfaces",slug:"custom-network-interfaces"},{level:2,title:"Private Registries",slug:"private-registries"},{level:2,title:"Security Policies",slug:"security-policies"},{level:2,title:"Container Policy",slug:"container-policy"},{level:3,title:"Default Security Opts Array",slug:"default-security-opts-array"},{level:3,title:"Default Capabilities Drop Array",slug:"default-capabilities-drop-array"},{level:2,title:"Enabling Cloudflare",slug:"enabling-cloudflare"}]},{title:"Upgrading 0.5.X to 0.6.X",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.5_to_0.6.html",relativePath:"daemon/0.6/upgrade/0.5_to_0.6.md",key:"v-8a6363ba",path:"/daemon/0.6/upgrade/0.5_to_0.6.html",headers:[{level:2,title:"Breaking Changes",slug:"breaking-changes"},{level:2,title:"Download Files",slug:"download-files"},{level:3,title:"Start the Daemon",slug:"start-the-daemon"},{level:2,title:"Rebuild Containers",slug:"rebuild-containers"}]},{title:"Upgrading 0.6 Series",frontmatter:{},regularPath:"/daemon/0.6/upgrade/0.6.html",relativePath:"daemon/0.6/upgrade/0.6.md",key:"v-7f0b5429",path:"/daemon/0.6/upgrade/0.6.html",headers:[{level:2,title:"Download Newest Release",slug:"download-newest-release"},{level:2,title:"Update Components",slug:"update-components"}]},{title:"Upgrading",frontmatter:{},regularPath:"/daemon/0.6/upgrading.html",relativePath:"daemon/0.6/upgrading.md",key:"v-29055241",path:"/daemon/0.6/upgrading.html",headers:[{level:2,title:"Version Specific Guides",slug:"version-specific-guides"}]},{title:"Using Mounts",frontmatter:{},regularPath:"/guides/mounts.html",relativePath:"guides/mounts.md",key:"v-c0e60bfa",path:"/guides/mounts.html",headers:[{level:2,title:"Wings Configuration",slug:"wings-configuration"},{level:2,title:"Panel Configuration",slug:"panel-configuration"},{level:3,title:"Creating a Mount",slug:"creating-a-mount"},{level:3,title:"Assigning a Mount to a Server",slug:"assigning-a-mount-to-a-server"},{level:3,title:"Example Mount",slug:"example-mount"}]},{title:"Upgrading PHP",frontmatter:{},regularPath:"/guides/php_upgrade.html",relativePath:"guides/php_upgrade.md",key:"v-589003f5",path:"/guides/php_upgrade.html",headers:[{level:2,title:"Install PHP",slug:"install-php"},{level:2,title:"Update Composer",slug:"update-composer"},{level:2,title:"Webserver Configuration",slug:"webserver-configuration"}]},{title:"Publishing a Release",frontmatter:{},regularPath:"/ops/publish_release.html",relativePath:"ops/publish_release.md",key:"v-2339aa03",path:"/ops/publish_release.html",headers:[{level:2,title:"Pick a Codename",slug:"pick-a-codename"},{level:2,title:"Create the Release Branch",slug:"create-the-release-branch"},{level:2,title:"Tag a Release",slug:"tag-a-release"},{level:3,title:"Update the Release on GitHub",slug:"update-the-release-on-github"},{level:2,title:"Generate Signatures & Hashes",slug:"generate-signatures-hashes"},{level:3,title:"Create Checksum",slug:"create-checksum"},{level:3,title:"GPG Sign Release",slug:"gpg-sign-release"},{level:3,title:"Attach to Release",slug:"attach-to-release"},{level:2,title:"Update Documentation",slug:"update-documentation"},{level:2,title:"Update CDN",slug:"update-cdn"},{level:2,title:"Make Discord Announcement",slug:"make-discord-announcement"},{level:2,title:"Example Process",slug:"example-process"}]},{title:"Environment Configuration",frontmatter:{},regularPath:"/panel/0.7/configuration.html",relativePath:"panel/0.7/configuration.md",key:"v-019cb63a",path:"/panel/0.7/configuration.html",headers:[{level:2,title:"Reporting All Exceptions",slug:"reporting-all-exceptions"},{level:2,title:"Client Databases",slug:"client-databases"},{level:2,title:"Reverse Proxy Setup",slug:"reverse-proxy-setup"},{level:3,title:"NGINX Specific Configuration",slug:"nginx-specific-configuration"},{level:3,title:"Cloudflare Specific Configuration",slug:"cloudflare-specific-configuration"},{level:2,title:"Increasing the Editable File Size",slug:"increasing-the-editable-file-size"},{level:2,title:"Disable or Modify ReCaptcha",slug:"disable-or-modify-recaptcha"},{level:3,title:"Using Your Own Keys",slug:"using-your-own-keys"}]},{title:"Getting Started",frontmatter:{},regularPath:"/panel/0.7/getting_started.html",relativePath:"panel/0.7/getting_started.md",key:"v-7ffeb723",path:"/panel/0.7/getting_started.html",headers:[{level:2,title:"Picking a Server OS",slug:"picking-a-server-os"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Example Dependency Installation",slug:"example-dependency-installation"},{level:3,title:"Installing Composer",slug:"installing-composer"},{level:2,title:"Download Files",slug:"download-files"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Environment Configuration",slug:"environment-configuration"},{level:3,title:"Database Setup",slug:"database-setup"},{level:3,title:"Add The First User",slug:"add-the-first-user"},{level:3,title:"Set Permissions",slug:"set-permissions"},{level:2,title:"Queue Listeners",slug:"queue-listeners"},{level:3,title:"Crontab Configuration",slug:"crontab-configuration"},{level:3,title:"Create Queue Worker",slug:"create-queue-worker"}]},{title:"Troubleshooting",frontmatter:{},regularPath:"/panel/0.7/troubleshooting.html",relativePath:"panel/0.7/troubleshooting.md",key:"v-9478f2ba",path:"/panel/0.7/troubleshooting.html",headers:[{level:2,title:"Reading Error Logs",slug:"reading-error-logs"},{level:3,title:"Parsing the Error",slug:"parsing-the-error"},{level:3,title:"Understanding the Error",slug:"understanding-the-error"},{level:3,title:"Utilizing GREP",slug:"utilizing-grep"},{level:2,title:"Transfer Exceptions / XHR Poll Error",slug:"transfer-exceptions-xhr-poll-error"},{level:3,title:"Example Errors",slug:"example-errors"},{level:3,title:"Basic Debugging Steps",slug:"basic-debugging-steps"},{level:3,title:"More Advanced Debugging Steps",slug:"more-advanced-debugging-steps"},{level:2,title:"Invalid MAC Exception",slug:"invalid-mac-exception"},{level:2,title:"SELinux Issues",slug:"selinux-issues"},{level:3,title:"Redis Permissions Errors",slug:"redis-permissions-errors"},{level:3,title:"In case there is any weirdness with parts of the panel",slug:"in-case-there-is-any-weirdness-with-parts-of-the-panel"},{level:3,title:"Daemon Connection Errors",slug:"daemon-connection-errors"},{level:2,title:"FirewallD issues",slug:"firewalld-issues"},{level:2,title:"Database Errors",slug:"database-errors"},{level:3,title:"DatabaseController.php:142",slug:"databasecontroller-php-142"}]},{title:"Upgrading 0.6 to 0.7",frontmatter:{},regularPath:"/panel/0.7/upgrade/0.6_to_0.7.html",relativePath:"panel/0.7/upgrade/0.6_to_0.7.md",key:"v-4f03fe0f",path:"/panel/0.7/upgrade/0.6_to_0.7.html",headers:[{level:2,title:"Fetch Updated Files",slug:"fetch-updated-files"},{level:2,title:"Clear Compiled Assets",slug:"clear-compiled-assets"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Update Environment",slug:"update-environment"},{level:2,title:"Database Updates",slug:"database-updates"},{level:2,title:"Cleanup API Keys",slug:"cleanup-api-keys"},{level:2,title:"Set Permissions",slug:"set-permissions"}]},{title:"Upgrading 0.7 Series",frontmatter:{},regularPath:"/panel/0.7/upgrade/0.7.html",relativePath:"panel/0.7/upgrade/0.7.md",key:"v-5baa92ba",path:"/panel/0.7/upgrade/0.7.html",headers:[{level:2,title:"Fetch Updated Files",slug:"fetch-updated-files"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Clear Compiled Template Cache",slug:"clear-compiled-template-cache"},{level:2,title:"Database Updates",slug:"database-updates"},{level:2,title:"Set Permissions",slug:"set-permissions"}]},{title:"Upgrading",frontmatter:{},regularPath:"/panel/0.7/upgrading.html",relativePath:"panel/0.7/upgrading.md",key:"v-c249e07a",path:"/panel/0.7/upgrading.html",headers:[{level:2,title:"Maintenance Mode",slug:"maintenance-mode"},{level:2,title:"Restarting Queue Workers",slug:"restarting-queue-workers"},{level:2,title:"Version Specific Guides",slug:"version-specific-guides"}]},{title:"Webserver Configuration",frontmatter:{},regularPath:"/panel/0.7/webserver_configuration.html",relativePath:"panel/0.7/webserver_configuration.md",key:"v-27941b23",path:"/panel/0.7/webserver_configuration.html",headers:[{level:2,title:"NGINX",slug:"nginx"},{level:3,title:"NGINX With SSL",slug:"nginx-with-ssl"},{level:3,title:"NGINX Without SSL",slug:"nginx-without-ssl"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration"},{level:2,title:"Apache",slug:"apache"},{level:3,title:"Apache With SSL",slug:"apache-with-ssl"},{level:3,title:"Apache Without SSL",slug:"apache-without-ssl"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-2"}]},{title:"Additional Configuration",frontmatter:{},regularPath:"/panel/1.0/additional_configuration.html",relativePath:"panel/1.0/additional_configuration.md",key:"v-6f4baca5",path:"/panel/1.0/additional_configuration.html",headers:[{level:2,title:"Backups",slug:"backups"},{level:3,title:"Using Local Backups",slug:"using-local-backups"},{level:3,title:"Using S3 Backups",slug:"using-s3-backups"},{level:2,title:"Reverse Proxy Setup",slug:"reverse-proxy-setup"},{level:3,title:"NGINX Specific Configuration",slug:"nginx-specific-configuration"},{level:3,title:"Cloudflare Specific Configuration",slug:"cloudflare-specific-configuration"},{level:2,title:"reCAPTCHA",slug:"recaptcha"},{level:3,title:"Configuring reCAPTCHA",slug:"configuring-recaptcha"},{level:3,title:"Disabling reCAPTCHA",slug:"disabling-recaptcha"},{level:2,title:"2FA",slug:"_2fa"},{level:3,title:"Disable 2FA requirement",slug:"disable-2fa-requirement"},{level:3,title:"Disable 2FA for a specific user",slug:"disable-2fa-for-a-specific-user"}]},{title:"Getting Started",frontmatter:{},regularPath:"/panel/1.0/getting_started.html",relativePath:"panel/1.0/getting_started.md",key:"v-fa75e63a",path:"/panel/1.0/getting_started.html",headers:[{level:2,title:"Picking a Server OS",slug:"picking-a-server-os"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Example Dependency Installation",slug:"example-dependency-installation"},{level:3,title:"Installing Composer",slug:"installing-composer"},{level:2,title:"Download Files",slug:"download-files"},{level:2,title:"Installation",slug:"installation"},{level:3,title:"Environment Configuration",slug:"environment-configuration"},{level:3,title:"Database Setup",slug:"database-setup"},{level:3,title:"Add The First User",slug:"add-the-first-user"},{level:3,title:"Set Permissions",slug:"set-permissions"},{level:2,title:"Queue Listeners",slug:"queue-listeners"},{level:3,title:"Crontab Configuration",slug:"crontab-configuration"},{level:3,title:"Create Queue Worker",slug:"create-queue-worker"}]},{title:"Legacy Upgrades",frontmatter:{},regularPath:"/panel/1.0/legacy_upgrade.html",relativePath:"panel/1.0/legacy_upgrade.md",key:"v-dacf6e56",path:"/panel/1.0/legacy_upgrade.html",headers:[{level:2,title:"Enter Maintenance Mode",slug:"enter-maintenance-mode"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Fetch Updated Files",slug:"fetch-updated-files"},{level:2,title:"Update Dependencies",slug:"update-dependencies-2"},{level:2,title:"Clear Compiled Template Cache",slug:"clear-compiled-template-cache"},{level:2,title:"Database Updates",slug:"database-updates"},{level:2,title:"Set Permissions",slug:"set-permissions"},{level:2,title:"Restarting Queue Workers",slug:"restarting-queue-workers"},{level:2,title:"Exit Maintenance Mode",slug:"exit-maintenance-mode"},{level:2,title:"Switch to Wings",slug:"switch-to-wings"}]},{title:"Troubleshooting",frontmatter:{},regularPath:"/panel/1.0/troubleshooting.html",relativePath:"panel/1.0/troubleshooting.md",key:"v-8eec473a",path:"/panel/1.0/troubleshooting.html",headers:[{level:2,title:"Reading Error Logs",slug:"reading-error-logs"},{level:3,title:"Parsing the Error",slug:"parsing-the-error"},{level:3,title:"Understanding the Error",slug:"understanding-the-error"},{level:3,title:"Utilizing GREP",slug:"utilizing-grep"},{level:2,title:"Cannot Connect to Server Errors",slug:"cannot-connect-to-server-errors"},{level:3,title:"Basic Debugging Steps",slug:"basic-debugging-steps"},{level:3,title:"More Advanced Debugging Steps",slug:"more-advanced-debugging-steps"},{level:2,title:"Invalid MAC Exception",slug:"invalid-mac-exception"},{level:2,title:"SELinux Issues",slug:"selinux-issues"},{level:3,title:"Redis Permissions Errors",slug:"redis-permissions-errors"},{level:3,title:"Wings Connection Errors",slug:"wings-connection-errors"},{level:2,title:"FirewallD issues",slug:"firewalld-issues"}]},{title:"Updating the Panel",frontmatter:{},regularPath:"/panel/1.0/updating.html",relativePath:"panel/1.0/updating.md",key:"v-29d5bc56",path:"/panel/1.0/updating.html",headers:[{level:2,title:"Panel Version Requirements",slug:"panel-version-requirements"},{level:2,title:"Update Dependencies",slug:"update-dependencies"},{level:2,title:"Self Upgrade",slug:"self-upgrade"},{level:2,title:"Manual Upgrade",slug:"manual-upgrade"},{level:3,title:"Enter Maintenance Mode",slug:"enter-maintenance-mode"},{level:3,title:"Download the Update",slug:"download-the-update"},{level:3,title:"Update Dependencies",slug:"update-dependencies-2"},{level:3,title:"Clear Compiled Template Cache",slug:"clear-compiled-template-cache"},{level:3,title:"Database Updates",slug:"database-updates"},{level:3,title:"Set Permissions",slug:"set-permissions"},{level:3,title:"Restarting Queue Workers",slug:"restarting-queue-workers"},{level:3,title:"Exit Maintenance Mode",slug:"exit-maintenance-mode"}]},{title:"Webserver Configuration",frontmatter:{},regularPath:"/panel/1.0/webserver_configuration.html",relativePath:"panel/1.0/webserver_configuration.md",key:"v-cbda523a",path:"/panel/1.0/webserver_configuration.html",headers:[{level:3,title:"Enabling Configuration",slug:"enabling-configuration"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-2"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-3"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-4"}]},{title:"About",frontmatter:{},regularPath:"/project/about.html",relativePath:"project/about.md",key:"v-a75af93a",path:"/project/about.html",headers:[{level:2,title:"Core Project Team",slug:"core-project-team"},{level:2,title:"Community Team",slug:"community-team"},{level:2,title:"Sponsors",slug:"sponsors"},{level:2,title:"License",slug:"license"},{level:2,title:"GPG Signature",slug:"gpg-signature"}]},{title:"Community Standards",frontmatter:{},regularPath:"/project/community.html",relativePath:"project/community.md",key:"v-22ba6d3a",path:"/project/community.html",headers:[{level:2,title:"Community Guidelines",slug:"community-guidelines"},{level:3,title:"Be Mature",slug:"be-mature"},{level:3,title:"Limit the Drama",slug:"limit-the-drama"},{level:3,title:"Be Patient",slug:"be-patient"},{level:3,title:"No Commercial Services",slug:"no-commercial-services"},{level:3,title:"No Mention or Ping Spam",slug:"no-mention-or-ping-spam"}]},{title:"Introduction",frontmatter:{},regularPath:"/project/introduction.html",relativePath:"project/introduction.md",key:"v-d6319362",path:"/project/introduction.html",headers:[{level:2,title:"Supported Games",slug:"supported-games"},{level:2,title:"Responsible Disclosure",slug:"responsible-disclosure"}]},{title:"Terminology",frontmatter:{},regularPath:"/project/terms.html",relativePath:"project/terms.md",key:"v-7b99cfba",path:"/project/terms.html",headers:[{level:2,title:"Example Setup Diagram",slug:"example-setup-diagram"}]},{title:"Creating SSL Certificates",frontmatter:{},regularPath:"/tutorials/creating_ssl_certificates.html",relativePath:"tutorials/creating_ssl_certificates.md",key:"v-6ec4d123",path:"/tutorials/creating_ssl_certificates.html",headers:[{level:3,title:"Creating a Certificate",slug:"creating-a-certificate"},{level:3,title:"Auto Renewal",slug:"auto-renewal"},{level:3,title:"Troubleshooting",slug:"troubleshooting"},{level:3,title:"Obtaining CloudFlare API Key",slug:"obtaining-cloudflare-api-key"},{level:3,title:"Creating a Certificate",slug:"creating-a-certificate-2"},{level:3,title:"Auto Renewal",slug:"auto-renewal-2"}]},{title:"Setting up MySQL",frontmatter:{},regularPath:"/tutorials/mysql_setup.html",relativePath:"tutorials/mysql_setup.md",key:"v-5c5d50fa",path:"/tutorials/mysql_setup.html",headers:[{level:2,title:"Creating a database for Pterodactyl",slug:"creating-a-database-for-pterodactyl"},{level:3,title:"Logging In",slug:"logging-in"},{level:3,title:"Creating a user",slug:"creating-a-user"},{level:3,title:"Create a database",slug:"create-a-database"},{level:3,title:"Assigning permissions",slug:"assigning-permissions"},{level:2,title:"Creating a Database Host for Nodes",slug:"creating-a-database-host-for-nodes"},{level:3,title:"Creating a user",slug:"creating-a-user-2"},{level:3,title:"Assigning permissions",slug:"assigning-permissions-2"},{level:3,title:"Allowing external database access",slug:"allowing-external-database-access"}]},{title:"Additional Configuration",frontmatter:{},regularPath:"/wings/1.0/configuration.html",relativePath:"wings/1.0/configuration.md",key:"v-6cd19ba3",path:"/wings/1.0/configuration.html",headers:[{level:2,title:"Private Registries",slug:"private-registries"},{level:3,title:"Available Keys",slug:"available-keys"},{level:3,title:"Example of usage",slug:"example-of-usage"},{level:2,title:"Custom Network Interfaces",slug:"custom-network-interfaces"},{level:3,title:"Example of usage",slug:"example-of-usage-2"},{level:2,title:"Enabling Cloudflare proxy",slug:"enabling-cloudflare-proxy"},{level:2,title:"Throttles Limits",slug:"throttles-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-3"},{level:2,title:"Installer Limits",slug:"installer-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-4"},{level:2,title:"Other values",slug:"other-values"}]},{title:"Installing Wings",frontmatter:{},regularPath:"/wings/1.0/installing.html",relativePath:"wings/1.0/installing.md",key:"v-55eb8eca",path:"/wings/1.0/installing.html",headers:[{level:2,title:"Supported Systems",slug:"supported-systems"},{level:2,title:"System Requirements",slug:"system-requirements"},{level:2,title:"Dependencies",slug:"dependencies"},{level:3,title:"Installing Docker",slug:"installing-docker"},{level:2,title:"Installing Wings",slug:"installing-wings-2"},{level:2,title:"Configure",slug:"configure"},{level:3,title:"Starting Wings",slug:"starting-wings"},{level:3,title:"Daemonizing (using systemd)",slug:"daemonizing-using-systemd"},{level:3,title:"Node Allocations",slug:"node-allocations"}]},{title:"Migrating to Wings",frontmatter:{},regularPath:"/wings/1.0/migrating.html",relativePath:"wings/1.0/migrating.md",key:"v-1ec46263",path:"/wings/1.0/migrating.html",headers:[{level:2,title:"Install Wings",slug:"install-wings"},{level:2,title:"Copy New Configuration File",slug:"copy-new-configuration-file"},{level:2,title:"Remove Old Daemon",slug:"remove-old-daemon"},{level:3,title:"Remove Standalone SFTP",slug:"remove-standalone-sftp"},{level:2,title:"Daemonize Wings",slug:"daemonize-wings"}]},{title:"Upgrading Wings",frontmatter:{},regularPath:"/wings/1.0/upgrading.html",relativePath:"wings/1.0/upgrading.md",key:"v-9213d4fa",path:"/wings/1.0/upgrading.html",headers:[{level:2,title:"Wings Version Requirements",slug:"wings-version-requirements"},{level:2,title:"Download Updated Binary",slug:"download-updated-binary"},{level:2,title:"Restart Process",slug:"restart-process"}]}],themeConfig:{repo:"pterodactyl/panel",docsRepo:"pterodactyl/documentation",repoLabel:"GitHub",editLinkText:"Help us improve this page.",editLinks:!0,logo:"/logos/pterry.svg",nav:[{text:"Documentation",link:"/project/introduction.md"},{text:"Community Guides",link:"/community/about.md"},{text:"Get Help",link:"https://discord.gg/pterodactyl"},{text:"API",link:"https://dashflo.net/docs/api/pterodactyl/v1/"}],sidebar:{"/community/":[{title:"Community Guides",collapsable:!1,children:["/community/about.md"]},{title:"Panel Installation",collapsable:!1,children:["/community/installation-guides/panel/centos7.md","/community/installation-guides/panel/centos8.md","/community/installation-guides/panel/debian9.md","/community/installation-guides/panel/debian10.md","/community/installation-guides/panel/ubuntu1804.md","/community/installation-guides/panel/ubuntu2004.md"]},{title:"Wings Installation",collapsable:!1,children:["/community/installation-guides/wings/centos7.md","/community/installation-guides/wings/centos8.md","/community/installation-guides/wings/debian9.md","/community/installation-guides/wings/debian10.md","/community/installation-guides/wings/ubuntu1804.md","/community/installation-guides/wings/ubuntu2004.md"]},{title:"Creating Eggs",collapsable:!1,children:["/community/config/eggs/creating_a_custom_egg.md","/community/config/eggs/creating_a_custom_image.md"]},{title:"Game Configuration",collapsable:!1,children:["/community/games/minecraft.md"]},{title:"Tutorials",collapsable:!1,children:["/community/config/nodes/add_node.md","/community/tutorials/artisan.md"]},{title:"Customization",collapsable:!1,children:["/community/customization/panel.md","/community/customization/wings.md"]}],"/":[{title:"Project Information",collapsable:!1,children:["/project/introduction.md","/project/about.md","/project/terms.md","/project/community.md"]},{title:"Panel",collapsable:!1,path:"/panel/",currentVersion:"1.0",versions:[{title:"1.6",name:"1.0",status:"stable",children:["/getting_started","/webserver_configuration","/additional_configuration","/updating","/troubleshooting","/legacy_upgrade"]}]},{title:"Wings",collapsable:!1,path:"/wings/",currentVersion:"1.0",versions:[{title:"1.5",name:"1.0",status:"stable",children:["/installing","/upgrading","/migrating","/configuration"]}]},{title:"Tutorials",collapsable:!1,children:["/tutorials/mysql_setup.md","/tutorials/creating_ssl_certificates.md"]},{title:"Guides",collapsable:!1,children:["/guides/mounts.md"]},{title:"Development & Ops",collapsable:!0,children:["/ops/publish_release.md"]}]}}},Le=(n(300),n(302),n(303),n(181),n(74),n(108));function Re(){for(var t="/",e=new RegExp(t+"{1,}","g"),n=arguments.length,r=new Array(n),i=0;i2&&void 0!==arguments[2]?arguments[2]:o.a;Qt(e),n.$vuepress.$set("siteData",e);var r=t(n.$vuepress.$get("siteData")),i=new r,a=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(i)),s={};return Object.keys(a).reduce((function(t,e){return e.startsWith("$")&&(t[e]=a[e].get),t}),s),{computed:s}}((function(t){return function(){function e(){Ue(this,e)}return Be(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var i in r)"/"===i?e=r[i]:0===this.$page.path.indexOf(i)&&(t=r[i]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$canonicalUrl",get:function(){var t=this.$page.frontmatter.canonicalUrl;return"string"==typeof t&&t}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n - + @@ -39,6 +39,6 @@ feel are important to share with the community, but do not fit into the theme of our core documentation.

    Here you'll find in-depth OS-specific installation guides, advanced network configurations, individual game setup instructions, and so much more.

    - + diff --git a/community/config/eggs/creating_a_custom_egg.html b/community/config/eggs/creating_a_custom_egg.html index 4106925b..5faea13c 100644 --- a/community/config/eggs/creating_a_custom_egg.html +++ b/community/config/eggs/creating_a_custom_egg.html @@ -15,7 +15,7 @@ - + @@ -125,6 +125,6 @@ regex as any letters or numbers (\w\d) including underscore (Ubuntu 20.04
    - + diff --git a/community/config/eggs/creating_a_custom_image.html b/community/config/eggs/creating_a_custom_image.html index a58ebcd5..a6fe2668 100644 --- a/community/config/eggs/creating_a_custom_image.html +++ b/community/config/eggs/creating_a_custom_image.html @@ -15,7 +15,7 @@ - + @@ -100,6 +100,6 @@ curly braces {{EXAMPLE}} with a matching environment variable (such ← Creating a Custom Egg
    - + diff --git a/community/config/nodes/add_node.html b/community/config/nodes/add_node.html index cb0c40d8..08cec713 100644 --- a/community/config/nodes/add_node.html +++ b/community/config/nodes/add_node.html @@ -15,7 +15,7 @@ - + @@ -48,6 +48,6 @@ for more information, or try one of the community guides for Minecraft
    - + diff --git a/community/customization/panel.html b/community/customization/panel.html index e7796fce..2ce478b0 100644 --- a/community/customization/panel.html +++ b/community/customization/panel.html @@ -15,7 +15,7 @@ - + @@ -54,6 +54,6 @@ This also applies to style sheets. The following sections explain how to do so.< ← Artisan CLI
    - + diff --git a/community/customization/wings.html b/community/customization/wings.html index 537515b7..ee694ca1 100644 --- a/community/customization/wings.html +++ b/community/customization/wings.html @@ -15,7 +15,7 @@ - + @@ -47,6 +47,6 @@ systemctl start wings
    - + diff --git a/community/games/minecraft.html b/community/games/minecraft.html index 5fe283eb..189d01d3 100644 --- a/community/games/minecraft.html +++ b/community/games/minecraft.html @@ -15,7 +15,7 @@ - + @@ -41,6 +41,6 @@ ← Creating a Custom Docker Image
    - + diff --git a/community/installation-guides/panel/centos7.html b/community/installation-guides/panel/centos7.html index 78f33c3f..072e36fa 100644 --- a/community/installation-guides/panel/centos7.html +++ b/community/installation-guides/panel/centos7.html @@ -15,7 +15,7 @@ - + @@ -169,6 +169,6 @@ server { ← Community Guides and Tutorials
    - + diff --git a/community/installation-guides/panel/centos8.html b/community/installation-guides/panel/centos8.html index fb8887ed..1d5e0145 100644 --- a/community/installation-guides/panel/centos8.html +++ b/community/installation-guides/panel/centos8.html @@ -15,7 +15,7 @@ - + @@ -152,6 +152,6 @@ server { ← CentOS 7
    - + diff --git a/community/installation-guides/panel/debian10.html b/community/installation-guides/panel/debian10.html index b1520f1f..b7ab1170 100644 --- a/community/installation-guides/panel/debian10.html +++ b/community/installation-guides/panel/debian10.html @@ -15,7 +15,7 @@ - + @@ -137,6 +137,6 @@ server { ← Debian 9
    - + diff --git a/community/installation-guides/panel/debian9.html b/community/installation-guides/panel/debian9.html index affdd8d0..f5a23f77 100644 --- a/community/installation-guides/panel/debian9.html +++ b/community/installation-guides/panel/debian9.html @@ -15,7 +15,7 @@ - + @@ -140,6 +140,6 @@ server { ← CentOS 8, Rocky Linux 8, AlmaLinux 8
    - + diff --git a/community/installation-guides/panel/ubuntu1804.html b/community/installation-guides/panel/ubuntu1804.html index 06ecdf97..84ba5e54 100644 --- a/community/installation-guides/panel/ubuntu1804.html +++ b/community/installation-guides/panel/ubuntu1804.html @@ -15,7 +15,7 @@ - + @@ -131,6 +131,6 @@ server { ← Debian 10
    - + diff --git a/community/installation-guides/panel/ubuntu2004.html b/community/installation-guides/panel/ubuntu2004.html index 9694441d..9316d417 100644 --- a/community/installation-guides/panel/ubuntu2004.html +++ b/community/installation-guides/panel/ubuntu2004.html @@ -15,7 +15,7 @@ - + @@ -65,6 +65,6 @@ systemctl start php8.0-fpm ← Ubuntu 18.04
    - + diff --git a/community/installation-guides/wings/centos7.html b/community/installation-guides/wings/centos7.html index 2feee692..1dee33d7 100644 --- a/community/installation-guides/wings/centos7.html +++ b/community/installation-guides/wings/centos7.html @@ -15,7 +15,7 @@ - + @@ -56,6 +56,6 @@ firewall-cmd --reload ← Ubuntu 20.04
    - + diff --git a/community/installation-guides/wings/centos8.html b/community/installation-guides/wings/centos8.html index 28395bb8..c79eed79 100644 --- a/community/installation-guides/wings/centos8.html +++ b/community/installation-guides/wings/centos8.html @@ -15,7 +15,7 @@ - + @@ -56,6 +56,6 @@ firewall-cmd --reload ← CentOS 7
    - + diff --git a/community/installation-guides/wings/debian10.html b/community/installation-guides/wings/debian10.html index 4500a91e..fb0909c1 100644 --- a/community/installation-guides/wings/debian10.html +++ b/community/installation-guides/wings/debian10.html @@ -15,7 +15,7 @@ - + @@ -55,6 +55,6 @@ systemctl start docker ← Debian 9
    - + diff --git a/community/installation-guides/wings/debian9.html b/community/installation-guides/wings/debian9.html index e0d6ce3d..d6e6d438 100644 --- a/community/installation-guides/wings/debian9.html +++ b/community/installation-guides/wings/debian9.html @@ -15,7 +15,7 @@ - + @@ -55,6 +55,6 @@ systemctl start docker ← CentOS 8, Rocky Linux 8, AlmaLinux 8
    - + diff --git a/community/installation-guides/wings/ubuntu1804.html b/community/installation-guides/wings/ubuntu1804.html index c1ba6f5f..9e1ad099 100644 --- a/community/installation-guides/wings/ubuntu1804.html +++ b/community/installation-guides/wings/ubuntu1804.html @@ -15,7 +15,7 @@ - + @@ -45,6 +45,6 @@ systemctl start docker ← Debian 10
    - + diff --git a/community/installation-guides/wings/ubuntu2004.html b/community/installation-guides/wings/ubuntu2004.html index 15c81cea..b092ed58 100644 --- a/community/installation-guides/wings/ubuntu2004.html +++ b/community/installation-guides/wings/ubuntu2004.html @@ -15,7 +15,7 @@ - + @@ -45,6 +45,6 @@ systemctl start docker ← Ubuntu 18.04
    - + diff --git a/community/tutorials/artisan.html b/community/tutorials/artisan.html index 17c18e10..2e744991 100644 --- a/community/tutorials/artisan.html +++ b/community/tutorials/artisan.html @@ -15,7 +15,7 @@ - + @@ -62,6 +62,6 @@ ← Creating a New Node
    - + diff --git a/daemon/0.6/configuration.html b/daemon/0.6/configuration.html index 3ccea701..07c6370a 100644 --- a/daemon/0.6/configuration.html +++ b/daemon/0.6/configuration.html @@ -15,7 +15,7 @@ - + @@ -97,6 +97,6 @@ a private instance and are willing to decrease some of the security measures.

    , ]

    # Enabling Cloudflare

    Enabling Cloudflare on the daemon isn't particularly useful since users do not connect directly to the daemon port, and users need an unproxied hostname to access any servers on the node. As a result it's not possible to conceal the IP address of your node machine, but some people want to enable it regardless.

    Cloudflare only proxies the default daemon port (8080) when using HTTP. In order to get the daemon to work with Cloudflare when HTTPS is enabled you must change the daemon port to one that Cloudflare will proxy such as 8443. Since Cloudflare only proxies HTTP/HTTPS traffic for non-enterprise plans you cannot proxy the SFTP port.

    - + diff --git a/daemon/0.6/debian_8_docker.html b/daemon/0.6/debian_8_docker.html index 53912670..14d08095 100644 --- a/daemon/0.6/debian_8_docker.html +++ b/daemon/0.6/debian_8_docker.html @@ -15,7 +15,7 @@ - + @@ -69,6 +69,6 @@ supported on this kernel currently. Run the command below to do so.

    Finally, update systemd and start docker using the following commands.

    systemctl daemon-reload
     service docker start
     

    Docker should now be running and reporting no errors if you run docker info!

    - + diff --git a/daemon/0.6/installing.html b/daemon/0.6/installing.html index e253700b..5b77f80f 100644 --- a/daemon/0.6/installing.html +++ b/daemon/0.6/installing.html @@ -15,7 +15,7 @@ - + @@ -104,6 +104,6 @@ StartLimitInterval=600 WantedBy=multi-user.target

    Then, run the commands below to reload systemd and start the daemon.

    systemctl enable --now wings
     
    - + diff --git a/daemon/0.6/kernel_modifications.html b/daemon/0.6/kernel_modifications.html index 8a6a04eb..5b1f09f2 100644 --- a/daemon/0.6/kernel_modifications.html +++ b/daemon/0.6/kernel_modifications.html @@ -15,7 +15,7 @@ - + @@ -69,6 +69,6 @@ command and also the version of the kernel that we installed above. Once you've update grub and reboot, and you should be set.

    sudo update-grub
     sudo reboot
     

    # Boot from hard disk

    It's possible that even after you modified the GRUB configuration the server's still booted into a OVH kernel. If this happens to you, go to the OVH control panel and check the server's booting settings and make sure it's booting from hard disk instead of network boot.

    - + diff --git a/daemon/0.6/standalone_sftp.html b/daemon/0.6/standalone_sftp.html index e40f3ece..6405cfa9 100644 --- a/daemon/0.6/standalone_sftp.html +++ b/daemon/0.6/standalone_sftp.html @@ -15,7 +15,7 @@ - + @@ -84,6 +84,6 @@ WantedBy=multi-user.target

    Then, run the command below to enable it in systemd and start the SFTP server.

    systemctl enable --now pterosftp
     

    # Customizing Startup

    If you're trying to pass additional arguments to the server when starting it using SystemD you'll want to modify the ExecStart line. Something like ExecStart=/srv/daemon/sftp-server --port 2022 for example.

    - + diff --git a/daemon/0.6/upgrade/0.4_to_0.5.html b/daemon/0.6/upgrade/0.4_to_0.5.html index dfa3dfcb..859cfa67 100644 --- a/daemon/0.6/upgrade/0.4_to_0.5.html +++ b/daemon/0.6/upgrade/0.4_to_0.5.html @@ -15,7 +15,7 @@ - + @@ -75,6 +75,6 @@ well as push the latest information to their configurations. Once this is done, and then boot it. If you have all daemons running and wish to update them all at once, remove the --node flag.

    Boot the Daemon one last time in the foreground, make sure it completes without errors, and then you can stop it and restart it using your service: sudo systemctl start wings.

    Thanks!

    You're all finished! Thanks for bearing with us, this update addresses a lot of flaws in the previous implementations of the software, and also prepares your data for the eventual migration to our new daemon — which is still in the works.

    - + diff --git a/daemon/0.6/upgrade/0.5.html b/daemon/0.6/upgrade/0.5.html index 07497175..c710d905 100644 --- a/daemon/0.6/upgrade/0.5.html +++ b/daemon/0.6/upgrade/0.5.html @@ -15,7 +15,7 @@ - + @@ -52,6 +52,6 @@ that, run the command below to pull down the latest files and unpack them in the components and then restart the daemon.

    npm update --only=production
     systemctl restart wings
     
    - + diff --git a/daemon/0.6/upgrade/0.5_to_0.6.html b/daemon/0.6/upgrade/0.5_to_0.6.html index 39e2526e..7c6a053a 100644 --- a/daemon/0.6/upgrade/0.5_to_0.6.html +++ b/daemon/0.6/upgrade/0.5_to_0.6.html @@ -15,7 +15,7 @@ - + @@ -62,6 +62,6 @@ you will not be able to see any console output.

    Run the following command ID of the node you just upgraded, or remove the --node flag entirely to rebuild on all nodes.

    php artisan p:server:rebuild --node=###
     

    Then, restart all of the servers using the following command, or by manually restarting them one at a time in the Panel.

    php artisan p:server:bulk-power restart --nodes=###
     
    - + diff --git a/daemon/0.6/upgrade/0.6.html b/daemon/0.6/upgrade/0.6.html index 043954d3..9b927d2a 100644 --- a/daemon/0.6/upgrade/0.6.html +++ b/daemon/0.6/upgrade/0.6.html @@ -15,7 +15,7 @@ - + @@ -54,6 +54,6 @@ you are running at least version 10. You can run node -v to check, You can safely ignore this output. Do not run the audit fix command, you will break your Daemon.

    npm install --only=production --no-audit --unsafe-perm
     systemctl restart wings
     
    - + diff --git a/daemon/0.6/upgrading.html b/daemon/0.6/upgrading.html index d7d71583..7167a9d9 100644 --- a/daemon/0.6/upgrading.html +++ b/daemon/0.6/upgrading.html @@ -15,7 +15,7 @@ - + @@ -46,6 +46,6 @@ current

  • # Upgrading

    This Software is Abandoned

    This documentation is for abandoned software which does not recieve any security updates or support from the community. This documentation has been left accessible for historial reasons.

    You should be installing and using Wings in production environments with Pterodactyl Panel 1.0.

    # Version Specific Guides

    - + diff --git a/guides/mounts.html b/guides/mounts.html index c30078ab..54d38839 100644 --- a/guides/mounts.html +++ b/guides/mounts.html @@ -15,7 +15,7 @@ - + @@ -52,6 +52,6 @@ ← Creating SSL Certificates
    - + diff --git a/guides/php_upgrade.html b/guides/php_upgrade.html index f2397d98..d3bb872b 100644 --- a/guides/php_upgrade.html +++ b/guides/php_upgrade.html @@ -15,7 +15,7 @@ - + @@ -62,6 +62,6 @@ a2enmod php8.0 # Hint: a2dismod = a2_disable_module 🤯 a2dismod php7.3

    # Return to the 1.X.X Upgrade Guide

    - + diff --git a/index.html b/index.html index e721ba77..3200e453 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ - + @@ -44,19 +44,19 @@ current

  • Pterodactyl Panel

    - Pterodactyl is a free, open-source game server management panel built with PHP, React, and Go. + Pterodactyl® is a free, open-source game server management panel built with PHP, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful and intuitive UI to end users.

    Stop settling for less. Make game servers a first class citizen on your platform. -

    Why Pterodactyl

    Security First

    Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.

    Modern Tooling

    Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications.

    Docker to the Core

    All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game.

    Free & Open Source

    Pterodactyl is 100% free and licensed under a MIT license. All of our code is completely open source as well.

    User Friendly

    Save the furious clicking and screaming for Overwatch. Pterodactyl's interface is designed so well even Hanzo can use it.

    Scalable

    Whether you're a hosting company, the next Hyplex, or just some dudes playing video games, we've got you covered.

    Screenshots

    Get Started

    Ready to fly on the Pterodactyl?

    pterodactyl banner logo

    - Since 2015 Pterodactyl has been delivering robust, performant, and secure software that allows +

    Why Pterodactyl®

    Security First

    Security is a first-class citizen on this platform with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.

    Modern Tooling

    Built on a modern stack utilizing the best design practices that make it easy to jump in and make modifications.

    Docker to the Core

    All servers run in isolated Docker containers that limit attack vectors, provide strict resource limits, and provide environments tailored to each specific game.

    Free & Open Source

    Pterodactyl is 100% free and licensed under a MIT license. All of our code is completely open source as well.

    User Friendly

    Save the furious clicking and screaming for Overwatch. Pterodactyl's interface is designed so well even Hanzo can use it.

    Scalable

    Whether you're a hosting company, the next Hyplex, or just some dudes playing video games, we've got you covered.

    Screenshots

    Get Started

    Ready to fly on the Pterodactyl?

    pterodactyl banner logo

    + Since 2015 Pterodactyl® has been delivering robust, performant, and secure software that allows individuals, networks, and hosting companies to run game servers at scale; easily. Best of all? No exorbitant monthly costs.

    - Take the plunge today and discover why thousands of users trust Pterodactyl to manage their + Take the plunge today and discover why thousands of users trust Pterodactyl® to manage their game servers.

    - + diff --git a/ops/publish_release.html b/ops/publish_release.html index d5efbd02..10fbfdea 100644 --- a/ops/publish_release.html +++ b/ops/publish_release.html @@ -15,7 +15,7 @@ - + @@ -90,6 +90,6 @@ gpg --detach-sig --output panel.asc panel.tar.gz
    - + diff --git a/panel/0.7/configuration.html b/panel/0.7/configuration.html index 99361e8c..393ef95b 100644 --- a/panel/0.7/configuration.html +++ b/panel/0.7/configuration.html @@ -15,7 +15,7 @@ - + @@ -80,6 +80,6 @@ also be set using the .env file. The default value is 50,000<

    # Disable or Modify ReCaptcha

    To disable reCAPTCHA on login or password reset, simply set RECAPTCHA_ENABLED=false in the environment file. This change will take effect immediately.

    # Using Your Own Keys

    Pterodactyl comes preconfigured using a public set of reCAPTCHA keys but you may wish to use your own site specific keys. To do so, follow the instructions below.

    1. Visit Google's reCAPTCHA Admin Console (opens new window).
    2. Click "Register New Site" and fill in a name for your keys.
    3. Choose reCAPTCHA v2 and ensure that the option for Invisible is selected.
    4. Include the domain that your panel is located on.
    5. On the next page displayed, locate the "Site Key" and "Secret Key". In Pterodactyl's control panel click on "Settings" and then the "Advanced" tab. Enter the keys in the boxes "Site Key" and "Secret Key", respectively.

    Disabling Domain Verification

    If you do not want reCAPTCHA to verify the domain making the validation request you can uncheck "Verify the origin of reCaptcha solution" under "Advanced Settings" after generating your key.

    - + diff --git a/panel/0.7/getting_started.html b/panel/0.7/getting_started.html index 178ed989..85e6e4aa 100644 --- a/panel/0.7/getting_started.html +++ b/panel/0.7/getting_started.html @@ -15,7 +15,7 @@ - + @@ -140,6 +140,6 @@ WantedBy=multi-user.target when the service starts.

    If you are are using redis for your system, you will want to make sure to enable that it will start on boot. You can do that by running the following command:

    sudo systemctl enable --now redis-server
     

    Finally, enable the service and set it to boot on machine start.

    sudo systemctl enable --now pteroq.service
     

    # Next Step: Webserver Configuration

    - + diff --git a/panel/0.7/troubleshooting.html b/panel/0.7/troubleshooting.html index 5ad5695b..756a6f1c 100644 --- a/panel/0.7/troubleshooting.html +++ b/panel/0.7/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -94,6 +94,6 @@ semodule -i http_port_t.pp firewall-cmd --reload

    restart docker and wings after running these to be sure the rules are applied.

    # Database Errors

    # DatabaseController.php:142

    production.ERROR: ErrorException: Undefined variable: host in /var/www/pterodactyl/app/Http/Controllers/Admin/DatabaseController.php:142
     

    The database user you are trying to use doesn't have appropriate grants/has used incorrect password.

    - + diff --git a/panel/0.7/upgrade/0.6_to_0.7.html b/panel/0.7/upgrade/0.6_to_0.7.html index ed423013..a5c0ebc5 100644 --- a/panel/0.7/upgrade/0.6_to_0.7.html +++ b/panel/0.7/upgrade/0.6_to_0.7.html @@ -15,7 +15,7 @@ - + @@ -81,6 +81,6 @@ is www-data but can vary from system to system — sometimes being # If using Apache on CentOS chown -R apache:apache *
    - + diff --git a/panel/0.7/upgrade/0.7.html b/panel/0.7/upgrade/0.7.html index ffbca230..8fe68c28 100644 --- a/panel/0.7/upgrade/0.7.html +++ b/panel/0.7/upgrade/0.7.html @@ -15,7 +15,7 @@ - + @@ -71,6 +71,6 @@ is www-data but can vary from system to system — sometimes being # If using Apache on CentOS chown -R apache:apache *
    - + diff --git a/panel/0.7/upgrading.html b/panel/0.7/upgrading.html index 44ffafde..1c449a1c 100644 --- a/panel/0.7/upgrading.html +++ b/panel/0.7/upgrading.html @@ -15,7 +15,7 @@ - + @@ -53,6 +53,6 @@ php artisan down php artisan up

    # Restarting Queue Workers

    After every update, you should restart the queue worker to ensure that the new code is being loaded in and used.

    php artisan queue:restart
     

    # Version Specific Guides

    - + diff --git a/panel/0.7/webserver_configuration.html b/panel/0.7/webserver_configuration.html index a14d8ab0..2038c58b 100644 --- a/panel/0.7/webserver_configuration.html +++ b/panel/0.7/webserver_configuration.html @@ -15,7 +15,7 @@ - + @@ -210,6 +210,6 @@ below! You only need to run systemctl restart httpd.

    sudo a2enmod rewrite systemctl restart apache2
    - + diff --git a/panel/1.0/additional_configuration.html b/panel/1.0/additional_configuration.html index f0c371c1..5eb67e76 100644 --- a/panel/1.0/additional_configuration.html +++ b/panel/1.0/additional_configuration.html @@ -15,7 +15,7 @@ - + @@ -76,6 +76,6 @@ Below is an example of how to set this.

    UPDATE panel.settings SET value = 0 WHERE `key` = 'settings::pterodactyl:auth:2fa_required';

    # Disable 2FA for a specific user

    Run the following command in your /var/www/pterodactyl directory.

    php artisan p:user:disable2fa
     
    - + diff --git a/panel/1.0/getting_started.html b/panel/1.0/getting_started.html index cd7ae2e5..492b4155 100644 --- a/panel/1.0/getting_started.html +++ b/panel/1.0/getting_started.html @@ -15,7 +15,7 @@ - + @@ -143,6 +143,6 @@ WantedBy=multi-user.target when the service starts.

    If you are using redis for your system, you will want to make sure to enable that it will start on boot. You can do that by running the following command:

    sudo systemctl enable --now redis-server
     

    Finally, enable the service and set it to boot on machine start.

    sudo systemctl enable --now pteroq.service
     

    # Next Step: Webserver Configuration

    - + diff --git a/panel/1.0/legacy_upgrade.html b/panel/1.0/legacy_upgrade.html index 3a35ab57..5ceabad4 100644 --- a/panel/1.0/legacy_upgrade.html +++ b/panel/1.0/legacy_upgrade.html @@ -15,7 +15,7 @@ - + @@ -93,6 +93,6 @@ php artisan up control plane written in Go. This new system is significantly faster, easier to install, and much smaller. All you need to do is install a single binary on your system and configure it to run on boot. You cannot use the old Node.js Daemon to run servers with Pterodactyl Panel 1.0.

    Please see Migrating to Wings for instructions.

    - + diff --git a/panel/1.0/troubleshooting.html b/panel/1.0/troubleshooting.html index 86940469..5027fc66 100644 --- a/panel/1.0/troubleshooting.html +++ b/panel/1.0/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -92,6 +92,6 @@ semodule -i http_port_t.pp

    # FirewallD issues

    If you are on a RHEL/CentOS server with firewalld installed you may have broken DNS.

    firewall-cmd --permanent --zone=trusted --change-interface=pterodactyl0
     firewall-cmd --reload
     

    Restart docker and wings after running these to be sure the rules are applied.

    - + diff --git a/panel/1.0/updating.html b/panel/1.0/updating.html index c9ee778c..e3041476 100644 --- a/panel/1.0/updating.html +++ b/panel/1.0/updating.html @@ -15,7 +15,7 @@ - + @@ -94,6 +94,6 @@ is www-data but can vary from system to system — sometimes being

    # Exit Maintenance Mode

    Now that everything has been updated you need to exit maintenance mode so that the Panel can resume accepting connections.

    php artisan up
     

    Final Step: Upgrade Wings

    - + diff --git a/panel/1.0/webserver_configuration.html b/panel/1.0/webserver_configuration.html index 737bb519..4469ee4f 100644 --- a/panel/1.0/webserver_configuration.html +++ b/panel/1.0/webserver_configuration.html @@ -15,7 +15,7 @@ - + @@ -222,6 +222,6 @@ below! You only need to run systemctl restart httpd.

    sudo a2enmod rewrite systemctl restart apache2

    # Next Step: Wings Installation

    - + diff --git a/project/about.html b/project/about.html index ab8ce53a..d35f9f72 100644 --- a/project/about.html +++ b/project/about.html @@ -15,7 +15,7 @@ - + @@ -118,6 +118,6 @@ gkSI5o2kam0QGYUhqg== ← Introduction
    - + diff --git a/project/community.html b/project/community.html index 43f5cc97..561524ee 100644 --- a/project/community.html +++ b/project/community.html @@ -15,7 +15,7 @@ - + @@ -69,6 +69,6 @@ directly if they're not already involved in a discussion with you.

    Terminology
    - + diff --git a/project/introduction.html b/project/introduction.html index 4b5b0842..9c3a6dba 100644 --- a/project/introduction.html +++ b/project/introduction.html @@ -15,7 +15,7 @@ - + @@ -53,6 +53,6 @@ code base and hunt for security issues. If you come across anything that raises hesitate to reach out directly to support@pterodactyl.io. We ask that you please be responsible when disclosing any security concerns and do not report them on our public facing bug tracker.

    - + diff --git a/project/terms.html b/project/terms.html index 761d0e43..de906b06 100644 --- a/project/terms.html +++ b/project/terms.html @@ -15,7 +15,7 @@ - + @@ -51,6 +51,6 @@ created on nodes, and you can have multiple servers per node.

    Doc ← About

    - + diff --git a/tutorials/creating_ssl_certificates.html b/tutorials/creating_ssl_certificates.html index 84d9309a..f5f7a44b 100644 --- a/tutorials/creating_ssl_certificates.html +++ b/tutorials/creating_ssl_certificates.html @@ -15,7 +15,7 @@ - + @@ -82,6 +82,6 @@ This will happen especially if you're running NGINX instead of Apache. The solut ← Setting up MySQL
    - + diff --git a/tutorials/mysql_setup.html b/tutorials/mysql_setup.html index 6b717378..6a1a75b3 100644 --- a/tutorials/mysql_setup.html +++ b/tutorials/mysql_setup.html @@ -15,7 +15,7 @@ - + @@ -68,6 +68,6 @@ bind-address=0.0.0.0 ← Community Standards
    - + diff --git a/wings/1.0/configuration.html b/wings/1.0/configuration.html index 536ad16e..3ab77c19 100644 --- a/wings/1.0/configuration.html +++ b/wings/1.0/configuration.html @@ -15,7 +15,7 @@ - + @@ -65,6 +65,6 @@ you misconfigure something. Proceed only if you know what each configuration val memory: 1024 cpu: 100

    # Other values

    More commonly discussed values. View all Wings config values and explanations in these two files. (opens new window)

    Setting Key Default Value Notes
    debug false Force Wings to run in debug mode
    tmpfs_size 100 The size of the /tmp directory in MB when mounted into a container
    websocket_log_count 150 The number of lines to display in the console
    detect_clean_exit_as_crash true Mark server as crashed if it's stopped without user interaction, e.g., not pressing stop button
    (crash detection) timeout 60 Timeout between server crashes that will not cause the server to be automatically restarted
    app_name "Pterodactyl" Changes the name of the daemon, shown in the panel's game console
    check_permissions_on_boot true Check all file permissions on each boot. Disable this when you have a very large amount of files and the server startup is hanging on checking permissions
    - + diff --git a/wings/1.0/installing.html b/wings/1.0/installing.html index fbe507e3..bcbf0b1c 100644 --- a/wings/1.0/installing.html +++ b/wings/1.0/installing.html @@ -15,7 +15,7 @@ - + @@ -91,6 +91,6 @@ RestartSec=5s WantedBy=multi-user.target

    Then, run the commands below to reload systemd and start Wings.

    systemctl enable --now wings
     

    # Node Allocations

    Allocation is a combination of IP and Port that you can assign to a server. Each created server must have at least one allocation. The allocation would be the IP address of your network interface. In some cases, such as when behind NAT, it would be the internal IP. To create new allocations go to Nodes > your node > Allocation.

    example image of node allocations

    Type hostname -I | awk '{print $1}' to find the IP to be used for the allocation. Alternatively, you can type ip addr | grep "inet " to see all your available interfaces and IP addresses. Do not use 127.0.0.1 for allocations.

    - + diff --git a/wings/1.0/migrating.html b/wings/1.0/migrating.html index 07e4336d..8edd222f 100644 --- a/wings/1.0/migrating.html +++ b/wings/1.0/migrating.html @@ -15,7 +15,7 @@ - + @@ -93,6 +93,6 @@ systemctl enable --now wings

    What if Wings doesn't start?

    If you encounter issues starting Wings at this point, run the following command to start Wings directly and check for any specific error output.

    sudo wings --debug
     
    - + diff --git a/wings/1.0/upgrading.html b/wings/1.0/upgrading.html index b18dec15..5861681b 100644 --- a/wings/1.0/upgrading.html +++ b/wings/1.0/upgrading.html @@ -15,7 +15,7 @@ - + @@ -50,6 +50,6 @@ most cases your base Wings version should match that of your Panel.

    <

    # Restart Process

    Finally, restart the wings process. Your running servers will not be affected and any open connections to the instance will re-connect automatically.

    systemctl restart wings
     
    - +