diff --git a/404.html b/404.html index 94438616..13fc5be8 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + @@ -44,6 +44,6 @@ current

  • - + diff --git a/assets/js/12.a4261b01.js b/assets/js/12.469af100.js similarity index 92% rename from assets/js/12.a4261b01.js rename to assets/js/12.469af100.js index f05e7904..bd68e660 100644 --- a/assets/js/12.a4261b01.js +++ b/assets/js/12.469af100.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{269:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_create_button.05642c32.png"},270:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_new_page.17d70664.png"},271:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_config.f87f425f.png"},289:function(t,e,o){"use strict";o.r(e);var a=o(15),n=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"creating-a-new-node"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-new-node"}},[t._v("#")]),t._v(" Creating a New Node")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#location"}},[t._v("Location")])]),e("li",[e("a",{attrs:{href:"#information-required"}},[t._v("Information Required")])]),e("li",[e("a",{attrs:{href:"#install-the-daemon"}},[t._v("Install the Daemon")])]),e("li",[e("a",{attrs:{href:"#configuring-the-node"}},[t._v("Configuring the Node")]),e("ul",[e("li",[e("a",{attrs:{href:"#auto-deploy"}},[t._v("Auto-Deploy")])])])])])]),e("p"),t._v(" "),e("h2",{attrs:{id:"location"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#location"}},[t._v("#")]),t._v(" Location")]),t._v(" "),e("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(" "),e("p",[e("img",{attrs:{src:o(269),alt:""}})]),t._v(" "),e("h2",{attrs:{id:"information-required"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#information-required"}},[t._v("#")]),t._v(" Information Required")]),t._v(" "),e("p",[e("img",{attrs:{src:o(270),alt:""}})]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Name")]),t._v(": a quick identifiable name for the node.")]),t._v(" "),e("li",[e("strong",[t._v("Description")]),t._v(": a long description that is used to help you identify the node.")]),t._v(" "),e("li",[e("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(" "),e("li",[e("strong",[t._v("FQDN")]),t._v(": the fully qualified domain name for the node — for example: "),e("code",[t._v("node.pterodactyl.io")])]),t._v(" "),e("li",[e("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(" "),e("li",[e("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(" "),e("li",[e("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 "),e("code",[t._v("/var/lib/pterodactyl/volumes")]),t._v(".")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("OVH Users")]),t._v(" "),e("p",[t._v("Some OVH users regularly have their "),e("code",[t._v("/home")]),t._v(" folder be the largest filesystem. You may want to change to use\n"),e("code",[t._v("/home/pterodactyl/volumes")]),t._v(" if you are on a default OVH box.")])]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Total Memory")]),t._v(": the total amount of RAM the node should be able to allocate automatically.")]),t._v(" "),e("li",[e("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(" "),e("li",[e("strong",[t._v("Total Disk Space")]),t._v(": the total amount of disk space the node should be able to allocate automatically.")]),t._v(" "),e("li",[e("strong",[t._v("Disk Overallocate")]),t._v(": works the same way as memory overallocation.")])]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),e("p",[t._v("Don't forget to account for OS overhead and other software requirements on machines.")])]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Daemon Port")]),t._v(": the port that the Daemon should listen on.")]),t._v(" "),e("li",[e("strong",[t._v("Daemon SFTP Port")]),t._v(": the port the Daemon sftp-server or standalone SFTP server should listen on.")])]),t._v(" "),e("h2",{attrs:{id:"install-the-daemon"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-the-daemon"}},[t._v("#")]),t._v(" Install the Daemon")]),t._v(" "),e("p",[t._v("At this point you'll need to have the Daemon installed on your machine. Check out the "),e("RouterLink",{attrs:{to:"/wings/installing.html"}},[t._v("documentation")]),t._v("\nfor more information, or try one of the community guides for "),e("RouterLink",{attrs:{to:"/community/installation-guides/wings/centos7.html"}},[t._v("CentOS")]),t._v(",\nor "),e("RouterLink",{attrs:{to:"/community/installation-guides/wings/debian.html"}},[t._v("Debian")]),t._v(".")],1),t._v(" "),e("h2",{attrs:{id:"configuring-the-node"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuring-the-node"}},[t._v("#")]),t._v(" Configuring the Node")]),t._v(" "),e("p",[t._v("Go to the Node Configuration page")]),t._v(" "),e("p",[e("img",{attrs:{src:o(271),alt:""}})]),t._v(" "),e("p",[t._v("Copy and paste the config into the "),e("code",[t._v("config.yml")]),t._v(" file. (Default location is "),e("code",[t._v("/etc/pterodactyl/config.yml")]),t._v(")")]),t._v(" "),e("h3",{attrs:{id:"auto-deploy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#auto-deploy"}},[t._v("#")]),t._v(" Auto-Deploy")]),t._v(" "),e("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([[12],{265:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_create_button.05642c32.png"},266:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_new_page.17d70664.png"},267:function(t,e,o){t.exports=o.p+"assets/img/pterodactyl_add_node_config.f87f425f.png"},288:function(t,e,o){"use strict";o.r(e);var a=o(15),n=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"creating-a-new-node"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-new-node"}},[t._v("#")]),t._v(" Creating a New Node")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#location"}},[t._v("Location")])]),e("li",[e("a",{attrs:{href:"#information-required"}},[t._v("Information Required")])]),e("li",[e("a",{attrs:{href:"#install-the-daemon"}},[t._v("Install the Daemon")])]),e("li",[e("a",{attrs:{href:"#configuring-the-node"}},[t._v("Configuring the Node")]),e("ul",[e("li",[e("a",{attrs:{href:"#auto-deploy"}},[t._v("Auto-Deploy")])])])])])]),e("p"),t._v(" "),e("h2",{attrs:{id:"location"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#location"}},[t._v("#")]),t._v(" Location")]),t._v(" "),e("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(" "),e("p",[e("img",{attrs:{src:o(265),alt:""}})]),t._v(" "),e("h2",{attrs:{id:"information-required"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#information-required"}},[t._v("#")]),t._v(" Information Required")]),t._v(" "),e("p",[e("img",{attrs:{src:o(266),alt:""}})]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Name")]),t._v(": a quick identifiable name for the node.")]),t._v(" "),e("li",[e("strong",[t._v("Description")]),t._v(": a long description that is used to help you identify the node.")]),t._v(" "),e("li",[e("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(" "),e("li",[e("strong",[t._v("FQDN")]),t._v(": the fully qualified domain name for the node — for example: "),e("code",[t._v("node.pterodactyl.io")])]),t._v(" "),e("li",[e("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(" "),e("li",[e("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(" "),e("li",[e("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 "),e("code",[t._v("/var/lib/pterodactyl/volumes")]),t._v(".")])]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("OVH Users")]),t._v(" "),e("p",[t._v("Some OVH users regularly have their "),e("code",[t._v("/home")]),t._v(" folder be the largest filesystem. You may want to change to use\n"),e("code",[t._v("/home/pterodactyl/volumes")]),t._v(" if you are on a default OVH box.")])]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Total Memory")]),t._v(": the total amount of RAM the node should be able to allocate automatically.")]),t._v(" "),e("li",[e("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(" "),e("li",[e("strong",[t._v("Total Disk Space")]),t._v(": the total amount of disk space the node should be able to allocate automatically.")]),t._v(" "),e("li",[e("strong",[t._v("Disk Overallocate")]),t._v(": works the same way as memory overallocation.")])]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),e("p",[t._v("Don't forget to account for OS overhead and other software requirements on machines.")])]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Daemon Port")]),t._v(": the port that the Daemon should listen on.")]),t._v(" "),e("li",[e("strong",[t._v("Daemon SFTP Port")]),t._v(": the port the Daemon sftp-server or standalone SFTP server should listen on.")])]),t._v(" "),e("h2",{attrs:{id:"install-the-daemon"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#install-the-daemon"}},[t._v("#")]),t._v(" Install the Daemon")]),t._v(" "),e("p",[t._v("At this point you'll need to have the Daemon installed on your machine. Check out the "),e("RouterLink",{attrs:{to:"/wings/installing.html"}},[t._v("documentation")]),t._v("\nfor more information, or try one of the community guides for "),e("RouterLink",{attrs:{to:"/community/installation-guides/wings/centos7.html"}},[t._v("CentOS")]),t._v(",\nor "),e("RouterLink",{attrs:{to:"/community/installation-guides/wings/debian.html"}},[t._v("Debian")]),t._v(".")],1),t._v(" "),e("h2",{attrs:{id:"configuring-the-node"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configuring-the-node"}},[t._v("#")]),t._v(" Configuring the Node")]),t._v(" "),e("p",[t._v("Go to the Node Configuration page")]),t._v(" "),e("p",[e("img",{attrs:{src:o(267),alt:""}})]),t._v(" "),e("p",[t._v("Copy and paste the config into the "),e("code",[t._v("config.yml")]),t._v(" file. (Default location is "),e("code",[t._v("/etc/pterodactyl/config.yml")]),t._v(")")]),t._v(" "),e("h3",{attrs:{id:"auto-deploy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#auto-deploy"}},[t._v("#")]),t._v(" Auto-Deploy")]),t._v(" "),e("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/15.69f947ef.js b/assets/js/15.c66c8d6e.js similarity index 99% rename from assets/js/15.69f947ef.js rename to assets/js/15.c66c8d6e.js index 85398547..e4bf9f20 100644 --- a/assets/js/15.69f947ef.js +++ b/assets/js/15.c66c8d6e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{254:function(t,e,a){t.exports=a.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},280:function(t,e,a){t.exports=a.p+"assets/img/node_allocations.323d67f2.png"},333:function(t,e,a){"use strict";a.r(e);var s=a(15),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"installing-wings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[t._v("#")]),t._v(" Installing Wings")]),t._v(" "),e("p",[t._v("Wings is the next generation server control plane from Pterodactyl. It has been rebuilt from the\nground up using Go and lessons learned from our first Nodejs Daemon.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("You should only install Wings if you are running "),e("strong",[t._v("Pterodactyl 1.x")]),t._v(". Do not install this software\nfor previous versions of Pterodactyl.")])]),t._v(" "),e("h2",{attrs:{id:"supported-systems"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#supported-systems"}},[t._v("#")]),t._v(" Supported Systems")]),t._v(" "),e("p",[t._v("The following is a list of supported operating systems. Please be aware that this is not an exhaustive list,\nthere is a high probability that you can run the software on other Linux distributions without much effort.\nYou are responsible for determining which packages may be necessary on those systems. There is also a very\nhigh probability that new releases of the supported OSes below will work just fine, you are not restricted to\nonly the versions listed below.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Operating System")]),t._v(" "),e("th",[t._v("Version")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Supported")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("strong",[t._v("Ubuntu")])]),t._v(" "),e("td",[t._v("20.04")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",[t._v("Documentation written assuming Ubuntu 20.04 as the base OS.")])]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("22.04")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("24.04")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("strong",[t._v("RHEL / Rocky Linux / AlmaLinux")])]),t._v(" "),e("td",[t._v("8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("9")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("strong",[t._v("Debian")])]),t._v(" "),e("td",[t._v("11")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("12")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("strong",[t._v("Windows")])]),t._v(" "),e("td",[t._v("All")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),e("td",[t._v("This software will not run in Windows environments.")])])])]),t._v(" "),e("h2",{attrs:{id:"system-requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[t._v("#")]),t._v(" System Requirements")]),t._v(" "),e("p",[t._v("To run Wings, you will need a Linux system capable of running Docker containers. Most VPS and almost all\ndedicated servers should be capable of running Docker, but there are edge cases.")]),t._v(" "),e("p",[t._v("When your provider uses "),e("code",[t._v("Virtuozzo")]),t._v(", "),e("code",[t._v("OpenVZ")]),t._v(" (or "),e("code",[t._v("OVZ")]),t._v("), or "),e("code",[t._v("LXC")]),t._v(" virtualization, you will most likely be unable to\nrun Wings. Some providers have made the necessary changes for nested virtualization to support Docker. Ask your provider's support team to make sure. KVM is guaranteed to work.")]),t._v(" "),e("p",[t._v("The easiest way to check is to type "),e("code",[t._v("systemd-detect-virt")]),t._v(".\nIf the result doesn't contain "),e("code",[t._v("OpenVZ")]),t._v(" or"),e("code",[t._v("LXC")]),t._v(", it should be fine. The result of "),e("code",[t._v("none")]),t._v(" will appear when running dedicated hardware without any virtualization.")]),t._v(" "),e("p",[t._v("Should that not work for some reason, or you're still unsure, you can also run the command below.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("dane@pterodactyl:~$ "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" dmidecode "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-s")]),t._v(" system-manufacturer\nVMware, Inc.\n")])])]),e("h2",{attrs:{id:"dependencies"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[t._v("#")]),t._v(" Dependencies")]),t._v(" "),e("ul",[e("li",[t._v("curl")]),t._v(" "),e("li",[t._v("Docker")])]),t._v(" "),e("h3",{attrs:{id:"installing-docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-docker"}},[t._v("#")]),t._v(" Installing Docker")]),t._v(" "),e("p",[t._v("For a quick install of Docker CE, you can execute the command below:")]),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(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-sSL")]),t._v(" https://get.docker.com/ "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHANNEL")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("stable "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("bash")]),t._v("\n")])])]),e("p",[t._v("If you would rather do a manual installation, please reference the "),e("a",{attrs:{href:"https://docs.docker.com/engine/install/",target:"_blank",rel:"noopener noreferrer"}},[t._v("official Docker documentation"),e("OutboundLink")],1),t._v(" for how to install Docker CE on your server.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Check your Kernel")]),t._v(" "),e("p",[t._v("Please be aware that some hosts install a modified kernel that does not support important docker features. Please\ncheck your kernel by running "),e("code",[t._v("uname -r")]),t._v(". If your kernel ends in "),e("code",[t._v("-xxxx-grs-ipv6-64")]),t._v(" or "),e("code",[t._v("-xxxx-mod-std-ipv6-64")]),t._v(" you're\nprobably using a non-supported kernel. Check our "),e("RouterLink",{attrs:{to:"/daemon/0.6/kernel_modifications.html"}},[t._v("Kernel Modifications")]),t._v(" guide for details.")],1)]),t._v(" "),e("h4",{attrs:{id:"start-docker-on-boot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#start-docker-on-boot"}},[t._v("#")]),t._v(" Start Docker on Boot")]),t._v(" "),e("p",[t._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.")]),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("sudo")]),t._v(" systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--now")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("docker")]),t._v("\n")])])]),e("h4",{attrs:{id:"enabling-swap"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enabling-swap"}},[t._v("#")]),t._v(" Enabling Swap")]),t._v(" "),e("p",[t._v("On most systems, Docker will be unable to setup swap space by default. You can confirm this by running "),e("code",[t._v("docker info")]),t._v(" and looking for the output of "),e("code",[t._v("WARNING: No swap limit support")]),t._v(" near the bottom.")]),t._v(" "),e("p",[t._v("Enabling swap is entirely optional, but we recommended doing it if you will be hosting for others and to prevent OOM errors.")]),t._v(" "),e("p",[t._v("To enable swap, open "),e("code",[t._v("/etc/default/grub")]),t._v(" as a root user and find the line starting with "),e("code",[t._v("GRUB_CMDLINE_LINUX_DEFAULT")]),t._v(". Make\nsure the line includes "),e("code",[t._v("swapaccount=1")]),t._v(" somewhere inside the double-quotes.")]),t._v(" "),e("p",[t._v("After that, run "),e("code",[t._v("sudo update-grub")]),t._v(" followed by "),e("code",[t._v("sudo reboot")]),t._v(" to restart the server and have swap enabled.\nBelow is an example of what the line should look like, "),e("em",[t._v("do not copy this line verbatim. It often has additional OS-specific parameters.")])]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"\n')])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("GRUB Configuration")]),t._v(" "),e("p",[t._v("Some Linux distros may ignore "),e("code",[t._v("GRUB_CMDLINE_LINUX_DEFAULT")]),t._v(". Therefore you might have to use "),e("code",[t._v("GRUB_CMDLINE_LINUX")]),t._v(" instead should the default one not work for you.")])]),t._v(" "),e("h2",{attrs:{id:"installing-wings-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings-2"}},[t._v("#")]),t._v(" Installing Wings")]),t._v(" "),e("p",[t._v("The first step for installing Wings is to ensure we have the required directory structure setup. To do so,\nrun the commands below, which will create the base directory and download the wings executable.")]),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("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("mkdir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-p")]),t._v(" /etc/pterodactyl\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-o")]),t._v(" /usr/local/bin/wings "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "'),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("uname")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-m")]),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x86_64"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"amd64"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arm64"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v('"\n'),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("chmod")]),t._v(" u+x /usr/local/bin/wings\n")])])]),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("OVH/SYS Servers")]),t._v(" "),e("p",[t._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"),e("code",[t._v("/home")]),t._v(", and not "),e("code",[t._v("/")]),t._v(" by default. Please consider using "),e("code",[t._v("/home/daemon-data")]),t._v(" for server data. This can be easily\nset when creating the node.")])]),t._v(" "),e("h2",{attrs:{id:"configure"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configure"}},[t._v("#")]),t._v(" Configure")]),t._v(" "),e("p",[t._v("Once you have installed Wings and the required components, the next step is to create a node on your installed Panel. Go to your Panel administrative view, select Nodes from the sidebar, and on the right side click Create New button.")]),t._v(" "),e("p",[t._v("After you have created a node, click on it and there will be a tab called Configuration. Copy the code block content, paste it into a new file called "),e("code",[t._v("config.yml")]),t._v(" in "),e("code",[t._v("/etc/pterodactyl")]),t._v(" and save it.")]),t._v(" "),e("p",[t._v("Alternatively, you can click on the Generate Token button, copy the bash command and paste it into your terminal.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(254),alt:"example image of wings configuration"}})]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("When your Panel is using SSL, the Wings must also have one created for its FQDN. See "),e("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("Creating SSL Certificates")]),t._v(" documentation page for how to create these certificates before continuing.")],1)]),t._v(" "),e("h3",{attrs:{id:"starting-wings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#starting-wings"}},[t._v("#")]),t._v(" Starting Wings")]),t._v(" "),e("p",[t._v("To start Wings, simply run the command below, which will start it in a debug mode. Once you confirmed that it is running without errors, use "),e("code",[t._v("CTRL+C")]),t._v(" to terminate the process and daemonize it by following the instructions below. Depending on your server's internet connection pulling and starting Wings for the first time may take a few minutes.")]),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("sudo")]),t._v(" wings "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--debug")]),t._v("\n")])])]),e("p",[t._v("You may optionally add the "),e("code",[t._v("--debug")]),t._v(" flag to run Wings in debug mode.")]),t._v(" "),e("h3",{attrs:{id:"daemonizing-using-systemd"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#daemonizing-using-systemd"}},[t._v("#")]),t._v(" Daemonizing (using systemd)")]),t._v(" "),e("p",[t._v("Running Wings 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 "),e("code",[t._v("wings.service")]),t._v(" in the "),e("code",[t._v("/etc/systemd/system")]),t._v(" directory.")]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\nRequires=docker.service\nPartOf=docker.service\n\n[Service]\nUser=root\nWorkingDirectory=/etc/pterodactyl\nLimitNOFILE=4096\nPIDFile=/var/run/wings/daemon.pid\nExecStart=/usr/local/bin/wings\nRestart=on-failure\nStartLimitInterval=180\nStartLimitBurst=30\nRestartSec=5s\n\n[Install]\nWantedBy=multi-user.target\n")])])]),e("p",[t._v("Then, run the commands below to reload systemd and start Wings.")]),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("sudo")]),t._v(" systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--now")]),t._v(" wings\n")])])]),e("h3",{attrs:{id:"node-allocations"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#node-allocations"}},[t._v("#")]),t._v(" Node Allocations")]),t._v(" "),e("p",[t._v("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.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(280),alt:"example image of node allocations"}})]),t._v(" "),e("p",[t._v("Type "),e("code",[t._v("hostname -I | awk '{print $1}'")]),t._v(" to find the IP to be used for the allocation. Alternatively, you can type "),e("code",[t._v('ip addr | grep "inet "')]),t._v(" to see all your available interfaces and IP addresses. Do not use 127.0.0.1 for allocations.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{254:function(t,e,a){t.exports=a.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},280:function(t,e,a){t.exports=a.p+"assets/img/node_allocations.323d67f2.png"},332:function(t,e,a){"use strict";a.r(e);var s=a(15),n=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"installing-wings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[t._v("#")]),t._v(" Installing Wings")]),t._v(" "),e("p",[t._v("Wings is the next generation server control plane from Pterodactyl. It has been rebuilt from the\nground up using Go and lessons learned from our first Nodejs Daemon.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("You should only install Wings if you are running "),e("strong",[t._v("Pterodactyl 1.x")]),t._v(". Do not install this software\nfor previous versions of Pterodactyl.")])]),t._v(" "),e("h2",{attrs:{id:"supported-systems"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#supported-systems"}},[t._v("#")]),t._v(" Supported Systems")]),t._v(" "),e("p",[t._v("The following is a list of supported operating systems. Please be aware that this is not an exhaustive list,\nthere is a high probability that you can run the software on other Linux distributions without much effort.\nYou are responsible for determining which packages may be necessary on those systems. There is also a very\nhigh probability that new releases of the supported OSes below will work just fine, you are not restricted to\nonly the versions listed below.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Operating System")]),t._v(" "),e("th",[t._v("Version")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Supported")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("strong",[t._v("Ubuntu")])]),t._v(" "),e("td",[t._v("20.04")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td",[t._v("Documentation written assuming Ubuntu 20.04 as the base OS.")])]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("22.04")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("24.04")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("strong",[t._v("RHEL / Rocky Linux / AlmaLinux")])]),t._v(" "),e("td",[t._v("8")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("9")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("strong",[t._v("Debian")])]),t._v(" "),e("td",[t._v("11")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td"),t._v(" "),e("td",[t._v("12")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("✅")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("strong",[t._v("Windows")])]),t._v(" "),e("td",[t._v("All")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("❌")]),t._v(" "),e("td",[t._v("This software will not run in Windows environments.")])])])]),t._v(" "),e("h2",{attrs:{id:"system-requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[t._v("#")]),t._v(" System Requirements")]),t._v(" "),e("p",[t._v("To run Wings, you will need a Linux system capable of running Docker containers. Most VPS and almost all\ndedicated servers should be capable of running Docker, but there are edge cases.")]),t._v(" "),e("p",[t._v("When your provider uses "),e("code",[t._v("Virtuozzo")]),t._v(", "),e("code",[t._v("OpenVZ")]),t._v(" (or "),e("code",[t._v("OVZ")]),t._v("), or "),e("code",[t._v("LXC")]),t._v(" virtualization, you will most likely be unable to\nrun Wings. Some providers have made the necessary changes for nested virtualization to support Docker. Ask your provider's support team to make sure. KVM is guaranteed to work.")]),t._v(" "),e("p",[t._v("The easiest way to check is to type "),e("code",[t._v("systemd-detect-virt")]),t._v(".\nIf the result doesn't contain "),e("code",[t._v("OpenVZ")]),t._v(" or"),e("code",[t._v("LXC")]),t._v(", it should be fine. The result of "),e("code",[t._v("none")]),t._v(" will appear when running dedicated hardware without any virtualization.")]),t._v(" "),e("p",[t._v("Should that not work for some reason, or you're still unsure, you can also run the command below.")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("dane@pterodactyl:~$ "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" dmidecode "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-s")]),t._v(" system-manufacturer\nVMware, Inc.\n")])])]),e("h2",{attrs:{id:"dependencies"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[t._v("#")]),t._v(" Dependencies")]),t._v(" "),e("ul",[e("li",[t._v("curl")]),t._v(" "),e("li",[t._v("Docker")])]),t._v(" "),e("h3",{attrs:{id:"installing-docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-docker"}},[t._v("#")]),t._v(" Installing Docker")]),t._v(" "),e("p",[t._v("For a quick install of Docker CE, you can execute the command below:")]),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(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-sSL")]),t._v(" https://get.docker.com/ "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("CHANNEL")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("stable "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("bash")]),t._v("\n")])])]),e("p",[t._v("If you would rather do a manual installation, please reference the "),e("a",{attrs:{href:"https://docs.docker.com/engine/install/",target:"_blank",rel:"noopener noreferrer"}},[t._v("official Docker documentation"),e("OutboundLink")],1),t._v(" for how to install Docker CE on your server.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Check your Kernel")]),t._v(" "),e("p",[t._v("Please be aware that some hosts install a modified kernel that does not support important docker features. Please\ncheck your kernel by running "),e("code",[t._v("uname -r")]),t._v(". If your kernel ends in "),e("code",[t._v("-xxxx-grs-ipv6-64")]),t._v(" or "),e("code",[t._v("-xxxx-mod-std-ipv6-64")]),t._v(" you're\nprobably using a non-supported kernel. Check our "),e("RouterLink",{attrs:{to:"/daemon/0.6/kernel_modifications.html"}},[t._v("Kernel Modifications")]),t._v(" guide for details.")],1)]),t._v(" "),e("h4",{attrs:{id:"start-docker-on-boot"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#start-docker-on-boot"}},[t._v("#")]),t._v(" Start Docker on Boot")]),t._v(" "),e("p",[t._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.")]),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("sudo")]),t._v(" systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--now")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("docker")]),t._v("\n")])])]),e("h4",{attrs:{id:"enabling-swap"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enabling-swap"}},[t._v("#")]),t._v(" Enabling Swap")]),t._v(" "),e("p",[t._v("On most systems, Docker will be unable to setup swap space by default. You can confirm this by running "),e("code",[t._v("docker info")]),t._v(" and looking for the output of "),e("code",[t._v("WARNING: No swap limit support")]),t._v(" near the bottom.")]),t._v(" "),e("p",[t._v("Enabling swap is entirely optional, but we recommended doing it if you will be hosting for others and to prevent OOM errors.")]),t._v(" "),e("p",[t._v("To enable swap, open "),e("code",[t._v("/etc/default/grub")]),t._v(" as a root user and find the line starting with "),e("code",[t._v("GRUB_CMDLINE_LINUX_DEFAULT")]),t._v(". Make\nsure the line includes "),e("code",[t._v("swapaccount=1")]),t._v(" somewhere inside the double-quotes.")]),t._v(" "),e("p",[t._v("After that, run "),e("code",[t._v("sudo update-grub")]),t._v(" followed by "),e("code",[t._v("sudo reboot")]),t._v(" to restart the server and have swap enabled.\nBelow is an example of what the line should look like, "),e("em",[t._v("do not copy this line verbatim. It often has additional OS-specific parameters.")])]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"\n')])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("GRUB Configuration")]),t._v(" "),e("p",[t._v("Some Linux distros may ignore "),e("code",[t._v("GRUB_CMDLINE_LINUX_DEFAULT")]),t._v(". Therefore you might have to use "),e("code",[t._v("GRUB_CMDLINE_LINUX")]),t._v(" instead should the default one not work for you.")])]),t._v(" "),e("h2",{attrs:{id:"installing-wings-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings-2"}},[t._v("#")]),t._v(" Installing Wings")]),t._v(" "),e("p",[t._v("The first step for installing Wings is to ensure we have the required directory structure setup. To do so,\nrun the commands below, which will create the base directory and download the wings executable.")]),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("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("mkdir")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-p")]),t._v(" /etc/pterodactyl\n"),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-o")]),t._v(" /usr/local/bin/wings "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "'),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("uname")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-m")]),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x86_64"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"amd64"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arm64"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v('"\n'),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("chmod")]),t._v(" u+x /usr/local/bin/wings\n")])])]),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("OVH/SYS Servers")]),t._v(" "),e("p",[t._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"),e("code",[t._v("/home")]),t._v(", and not "),e("code",[t._v("/")]),t._v(" by default. Please consider using "),e("code",[t._v("/home/daemon-data")]),t._v(" for server data. This can be easily\nset when creating the node.")])]),t._v(" "),e("h2",{attrs:{id:"configure"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#configure"}},[t._v("#")]),t._v(" Configure")]),t._v(" "),e("p",[t._v("Once you have installed Wings and the required components, the next step is to create a node on your installed Panel. Go to your Panel administrative view, select Nodes from the sidebar, and on the right side click Create New button.")]),t._v(" "),e("p",[t._v("After you have created a node, click on it and there will be a tab called Configuration. Copy the code block content, paste it into a new file called "),e("code",[t._v("config.yml")]),t._v(" in "),e("code",[t._v("/etc/pterodactyl")]),t._v(" and save it.")]),t._v(" "),e("p",[t._v("Alternatively, you can click on the Generate Token button, copy the bash command and paste it into your terminal.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(254),alt:"example image of wings configuration"}})]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("When your Panel is using SSL, the Wings must also have one created for its FQDN. See "),e("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("Creating SSL Certificates")]),t._v(" documentation page for how to create these certificates before continuing.")],1)]),t._v(" "),e("h3",{attrs:{id:"starting-wings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#starting-wings"}},[t._v("#")]),t._v(" Starting Wings")]),t._v(" "),e("p",[t._v("To start Wings, simply run the command below, which will start it in a debug mode. Once you confirmed that it is running without errors, use "),e("code",[t._v("CTRL+C")]),t._v(" to terminate the process and daemonize it by following the instructions below. Depending on your server's internet connection pulling and starting Wings for the first time may take a few minutes.")]),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("sudo")]),t._v(" wings "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--debug")]),t._v("\n")])])]),e("p",[t._v("You may optionally add the "),e("code",[t._v("--debug")]),t._v(" flag to run Wings in debug mode.")]),t._v(" "),e("h3",{attrs:{id:"daemonizing-using-systemd"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#daemonizing-using-systemd"}},[t._v("#")]),t._v(" Daemonizing (using systemd)")]),t._v(" "),e("p",[t._v("Running Wings 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 "),e("code",[t._v("wings.service")]),t._v(" in the "),e("code",[t._v("/etc/systemd/system")]),t._v(" directory.")]),t._v(" "),e("div",{staticClass:"language-text extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\nRequires=docker.service\nPartOf=docker.service\n\n[Service]\nUser=root\nWorkingDirectory=/etc/pterodactyl\nLimitNOFILE=4096\nPIDFile=/var/run/wings/daemon.pid\nExecStart=/usr/local/bin/wings\nRestart=on-failure\nStartLimitInterval=180\nStartLimitBurst=30\nRestartSec=5s\n\n[Install]\nWantedBy=multi-user.target\n")])])]),e("p",[t._v("Then, run the commands below to reload systemd and start Wings.")]),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("sudo")]),t._v(" systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--now")]),t._v(" wings\n")])])]),e("h3",{attrs:{id:"node-allocations"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#node-allocations"}},[t._v("#")]),t._v(" Node Allocations")]),t._v(" "),e("p",[t._v("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.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(280),alt:"example image of node allocations"}})]),t._v(" "),e("p",[t._v("Type "),e("code",[t._v("hostname -I | awk '{print $1}'")]),t._v(" to find the IP to be used for the allocation. Alternatively, you can type "),e("code",[t._v('ip addr | grep "inet "')]),t._v(" to see all your available interfaces and IP addresses. Do not use 127.0.0.1 for allocations.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/22.8f7ee701.js b/assets/js/22.81755508.js similarity index 98% rename from assets/js/22.8f7ee701.js rename to assets/js/22.81755508.js index bf7d6e48..d6af38b5 100644 --- a/assets/js/22.8f7ee701.js +++ b/assets/js/22.81755508.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{254:function(e,t,s){e.exports=s.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},332:function(e,t,s){"use strict";s.r(t);var a=s(15),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"migrating-to-wings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#migrating-to-wings"}},[e._v("#")]),e._v(" Migrating to Wings")]),e._v(" "),t("p",[e._v("This guide is for people looking to migrate from the old Node.JS daemon to Wings. Please see the\n"),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("install guide")]),e._v(" if you are trying to install Wings for the first time on\na new node.")],1),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("Panel Version Requirement")]),e._v(" "),t("p",[e._v("You "),t("strong",[e._v("must")]),e._v(" be running Pterodactyl Panel 1.X in order to use Wings.")])]),e._v(" "),t("p",[e._v("You'll have a brief offline period as you perform this process, however no running game processes\nwill be affected. Plus, chances are your Panel will be offline (or in maintenance mode) during this\nso your users should not notice anything out of the ordinary.")]),e._v(" "),t("h2",{attrs:{id:"install-wings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-wings"}},[e._v("#")]),e._v(" Install Wings")]),e._v(" "),t("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 which will create the base directory and download the wings executable.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-p")]),e._v(" /etc/pterodactyl\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-o")]),e._v(" /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" u+x /usr/local/bin/wings\n")])])]),t("h2",{attrs:{id:"copy-new-configuration-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#copy-new-configuration-file"}},[e._v("#")]),e._v(" Copy New Configuration File")]),e._v(" "),t("p",[e._v("Once you have installed Wings, you'll need to copy over a new configuration file from the Panel. This file\nis in a new format, and should be easier for you to manage and edit in the future.")]),e._v(" "),t("p",[e._v("Simply copy and paste the code block and paste it into a file called "),t("code",[e._v("config.yml")]),e._v(" within the "),t("code",[e._v("/etc/pterodactyl")]),e._v("\ndirectory and save it.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(254),alt:""}})]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("Please note that any modifications you previously made to the configuration will be lost with this. If you have\nmodifications to our default settings, the best option is to start Wings once with the copied configuration which\nwill then populate all of the other configuration settings.")]),e._v(" "),t("p",[e._v("From there you can make any adjustments as necessary.")])]),e._v(" "),t("h2",{attrs:{id:"remove-old-daemon"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remove-old-daemon"}},[e._v("#")]),e._v(" Remove Old Daemon")]),e._v(" "),t("p",[e._v("Now that Wings is installed, we need to remove all of the old daemon code from the server since it is not being\nused anymore. To do this, simply execute the following commands — assuming your old daemon is in the default\n"),t("code",[e._v("/srv/daemon")]),e._v(" directory.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Stop the old daemon.")]),e._v("\nsystemctl stop wings\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Delete the entire directory. There is nothing stored in here that we actually need for the")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# purposes of this migration. Remember, server data is stored in /srv/daemon-data.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-rf")]),e._v(" /srv/daemon\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Optionally, remove NodeJS from your system if it was not used for anything else.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" remove nodejs "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or: yum remove nodejs")]),e._v("\n")])])]),t("h3",{attrs:{id:"remove-standalone-sftp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remove-standalone-sftp"}},[e._v("#")]),e._v(" Remove Standalone SFTP")]),e._v(" "),t("p",[e._v("If you've used the "),t("RouterLink",{attrs:{to:"/daemon/0.6/standalone_sftp.html"}},[e._v("standalone SFTP server")]),e._v(" with the old daemon, we need to remove it's systemd service as well, as it's no longer needed.\nYou can do so using the following commands.")],1),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# stop and disable the standalone sftp")]),e._v("\nsystemctl disable "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--now")]),e._v(" pterosftp\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# delete the systemd service")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/systemd/system/pterosftp.service\n")])])]),t("h2",{attrs:{id:"daemonize-wings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-wings"}},[e._v("#")]),e._v(" Daemonize Wings")]),e._v(" "),t("p",[e._v("You'll then need to edit your existing "),t("code",[e._v("systemd")]),e._v(" service file for Wings to point to the new control software. To do\nthis, open "),t("code",[e._v("/etc/systemd/system/wings.service")]),e._v(" and replace the entire contents of the file with the following:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\n\n[Service]\nUser=root\nWorkingDirectory=/etc/pterodactyl\nLimitNOFILE=4096\nPIDFile=/var/run/wings/daemon.pid\nExecStart=/usr/local/bin/wings\nRestart=on-failure\nStartLimitInterval=600\n\n[Install]\nWantedBy=multi-user.target\n")])])]),t("p",[e._v("Then, start wings.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("systemctl daemon-reload\nsystemctl enable --now wings\n")])])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("What if Wings doesn't start?")]),e._v(" "),t("p",[e._v("If you encounter issues starting Wings at this point, run the following command to start Wings directly and check\nfor any specific error output.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo wings --debug\n")])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{254:function(e,t,s){e.exports=s.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},334:function(e,t,s){"use strict";s.r(t);var a=s(15),n=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"migrating-to-wings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#migrating-to-wings"}},[e._v("#")]),e._v(" Migrating to Wings")]),e._v(" "),t("p",[e._v("This guide is for people looking to migrate from the old Node.JS daemon to Wings. Please see the\n"),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("install guide")]),e._v(" if you are trying to install Wings for the first time on\na new node.")],1),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("Panel Version Requirement")]),e._v(" "),t("p",[e._v("You "),t("strong",[e._v("must")]),e._v(" be running Pterodactyl Panel 1.X in order to use Wings.")])]),e._v(" "),t("p",[e._v("You'll have a brief offline period as you perform this process, however no running game processes\nwill be affected. Plus, chances are your Panel will be offline (or in maintenance mode) during this\nso your users should not notice anything out of the ordinary.")]),e._v(" "),t("h2",{attrs:{id:"install-wings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-wings"}},[e._v("#")]),e._v(" Install Wings")]),e._v(" "),t("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 which will create the base directory and download the wings executable.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-p")]),e._v(" /etc/pterodactyl\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-o")]),e._v(" /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" u+x /usr/local/bin/wings\n")])])]),t("h2",{attrs:{id:"copy-new-configuration-file"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#copy-new-configuration-file"}},[e._v("#")]),e._v(" Copy New Configuration File")]),e._v(" "),t("p",[e._v("Once you have installed Wings, you'll need to copy over a new configuration file from the Panel. This file\nis in a new format, and should be easier for you to manage and edit in the future.")]),e._v(" "),t("p",[e._v("Simply copy and paste the code block and paste it into a file called "),t("code",[e._v("config.yml")]),e._v(" within the "),t("code",[e._v("/etc/pterodactyl")]),e._v("\ndirectory and save it.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(254),alt:""}})]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("Please note that any modifications you previously made to the configuration will be lost with this. If you have\nmodifications to our default settings, the best option is to start Wings once with the copied configuration which\nwill then populate all of the other configuration settings.")]),e._v(" "),t("p",[e._v("From there you can make any adjustments as necessary.")])]),e._v(" "),t("h2",{attrs:{id:"remove-old-daemon"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remove-old-daemon"}},[e._v("#")]),e._v(" Remove Old Daemon")]),e._v(" "),t("p",[e._v("Now that Wings is installed, we need to remove all of the old daemon code from the server since it is not being\nused anymore. To do this, simply execute the following commands — assuming your old daemon is in the default\n"),t("code",[e._v("/srv/daemon")]),e._v(" directory.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Stop the old daemon.")]),e._v("\nsystemctl stop wings\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Delete the entire directory. There is nothing stored in here that we actually need for the")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# purposes of this migration. Remember, server data is stored in /srv/daemon-data.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-rf")]),e._v(" /srv/daemon\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Optionally, remove NodeJS from your system if it was not used for anything else.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" remove nodejs "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or: yum remove nodejs")]),e._v("\n")])])]),t("h3",{attrs:{id:"remove-standalone-sftp"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#remove-standalone-sftp"}},[e._v("#")]),e._v(" Remove Standalone SFTP")]),e._v(" "),t("p",[e._v("If you've used the "),t("RouterLink",{attrs:{to:"/daemon/0.6/standalone_sftp.html"}},[e._v("standalone SFTP server")]),e._v(" with the old daemon, we need to remove it's systemd service as well, as it's no longer needed.\nYou can do so using the following commands.")],1),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# stop and disable the standalone sftp")]),e._v("\nsystemctl disable "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--now")]),e._v(" pterosftp\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# delete the systemd service")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/systemd/system/pterosftp.service\n")])])]),t("h2",{attrs:{id:"daemonize-wings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-wings"}},[e._v("#")]),e._v(" Daemonize Wings")]),e._v(" "),t("p",[e._v("You'll then need to edit your existing "),t("code",[e._v("systemd")]),e._v(" service file for Wings to point to the new control software. To do\nthis, open "),t("code",[e._v("/etc/systemd/system/wings.service")]),e._v(" and replace the entire contents of the file with the following:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\n\n[Service]\nUser=root\nWorkingDirectory=/etc/pterodactyl\nLimitNOFILE=4096\nPIDFile=/var/run/wings/daemon.pid\nExecStart=/usr/local/bin/wings\nRestart=on-failure\nStartLimitInterval=600\n\n[Install]\nWantedBy=multi-user.target\n")])])]),t("p",[e._v("Then, start wings.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("systemctl daemon-reload\nsystemctl enable --now wings\n")])])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("What if Wings doesn't start?")]),e._v(" "),t("p",[e._v("If you encounter issues starting Wings at this point, run the following command to start Wings directly and check\nfor any specific error output.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("sudo wings --debug\n")])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/30.a5e153c0.js b/assets/js/30.d2985bea.js similarity index 68% rename from assets/js/30.a5e153c0.js rename to assets/js/30.d2985bea.js index fb116670..f84baa93 100644 --- a/assets/js/30.a5e153c0.js +++ b/assets/js/30.d2985bea.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{285:function(t,n,s){"use strict";s.r(n);var e=s(15),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{286:function(t,n,s){"use strict";s.r(n);var e=s(15),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/31.bbfc69d7.js b/assets/js/31.1a5025b8.js similarity index 88% rename from assets/js/31.bbfc69d7.js rename to assets/js/31.1a5025b8.js index 1501a8d2..44c07f54 100644 --- a/assets/js/31.bbfc69d7.js +++ b/assets/js/31.1a5025b8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{286:function(t,e,o){"use strict";o.r(e);var a=o(15),i=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"community-guides-and-tutorials"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#community-guides-and-tutorials"}},[t._v("#")]),t._v(" Community Guides and Tutorials")]),t._v(" "),e("h2",{attrs:{id:"about"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#about"}},[t._v("#")]),t._v(" About")]),t._v(" "),e("p",[t._v("This section of Pterodactyl's site is dedicated to more complex topics, tutorials, and features that we\nfeel are important to share with the community, but do not fit into the theme of our core documentation.")]),t._v(" "),e("p",[t._v("Here you'll find in-depth OS-specific installation guides, advanced network configurations, individual game\nsetup instructions, and so much more.")])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{285:function(t,e,o){"use strict";o.r(e);var a=o(15),i=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"community-guides-and-tutorials"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#community-guides-and-tutorials"}},[t._v("#")]),t._v(" Community Guides and Tutorials")]),t._v(" "),e("h2",{attrs:{id:"about"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#about"}},[t._v("#")]),t._v(" About")]),t._v(" "),e("p",[t._v("This section of Pterodactyl's site is dedicated to more complex topics, tutorials, and features that we\nfeel are important to share with the community, but do not fit into the theme of our core documentation.")]),t._v(" "),e("p",[t._v("Here you'll find in-depth OS-specific installation guides, advanced network configurations, individual game\nsetup instructions, and so much more.")])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/32.ffb78eb1.js b/assets/js/32.832c5249.js similarity index 99% rename from assets/js/32.ffb78eb1.js rename to assets/js/32.832c5249.js index ab95ebe2..ba629dd0 100644 --- a/assets/js/32.ffb78eb1.js +++ b/assets/js/32.832c5249.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{290:function(e,t,a){"use strict";a.r(t);var s=a(15),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"creating-a-custom-docker-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-docker-image"}},[e._v("#")]),e._v(" Creating a Custom Docker Image")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#creating-the-dockerfile"}},[e._v("Creating the Dockerfile")])]),t("li",[t("a",{attrs:{href:"#installing-dependencies"}},[e._v("Installing Dependencies")])]),t("li",[t("a",{attrs:{href:"#creating-a-container-user"}},[e._v("Creating a Container User")])]),t("li",[t("a",{attrs:{href:"#work-directory-entrypoint"}},[e._v("Work Directory & Entrypoint")])]),t("li",[t("a",{attrs:{href:"#entrypoint-script"}},[e._v("Entrypoint Script")])]),t("li",[t("a",{attrs:{href:"#modifying-the-startup-command"}},[e._v("Modifying the Startup Command")])]),t("li",[t("a",{attrs:{href:"#run-the-command"}},[e._v("Run the Command")]),t("ul",[t("li",[t("a",{attrs:{href:"#note"}},[e._v("Note")])])])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("This tutorial uses examples from our "),t("a",{attrs:{href:"https://github.com/pterodactyl/images/tree/java",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("core:java")]),t("OutboundLink")],1),e._v(" docker image,\nwhich can be found on GitHub. This tutorial also assumes some knowledge of "),t("a",{attrs:{href:"https://docker.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Docker"),t("OutboundLink")],1),e._v(", we suggest\nreading up if this all looks foreign to you.")])]),e._v(" "),t("h2",{attrs:{id:"creating-the-dockerfile"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-dockerfile"}},[e._v("#")]),e._v(" Creating the Dockerfile")]),e._v(" "),t("p",[e._v("The most important part of this process is to create the "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("Dockerfile")]),t("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(" "),t("p",[e._v("We try to make use of "),t("a",{attrs:{href:"https://alpinelinux.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alpine Linux"),t("OutboundLink")],1),e._v(" as much as possible for our images in order to keep their size down.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pterodactyl Core Dockerfile")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Environment: Java")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Minimum Panel Version: 0.6.0")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\nFROM openjdk:8-jdk-alpine\n\nMAINTAINER Pterodactyl Software, "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("support@pterodactyl.io"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n\nRUN apk "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" --no-cache "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--update")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" ca-certificates openssl "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" sqlite fontconfig "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" adduser --disabled-password "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--home")]),e._v(" /home/container container\n\n"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")]),e._v(" container\nENV "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")])]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("container "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("HOME")])]),t("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 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),t("p",[e._v("Lets walk through the "),t("code",[e._v("Dockerfile")]),e._v(" above. The first thing you'll notice is the "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#from",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("FROM")]),t("OutboundLink")],1),e._v(" declaration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("FROM openjdk:8-jdk-alpine\n")])])]),t("p",[e._v("In this case, we are using "),t("a",{attrs:{href:"https://github.com/docker-library/openjdk",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("openjdk:8-jdk-alpine")]),t("OutboundLink")],1),e._v(" which provides us with Java 8.")]),e._v(" "),t("h2",{attrs:{id:"installing-dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-dependencies"}},[e._v("#")]),e._v(" Installing Dependencies")]),e._v(" "),t("p",[e._v("The next thing we do is install the dependencies we will need using Alpine's package manager: "),t("code",[e._v("apk")]),e._v(". You'll notice some\nspecific flags that keep the container small, including "),t("code",[e._v("--no-cache")]),e._v(", as well as everything being contained in a\nsingle "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#run",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("RUN")]),t("OutboundLink")],1),e._v(" block.")]),e._v(" "),t("h2",{attrs:{id:"creating-a-container-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-container-user"}},[e._v("#")]),e._v(" Creating a Container User")]),e._v(" "),t("p",[e._v("Within this "),t("code",[e._v("RUN")]),e._v(" block, you'll notice the "),t("code",[e._v("useradd")]),e._v(" command.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("adduser "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-D")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-h")]),e._v(" /home/container container\n")])])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("All Pterodactyl containers must have a user named "),t("code",[e._v("container")]),e._v(", and the user home "),t("strong",[e._v("must")]),e._v(" be "),t("code",[e._v("/home/container")]),e._v(".")])]),e._v(" "),t("p",[e._v("After we create that user, we then define the default container "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#user",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("USER")]),t("OutboundLink")],1),e._v("\nas well as a few "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#env",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("ENV")]),t("OutboundLink")],1),e._v(" settings to be applied to things running\nwithin the container.")]),e._v(" "),t("h2",{attrs:{id:"work-directory-entrypoint"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#work-directory-entrypoint"}},[e._v("#")]),e._v(" Work Directory & Entrypoint")]),e._v(" "),t("p",[e._v("One of the last things we do is define a "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#workdir",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("WORKDIR")]),t("OutboundLink")],1),e._v(" which\nis where everything else will be executed. The "),t("code",[e._v("WORKDIR")]),e._v(" must be set the "),t("code",[e._v("/home/container")]),e._v(".")]),e._v(" "),t("p",[e._v("Finally, we need to copy our "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#entrypoint",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("ENTRYPOINT")]),t("OutboundLink")],1),e._v(" script into\nthe docker image root. This is done using "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#copy",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("COPY")]),t("OutboundLink")],1),e._v(", after which\nwe define the command to be used when the container is started using "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#cmd",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("CMD")]),t("OutboundLink")],1),e._v(".\nThe "),t("code",[e._v("CMD")]),e._v(" line should always point to the "),t("code",[e._v("entrypoint.sh")]),e._v(" file.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("COPY ./entrypoint.sh /entrypoint.sh\nCMD "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),t("h2",{attrs:{id:"entrypoint-script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#entrypoint-script"}},[e._v("#")]),e._v(" Entrypoint Script")]),e._v(" "),t("p",[e._v("In order to complete this "),t("code",[e._v("Dockerfile")]),e._v(", we will need an "),t("code",[e._v("entrypoint.sh")]),e._v(" file which tells Docker how to run this\nspecific server type.")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[e._v("#!/bin/bash")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /home/container\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Output Current Java Version")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("java")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-version")]),e._v(" "),t("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"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Replace Startup Variables")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('":/home/container$ '),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v('"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run the Server")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v("\n")])])]),t("p",[e._v("The second command, "),t("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 "),t("code",[e._v("java -version")]),e._v(" to output this information to end-users, but that is not necessary.")]),e._v(" "),t("h2",{attrs:{id:"modifying-the-startup-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#modifying-the-startup-command"}},[e._v("#")]),e._v(" Modifying the Startup Command")]),e._v(" "),t("p",[e._v("The most significant part of this file is the "),t("code",[e._v("MODIFIED_STARTUP")]),e._v(" environment variable. What we are doing in this case\nis parsing the environment "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("STARTUP")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}"')]),e._v("\n")])])]),t("div",{pre:!0},[t("p",[e._v("You'll notice some placeholders there, specifically "),t("code",[e._v("{{SERVER_MEMORY}}")]),e._v(" and "),t("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.")])]),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_MEMORY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1024")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_JARFILE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("server.jar\n")])])]),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n")])])]),t("div",{pre:!0},[t("p",[e._v("The command above simply evaluates the "),t("code",[e._v("STARTUP")]),e._v(" environment variable, and then replaces anything surrounded in\ncurly braces "),t("code",[e._v("{{EXAMPLE}}")]),e._v(" with a matching environment variable (such as "),t("code",[e._v("EXAMPLE")]),e._v("). Thus, our "),t("code",[e._v("STARTUP")]),e._v(" command:")])]),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("java")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Xms128M")]),e._v(" -Xmx"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_MEMORY"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("M "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-jar")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_JARFILE"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("Becomes:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("java")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Xms128M")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Xmx1024M")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-jar")]),e._v(" server.jar\n")])])]),t("h2",{attrs:{id:"run-the-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-the-command"}},[e._v("#")]),e._v(" Run the Command")]),e._v(" "),t("p",[e._v("The last step is to run this modified startup command, which is done with the line "),t("code",[e._v("${MODIFIED_STARTUP}")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"note"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#note"}},[e._v("#")]),e._v(" Note")]),e._v(" "),t("p",[e._v("Sometimes you may need to change the permissions of the "),t("code",[e._v("entrypoint.sh")]),e._v(" file, on linux you can do this by executing "),t("code",[e._v("chmod +x entrypoint.sh")]),e._v(" in the directory where the file is.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{287:function(e,t,a){"use strict";a.r(t);var s=a(15),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"creating-a-custom-docker-image"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-docker-image"}},[e._v("#")]),e._v(" Creating a Custom Docker Image")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#creating-the-dockerfile"}},[e._v("Creating the Dockerfile")])]),t("li",[t("a",{attrs:{href:"#installing-dependencies"}},[e._v("Installing Dependencies")])]),t("li",[t("a",{attrs:{href:"#creating-a-container-user"}},[e._v("Creating a Container User")])]),t("li",[t("a",{attrs:{href:"#work-directory-entrypoint"}},[e._v("Work Directory & Entrypoint")])]),t("li",[t("a",{attrs:{href:"#entrypoint-script"}},[e._v("Entrypoint Script")])]),t("li",[t("a",{attrs:{href:"#modifying-the-startup-command"}},[e._v("Modifying the Startup Command")])]),t("li",[t("a",{attrs:{href:"#run-the-command"}},[e._v("Run the Command")]),t("ul",[t("li",[t("a",{attrs:{href:"#note"}},[e._v("Note")])])])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("This tutorial uses examples from our "),t("a",{attrs:{href:"https://github.com/pterodactyl/images/tree/java",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("core:java")]),t("OutboundLink")],1),e._v(" docker image,\nwhich can be found on GitHub. This tutorial also assumes some knowledge of "),t("a",{attrs:{href:"https://docker.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Docker"),t("OutboundLink")],1),e._v(", we suggest\nreading up if this all looks foreign to you.")])]),e._v(" "),t("h2",{attrs:{id:"creating-the-dockerfile"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-the-dockerfile"}},[e._v("#")]),e._v(" Creating the Dockerfile")]),e._v(" "),t("p",[e._v("The most important part of this process is to create the "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("Dockerfile")]),t("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(" "),t("p",[e._v("We try to make use of "),t("a",{attrs:{href:"https://alpinelinux.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alpine Linux"),t("OutboundLink")],1),e._v(" as much as possible for our images in order to keep their size down.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pterodactyl Core Dockerfile")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Environment: Java")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Minimum Panel Version: 0.6.0")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ----------------------------------")]),e._v("\nFROM openjdk:8-jdk-alpine\n\nMAINTAINER Pterodactyl Software, "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("support@pterodactyl.io"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n\nRUN apk "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("add")]),e._v(" --no-cache "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--update")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" ca-certificates openssl "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v(" sqlite fontconfig "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" adduser --disabled-password "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--home")]),e._v(" /home/container container\n\n"),t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")]),e._v(" container\nENV "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("USER")])]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("container "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("HOME")])]),t("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 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),t("p",[e._v("Lets walk through the "),t("code",[e._v("Dockerfile")]),e._v(" above. The first thing you'll notice is the "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#from",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("FROM")]),t("OutboundLink")],1),e._v(" declaration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("FROM openjdk:8-jdk-alpine\n")])])]),t("p",[e._v("In this case, we are using "),t("a",{attrs:{href:"https://github.com/docker-library/openjdk",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("openjdk:8-jdk-alpine")]),t("OutboundLink")],1),e._v(" which provides us with Java 8.")]),e._v(" "),t("h2",{attrs:{id:"installing-dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-dependencies"}},[e._v("#")]),e._v(" Installing Dependencies")]),e._v(" "),t("p",[e._v("The next thing we do is install the dependencies we will need using Alpine's package manager: "),t("code",[e._v("apk")]),e._v(". You'll notice some\nspecific flags that keep the container small, including "),t("code",[e._v("--no-cache")]),e._v(", as well as everything being contained in a\nsingle "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#run",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("RUN")]),t("OutboundLink")],1),e._v(" block.")]),e._v(" "),t("h2",{attrs:{id:"creating-a-container-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-container-user"}},[e._v("#")]),e._v(" Creating a Container User")]),e._v(" "),t("p",[e._v("Within this "),t("code",[e._v("RUN")]),e._v(" block, you'll notice the "),t("code",[e._v("useradd")]),e._v(" command.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("adduser "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-D")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-h")]),e._v(" /home/container container\n")])])]),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("All Pterodactyl containers must have a user named "),t("code",[e._v("container")]),e._v(", and the user home "),t("strong",[e._v("must")]),e._v(" be "),t("code",[e._v("/home/container")]),e._v(".")])]),e._v(" "),t("p",[e._v("After we create that user, we then define the default container "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#user",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("USER")]),t("OutboundLink")],1),e._v("\nas well as a few "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#env",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("ENV")]),t("OutboundLink")],1),e._v(" settings to be applied to things running\nwithin the container.")]),e._v(" "),t("h2",{attrs:{id:"work-directory-entrypoint"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#work-directory-entrypoint"}},[e._v("#")]),e._v(" Work Directory & Entrypoint")]),e._v(" "),t("p",[e._v("One of the last things we do is define a "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#workdir",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("WORKDIR")]),t("OutboundLink")],1),e._v(" which\nis where everything else will be executed. The "),t("code",[e._v("WORKDIR")]),e._v(" must be set the "),t("code",[e._v("/home/container")]),e._v(".")]),e._v(" "),t("p",[e._v("Finally, we need to copy our "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#entrypoint",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("ENTRYPOINT")]),t("OutboundLink")],1),e._v(" script into\nthe docker image root. This is done using "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#copy",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("COPY")]),t("OutboundLink")],1),e._v(", after which\nwe define the command to be used when the container is started using "),t("a",{attrs:{href:"https://docs.docker.com/engine/reference/builder/#cmd",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("CMD")]),t("OutboundLink")],1),e._v(".\nThe "),t("code",[e._v("CMD")]),e._v(" line should always point to the "),t("code",[e._v("entrypoint.sh")]),e._v(" file.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("COPY ./entrypoint.sh /entrypoint.sh\nCMD "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/bin/bash"')]),e._v(", "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"/entrypoint.sh"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v("\n")])])]),t("h2",{attrs:{id:"entrypoint-script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#entrypoint-script"}},[e._v("#")]),e._v(" Entrypoint Script")]),e._v(" "),t("p",[e._v("In order to complete this "),t("code",[e._v("Dockerfile")]),e._v(", we will need an "),t("code",[e._v("entrypoint.sh")]),e._v(" file which tells Docker how to run this\nspecific server type.")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token shebang important"}},[e._v("#!/bin/bash")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /home/container\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Output Current Java Version")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("java")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-version")]),e._v(" "),t("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"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Replace Startup Variables")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('":/home/container$ '),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v('"')]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run the Server")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("${MODIFIED_STARTUP}")]),e._v("\n")])])]),t("p",[e._v("The second command, "),t("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 "),t("code",[e._v("java -version")]),e._v(" to output this information to end-users, but that is not necessary.")]),e._v(" "),t("h2",{attrs:{id:"modifying-the-startup-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#modifying-the-startup-command"}},[e._v("#")]),e._v(" Modifying the Startup Command")]),e._v(" "),t("p",[e._v("The most significant part of this file is the "),t("code",[e._v("MODIFIED_STARTUP")]),e._v(" environment variable. What we are doing in this case\nis parsing the environment "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("STARTUP")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}"')]),e._v("\n")])])]),t("div",{pre:!0},[t("p",[e._v("You'll notice some placeholders there, specifically "),t("code",[e._v("{{SERVER_MEMORY}}")]),e._v(" and "),t("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.")])]),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_MEMORY")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1024")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("SERVER_JARFILE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("server.jar\n")])])]),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("MODIFIED_STARTUP")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("eval")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("$(")]),e._v("echo $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("STARTUP"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/{{/${/g'")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/}}/}/g'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("`")])]),e._v("\n")])])]),t("div",{pre:!0},[t("p",[e._v("The command above simply evaluates the "),t("code",[e._v("STARTUP")]),e._v(" environment variable, and then replaces anything surrounded in\ncurly braces "),t("code",[e._v("{{EXAMPLE}}")]),e._v(" with a matching environment variable (such as "),t("code",[e._v("EXAMPLE")]),e._v("). Thus, our "),t("code",[e._v("STARTUP")]),e._v(" command:")])]),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("java")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Xms128M")]),e._v(" -Xmx"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_MEMORY"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("M "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-jar")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("SERVER_JARFILE"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("Becomes:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("java")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Xms128M")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Xmx1024M")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-jar")]),e._v(" server.jar\n")])])]),t("h2",{attrs:{id:"run-the-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-the-command"}},[e._v("#")]),e._v(" Run the Command")]),e._v(" "),t("p",[e._v("The last step is to run this modified startup command, which is done with the line "),t("code",[e._v("${MODIFIED_STARTUP}")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"note"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#note"}},[e._v("#")]),e._v(" Note")]),e._v(" "),t("p",[e._v("Sometimes you may need to change the permissions of the "),t("code",[e._v("entrypoint.sh")]),e._v(" file, on linux you can do this by executing "),t("code",[e._v("chmod +x entrypoint.sh")]),e._v(" in the directory where the file is.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/33.b2567b9f.js b/assets/js/33.940dfd44.js similarity index 98% rename from assets/js/33.b2567b9f.js rename to assets/js/33.940dfd44.js index 7330cba6..54b92357 100644 --- a/assets/js/33.b2567b9f.js +++ b/assets/js/33.940dfd44.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{288:function(s,a,e){"use strict";e.r(a);var t=e(15),n=Object(t.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"building-panel-assets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#building-panel-assets"}},[s._v("#")]),s._v(" Building Panel Assets")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Do "),a("strong",[s._v("not")]),s._v(" run the following steps on your production nodes.")])]),s._v(" "),a("p",[s._v("Instructions on how to build the panel are also available in the "),a("a",{attrs:{href:"https://github.com/pterodactyl/panel/blob/1.0-develop/BUILDING.md",target:"_blank",rel:"noopener noreferrer"}},[s._v("BUILDING.md"),a("OutboundLink")],1),s._v(" file.")]),s._v(" "),a("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(" "),a("h2",{attrs:{id:"install-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies"}},[s._v("#")]),s._v(" Install Dependencies")]),s._v(" "),a("p",[s._v("The following commands will install the necessary dependencies for building the Panel assets.")]),s._v(" "),a("p",[s._v("The build tools require NodeJS, yarn is used as the package manager.")]),s._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"}},[s._v("# Ubuntu/Debian")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-sL")]),s._v(" https://deb.nodesource.com/setup_16.x "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-E")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-y")]),s._v(" nodejs\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-sL")]),s._v(" https://rpm.nodesource.com/setup_16.x "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-E")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-y")]),s._v(" nodejs "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 7")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" dnf "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-y")]),s._v(" nodejs "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 8, Rocky Linux 8, AlmaLinux 8")]),s._v("\n")])])]),a("p",[s._v("Install required javascript packages.")]),s._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"}},[s._v("npm")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-g")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install Yarn")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Installs panel build dependencies")]),s._v("\n")])])]),a("h2",{attrs:{id:"build-panel-assets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#build-panel-assets"}},[s._v("#")]),s._v(" Build Panel Assets")]),s._v(" "),a("p",[s._v("The following command will rebuild the Panel frontend. For NodeJS version 17 and above, you must enable the "),a("code",[s._v("--openssl-legacy-provider")]),s._v(" option before building.")]),s._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"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NODE_OPTIONS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("--openssl-legacy-provider "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for NodeJS v17+")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" build:production "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Build panel")]),s._v("\n")])])]),a("p",[s._v("You can use command "),a("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 "),a("code",[s._v("yarn build:production")]),s._v(" command.")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{289:function(s,a,e){"use strict";e.r(a);var t=e(15),n=Object(t.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"building-panel-assets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#building-panel-assets"}},[s._v("#")]),s._v(" Building Panel Assets")]),s._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),a("p",[s._v("Do "),a("strong",[s._v("not")]),s._v(" run the following steps on your production nodes.")])]),s._v(" "),a("p",[s._v("Instructions on how to build the panel are also available in the "),a("a",{attrs:{href:"https://github.com/pterodactyl/panel/blob/1.0-develop/BUILDING.md",target:"_blank",rel:"noopener noreferrer"}},[s._v("BUILDING.md"),a("OutboundLink")],1),s._v(" file.")]),s._v(" "),a("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(" "),a("h2",{attrs:{id:"install-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies"}},[s._v("#")]),s._v(" Install Dependencies")]),s._v(" "),a("p",[s._v("The following commands will install the necessary dependencies for building the Panel assets.")]),s._v(" "),a("p",[s._v("The build tools require NodeJS, yarn is used as the package manager.")]),s._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"}},[s._v("# Ubuntu/Debian")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-sL")]),s._v(" https://deb.nodesource.com/setup_16.x "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-E")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-y")]),s._v(" nodejs\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-sL")]),s._v(" https://rpm.nodesource.com/setup_16.x "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-E")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("bash")]),s._v(" -\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-y")]),s._v(" nodejs "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 7")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" dnf "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-y")]),s._v(" nodejs "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# CentOS 8, Rocky Linux 8, AlmaLinux 8")]),s._v("\n")])])]),a("p",[s._v("Install required javascript packages.")]),s._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"}},[s._v("npm")]),s._v(" i "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[s._v("-g")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install Yarn")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Installs panel build dependencies")]),s._v("\n")])])]),a("h2",{attrs:{id:"build-panel-assets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#build-panel-assets"}},[s._v("#")]),s._v(" Build Panel Assets")]),s._v(" "),a("p",[s._v("The following command will rebuild the Panel frontend. For NodeJS version 17 and above, you must enable the "),a("code",[s._v("--openssl-legacy-provider")]),s._v(" option before building.")]),s._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"}},[s._v("cd")]),s._v(" /var/www/pterodactyl\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("export")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NODE_OPTIONS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("--openssl-legacy-provider "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# for NodeJS v17+")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yarn")]),s._v(" build:production "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Build panel")]),s._v("\n")])])]),a("p",[s._v("You can use command "),a("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 "),a("code",[s._v("yarn build:production")]),s._v(" command.")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/34.e93e5695.js b/assets/js/34.49d78ff7.js similarity index 98% rename from assets/js/34.e93e5695.js rename to assets/js/34.49d78ff7.js index d55e80bd..2983d6f6 100644 --- a/assets/js/34.e93e5695.js +++ b/assets/js/34.49d78ff7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{291:function(t,s,e){"use strict";e.r(s);var a=e(15),i=Object(a.a)({},(function(){var t=this,s=t._self._c;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);s.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{290:function(t,s,e){"use strict";e.r(s);var a=e(15),i=Object(a.a)({},(function(){var t=this,s=t._self._c;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);s.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/39.3d7378a0.js b/assets/js/39.942d570b.js similarity index 98% rename from assets/js/39.3d7378a0.js rename to assets/js/39.942d570b.js index e28aa2ba..005ab76e 100644 --- a/assets/js/39.3d7378a0.js +++ b/assets/js/39.942d570b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{300:function(e,a,t){"use strict";t.r(a);var n=t(15),s=Object(n.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"enterprise-linux-8-and-fedora-server-40"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enterprise-linux-8-and-fedora-server-40"}},[e._v("#")]),e._v(" Enterprise Linux 8 and Fedora Server 40")]),e._v(" "),a("p",[e._v("This guide provides comprehensive instructions for installing Pterodactyl Wings v1.X on CentOS 8, Rocky Linux 8, AlmaLinux 8 and Fedora Server 40.")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#install-dependencies"}},[e._v("Install Dependencies")])]),a("li",[a("a",{attrs:{href:"#installing-wings"}},[e._v("Installing Wings")])])])]),a("p"),e._v(" "),a("h2",{attrs:{id:"install-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies"}},[e._v("#")]),e._v(" Install Dependencies")]),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("# Install required packages")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" dnf-utils device-mapper-persistent-data lvm2\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add Docker repository (Enterprise Linux 8)")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf config-manager --add-repo"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("https://download.docker.com/linux/centos/docker-ce.repo\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add Docker repository (Fedora Server 40)")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## Install Docker")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" docker-ce docker-ce-cli containerd.io\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## Enable Docker service")]),e._v("\nsystemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--now")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Configure firewall")]),e._v("\nfirewall-cmd --add-port "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("8080")]),e._v("/tcp "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v("\nfirewall-cmd --add-port "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),e._v("/tcp "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v("\nfirewall-cmd "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--zone")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("trusted --change-interface"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("pterodactyl0\nfirewall-cmd "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--zone")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("trusted --add-masquerade "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v("\nfirewall-cmd "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--reload")]),e._v("\n")])])]),a("h2",{attrs:{id:"installing-wings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[e._v("#")]),e._v(" Installing Wings")]),e._v(" "),a("p",[e._v("Great, now all of the dependencies and firewall rules have been dealt with. From here follow the "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html#enabling-swap"}},[e._v("official Wings installation documentation")]),e._v(".")],1),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),a("p",[e._v("If you have SELinux enforcement enabled and you are getting AVC denials from your containers, try relocating your Wings data directory from "),a("code",[e._v("/var/lib/pterodactyl")]),e._v(" to "),a("code",[e._v("/var/srv/containers/pterodactyl")]),e._v(". That is where the targeted policy expects Docker to read and write data from.")])])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{297:function(e,a,t){"use strict";t.r(a);var n=t(15),s=Object(n.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"enterprise-linux-8-and-fedora-server-40"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enterprise-linux-8-and-fedora-server-40"}},[e._v("#")]),e._v(" Enterprise Linux 8 and Fedora Server 40")]),e._v(" "),a("p",[e._v("This guide provides comprehensive instructions for installing Pterodactyl Wings v1.X on CentOS 8, Rocky Linux 8, AlmaLinux 8 and Fedora Server 40.")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#install-dependencies"}},[e._v("Install Dependencies")])]),a("li",[a("a",{attrs:{href:"#installing-wings"}},[e._v("Installing Wings")])])])]),a("p"),e._v(" "),a("h2",{attrs:{id:"install-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-dependencies"}},[e._v("#")]),e._v(" Install Dependencies")]),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("# Install required packages")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" dnf-utils device-mapper-persistent-data lvm2\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add Docker repository (Enterprise Linux 8)")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf config-manager --add-repo"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("https://download.docker.com/linux/centos/docker-ce.repo\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add Docker repository (Fedora Server 40)")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## Install Docker")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dnf "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" docker-ce docker-ce-cli containerd.io\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("## Enable Docker service")]),e._v("\nsystemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--now")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Configure firewall")]),e._v("\nfirewall-cmd --add-port "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("8080")]),e._v("/tcp "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v("\nfirewall-cmd --add-port "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),e._v("/tcp "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v("\nfirewall-cmd "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--zone")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("trusted --change-interface"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("pterodactyl0\nfirewall-cmd "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--zone")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("trusted --add-masquerade "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--permanent")]),e._v("\nfirewall-cmd "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--reload")]),e._v("\n")])])]),a("h2",{attrs:{id:"installing-wings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[e._v("#")]),e._v(" Installing Wings")]),e._v(" "),a("p",[e._v("Great, now all of the dependencies and firewall rules have been dealt with. From here follow the "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html#enabling-swap"}},[e._v("official Wings installation documentation")]),e._v(".")],1),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),a("p",[e._v("If you have SELinux enforcement enabled and you are getting AVC denials from your containers, try relocating your Wings data directory from "),a("code",[e._v("/var/lib/pterodactyl")]),e._v(" to "),a("code",[e._v("/var/srv/containers/pterodactyl")]),e._v(". That is where the targeted policy expects Docker to read and write data from.")])])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/40.d5244f41.js b/assets/js/40.8da7d440.js similarity index 90% rename from assets/js/40.d5244f41.js rename to assets/js/40.8da7d440.js index 3d6d1983..efd8b0dd 100644 --- a/assets/js/40.d5244f41.js +++ b/assets/js/40.8da7d440.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{297:function(t,n,a){"use strict";a.r(n);var i=a(15),s=Object(i.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"debian-11-12"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#debian-11-12"}},[t._v("#")]),t._v(" Debian 11 & 12")]),t._v(" "),n("h2",{attrs:{id:"install"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#install"}},[t._v("#")]),t._v(" Install")]),t._v(" "),n("p",[t._v("There is no additional configuration required for Wings on Debian 11 or 12. You can follow the "),n("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("official Wings install documentation")]),t._v(", which covers Docker installation for Debian.")],1)])}),[],!1,null,null,null);n.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{298:function(t,n,a){"use strict";a.r(n);var i=a(15),s=Object(i.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"debian-11-12"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#debian-11-12"}},[t._v("#")]),t._v(" Debian 11 & 12")]),t._v(" "),n("h2",{attrs:{id:"install"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#install"}},[t._v("#")]),t._v(" Install")]),t._v(" "),n("p",[t._v("There is no additional configuration required for Wings on Debian 11 or 12. You can follow the "),n("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("official Wings install documentation")]),t._v(", which covers Docker installation for Debian.")],1)])}),[],!1,null,null,null);n.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/41.368a213d.js b/assets/js/41.24a4fd9a.js similarity index 99% rename from assets/js/41.368a213d.js rename to assets/js/41.24a4fd9a.js index 94f6e11c..023a6934 100644 --- a/assets/js/41.368a213d.js +++ b/assets/js/41.24a4fd9a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{298:function(a,t,s){"use strict";s.r(t);var e=s(15),n=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"artisan-cli"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#artisan-cli"}},[a._v("#")]),a._v(" Artisan CLI")]),a._v(" "),t("p",[a._v("The Artisan CLI, command line interface, is part of the Laravel framework, which Pterodactyl is built on. The Artisan file is located in "),t("code",[a._v("/var/www/pterodactyl")]),a._v(" if you followed the official guide. This guide goes over some more Pterodactyl specific/related Artisan commands, which are all prefixed with the letter "),t("code",[a._v("p")]),a._v(" (e.g. "),t("code",[a._v("p:user:make")]),a._v("). If you'd like to view all commands, you can do so by running:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan list\n")])])]),t("p",[a._v("To get information regarding a specific command you can do so by running:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n")])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),t("p",[a._v("To simplify this documentation, in command usage you'll see things like the following:")]),a._v(" "),t("p",[t("code",[a._v("")]),a._v(" - Required argument")]),a._v(" "),t("p",[t("code",[a._v("[hello-world]")]),a._v(" - Optional argument")]),a._v(" "),t("p",[t("code",[a._v("{--hello-world}")]),a._v(" - Option")])]),a._v(" "),t("h2",{attrs:{id:"user-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#user-management"}},[a._v("#")]),a._v(" User Management")]),a._v(" "),t("p",[a._v("When running any of the following commands, you can either use the options or don't pass through anything and use the interactive prompt. You can also do both passing through options and using interactive prompts as well.")]),a._v(" "),t("h3",{attrs:{id:"create-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-user"}},[a._v("#")]),a._v(" Create User")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:user:make "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--email"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user@example.com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--username"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("myusername"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--name-first"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("My"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--name-last"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Name"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--password"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("supersecret"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--admin"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--no-password"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"delete-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#delete-user"}},[a._v("#")]),a._v(" Delete User")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:user:delete "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--user"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("username/email/UUID"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"disable-2fa"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-2fa"}},[a._v("#")]),a._v(" Disable 2FA")]),a._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[a._v("WARNING")]),a._v(" "),t("p",[a._v("Disabling 2-factor authentication should only be used as a last resort for user recovery. "),t("strong",[a._v("Please use this with caution.")])])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:user:disable2fa "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--email"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user@example.com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h2",{attrs:{id:"server-node-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#server-node-management"}},[a._v("#")]),a._v(" Server & Node Management")]),a._v(" "),t("h3",{attrs:{id:"create-location"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-location"}},[a._v("#")]),a._v(" Create Location")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:location:make "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--short"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("us1"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--long"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"A description of this location."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"delete-location"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#delete-location"}},[a._v("#")]),a._v(" Delete Location")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:location:delete "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--short"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("us1"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"server-bulk-power"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#server-bulk-power"}},[a._v("#")]),a._v(" Server Bulk Power")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:server:bulk-power "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("start, stop, kill, restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--servers"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1,2")]),a._v(",3"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--nodes"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1,2")]),a._v(",3"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h2",{attrs:{id:"panel-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#panel-management"}},[a._v("#")]),a._v(" Panel Management")]),a._v(" "),t("h3",{attrs:{id:"view-panel-info"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#view-panel-info"}},[a._v("#")]),a._v(" View Panel Info")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:info\n")])])]),t("p",[a._v("Displays a variety of panel information that can be used to check the configuration of things such as database and email.")]),a._v(" "),t("h3",{attrs:{id:"update-panel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-panel"}},[a._v("#")]),a._v(" Update Panel")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:upgrade "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--user"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("www-data"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--group"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("www-data"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--url"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("https://example.com/panel.tar.gz"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--release"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("latest"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--skip-download"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("Downloads a new archive for Pterodactyl and executes the normal upgrade commands.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{299:function(a,t,s){"use strict";s.r(t);var e=s(15),n=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"artisan-cli"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#artisan-cli"}},[a._v("#")]),a._v(" Artisan CLI")]),a._v(" "),t("p",[a._v("The Artisan CLI, command line interface, is part of the Laravel framework, which Pterodactyl is built on. The Artisan file is located in "),t("code",[a._v("/var/www/pterodactyl")]),a._v(" if you followed the official guide. This guide goes over some more Pterodactyl specific/related Artisan commands, which are all prefixed with the letter "),t("code",[a._v("p")]),a._v(" (e.g. "),t("code",[a._v("p:user:make")]),a._v("). If you'd like to view all commands, you can do so by running:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan list\n")])])]),t("p",[a._v("To get information regarding a specific command you can do so by running:")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("command"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n")])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),t("p",[a._v("To simplify this documentation, in command usage you'll see things like the following:")]),a._v(" "),t("p",[t("code",[a._v("")]),a._v(" - Required argument")]),a._v(" "),t("p",[t("code",[a._v("[hello-world]")]),a._v(" - Optional argument")]),a._v(" "),t("p",[t("code",[a._v("{--hello-world}")]),a._v(" - Option")])]),a._v(" "),t("h2",{attrs:{id:"user-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#user-management"}},[a._v("#")]),a._v(" User Management")]),a._v(" "),t("p",[a._v("When running any of the following commands, you can either use the options or don't pass through anything and use the interactive prompt. You can also do both passing through options and using interactive prompts as well.")]),a._v(" "),t("h3",{attrs:{id:"create-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-user"}},[a._v("#")]),a._v(" Create User")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:user:make "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--email"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user@example.com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--username"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("myusername"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--name-first"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("My"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--name-last"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Name"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--password"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("supersecret"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--admin"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--no-password"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"delete-user"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#delete-user"}},[a._v("#")]),a._v(" Delete User")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:user:delete "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--user"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("username/email/UUID"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"disable-2fa"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-2fa"}},[a._v("#")]),a._v(" Disable 2FA")]),a._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[a._v("WARNING")]),a._v(" "),t("p",[a._v("Disabling 2-factor authentication should only be used as a last resort for user recovery. "),t("strong",[a._v("Please use this with caution.")])])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:user:disable2fa "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--email"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("user@example.com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h2",{attrs:{id:"server-node-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#server-node-management"}},[a._v("#")]),a._v(" Server & Node Management")]),a._v(" "),t("h3",{attrs:{id:"create-location"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-location"}},[a._v("#")]),a._v(" Create Location")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:location:make "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--short"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("us1"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--long"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"A description of this location."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"delete-location"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#delete-location"}},[a._v("#")]),a._v(" Delete Location")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:location:delete "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--short"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("us1"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h3",{attrs:{id:"server-bulk-power"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#server-bulk-power"}},[a._v("#")]),a._v(" Server Bulk Power")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:server:bulk-power "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<")]),a._v("start, stop, kill, restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--servers"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1,2")]),a._v(",3"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--nodes"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1,2")]),a._v(",3"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h2",{attrs:{id:"panel-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#panel-management"}},[a._v("#")]),a._v(" Panel Management")]),a._v(" "),t("h3",{attrs:{id:"view-panel-info"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#view-panel-info"}},[a._v("#")]),a._v(" View Panel Info")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:info\n")])])]),t("p",[a._v("Displays a variety of panel information that can be used to check the configuration of things such as database and email.")]),a._v(" "),t("h3",{attrs:{id:"update-panel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-panel"}},[a._v("#")]),a._v(" Update Panel")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("php artisan p:upgrade "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--user"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("www-data"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--group"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("www-data"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--url"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("https://example.com/panel.tar.gz"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--release"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("latest"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("--skip-download"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("Downloads a new archive for Pterodactyl and executes the normal upgrade commands.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/42.45c68365.js b/assets/js/42.03a43dda.js similarity index 99% rename from assets/js/42.45c68365.js rename to assets/js/42.03a43dda.js index b420aec8..9ce92b91 100644 --- a/assets/js/42.45c68365.js +++ b/assets/js/42.03a43dda.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{299:function(t,e,a){"use strict";a.r(e);var s=a(15),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"additional-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),e("p",[t._v("This documentation is for "),e("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(" "),e("p",[t._v("You should be installing and using "),e("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#output-throttles"}},[t._v("Output Throttles")])]),e("li",[e("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")])]),e("li",[e("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")])]),e("li",[e("a",{attrs:{href:"#security-policies"}},[t._v("Security Policies")])]),e("li",[e("a",{attrs:{href:"#container-policy"}},[t._v("Container Policy")]),e("ul",[e("li",[e("a",{attrs:{href:"#default-security-opts-array"}},[t._v("Default Security Opts Array")])]),e("li",[e("a",{attrs:{href:"#default-capabilities-drop-array"}},[t._v("Default Capabilities Drop Array")])])])]),e("li",[e("a",{attrs:{href:"#enabling-cloudflare"}},[t._v("Enabling Cloudflare")])])])]),e("p"),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("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(" "),e("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 "),e("code",[t._v("core.json")]),t._v(" file for the Daemon. For example, something like "),e("code",[t._v("internals.throttle.enabled")]),t._v("\nwould be expanded to the JSON below.")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"internals"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"throttle"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"enabled"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"output-throttles"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-throttles"}},[t._v("#")]),t._v(" Output Throttles")]),t._v(" "),e("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(" "),e("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(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("enabled")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Determines if the throttle (and associated values below) should be used.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("kill_at_count")])]),t._v(" "),e("td",[t._v("5")]),t._v(" "),e("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(" "),e("tr",[e("td",[e("code",[t._v("decay")])]),t._v(" "),e("td",[t._v("10")]),t._v(" "),e("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(" "),e("tr",[e("td",[e("code",[t._v("bytes")])]),t._v(" "),e("td",[t._v("30720")]),t._v(" "),e("td",[t._v("⚠️ "),e("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(" "),e("tr",[e("td",[e("code",[t._v("lines")])]),t._v(" "),e("td",[t._v("1000")]),t._v(" "),e("td",[t._v("⚠️ "),e("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(" "),e("tr",[e("td",[e("code",[t._v("check_interval_ms")])]),t._v(" "),e("td",[t._v("100")]),t._v(" "),e("td",[t._v("The number of milliseconds between the throttle resetting the used bytes or line count.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("internals.throttle.X")]),t._v(" path. So, "),e("code",[t._v("enabled")]),t._v(" is actually "),e("code",[t._v("internals.throttle.enabled")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"custom-network-interfaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),e("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 "),e("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 "),e("code",[t._v("docker.network.name")]),t._v(" to be "),e("code",[t._v("host")]),t._v("\nrather than "),e("code",[t._v("pterodactyl_nw")]),t._v(" as shown below.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("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(" "),e("p",[t._v("Using the "),e("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(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),e("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(" "),e("p",[t._v("The following will stop the daemon, remove the network, and start the daemon again. Run at your own risk."),e("br"),t._v(" "),e("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])])]),t._v(" "),e("div",{staticClass:"language-json 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("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"docker"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"socket"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/var/run/docker.sock"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"autoupdate_images"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"network"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pterodactyl_nw"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interfaces"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"v4"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"subnet"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.0/16"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gateway"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interface"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),e("h2",{attrs:{id:"private-registries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("username")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("The username to use when connecting to the registry.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("password")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("The password associated with the account.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("images")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("An array of images that are associated with the private registry.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("auth")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("code",[t._v("email")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("code",[t._v("serveraddress")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("The address to the server the registry is located on.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("key")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("A pre-generated base64 encoded authentication string. If provided none of the above options are required.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("docker.registry.X")]),t._v(" path. So, "),e("code",[t._v("username")]),t._v(" is actually "),e("code",[t._v("docker.registry.username")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"security-policies"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#security-policies"}},[t._v("#")]),t._v(" Security Policies")]),t._v(" "),e("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(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("ipv6")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Set this to false to disable IPv6 networking on the pterodactyl0 interface.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("internal")])]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("Set this to true to prevent any external network access to all containers on the pterodactyl0 interface.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("enable_icc")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("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(" "),e("tr",[e("td",[e("code",[t._v("enable_ip_masquerade")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Set this to false to disable IP Masquerading on the pterodactyl0 interface.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("docker.policy.network.X")]),t._v(" path. So, "),e("code",[t._v("ipv6")]),t._v(" is actually "),e("code",[t._v("docker.policy.network.ipv6")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"container-policy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#container-policy"}},[t._v("#")]),t._v(" Container Policy")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("tmpfs")])]),t._v(" "),e("td",[e("code",[t._v("rw,exec,nosuid,size=50M")])]),t._v(" "),e("td",[t._v("These are the arguments used for mounting a "),e("code",[t._v("tmpfs")]),t._v(" directory into containers to allow certain programs to run.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_driver")])]),t._v(" "),e("td",[t._v("none")]),t._v(" "),e("td",[t._v("⚠️ This option was "),e("strong",[t._v("removed")]),t._v(" in "),e("code",[t._v("v0.6")]),t._v(" and is forcibly set to "),e("code",[t._v("json-file")]),t._v(". The log driver to use for containers. We default to "),e("code",[t._v("none")]),t._v(" to mitigate a potential DoS attack vector if a server were to spam log output.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_opts")])]),t._v(" "),e("td",[t._v("array")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_opts.max_size")])]),t._v(" "),e("td",[e("code",[t._v("5m")])]),t._v(" "),e("td",[t._v("The maximum size of the server output log file created by Docker.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_opts.max_files")])]),t._v(" "),e("td",[e("code",[t._v("1")])]),t._v(" "),e("td",[t._v("The maximum number of files that Docker will create with output from the server.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("readonly_root")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Determines if the root filesystem of the container should be readonly.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("securityopts")])]),t._v(" "),e("td",[t._v("array")]),t._v(" "),e("td",[t._v("An array of security options to apply to a container. The default array is provided below.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("cap_drop")])]),t._v(" "),e("td",[t._v("array")]),t._v(" "),e("td",[t._v("An array of linux capabilities to drop from the container (in addition to ones "),e("a",{attrs:{href:"https://docs.docker.com/engine/security/security/#linux-kernel-capabilities",target:"_blank",rel:"noopener noreferrer"}},[t._v("dropped by docker already"),e("OutboundLink")],1),t._v(". A listing of the default array is below.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("docker.policy.container.X")]),t._v(" path. So, "),e("code",[t._v("tmpfs")]),t._v(" is actually "),e("code",[t._v("docker.policy.container.tmpfs")]),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"default-security-opts-array"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#default-security-opts-array"}},[t._v("#")]),t._v(" Default Security Opts Array")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'no-new-privileges'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),e("h3",{attrs:{id:"default-capabilities-drop-array"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#default-capabilities-drop-array"}},[t._v("#")]),t._v(" Default Capabilities Drop Array")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("Starting with "),e("code",[t._v("v0.6")]),t._v(" of the Daemon, the following previously "),e("em",[t._v("dropped")]),t._v(" capabilities are available in containers: "),e("code",[t._v("chown")]),t._v(", "),e("code",[t._v("kill")]),t._v(", "),e("code",[t._v("setgid")]),t._v(", and "),e("code",[t._v("setuid")]),t._v(".")])]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'setpcap'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'mknod'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'audit_write'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_raw'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'dac_override'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fowner'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fsetid'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_bind_service'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'sys_chroot'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'setfcap'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),e("h2",{attrs:{id:"enabling-cloudflare"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare"}},[t._v("#")]),t._v(" Enabling Cloudflare")]),t._v(" "),e("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(" "),e("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([[42],{301:function(t,e,a){"use strict";a.r(e);var s=a(15),o=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"additional-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),e("p",[t._v("This documentation is for "),e("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(" "),e("p",[t._v("You should be installing and using "),e("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#output-throttles"}},[t._v("Output Throttles")])]),e("li",[e("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")])]),e("li",[e("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")])]),e("li",[e("a",{attrs:{href:"#security-policies"}},[t._v("Security Policies")])]),e("li",[e("a",{attrs:{href:"#container-policy"}},[t._v("Container Policy")]),e("ul",[e("li",[e("a",{attrs:{href:"#default-security-opts-array"}},[t._v("Default Security Opts Array")])]),e("li",[e("a",{attrs:{href:"#default-capabilities-drop-array"}},[t._v("Default Capabilities Drop Array")])])])]),e("li",[e("a",{attrs:{href:"#enabling-cloudflare"}},[t._v("Enabling Cloudflare")])])])]),e("p"),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("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(" "),e("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 "),e("code",[t._v("core.json")]),t._v(" file for the Daemon. For example, something like "),e("code",[t._v("internals.throttle.enabled")]),t._v("\nwould be expanded to the JSON below.")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"internals"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"throttle"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"enabled"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("h2",{attrs:{id:"output-throttles"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#output-throttles"}},[t._v("#")]),t._v(" Output Throttles")]),t._v(" "),e("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(" "),e("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(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("enabled")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Determines if the throttle (and associated values below) should be used.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("kill_at_count")])]),t._v(" "),e("td",[t._v("5")]),t._v(" "),e("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(" "),e("tr",[e("td",[e("code",[t._v("decay")])]),t._v(" "),e("td",[t._v("10")]),t._v(" "),e("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(" "),e("tr",[e("td",[e("code",[t._v("bytes")])]),t._v(" "),e("td",[t._v("30720")]),t._v(" "),e("td",[t._v("⚠️ "),e("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(" "),e("tr",[e("td",[e("code",[t._v("lines")])]),t._v(" "),e("td",[t._v("1000")]),t._v(" "),e("td",[t._v("⚠️ "),e("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(" "),e("tr",[e("td",[e("code",[t._v("check_interval_ms")])]),t._v(" "),e("td",[t._v("100")]),t._v(" "),e("td",[t._v("The number of milliseconds between the throttle resetting the used bytes or line count.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("internals.throttle.X")]),t._v(" path. So, "),e("code",[t._v("enabled")]),t._v(" is actually "),e("code",[t._v("internals.throttle.enabled")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"custom-network-interfaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),e("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 "),e("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 "),e("code",[t._v("docker.network.name")]),t._v(" to be "),e("code",[t._v("host")]),t._v("\nrather than "),e("code",[t._v("pterodactyl_nw")]),t._v(" as shown below.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("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(" "),e("p",[t._v("Using the "),e("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(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),e("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(" "),e("p",[t._v("The following will stop the daemon, remove the network, and start the daemon again. Run at your own risk."),e("br"),t._v(" "),e("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])])]),t._v(" "),e("div",{staticClass:"language-json 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("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"docker"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"socket"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/var/run/docker.sock"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"autoupdate_images"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"network"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pterodactyl_nw"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interfaces"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"v4"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"subnet"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.0/16"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"gateway"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token property"}},[t._v('"interface"')]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"172.18.0.1"')]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),e("h2",{attrs:{id:"private-registries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("username")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("The username to use when connecting to the registry.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("password")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("The password associated with the account.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("images")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("An array of images that are associated with the private registry.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("auth")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("code",[t._v("email")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("code",[t._v("serveraddress")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("The address to the server the registry is located on.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("key")])]),t._v(" "),e("td",[e("em",[t._v("none")])]),t._v(" "),e("td",[t._v("A pre-generated base64 encoded authentication string. If provided none of the above options are required.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("docker.registry.X")]),t._v(" path. So, "),e("code",[t._v("username")]),t._v(" is actually "),e("code",[t._v("docker.registry.username")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"security-policies"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#security-policies"}},[t._v("#")]),t._v(" Security Policies")]),t._v(" "),e("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(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("ipv6")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Set this to false to disable IPv6 networking on the pterodactyl0 interface.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("internal")])]),t._v(" "),e("td",[t._v("false")]),t._v(" "),e("td",[t._v("Set this to true to prevent any external network access to all containers on the pterodactyl0 interface.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("enable_icc")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("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(" "),e("tr",[e("td",[e("code",[t._v("enable_ip_masquerade")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Set this to false to disable IP Masquerading on the pterodactyl0 interface.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("docker.policy.network.X")]),t._v(" path. So, "),e("code",[t._v("ipv6")]),t._v(" is actually "),e("code",[t._v("docker.policy.network.ipv6")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"container-policy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#container-policy"}},[t._v("#")]),t._v(" Container Policy")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Path")]),t._v(" "),e("th",[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("tmpfs")])]),t._v(" "),e("td",[e("code",[t._v("rw,exec,nosuid,size=50M")])]),t._v(" "),e("td",[t._v("These are the arguments used for mounting a "),e("code",[t._v("tmpfs")]),t._v(" directory into containers to allow certain programs to run.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_driver")])]),t._v(" "),e("td",[t._v("none")]),t._v(" "),e("td",[t._v("⚠️ This option was "),e("strong",[t._v("removed")]),t._v(" in "),e("code",[t._v("v0.6")]),t._v(" and is forcibly set to "),e("code",[t._v("json-file")]),t._v(". The log driver to use for containers. We default to "),e("code",[t._v("none")]),t._v(" to mitigate a potential DoS attack vector if a server were to spam log output.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_opts")])]),t._v(" "),e("td",[t._v("array")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_opts.max_size")])]),t._v(" "),e("td",[e("code",[t._v("5m")])]),t._v(" "),e("td",[t._v("The maximum size of the server output log file created by Docker.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("log_opts.max_files")])]),t._v(" "),e("td",[e("code",[t._v("1")])]),t._v(" "),e("td",[t._v("The maximum number of files that Docker will create with output from the server.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("readonly_root")])]),t._v(" "),e("td",[t._v("true")]),t._v(" "),e("td",[t._v("Determines if the root filesystem of the container should be readonly.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("securityopts")])]),t._v(" "),e("td",[t._v("array")]),t._v(" "),e("td",[t._v("An array of security options to apply to a container. The default array is provided below.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("cap_drop")])]),t._v(" "),e("td",[t._v("array")]),t._v(" "),e("td",[t._v("An array of linux capabilities to drop from the container (in addition to ones "),e("a",{attrs:{href:"https://docs.docker.com/engine/security/security/#linux-kernel-capabilities",target:"_blank",rel:"noopener noreferrer"}},[t._v("dropped by docker already"),e("OutboundLink")],1),t._v(". A listing of the default array is below.")])])])]),t._v(" "),e("p",[t._v("Please note that all of the settings above are in the "),e("code",[t._v("docker.policy.container.X")]),t._v(" path. So, "),e("code",[t._v("tmpfs")]),t._v(" is actually "),e("code",[t._v("docker.policy.container.tmpfs")]),t._v(".")]),t._v(" "),e("h3",{attrs:{id:"default-security-opts-array"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#default-security-opts-array"}},[t._v("#")]),t._v(" Default Security Opts Array")]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'no-new-privileges'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),e("h3",{attrs:{id:"default-capabilities-drop-array"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#default-capabilities-drop-array"}},[t._v("#")]),t._v(" Default Capabilities Drop Array")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("Starting with "),e("code",[t._v("v0.6")]),t._v(" of the Daemon, the following previously "),e("em",[t._v("dropped")]),t._v(" capabilities are available in containers: "),e("code",[t._v("chown")]),t._v(", "),e("code",[t._v("kill")]),t._v(", "),e("code",[t._v("setgid")]),t._v(", and "),e("code",[t._v("setuid")]),t._v(".")])]),t._v(" "),e("div",{staticClass:"language-json extra-class"},[e("pre",{pre:!0,attrs:{class:"language-json"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n 'setpcap'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'mknod'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'audit_write'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_raw'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'dac_override'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fowner'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'fsetid'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'net_bind_service'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'sys_chroot'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n 'setfcap'"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),e("h2",{attrs:{id:"enabling-cloudflare"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare"}},[t._v("#")]),t._v(" Enabling Cloudflare")]),t._v(" "),e("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(" "),e("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/43.74132eec.js b/assets/js/43.9b0bb612.js similarity index 98% rename from assets/js/43.74132eec.js rename to assets/js/43.9b0bb612.js index d8d7bc79..1dc5e933 100644 --- a/assets/js/43.74132eec.js +++ b/assets/js/43.9b0bb612.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{301:function(e,t,a){"use strict";a.r(t);var s=a(15),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"docker-on-debian-8"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker-on-debian-8"}},[e._v("#")]),e._v(" Docker on Debian 8")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#install-docker"}},[e._v("Install Docker")])]),t("li",[t("a",{attrs:{href:"#update-grub-startup"}},[e._v("Update GRUB Startup")])]),t("li",[t("a",{attrs:{href:"#add-backports-repo"}},[e._v("Add Backports Repo")])]),t("li",[t("a",{attrs:{href:"#update-software-setup-docker"}},[e._v("Update Software & Setup Docker")])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("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(" "),t("h2",{attrs:{id:"install-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-docker"}},[e._v("#")]),e._v(" Install Docker")]),e._v(" "),t("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"),t("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"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Once you've done that, if you run "),t("code",[e._v("docker info")]),e._v(" you'll notice some missing features at the bottom, something\nlike the output below.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("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")])])]),t("h2",{attrs:{id:"update-grub-startup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-grub-startup"}},[e._v("#")]),e._v(" Update GRUB Startup")]),e._v(" "),t("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 "),t("code",[e._v("/etc/default/grub")]),e._v(" and adding the following arguments to "),t("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("swapaccount=1 cgroup_enable=memory\n")])])]),t("p",[e._v("The line should then look like the one below — assuming nothing else was in the quote to begin with.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1 cgroup_enable=memory"\n')])])]),t("p",[e._v("After doing that, run "),t("code",[e._v("sudo update-grub")]),e._v(" to update our grub configuration.")]),e._v(" "),t("h2",{attrs:{id:"add-backports-repo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-backports-repo"}},[e._v("#")]),e._v(" Add Backports Repo")]),e._v(" "),t("p",[e._v("We then need to enable the "),t("code",[e._v("jessie-backports")]),e._v(" apt repository to install a newer kernel. To do this, run the commands below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" deb http://http.debian.net/debian jessie-backports main "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),t("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 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n")])])]),t("p",[e._v("To find the most recent kernels, run "),t("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 "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" jessie-backports linux-image-4.9.0-0.bpo.3-amd64\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("h2",{attrs:{id:"update-software-setup-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-software-setup-docker"}},[e._v("#")]),e._v(" Update Software & Setup Docker")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" upgrade\n")])])]),t("p",[e._v("Once that is done, we need to make an adjustment to docker to use "),t("code",[e._v("overlay2")]),e._v(" rather than "),t("code",[e._v("aufs")]),e._v(" since "),t("code",[e._v("aufs")]),e._v(" is not\nsupported on this kernel currently. Run the command below to do so.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i")]),e._v(" "),t("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")])])]),t("p",[e._v("Finally, update "),t("code",[e._v("systemd")]),e._v(" and start docker using the following commands.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl daemon-reload\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("service")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" start\n")])])]),t("p",[e._v("Docker should now be running and reporting no errors if you run "),t("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([[43],{300:function(e,t,a){"use strict";a.r(t);var s=a(15),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"docker-on-debian-8"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker-on-debian-8"}},[e._v("#")]),e._v(" Docker on Debian 8")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#install-docker"}},[e._v("Install Docker")])]),t("li",[t("a",{attrs:{href:"#update-grub-startup"}},[e._v("Update GRUB Startup")])]),t("li",[t("a",{attrs:{href:"#add-backports-repo"}},[e._v("Add Backports Repo")])]),t("li",[t("a",{attrs:{href:"#update-software-setup-docker"}},[e._v("Update Software & Setup Docker")])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("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(" "),t("h2",{attrs:{id:"install-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-docker"}},[e._v("#")]),e._v(" Install Docker")]),e._v(" "),t("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"),t("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"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Once you've done that, if you run "),t("code",[e._v("docker info")]),e._v(" you'll notice some missing features at the bottom, something\nlike the output below.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("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")])])]),t("h2",{attrs:{id:"update-grub-startup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-grub-startup"}},[e._v("#")]),e._v(" Update GRUB Startup")]),e._v(" "),t("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 "),t("code",[e._v("/etc/default/grub")]),e._v(" and adding the following arguments to "),t("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("swapaccount=1 cgroup_enable=memory\n")])])]),t("p",[e._v("The line should then look like the one below — assuming nothing else was in the quote to begin with.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1 cgroup_enable=memory"\n')])])]),t("p",[e._v("After doing that, run "),t("code",[e._v("sudo update-grub")]),e._v(" to update our grub configuration.")]),e._v(" "),t("h2",{attrs:{id:"add-backports-repo"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#add-backports-repo"}},[e._v("#")]),e._v(" Add Backports Repo")]),e._v(" "),t("p",[e._v("We then need to enable the "),t("code",[e._v("jessie-backports")]),e._v(" apt repository to install a newer kernel. To do this, run the commands below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" deb http://http.debian.net/debian jessie-backports main "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),t("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 "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v(" /etc/apt/sources.list.d/jessie-backports.list\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n")])])]),t("p",[e._v("To find the most recent kernels, run "),t("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 "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" jessie-backports linux-image-4.9.0-0.bpo.3-amd64\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("h2",{attrs:{id:"update-software-setup-docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-software-setup-docker"}},[e._v("#")]),e._v(" Update Software & Setup Docker")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" upgrade\n")])])]),t("p",[e._v("Once that is done, we need to make an adjustment to docker to use "),t("code",[e._v("overlay2")]),e._v(" rather than "),t("code",[e._v("aufs")]),e._v(" since "),t("code",[e._v("aufs")]),e._v(" is not\nsupported on this kernel currently. Run the command below to do so.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i")]),e._v(" "),t("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")])])]),t("p",[e._v("Finally, update "),t("code",[e._v("systemd")]),e._v(" and start docker using the following commands.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl daemon-reload\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("service")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" start\n")])])]),t("p",[e._v("Docker should now be running and reporting no errors if you run "),t("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/44.ad6d5b4b.js b/assets/js/44.a7d15b9f.js similarity index 98% rename from assets/js/44.ad6d5b4b.js rename to assets/js/44.a7d15b9f.js index fb80010f..71f509da 100644 --- a/assets/js/44.ad6d5b4b.js +++ b/assets/js/44.a7d15b9f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{304:function(e,t,n){"use strict";n.r(t);var s=n(15),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"kernel-modifications"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kernel-modifications"}},[e._v("#")]),e._v(" Kernel Modifications")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#update-kernel"}},[e._v("Update Kernel")])]),t("li",[t("a",{attrs:{href:"#confirm-kernel"}},[e._v("Confirm Kernel")])]),t("li",[t("a",{attrs:{href:"#set-default-boot"}},[e._v("Set Default Boot")])]),t("li",[t("a",{attrs:{href:"#boot-from-hard-disk"}},[e._v("Boot from hard disk")])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("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(" "),t("h2",{attrs:{id:"update-kernel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-kernel"}},[e._v("#")]),e._v(" Update Kernel")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt-get")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" linux-image-generic linux-image-extra-virtual\n")])])]),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mv")]),e._v(" /etc/grub.d/06_OVHkernel /etc/grub.d/96_OVHkernel\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("h2",{attrs:{id:"confirm-kernel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#confirm-kernel"}},[e._v("#")]),e._v(" Confirm Kernel")]),e._v(" "),t("p",[e._v("Once you've rebooted, check that the latest kernel is installed using "),t("code",[e._v("uname -r")]),e._v(", it should output "),t("code",[e._v("4.4.0-131-generic")]),e._v("\n(in this case) or similar.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("If it still includes "),t("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(" "),t("h2",{attrs:{id:"set-default-boot"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-default-boot"}},[e._v("#")]),e._v(" Set Default Boot")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("grep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"menuentry \'"')]),e._v(" /boot/grub/grub.cfg\n")])])]),t("p",[e._v("After running that you should see output similar to the example below.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("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")])])]),t("p",[e._v("As you can see, we have "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("nano")]),e._v(" /etc/default/grub\n")])])]),t("p",[e._v("Find "),t("code",[e._v("GRUB_DEFAULT")]),e._v(", it is most likely set to "),t("code",[e._v("GRUB_DEFAULT=0")]),e._v(". We're going to modify it a bit to boot our new kernel.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-131-generic'\n")])])]),t("p",[e._v("The only part of the code above that you might need to change is the "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("h2",{attrs:{id:"boot-from-hard-disk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#boot-from-hard-disk"}},[e._v("#")]),e._v(" Boot from hard disk")]),e._v(" "),t("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([[44],{303:function(e,t,n){"use strict";n.r(t);var s=n(15),a=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"kernel-modifications"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kernel-modifications"}},[e._v("#")]),e._v(" Kernel Modifications")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#update-kernel"}},[e._v("Update Kernel")])]),t("li",[t("a",{attrs:{href:"#confirm-kernel"}},[e._v("Confirm Kernel")])]),t("li",[t("a",{attrs:{href:"#set-default-boot"}},[e._v("Set Default Boot")])]),t("li",[t("a",{attrs:{href:"#boot-from-hard-disk"}},[e._v("Boot from hard disk")])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("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(" "),t("h2",{attrs:{id:"update-kernel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-kernel"}},[e._v("#")]),e._v(" Update Kernel")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt-get")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" linux-image-generic linux-image-extra-virtual\n")])])]),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mv")]),e._v(" /etc/grub.d/06_OVHkernel /etc/grub.d/96_OVHkernel\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("h2",{attrs:{id:"confirm-kernel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#confirm-kernel"}},[e._v("#")]),e._v(" Confirm Kernel")]),e._v(" "),t("p",[e._v("Once you've rebooted, check that the latest kernel is installed using "),t("code",[e._v("uname -r")]),e._v(", it should output "),t("code",[e._v("4.4.0-131-generic")]),e._v("\n(in this case) or similar.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("If it still includes "),t("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(" "),t("h2",{attrs:{id:"set-default-boot"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-default-boot"}},[e._v("#")]),e._v(" Set Default Boot")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("grep")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"menuentry \'"')]),e._v(" /boot/grub/grub.cfg\n")])])]),t("p",[e._v("After running that you should see output similar to the example below.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("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")])])]),t("p",[e._v("As you can see, we have "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("nano")]),e._v(" /etc/default/grub\n")])])]),t("p",[e._v("Find "),t("code",[e._v("GRUB_DEFAULT")]),e._v(", it is most likely set to "),t("code",[e._v("GRUB_DEFAULT=0")]),e._v(". We're going to modify it a bit to boot our new kernel.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-131-generic'\n")])])]),t("p",[e._v("The only part of the code above that you might need to change is the "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("update-grub")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("reboot")]),e._v("\n")])])]),t("h2",{attrs:{id:"boot-from-hard-disk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#boot-from-hard-disk"}},[e._v("#")]),e._v(" Boot from hard disk")]),e._v(" "),t("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/45.da03d00f.js b/assets/js/45.ec543ccc.js similarity index 98% rename from assets/js/45.da03d00f.js rename to assets/js/45.ec543ccc.js index 240077c6..6e3cbc14 100644 --- a/assets/js/45.da03d00f.js +++ b/assets/js/45.ec543ccc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{303:function(e,t,s){"use strict";s.r(t);var a=s(15),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"standalone-sftp-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#standalone-sftp-server"}},[e._v("#")]),e._v(" Standalone SFTP Server")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),t("p",[e._v("This documentation is for "),t("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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("Standalone SFTP support was introduced in "),t("code",[e._v("Panel@v0.7.11")]),e._v(" and "),t("code",[e._v("Daemon@v0.6.8")]),e._v(" and will not work with prior versions.")])]),e._v(" "),t("p",[e._v("Pterodactyl now ships with the option to use a "),t("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server",target:"_blank",rel:"noopener noreferrer"}},[e._v("standalone SFTP server"),t("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(" "),t("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(" "),t("h2",{attrs:{id:"disable-daemon-s-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-daemon-s-server"}},[e._v("#")]),e._v(" Disable Daemon's Server")]),e._v(" "),t("p",[e._v("To disable the Daemon SFTP server, you only need to add "),t("code",[e._v("sftp.enabled=false")]),e._v(" to your Daemon's "),t("code",[e._v("core.json")]),e._v(" file.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"sftp"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"ip"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enabled"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("Once you've done that, restarting the Daemon will apply the change and not boot the built-in server.")]),e._v(" "),t("h2",{attrs:{id:"run-the-standalone-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-the-standalone-server"}},[e._v("#")]),e._v(" Run the Standalone Server")]),e._v(" "),t("p",[e._v("To download the standalone server, execute the command below in your Daemon's base directory (generally "),t("code",[e._v("/srv/daemon")]),e._v(").")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Lo")]),e._v(" sftp-server https://github.com/pterodactyl/sftp-server/releases/download/v1.0.5/sftp-server\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" +x sftp-server\n")])])]),t("p",[e._v("Excellent, now you've got the server binary. Because we've written this server using "),t("a",{attrs:{href:"https://golang.org",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("go")]),t("OutboundLink")],1),e._v(" there\nare no additional dependencies you need to install.")]),e._v(" "),t("h3",{attrs:{id:"start-the-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#start-the-server"}},[e._v("#")]),e._v(" Start the Server")]),e._v(" "),t("p",[e._v("Finally, start the SFTP server so that you can then use it to access your files.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("./sftp-server\n")])])]),t("p",[e._v("By default, this will start the SFTP server on the old port of "),t("code",[e._v("2022")]),e._v(". If you want to use a different port it can be\nspecified by passing the "),t("code",[e._v("--port")]),e._v(" flag. For more advanced usage, please refer to the "),t("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server/tree/release/v1.0.4#running",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub README"),t("OutboundLink")],1),e._v("\nwhich includes all of the flags and their default values.")]),e._v(" "),t("h2",{attrs:{id:"daemonize-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-server"}},[e._v("#")]),e._v(" Daemonize Server")]),e._v(" "),t("p",[e._v("Chances are you'll want to daemonize the SFTP server using something like "),t("code",[e._v("systemd")]),e._v(" so that it will run in the\nbackground. Place the contents below in a file called "),t("code",[e._v("pterosftp.service")]),e._v(" in the "),t("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("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")])])]),t("p",[e._v("Then, run the command below to enable it in systemd and start the SFTP server.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--now")]),e._v(" pterosftp\n")])])]),t("h3",{attrs:{id:"customizing-startup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#customizing-startup"}},[e._v("#")]),e._v(" Customizing Startup")]),e._v(" "),t("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 "),t("code",[e._v("ExecStart")]),e._v(" line. Something like "),t("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([[45],{305:function(e,t,s){"use strict";s.r(t);var a=s(15),r=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"standalone-sftp-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#standalone-sftp-server"}},[e._v("#")]),e._v(" Standalone SFTP Server")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),t("p",[e._v("This documentation is for "),t("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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("Standalone SFTP support was introduced in "),t("code",[e._v("Panel@v0.7.11")]),e._v(" and "),t("code",[e._v("Daemon@v0.6.8")]),e._v(" and will not work with prior versions.")])]),e._v(" "),t("p",[e._v("Pterodactyl now ships with the option to use a "),t("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server",target:"_blank",rel:"noopener noreferrer"}},[e._v("standalone SFTP server"),t("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(" "),t("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(" "),t("h2",{attrs:{id:"disable-daemon-s-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-daemon-s-server"}},[e._v("#")]),e._v(" Disable Daemon's Server")]),e._v(" "),t("p",[e._v("To disable the Daemon SFTP server, you only need to add "),t("code",[e._v("sftp.enabled=false")]),e._v(" to your Daemon's "),t("code",[e._v("core.json")]),e._v(" file.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"sftp"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n ...\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"ip"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enabled"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n ...\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("Once you've done that, restarting the Daemon will apply the change and not boot the built-in server.")]),e._v(" "),t("h2",{attrs:{id:"run-the-standalone-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#run-the-standalone-server"}},[e._v("#")]),e._v(" Run the Standalone Server")]),e._v(" "),t("p",[e._v("To download the standalone server, execute the command below in your Daemon's base directory (generally "),t("code",[e._v("/srv/daemon")]),e._v(").")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-Lo")]),e._v(" sftp-server https://github.com/pterodactyl/sftp-server/releases/download/v1.0.5/sftp-server\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" +x sftp-server\n")])])]),t("p",[e._v("Excellent, now you've got the server binary. Because we've written this server using "),t("a",{attrs:{href:"https://golang.org",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("go")]),t("OutboundLink")],1),e._v(" there\nare no additional dependencies you need to install.")]),e._v(" "),t("h3",{attrs:{id:"start-the-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#start-the-server"}},[e._v("#")]),e._v(" Start the Server")]),e._v(" "),t("p",[e._v("Finally, start the SFTP server so that you can then use it to access your files.")]),e._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[e._v("./sftp-server\n")])])]),t("p",[e._v("By default, this will start the SFTP server on the old port of "),t("code",[e._v("2022")]),e._v(". If you want to use a different port it can be\nspecified by passing the "),t("code",[e._v("--port")]),e._v(" flag. For more advanced usage, please refer to the "),t("a",{attrs:{href:"https://github.com/pterodactyl/sftp-server/tree/release/v1.0.4#running",target:"_blank",rel:"noopener noreferrer"}},[e._v("GitHub README"),t("OutboundLink")],1),e._v("\nwhich includes all of the flags and their default values.")]),e._v(" "),t("h2",{attrs:{id:"daemonize-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-server"}},[e._v("#")]),e._v(" Daemonize Server")]),e._v(" "),t("p",[e._v("Chances are you'll want to daemonize the SFTP server using something like "),t("code",[e._v("systemd")]),e._v(" so that it will run in the\nbackground. Place the contents below in a file called "),t("code",[e._v("pterosftp.service")]),e._v(" in the "),t("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("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")])])]),t("p",[e._v("Then, run the command below to enable it in systemd and start the SFTP server.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--now")]),e._v(" pterosftp\n")])])]),t("h3",{attrs:{id:"customizing-startup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#customizing-startup"}},[e._v("#")]),e._v(" Customizing Startup")]),e._v(" "),t("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 "),t("code",[e._v("ExecStart")]),e._v(" line. Something like "),t("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/46.b6984e9b.js b/assets/js/46.c1ed9730.js similarity index 99% rename from assets/js/46.b6984e9b.js rename to assets/js/46.c1ed9730.js index d894db80..17970089 100644 --- a/assets/js/46.b6984e9b.js +++ b/assets/js/46.c1ed9730.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{305:function(e,t,a){"use strict";a.r(t);var n=a(15),o=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading-0-4-x-to-0-5-x"}},[t("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(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),t("p",[e._v("This documentation is for "),t("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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#docker-adjustments"}},[e._v("Docker Adjustments")])]),t("li",[t("a",{attrs:{href:"#download-files"}},[e._v("Download Files")])]),t("li",[t("a",{attrs:{href:"#sftp-cleanup"}},[e._v("SFTP Cleanup")])]),t("li",[t("a",{attrs:{href:"#file-migration"}},[e._v("File Migration")]),t("ul",[t("li",[t("a",{attrs:{href:"#rebuild-containers"}},[e._v("Rebuild Containers")])])])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),t("p",[e._v("This upgrade process will require that "),t("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(" "),t("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(" "),t("h2",{attrs:{id:"docker-adjustments"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker-adjustments"}},[e._v("#")]),e._v(" Docker Adjustments")]),e._v(" "),t("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(" "),t("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(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"download-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),t("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 "),t("code",[e._v("/srv/daemon")]),e._v(". Then, download and unpack the archive using the\ncommand below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),t("p",[e._v("Then, update the core dependencies for the Daemon with the following command.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" update "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--only")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production\n")])])]),t("h2",{attrs:{id:"sftp-cleanup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sftp-cleanup"}},[e._v("#")]),e._v(" SFTP Cleanup")]),e._v(" "),t("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(" "),t("p",[e._v("To do so, simply run the following commands, changing "),t("code",[e._v("2022")]),e._v(" if you are using a different port.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" rmi "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" quay.io/pterodactyl/scrappy\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("kill")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("lsof")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i:2022")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n")])])]),t("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 "),t("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 "),t("code",[e._v("CTRL+C")]),e._v(".")]),e._v(" "),t("p",[e._v("If for whatever reason you need your user to be named something other than "),t("code",[e._v("pterodactyl")]),e._v(" you can change that in the\n"),t("code",[e._v("core.json")]),e._v(" before booting the Daemon by setting the "),t("code",[e._v("docker.container.username")]),e._v(" key. 99.9% of users will not need\nto change the username.")]),e._v(" "),t("h2",{attrs:{id:"file-migration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#file-migration"}},[e._v("#")]),e._v(" File Migration")]),e._v(" "),t("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(" "),t("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(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run migrate\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" system prune\n")])])]),t("h3",{attrs:{id:"rebuild-containers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rebuild-containers"}},[e._v("#")]),e._v(" Rebuild Containers")]),e._v(" "),t("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 ("),t("code",[e._v("sudo npm start")]),e._v("). You'll then want to run the\nfollowing command in the Panel directory, "),t("strong",[e._v("not the Daemon directory")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan p:server:rebuild "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--node")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])]),t("p",[e._v("Replace "),t("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 "),t("code",[e._v("--node")]),e._v(" flag.")]),e._v(" "),t("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: "),t("code",[e._v("sudo systemctl start wings")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Thanks!")]),e._v(" "),t("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=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{304:function(e,t,a){"use strict";a.r(t);var n=a(15),o=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading-0-4-x-to-0-5-x"}},[t("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(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),t("p",[e._v("This documentation is for "),t("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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#docker-adjustments"}},[e._v("Docker Adjustments")])]),t("li",[t("a",{attrs:{href:"#download-files"}},[e._v("Download Files")])]),t("li",[t("a",{attrs:{href:"#sftp-cleanup"}},[e._v("SFTP Cleanup")])]),t("li",[t("a",{attrs:{href:"#file-migration"}},[e._v("File Migration")]),t("ul",[t("li",[t("a",{attrs:{href:"#rebuild-containers"}},[e._v("Rebuild Containers")])])])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),t("p",[e._v("This upgrade process will require that "),t("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(" "),t("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(" "),t("h2",{attrs:{id:"docker-adjustments"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker-adjustments"}},[e._v("#")]),e._v(" Docker Adjustments")]),e._v(" "),t("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(" "),t("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(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),t("OutboundLink")],1)])]),e._v(" "),t("h2",{attrs:{id:"download-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),t("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 "),t("code",[e._v("/srv/daemon")]),e._v(". Then, download and unpack the archive using the\ncommand below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),t("p",[e._v("Then, update the core dependencies for the Daemon with the following command.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" update "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--only")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production\n")])])]),t("h2",{attrs:{id:"sftp-cleanup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sftp-cleanup"}},[e._v("#")]),e._v(" SFTP Cleanup")]),e._v(" "),t("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(" "),t("p",[e._v("To do so, simply run the following commands, changing "),t("code",[e._v("2022")]),e._v(" if you are using a different port.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" rmi "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-f")]),e._v(" quay.io/pterodactyl/scrappy\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("kill")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[t("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("lsof")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i:2022")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-t")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v("\n")])])]),t("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 "),t("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 "),t("code",[e._v("CTRL+C")]),e._v(".")]),e._v(" "),t("p",[e._v("If for whatever reason you need your user to be named something other than "),t("code",[e._v("pterodactyl")]),e._v(" you can change that in the\n"),t("code",[e._v("core.json")]),e._v(" before booting the Daemon by setting the "),t("code",[e._v("docker.container.username")]),e._v(" key. 99.9% of users will not need\nto change the username.")]),e._v(" "),t("h2",{attrs:{id:"file-migration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#file-migration"}},[e._v("#")]),e._v(" File Migration")]),e._v(" "),t("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(" "),t("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(" "),t("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(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run migrate\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("docker")]),e._v(" system prune\n")])])]),t("h3",{attrs:{id:"rebuild-containers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rebuild-containers"}},[e._v("#")]),e._v(" Rebuild Containers")]),e._v(" "),t("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 ("),t("code",[e._v("sudo npm start")]),e._v("). You'll then want to run the\nfollowing command in the Panel directory, "),t("strong",[e._v("not the Daemon directory")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan p:server:rebuild "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--node")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])]),t("p",[e._v("Replace "),t("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 "),t("code",[e._v("--node")]),e._v(" flag.")]),e._v(" "),t("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: "),t("code",[e._v("sudo systemctl start wings")]),e._v(".")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Thanks!")]),e._v(" "),t("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=o.exports}}]); \ No newline at end of file diff --git a/assets/js/48.07ebc20a.js b/assets/js/48.c19ab66e.js similarity index 98% rename from assets/js/48.07ebc20a.js rename to assets/js/48.c19ab66e.js index 236d6421..61a449e4 100644 --- a/assets/js/48.07ebc20a.js +++ b/assets/js/48.c19ab66e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{308:function(e,t,a){"use strict";a.r(t);var s=a(15),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading-0-5-x-to-0-6-x"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-5-x-to-0-6-x"}},[e._v("#")]),e._v(" Upgrading 0.5.X to 0.6.X")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),t("p",[e._v("This documentation is for "),t("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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#breaking-changes"}},[e._v("Breaking Changes")])]),t("li",[t("a",{attrs:{href:"#download-files"}},[e._v("Download Files")]),t("ul",[t("li",[t("a",{attrs:{href:"#start-the-daemon"}},[e._v("Start the Daemon")])])])]),t("li",[t("a",{attrs:{href:"#rebuild-containers"}},[e._v("Rebuild Containers")])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Server Restart Required")]),e._v(" "),t("p",[e._v("Your servers will need to be restarted after upgrading the daemon in order to see the expected log output in the Panel.")])]),e._v(" "),t("h2",{attrs:{id:"breaking-changes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes"}},[e._v("#")]),e._v(" Breaking Changes")]),e._v(" "),t("p",[e._v("This release introduces a few breaking changes to how the Daemon operates, but maintains compatibility with "),t("code",[e._v("v0.7.X")]),e._v(" of\nthe Panel, so you don't need to worry about updating the Panel.")]),e._v(" "),t("p",[e._v("Of notable change in this release is that we've switched from using custom logging functionality to using Docker logging\nfunctionality. This allows us to better output events that happen before we can attach to the container, centralizes logic,\nand allows Docker to manage the logs (which it does very well). Now, when your server refuses to boot, instead of seeing\nan unhelpful \"Server has crashed\" message with nothing before it, you'll see "),t("em",[e._v("everything")]),e._v(" that happened in the container\nleading up to that point, assuming things were output.")]),e._v(" "),t("h2",{attrs:{id:"download-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),t("p",[e._v("To upgrade from v0.5.X first switch the directory where you installed your Daemon. If you followed the installation\nguide your Daemon is most likely located in "),t("code",[e._v("/srv/daemon")]),e._v(". Then, download and unpack the archive using the\ncommand below.")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),t("p",[e._v("Stop your Daemon process before continuing in order to avoid any issues and ensure everything updates as expected.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl stop wings\n")])])])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),t("p",[e._v("Then, update the core dependencies for the Daemon with the following command.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" update "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--only")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production\n")])])]),t("h3",{attrs:{id:"start-the-daemon"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#start-the-daemon"}},[e._v("#")]),e._v(" Start the Daemon")]),e._v(" "),t("p",[e._v("Finally, start your daemon up, most likely with the command below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl start wings\n")])])]),t("h2",{attrs:{id:"rebuild-containers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rebuild-containers"}},[e._v("#")]),e._v(" Rebuild Containers")]),e._v(" "),t("p",[e._v("Because of some changes we made behind the scenes when it comes to displaying server output you'll need to rebuild and\nrestart all of your servers. The rebuild step is required, the restart step is optional, but highly recommended otherwise\nyou will not be able to see any console output.")]),e._v(" "),t("p",[e._v("Run the following commands "),t("em",[e._v("from the Panel server")]),e._v(" in order to perform a mass rebuild and restart. Replace "),t("code",[e._v("###")]),e._v(" with the\nID of the node you just upgraded, or remove the "),t("code",[e._v("--node")]),e._v(" flag entirely to rebuild on all nodes.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan p:server:rebuild "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--node")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])]),t("p",[e._v("Then, restart all of the servers using the following command, or by manually restarting them one at a time in the Panel.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan p:server:bulk-power restart "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--nodes")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{307:function(e,t,a){"use strict";a.r(t);var s=a(15),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading-0-5-x-to-0-6-x"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-5-x-to-0-6-x"}},[e._v("#")]),e._v(" Upgrading 0.5.X to 0.6.X")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Software is Abandoned")]),e._v(" "),t("p",[e._v("This documentation is for "),t("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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[e._v("Wings")]),e._v(" in production environments with\n"),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(".")],1)]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#breaking-changes"}},[e._v("Breaking Changes")])]),t("li",[t("a",{attrs:{href:"#download-files"}},[e._v("Download Files")]),t("ul",[t("li",[t("a",{attrs:{href:"#start-the-daemon"}},[e._v("Start the Daemon")])])])]),t("li",[t("a",{attrs:{href:"#rebuild-containers"}},[e._v("Rebuild Containers")])])])]),t("p"),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Server Restart Required")]),e._v(" "),t("p",[e._v("Your servers will need to be restarted after upgrading the daemon in order to see the expected log output in the Panel.")])]),e._v(" "),t("h2",{attrs:{id:"breaking-changes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes"}},[e._v("#")]),e._v(" Breaking Changes")]),e._v(" "),t("p",[e._v("This release introduces a few breaking changes to how the Daemon operates, but maintains compatibility with "),t("code",[e._v("v0.7.X")]),e._v(" of\nthe Panel, so you don't need to worry about updating the Panel.")]),e._v(" "),t("p",[e._v("Of notable change in this release is that we've switched from using custom logging functionality to using Docker logging\nfunctionality. This allows us to better output events that happen before we can attach to the container, centralizes logic,\nand allows Docker to manage the logs (which it does very well). Now, when your server refuses to boot, instead of seeing\nan unhelpful \"Server has crashed\" message with nothing before it, you'll see "),t("em",[e._v("everything")]),e._v(" that happened in the container\nleading up to that point, assuming things were output.")]),e._v(" "),t("h2",{attrs:{id:"download-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),t("p",[e._v("To upgrade from v0.5.X first switch the directory where you installed your Daemon. If you followed the installation\nguide your Daemon is most likely located in "),t("code",[e._v("/srv/daemon")]),e._v(". Then, download and unpack the archive using the\ncommand below.")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),t("p",[e._v("Stop your Daemon process before continuing in order to avoid any issues and ensure everything updates as expected.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl stop wings\n")])])])]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" --strip-components"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("1")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),t("p",[e._v("Then, update the core dependencies for the Daemon with the following command.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" update "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--only")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("production\n")])])]),t("h3",{attrs:{id:"start-the-daemon"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#start-the-daemon"}},[e._v("#")]),e._v(" Start the Daemon")]),e._v(" "),t("p",[e._v("Finally, start your daemon up, most likely with the command below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl start wings\n")])])]),t("h2",{attrs:{id:"rebuild-containers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rebuild-containers"}},[e._v("#")]),e._v(" Rebuild Containers")]),e._v(" "),t("p",[e._v("Because of some changes we made behind the scenes when it comes to displaying server output you'll need to rebuild and\nrestart all of your servers. The rebuild step is required, the restart step is optional, but highly recommended otherwise\nyou will not be able to see any console output.")]),e._v(" "),t("p",[e._v("Run the following commands "),t("em",[e._v("from the Panel server")]),e._v(" in order to perform a mass rebuild and restart. Replace "),t("code",[e._v("###")]),e._v(" with the\nID of the node you just upgraded, or remove the "),t("code",[e._v("--node")]),e._v(" flag entirely to rebuild on all nodes.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan p:server:rebuild "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--node")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])]),t("p",[e._v("Then, restart all of the servers using the following command, or by manually restarting them one at a time in the Panel.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan p:server:bulk-power restart "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--nodes")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("###")]),e._v("\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/49.342049a1.js b/assets/js/49.f62e3b58.js similarity index 97% rename from assets/js/49.342049a1.js rename to assets/js/49.f62e3b58.js index 3cce5e03..9bea321f 100644 --- a/assets/js/49.342049a1.js +++ b/assets/js/49.f62e3b58.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{307:function(t,e,s){"use strict";s.r(e);var a=s(15),o=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"upgrading-0-6-series"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-6-series"}},[t._v("#")]),t._v(" Upgrading 0.6 Series")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),e("p",[t._v("This documentation is for "),e("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(" "),e("p",[t._v("You should be installing and using "),e("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Minor Versions Only")]),t._v(" "),e("p",[e("strong",[t._v("DO NOT")]),t._v(" use this guide to upgrade from "),e("code",[t._v("0.5.X")]),t._v(" to "),e("code",[t._v("0.6.X")]),t._v(", it will not work and you will encounter errors afterwards. Please check the "),e("RouterLink",{attrs:{to:"/daemon/upgrade/0.5_to_0.6.html"}},[t._v("0.5 to 0.6")]),t._v(" upgrade documentation to perform that update.")],1)]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("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(" "),e("h2",{attrs:{id:"download-newest-release"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#download-newest-release"}},[t._v("#")]),t._v(" Download Newest Release")]),t._v(" "),e("p",[t._v("First, ensure you're in the Daemon directory, "),e("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(" "),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(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("tar")]),t._v(" --strip-components"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-xzv")]),t._v("\n")])])]),e("h2",{attrs:{id:"update-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#update-components"}},[t._v("#")]),t._v(" Update Components")]),t._v(" "),e("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(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Nodejs 10 Required")]),t._v(" "),e("p",[t._v("Version "),e("code",[t._v("0.6.13")]),t._v(" requires Nodejs v10 or higher in order to compile the "),e("code",[t._v("mmmagic")]),t._v(" dependency. Please ensure\nyou are running at least version 10. You can run "),e("code",[t._v("node -v")]),t._v(" to check, upgrade if it is "),e("code",[t._v("v6")]),t._v(" or "),e("code",[t._v("v8")]),t._v(".")])]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Audit Results")]),t._v(" "),e("p",[t._v('You may see output along the lines of "found 14 vulnerabilities (6 low, 3 moderate, 5 high) in 927 scanned packages".\nYou can safely ignore this output. Do not run the audit fix command, you '),e("em",[t._v("will")]),t._v(" break your Daemon.")])]),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("npm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--only")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("production --no-audit --unsafe-perm\nsystemctl restart wings\n")])])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{308:function(t,e,s){"use strict";s.r(e);var a=s(15),o=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"upgrading-0-6-series"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-6-series"}},[t._v("#")]),t._v(" Upgrading 0.6 Series")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),e("p",[t._v("This documentation is for "),e("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(" "),e("p",[t._v("You should be installing and using "),e("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Minor Versions Only")]),t._v(" "),e("p",[e("strong",[t._v("DO NOT")]),t._v(" use this guide to upgrade from "),e("code",[t._v("0.5.X")]),t._v(" to "),e("code",[t._v("0.6.X")]),t._v(", it will not work and you will encounter errors afterwards. Please check the "),e("RouterLink",{attrs:{to:"/daemon/upgrade/0.5_to_0.6.html"}},[t._v("0.5 to 0.6")]),t._v(" upgrade documentation to perform that update.")],1)]),t._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),e("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(" "),e("h2",{attrs:{id:"download-newest-release"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#download-newest-release"}},[t._v("#")]),t._v(" Download Newest Release")]),t._v(" "),e("p",[t._v("First, ensure you're in the Daemon directory, "),e("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(" "),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(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("tar")]),t._v(" --strip-components"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-xzv")]),t._v("\n")])])]),e("h2",{attrs:{id:"update-components"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#update-components"}},[t._v("#")]),t._v(" Update Components")]),t._v(" "),e("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(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Nodejs 10 Required")]),t._v(" "),e("p",[t._v("Version "),e("code",[t._v("0.6.13")]),t._v(" requires Nodejs v10 or higher in order to compile the "),e("code",[t._v("mmmagic")]),t._v(" dependency. Please ensure\nyou are running at least version 10. You can run "),e("code",[t._v("node -v")]),t._v(" to check, upgrade if it is "),e("code",[t._v("v6")]),t._v(" or "),e("code",[t._v("v8")]),t._v(".")])]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("Audit Results")]),t._v(" "),e("p",[t._v('You may see output along the lines of "found 14 vulnerabilities (6 low, 3 moderate, 5 high) in 927 scanned packages".\nYou can safely ignore this output. Do not run the audit fix command, you '),e("em",[t._v("will")]),t._v(" break your Daemon.")])]),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("npm")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--only")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("production --no-audit --unsafe-perm\nsystemctl restart wings\n")])])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/50.f5795e12.js b/assets/js/50.8b3d6cae.js similarity index 96% rename from assets/js/50.f5795e12.js rename to assets/js/50.8b3d6cae.js index 08a201c6..c68db9b7 100644 --- a/assets/js/50.f5795e12.js +++ b/assets/js/50.8b3d6cae.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{310:function(t,e,i){"use strict";i.r(e);var s=i(15),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"upgrading"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[t._v("#")]),t._v(" Upgrading")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),e("p",[t._v("This documentation is for "),e("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(" "),e("p",[t._v("You should be installing and using "),e("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),e("h2",{attrs:{id:"version-specific-guides"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#version-specific-guides"}},[t._v("#")]),t._v(" Version Specific Guides")]),t._v(" "),e("ul",[e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.4_to_0.5.html"}},[t._v("0.4.X to 0.5.X")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.5.html"}},[t._v("0.5.X series")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.5_to_0.6.html"}},[t._v("0.5.X to 0.6.X")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.6.html"}},[t._v("0.6.X series")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/wings/1.0/migrating.html"}},[t._v("0.6.X to 1.X.X")]),t._v(" "),e("Badge",{attrs:{text:"current",vertical:"middle"}})],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/wings/1.0/upgrading.html"}},[t._v("1.X.X series")]),t._v(" "),e("Badge",{attrs:{text:"current",vertical:"middle"}})],1)])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{312:function(t,e,i){"use strict";i.r(e);var s=i(15),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"upgrading"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[t._v("#")]),t._v(" Upgrading")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("This Software is Abandoned")]),t._v(" "),e("p",[t._v("This documentation is for "),e("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(" "),e("p",[t._v("You should be installing and using "),e("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("Wings")]),t._v(" in production environments with\n"),e("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("Pterodactyl Panel 1.0")]),t._v(".")],1)]),t._v(" "),e("h2",{attrs:{id:"version-specific-guides"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#version-specific-guides"}},[t._v("#")]),t._v(" Version Specific Guides")]),t._v(" "),e("ul",[e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.4_to_0.5.html"}},[t._v("0.4.X to 0.5.X")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.5.html"}},[t._v("0.5.X series")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.5_to_0.6.html"}},[t._v("0.5.X to 0.6.X")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/daemon/0.6/upgrade/0.6.html"}},[t._v("0.6.X series")])],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/wings/1.0/migrating.html"}},[t._v("0.6.X to 1.X.X")]),t._v(" "),e("Badge",{attrs:{text:"current",vertical:"middle"}})],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/wings/1.0/upgrading.html"}},[t._v("1.X.X series")]),t._v(" "),e("Badge",{attrs:{text:"current",vertical:"middle"}})],1)])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/51.f11b077a.js b/assets/js/51.e078e2e8.js similarity index 98% rename from assets/js/51.f11b077a.js rename to assets/js/51.e078e2e8.js index e1fb5ad4..d67a1d17 100644 --- a/assets/js/51.f11b077a.js +++ b/assets/js/51.e078e2e8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{311:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading-php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-php"}},[e._v("#")]),e._v(" Upgrading PHP")]),e._v(" "),t("p",[e._v("This documentation includes instructions for upgrading your system to the latest version of PHP. Please reference the\ntable below to check what version you need for your version of Pterodactyl.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Panel Version")]),e._v(" "),t("th",[e._v("PHP Version")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("1.0.0 - 1.2.0")]),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.3.0+")]),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.8.0+")]),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.11.0 - 1.11.3")]),e._v(" "),t("td",[e._v("8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.11.4+")]),e._v(" "),t("td",[e._v("8.1, 8.2, 8.3")])]),e._v(" "),t("tr",[t("td",[e._v("1.11.10+")]),e._v(" "),t("td",[e._v("8.2, 8.3")])])])]),e._v(" "),t("h2",{attrs:{id:"install-php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-php"}},[e._v("#")]),e._v(" Install PHP")]),e._v(" "),t("p",[e._v("In order to install PHP 8.3, you will need to run the following command. Please keep in mind different operating systems\nmay have slightly different requirements for how this command is formatted.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add additional repository for PHP")]),e._v("\nadd-apt-repository "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" ppa:ondrej/php\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" update\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" php8.3 php8.3-"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h2",{attrs:{id:"update-composer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-composer"}},[e._v("#")]),e._v(" Update Composer")]),e._v(" "),t("p",[e._v("As of "),t("code",[e._v("Panel@1.3.0")]),e._v(" we require "),t("code",[e._v("composer")]),e._v(" v2. To update composer you will need to run the following command which will\nperform the composer self-update process and move you over to version 2.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("composer")]),e._v(" self-update "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--2")]),e._v("\n")])])]),t("h2",{attrs:{id:"webserver-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#webserver-configuration"}},[e._v("#")]),e._v(" Webserver Configuration")]),e._v(" "),t("tabs",[t("tab",{attrs:{name:"NGINX"}},[t("p",[e._v("After upgrading to PHP 8.3, you will most likely need to update your NGINX configuration. Your configuration file\nis most likely called "),t("code",[e._v("pterodactyl.conf")]),e._v(" and located in the "),t("code",[e._v("/etc/nginx/sites-available/")]),e._v(" directory, or if on CentOS,\n"),t("code",[e._v("/etc/nginx/conf.d/")]),e._v(".")]),e._v(" "),t("p",[e._v("Make sure to update the path in the command below to reflect the actual location of your configuration file.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/php[7|8].[0-9]-fpm.sock/php8.3-fpm.sock/'")]),e._v(" /etc/nginx/sites-available/pterodactyl.conf\n")])])]),t("p",[e._v("Once you have edited the file run the command below to reload nginx and apply your changes.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl reload nginx\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Apache"}},[t("p",[e._v("Run the commands below to disable all previous PHP versions and enable PHP 8.3 when serving requests.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Hint: a2dismod = a2_disable_module 🤯")]),e._v("\na2dismod php*\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Hint: a2enmod = a2_enable_module 🤯")]),e._v("\na2enmod php8.3\n\n")])])])])],1),e._v(" "),t("h3",{attrs:{id:"return-to-the-1-x-x-upgrade-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#return-to-the-1-x-x-upgrade-guide"}},[e._v("#")]),e._v(" "),t("RouterLink",{attrs:{to:"/panel/1.0/upgrade/1.0.html#fetch-updated-files"}},[e._v("Return to the 1.X.X Upgrade Guide")])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{310:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading-php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-php"}},[e._v("#")]),e._v(" Upgrading PHP")]),e._v(" "),t("p",[e._v("This documentation includes instructions for upgrading your system to the latest version of PHP. Please reference the\ntable below to check what version you need for your version of Pterodactyl.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Panel Version")]),e._v(" "),t("th",[e._v("PHP Version")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("1.0.0 - 1.2.0")]),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.3.0+")]),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.8.0+")]),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.11.0 - 1.11.3")]),e._v(" "),t("td",[e._v("8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.11.4+")]),e._v(" "),t("td",[e._v("8.1, 8.2, 8.3")])]),e._v(" "),t("tr",[t("td",[e._v("1.11.10+")]),e._v(" "),t("td",[e._v("8.2, 8.3")])])])]),e._v(" "),t("h2",{attrs:{id:"install-php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#install-php"}},[e._v("#")]),e._v(" Install PHP")]),e._v(" "),t("p",[e._v("In order to install PHP 8.3, you will need to run the following command. Please keep in mind different operating systems\nmay have slightly different requirements for how this command is formatted.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add additional repository for PHP")]),e._v("\nadd-apt-repository "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" ppa:ondrej/php\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" update\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" php8.3 php8.3-"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h2",{attrs:{id:"update-composer"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-composer"}},[e._v("#")]),e._v(" Update Composer")]),e._v(" "),t("p",[e._v("As of "),t("code",[e._v("Panel@1.3.0")]),e._v(" we require "),t("code",[e._v("composer")]),e._v(" v2. To update composer you will need to run the following command which will\nperform the composer self-update process and move you over to version 2.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("composer")]),e._v(" self-update "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--2")]),e._v("\n")])])]),t("h2",{attrs:{id:"webserver-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#webserver-configuration"}},[e._v("#")]),e._v(" Webserver Configuration")]),e._v(" "),t("tabs",[t("tab",{attrs:{name:"NGINX"}},[t("p",[e._v("After upgrading to PHP 8.3, you will most likely need to update your NGINX configuration. Your configuration file\nis most likely called "),t("code",[e._v("pterodactyl.conf")]),e._v(" and located in the "),t("code",[e._v("/etc/nginx/sites-available/")]),e._v(" directory, or if on CentOS,\n"),t("code",[e._v("/etc/nginx/conf.d/")]),e._v(".")]),e._v(" "),t("p",[e._v("Make sure to update the path in the command below to reflect the actual location of your configuration file.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-i")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v("'s/php[7|8].[0-9]-fpm.sock/php8.3-fpm.sock/'")]),e._v(" /etc/nginx/sites-available/pterodactyl.conf\n")])])]),t("p",[e._v("Once you have edited the file run the command below to reload nginx and apply your changes.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl reload nginx\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Apache"}},[t("p",[e._v("Run the commands below to disable all previous PHP versions and enable PHP 8.3 when serving requests.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Hint: a2dismod = a2_disable_module 🤯")]),e._v("\na2dismod php*\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Hint: a2enmod = a2_enable_module 🤯")]),e._v("\na2enmod php8.3\n\n")])])])])],1),e._v(" "),t("h3",{attrs:{id:"return-to-the-1-x-x-upgrade-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#return-to-the-1-x-x-upgrade-guide"}},[e._v("#")]),e._v(" "),t("RouterLink",{attrs:{to:"/panel/1.0/upgrade/1.0.html#fetch-updated-files"}},[e._v("Return to the 1.X.X Upgrade Guide")])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/52.8e320849.js b/assets/js/52.a29f5524.js similarity index 99% rename from assets/js/52.8e320849.js rename to assets/js/52.a29f5524.js index 1001684e..90e5eff4 100644 --- a/assets/js/52.8e320849.js +++ b/assets/js/52.a29f5524.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{312:function(e,t,a){"use strict";a.r(t);var o=a(15),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"environment-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-configuration"}},[e._v("#")]),e._v(" Environment Configuration")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#reporting-all-exceptions"}},[e._v("Reporting All Exceptions")])]),t("li",[t("a",{attrs:{href:"#client-databases"}},[e._v("Client Databases")])]),t("li",[t("a",{attrs:{href:"#reverse-proxy-setup"}},[e._v("Reverse Proxy Setup")]),t("ul",[t("li",[t("a",{attrs:{href:"#nginx-specific-configuration"}},[e._v("NGINX Specific Configuration")])]),t("li",[t("a",{attrs:{href:"#cloudflare-specific-configuration"}},[e._v("Cloudflare Specific Configuration")])])])]),t("li",[t("a",{attrs:{href:"#increasing-the-editable-file-size"}},[e._v("Increasing the Editable File Size")])]),t("li",[t("a",{attrs:{href:"#disable-or-modify-recaptcha"}},[e._v("Disable or Modify ReCaptcha")]),t("ul",[t("li",[t("a",{attrs:{href:"#using-your-own-keys"}},[e._v("Using Your Own Keys")])])])])])]),t("p"),e._v(" "),t("p",[e._v("Pterodactyl's environment settings are configured and stored in an environment file — "),t("code",[e._v(".env")]),e._v(" — located in the\ninstallation root directory — generally "),t("code",[e._v("/var/www/pterodactyl")]),e._v(". Some of these settings are also stored in the database\nand will override settings found in the environment file.")]),e._v(" "),t("p",[e._v("To change this behavior you can edit the "),t("code",[e._v(".env")]),e._v(" file and change the setting "),t("code",[e._v("APP_ENVIRONMENT_ONLY=false")]),e._v(" to\n"),t("code",[e._v("APP_ENVIRONMENT_ONLY=true")]),e._v(" which will take effect the next time you refresh a page on the Panel. Generally you will\nonly need to do this if you severly corrupt a setting in the Panel or are deep in development with the software.")]),e._v(" "),t("h2",{attrs:{id:"reporting-all-exceptions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reporting-all-exceptions"}},[e._v("#")]),e._v(" Reporting All Exceptions")]),e._v(" "),t("p",[e._v("By default Pterodactyl only logs and reports exceptions that are, well, exceptional by nature. There are some exceptions\nthat we expect to occur such as authentication failures or validation issues. However, in rare instances when developing,\nor even on production servers, you might need to have all exceptions logged to detect inconsistent behavior.")]),e._v(" "),t("p",[e._v("To do this, simply set "),t("code",[e._v("APP_REPORT_ALL_EXCEPTIONS=true")]),e._v(" in your "),t("code",[e._v(".env")]),e._v(" file. You'll want to turn this off once you've\ncompleted whatever it is you're needing the exceptions for, otherwise your logs will become very large, very quickly.")]),e._v(" "),t("h2",{attrs:{id:"client-databases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#client-databases"}},[e._v("#")]),e._v(" Client Databases")]),e._v(" "),t("p",[e._v("By default Pterodactyl ships with the ability for clients to have their own per-server databases. If you wish to disable\nthis ability, set "),t("code",[e._v("PTERODACTYL_CLIENT_DATABASES_ENABLED")]),e._v(" to be "),t("code",[e._v("false")]),e._v(". Pterodactyl also attempts to create databases\non a database host assigned to the current server's node but will use any host if one can't be found. If you would like\nto force a database to be created only on a host belonging to that server's node, set "),t("code",[e._v("PTERODACTYL_CLIENT_DATABASES_ALLOW_RANDOM")]),e._v("\nto be "),t("code",[e._v("false")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("PTERODACTYL_CLIENT_DATABASES_ENABLED=true\nPTERODACTYL_CLIENT_DATABASES_ALLOW_RANDOM=true\n")])])]),t("h2",{attrs:{id:"reverse-proxy-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reverse-proxy-setup"}},[e._v("#")]),e._v(" Reverse Proxy Setup")]),e._v(" "),t("p",[e._v("If you are planning on running Pterodactyl behind a reverse proxy, either using NGINX or because you are using\n"),t("a",{attrs:{href:"https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-mean-",target:"_blank",rel:"noopener noreferrer"}},[e._v("Cloudflare's Flexible SSL"),t("OutboundLink")],1),e._v(",\nyou will need to make a quick modification to the Panel to ensure things continue to work as expected. By default when\nyou are using these reverse proxies your Panel will not understand how to properly handle requests and you'll most likely\nbe unable to login, or will see security warnings in your browser console as it attempts to load insecure assets. This\nis because the internal logic the Panel is using to determine how links should be generated thinks it is running over\nHTTP, and not over HTTPS.")]),e._v(" "),t("p",[e._v("You will need to edit the "),t("code",[e._v(".env")]),e._v(" file in the Panel's root directory to contain "),t("code",[e._v("TRUSTED_PROXIES=*")]),e._v(" at minimum. We\nhighly suggest providing a specific IP address (or comma separated list of IPs) rather than allowing "),t("code",[e._v("*")]),e._v(". For example,\nif your proxy is running on the same machine as the server, chances are that something like "),t("code",[e._v("TRUSTED_PROXIES=127.0.0.1")]),e._v("\nwill work for you.")]),e._v(" "),t("h3",{attrs:{id:"nginx-specific-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nginx-specific-configuration"}},[e._v("#")]),e._v(" NGINX Specific Configuration")]),e._v(" "),t("p",[e._v("For Pterodactyl to properly respond to an NGINX reverse proxy, the NGINX "),t("code",[e._v("location")]),e._v(" config must contain the following lines:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("proxy_set_header X-Real-IP $remote_addr;\nproxy_set_header Host $host;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\nproxy_redirect off;\nproxy_buffering off;\nproxy_request_buffering off;\n")])])]),t("h3",{attrs:{id:"cloudflare-specific-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cloudflare-specific-configuration"}},[e._v("#")]),e._v(" Cloudflare Specific Configuration")]),e._v(" "),t("p",[e._v("If you're using Cloudflare's Flexible SSL you should set "),t("code",[e._v("TRUSTED_PROXIES")]),e._v(" to contain "),t("a",{attrs:{href:"https://www.cloudflare.com/ips/",target:"_blank",rel:"noopener noreferrer"}},[e._v("their IP addresses"),t("OutboundLink")],1),e._v(".\nBelow is an example of how to set this.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("TRUSTED_PROXIES=103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,104.16.0.0/12,108.162.192.0/18,131.0.72.0/22,141.101.64.0/18,162.158.0.0/15,172.64.0.0/13,173.245.48.0/20,188.114.96.0/20,190.93.240.0/20,197.234.240.0/22,198.41.128.0/17\n")])])]),t("h2",{attrs:{id:"increasing-the-editable-file-size"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#increasing-the-editable-file-size"}},[e._v("#")]),e._v(" Increasing the Editable File Size")]),e._v(" "),t("p",[e._v("By default the Panel attempts to set a reasonable limit for editing files through the web based file manager. However,\nsome users find it too restrictive and wish to increase the size. This is controlled by a configuration value that can\nalso be set using the "),t("code",[e._v(".env")]),e._v(" file. The default value is "),t("code",[e._v("50,000")]),e._v(" bytes but this can be increased as you see fit.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("PTERODACTYL_FILES_MAX_EDIT_SIZE=50000\n")])])]),t("h2",{attrs:{id:"disable-or-modify-recaptcha"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-or-modify-recaptcha"}},[e._v("#")]),e._v(" Disable or Modify ReCaptcha")]),e._v(" "),t("p",[e._v("To disable reCAPTCHA on login or password reset, simply set "),t("code",[e._v("RECAPTCHA_ENABLED=false")]),e._v(" in the environment file. This\nchange will take effect immediately.")]),e._v(" "),t("h3",{attrs:{id:"using-your-own-keys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-your-own-keys"}},[e._v("#")]),e._v(" Using Your Own Keys")]),e._v(" "),t("p",[e._v("Pterodactyl comes preconfigured using a public set of reCAPTCHA keys but you may wish to use your own site\nspecific keys. To do so, follow the instructions below.")]),e._v(" "),t("ol",[t("li",[e._v("Visit "),t("a",{attrs:{href:"https://www.google.com/recaptcha/admin#list",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google's reCAPTCHA Admin Console"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v('Click "Register New Site" and fill in a name for your keys.')]),e._v(" "),t("li",[e._v("Choose "),t("code",[e._v("reCAPTCHA v2")]),e._v(" and ensure that the option for "),t("code",[e._v("Invisible")]),e._v(" is selected.")]),e._v(" "),t("li",[e._v("Include the domain that your panel is located on.")]),e._v(" "),t("li",[e._v('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.')])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Disabling Domain Verification")]),e._v(" "),t("p",[e._v('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.')])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{311:function(e,t,a){"use strict";a.r(t);var o=a(15),n=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"environment-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#environment-configuration"}},[e._v("#")]),e._v(" Environment Configuration")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#reporting-all-exceptions"}},[e._v("Reporting All Exceptions")])]),t("li",[t("a",{attrs:{href:"#client-databases"}},[e._v("Client Databases")])]),t("li",[t("a",{attrs:{href:"#reverse-proxy-setup"}},[e._v("Reverse Proxy Setup")]),t("ul",[t("li",[t("a",{attrs:{href:"#nginx-specific-configuration"}},[e._v("NGINX Specific Configuration")])]),t("li",[t("a",{attrs:{href:"#cloudflare-specific-configuration"}},[e._v("Cloudflare Specific Configuration")])])])]),t("li",[t("a",{attrs:{href:"#increasing-the-editable-file-size"}},[e._v("Increasing the Editable File Size")])]),t("li",[t("a",{attrs:{href:"#disable-or-modify-recaptcha"}},[e._v("Disable or Modify ReCaptcha")]),t("ul",[t("li",[t("a",{attrs:{href:"#using-your-own-keys"}},[e._v("Using Your Own Keys")])])])])])]),t("p"),e._v(" "),t("p",[e._v("Pterodactyl's environment settings are configured and stored in an environment file — "),t("code",[e._v(".env")]),e._v(" — located in the\ninstallation root directory — generally "),t("code",[e._v("/var/www/pterodactyl")]),e._v(". Some of these settings are also stored in the database\nand will override settings found in the environment file.")]),e._v(" "),t("p",[e._v("To change this behavior you can edit the "),t("code",[e._v(".env")]),e._v(" file and change the setting "),t("code",[e._v("APP_ENVIRONMENT_ONLY=false")]),e._v(" to\n"),t("code",[e._v("APP_ENVIRONMENT_ONLY=true")]),e._v(" which will take effect the next time you refresh a page on the Panel. Generally you will\nonly need to do this if you severly corrupt a setting in the Panel or are deep in development with the software.")]),e._v(" "),t("h2",{attrs:{id:"reporting-all-exceptions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reporting-all-exceptions"}},[e._v("#")]),e._v(" Reporting All Exceptions")]),e._v(" "),t("p",[e._v("By default Pterodactyl only logs and reports exceptions that are, well, exceptional by nature. There are some exceptions\nthat we expect to occur such as authentication failures or validation issues. However, in rare instances when developing,\nor even on production servers, you might need to have all exceptions logged to detect inconsistent behavior.")]),e._v(" "),t("p",[e._v("To do this, simply set "),t("code",[e._v("APP_REPORT_ALL_EXCEPTIONS=true")]),e._v(" in your "),t("code",[e._v(".env")]),e._v(" file. You'll want to turn this off once you've\ncompleted whatever it is you're needing the exceptions for, otherwise your logs will become very large, very quickly.")]),e._v(" "),t("h2",{attrs:{id:"client-databases"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#client-databases"}},[e._v("#")]),e._v(" Client Databases")]),e._v(" "),t("p",[e._v("By default Pterodactyl ships with the ability for clients to have their own per-server databases. If you wish to disable\nthis ability, set "),t("code",[e._v("PTERODACTYL_CLIENT_DATABASES_ENABLED")]),e._v(" to be "),t("code",[e._v("false")]),e._v(". Pterodactyl also attempts to create databases\non a database host assigned to the current server's node but will use any host if one can't be found. If you would like\nto force a database to be created only on a host belonging to that server's node, set "),t("code",[e._v("PTERODACTYL_CLIENT_DATABASES_ALLOW_RANDOM")]),e._v("\nto be "),t("code",[e._v("false")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("PTERODACTYL_CLIENT_DATABASES_ENABLED=true\nPTERODACTYL_CLIENT_DATABASES_ALLOW_RANDOM=true\n")])])]),t("h2",{attrs:{id:"reverse-proxy-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reverse-proxy-setup"}},[e._v("#")]),e._v(" Reverse Proxy Setup")]),e._v(" "),t("p",[e._v("If you are planning on running Pterodactyl behind a reverse proxy, either using NGINX or because you are using\n"),t("a",{attrs:{href:"https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-mean-",target:"_blank",rel:"noopener noreferrer"}},[e._v("Cloudflare's Flexible SSL"),t("OutboundLink")],1),e._v(",\nyou will need to make a quick modification to the Panel to ensure things continue to work as expected. By default when\nyou are using these reverse proxies your Panel will not understand how to properly handle requests and you'll most likely\nbe unable to login, or will see security warnings in your browser console as it attempts to load insecure assets. This\nis because the internal logic the Panel is using to determine how links should be generated thinks it is running over\nHTTP, and not over HTTPS.")]),e._v(" "),t("p",[e._v("You will need to edit the "),t("code",[e._v(".env")]),e._v(" file in the Panel's root directory to contain "),t("code",[e._v("TRUSTED_PROXIES=*")]),e._v(" at minimum. We\nhighly suggest providing a specific IP address (or comma separated list of IPs) rather than allowing "),t("code",[e._v("*")]),e._v(". For example,\nif your proxy is running on the same machine as the server, chances are that something like "),t("code",[e._v("TRUSTED_PROXIES=127.0.0.1")]),e._v("\nwill work for you.")]),e._v(" "),t("h3",{attrs:{id:"nginx-specific-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#nginx-specific-configuration"}},[e._v("#")]),e._v(" NGINX Specific Configuration")]),e._v(" "),t("p",[e._v("For Pterodactyl to properly respond to an NGINX reverse proxy, the NGINX "),t("code",[e._v("location")]),e._v(" config must contain the following lines:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("proxy_set_header X-Real-IP $remote_addr;\nproxy_set_header Host $host;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\nproxy_redirect off;\nproxy_buffering off;\nproxy_request_buffering off;\n")])])]),t("h3",{attrs:{id:"cloudflare-specific-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cloudflare-specific-configuration"}},[e._v("#")]),e._v(" Cloudflare Specific Configuration")]),e._v(" "),t("p",[e._v("If you're using Cloudflare's Flexible SSL you should set "),t("code",[e._v("TRUSTED_PROXIES")]),e._v(" to contain "),t("a",{attrs:{href:"https://www.cloudflare.com/ips/",target:"_blank",rel:"noopener noreferrer"}},[e._v("their IP addresses"),t("OutboundLink")],1),e._v(".\nBelow is an example of how to set this.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("TRUSTED_PROXIES=103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,104.16.0.0/12,108.162.192.0/18,131.0.72.0/22,141.101.64.0/18,162.158.0.0/15,172.64.0.0/13,173.245.48.0/20,188.114.96.0/20,190.93.240.0/20,197.234.240.0/22,198.41.128.0/17\n")])])]),t("h2",{attrs:{id:"increasing-the-editable-file-size"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#increasing-the-editable-file-size"}},[e._v("#")]),e._v(" Increasing the Editable File Size")]),e._v(" "),t("p",[e._v("By default the Panel attempts to set a reasonable limit for editing files through the web based file manager. However,\nsome users find it too restrictive and wish to increase the size. This is controlled by a configuration value that can\nalso be set using the "),t("code",[e._v(".env")]),e._v(" file. The default value is "),t("code",[e._v("50,000")]),e._v(" bytes but this can be increased as you see fit.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("PTERODACTYL_FILES_MAX_EDIT_SIZE=50000\n")])])]),t("h2",{attrs:{id:"disable-or-modify-recaptcha"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disable-or-modify-recaptcha"}},[e._v("#")]),e._v(" Disable or Modify ReCaptcha")]),e._v(" "),t("p",[e._v("To disable reCAPTCHA on login or password reset, simply set "),t("code",[e._v("RECAPTCHA_ENABLED=false")]),e._v(" in the environment file. This\nchange will take effect immediately.")]),e._v(" "),t("h3",{attrs:{id:"using-your-own-keys"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#using-your-own-keys"}},[e._v("#")]),e._v(" Using Your Own Keys")]),e._v(" "),t("p",[e._v("Pterodactyl comes preconfigured using a public set of reCAPTCHA keys but you may wish to use your own site\nspecific keys. To do so, follow the instructions below.")]),e._v(" "),t("ol",[t("li",[e._v("Visit "),t("a",{attrs:{href:"https://www.google.com/recaptcha/admin#list",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google's reCAPTCHA Admin Console"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v('Click "Register New Site" and fill in a name for your keys.')]),e._v(" "),t("li",[e._v("Choose "),t("code",[e._v("reCAPTCHA v2")]),e._v(" and ensure that the option for "),t("code",[e._v("Invisible")]),e._v(" is selected.")]),e._v(" "),t("li",[e._v("Include the domain that your panel is located on.")]),e._v(" "),t("li",[e._v('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.')])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Disabling Domain Verification")]),e._v(" "),t("p",[e._v('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.')])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/56.513e8a77.js b/assets/js/56.f682278e.js similarity index 98% rename from assets/js/56.513e8a77.js rename to assets/js/56.f682278e.js index c038b423..eed10ae4 100644 --- a/assets/js/56.513e8a77.js +++ b/assets/js/56.f682278e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{317:function(e,a,t){"use strict";t.r(a);var s=t(15),r=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"upgrading-0-7-series"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-7-series"}},[e._v("#")]),e._v(" Upgrading 0.7 Series")]),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("This Version is End-of-Life")]),e._v(" "),a("p",[e._v("This documentation is for "),a("strong",[e._v("end-of-life 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:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(" in production environments.")],1)]),e._v(" "),a("p",[e._v("This documentation covers the process for upgrading within the "),a("code",[e._v("0.7.X")]),e._v(" series of releases. This means upgrading from\n— for example — "),a("code",[e._v("0.7.3")]),e._v(" to "),a("code",[e._v("0.7.11")]),e._v(". "),a("strong",[e._v("Do not use this guide for upgrading from "),a("code",[e._v("0.6")]),e._v(" or upgrading to "),a("code",[e._v("1.0")]),e._v(".")])]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("If you are using a custom theme please be aware that upgrading will remove those files. You will need to re-upload\nyour theme once the upgrade is complete or you will end up with server errors.")])]),e._v(" "),a("h2",{attrs:{id:"fetch-updated-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#fetch-updated-files"}},[e._v("#")]),e._v(" Fetch Updated Files")]),e._v(" "),a("p",[e._v("The first step in the update process is to download the new panel files from GitHub. The command below will download\nthe release archive for the most recent version of Pterodactyl and save it in the current directory. Now is a good time\nto ensure that you're in the "),a("code",[e._v("/var/www/pterodactyl")]),e._v(" directory as the command below will automatically unpack the archive\ninto your current folder.")]),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(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/panel/releases/download/v0.7.19/panel.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(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),a("p",[e._v("Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid\nany webserver related errors.")]),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("chmod")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("755")]),e._v(" storage/* bootstrap/cache\n")])])]),a("h2",{attrs:{id:"update-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies"}},[e._v("#")]),e._v(" Update Dependencies")]),e._v(" "),a("p",[e._v("After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,\nsimply run the commands below and follow any prompts.")]),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("composer")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --no-dev --optimize-autoloader\n")])])]),a("h2",{attrs:{id:"clear-compiled-template-cache"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#clear-compiled-template-cache"}},[e._v("#")]),e._v(" Clear Compiled Template Cache")]),e._v(" "),a("p",[e._v("You'll also want to clear the compiled template cache to ensure that new and modified templates show up correctly for\nusers.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan view:clear\nphp artisan config:clear\n")])])]),a("h2",{attrs:{id:"database-updates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-updates"}},[e._v("#")]),e._v(" Database Updates")]),e._v(" "),a("p",[e._v("You'll also need to update your database schema for the newest version of Pterodactyl. Running the two commands below\nwill update the schema and ensure the default eggs we ship are up to date (and add any new ones we might have). Just\nremember, "),a("em",[e._v("never edit core eggs we ship")]),e._v("! They will be overwritten by this update process.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan migrate "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--force")]),e._v("\nphp artisan db:seed "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--force")]),e._v("\n")])])]),a("h2",{attrs:{id:"set-permissions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-permissions"}},[e._v("#")]),e._v(" Set Permissions")]),e._v(" "),a("p",[e._v("The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this\nis "),a("code",[e._v("www-data")]),e._v(" but can vary from system to system — sometimes being "),a("code",[e._v("nginx")]),e._v(", "),a("code",[e._v("apache")]),e._v(", or even "),a("code",[e._v("nobody")]),e._v(".")]),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("# If using NGINX or Apache (not on CentOS):")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" www-data:www-data * \n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using NGINX on CentOS:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" nginx:nginx *\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using Apache on CentOS")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" apache:apache *\n")])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{316:function(e,a,t){"use strict";t.r(a);var s=t(15),r=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"upgrading-0-7-series"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-0-7-series"}},[e._v("#")]),e._v(" Upgrading 0.7 Series")]),e._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("This Version is End-of-Life")]),e._v(" "),a("p",[e._v("This documentation is for "),a("strong",[e._v("end-of-life 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:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(" in production environments.")],1)]),e._v(" "),a("p",[e._v("This documentation covers the process for upgrading within the "),a("code",[e._v("0.7.X")]),e._v(" series of releases. This means upgrading from\n— for example — "),a("code",[e._v("0.7.3")]),e._v(" to "),a("code",[e._v("0.7.11")]),e._v(". "),a("strong",[e._v("Do not use this guide for upgrading from "),a("code",[e._v("0.6")]),e._v(" or upgrading to "),a("code",[e._v("1.0")]),e._v(".")])]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("If you are using a custom theme please be aware that upgrading will remove those files. You will need to re-upload\nyour theme once the upgrade is complete or you will end up with server errors.")])]),e._v(" "),a("h2",{attrs:{id:"fetch-updated-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#fetch-updated-files"}},[e._v("#")]),e._v(" Fetch Updated Files")]),e._v(" "),a("p",[e._v("The first step in the update process is to download the new panel files from GitHub. The command below will download\nthe release archive for the most recent version of Pterodactyl and save it in the current directory. Now is a good time\nto ensure that you're in the "),a("code",[e._v("/var/www/pterodactyl")]),e._v(" directory as the command below will automatically unpack the archive\ninto your current folder.")]),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(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/panel/releases/download/v0.7.19/panel.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(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),a("p",[e._v("Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid\nany webserver related errors.")]),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("chmod")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("755")]),e._v(" storage/* bootstrap/cache\n")])])]),a("h2",{attrs:{id:"update-dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies"}},[e._v("#")]),e._v(" Update Dependencies")]),e._v(" "),a("p",[e._v("After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,\nsimply run the commands below and follow any prompts.")]),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("composer")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --no-dev --optimize-autoloader\n")])])]),a("h2",{attrs:{id:"clear-compiled-template-cache"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#clear-compiled-template-cache"}},[e._v("#")]),e._v(" Clear Compiled Template Cache")]),e._v(" "),a("p",[e._v("You'll also want to clear the compiled template cache to ensure that new and modified templates show up correctly for\nusers.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan view:clear\nphp artisan config:clear\n")])])]),a("h2",{attrs:{id:"database-updates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-updates"}},[e._v("#")]),e._v(" Database Updates")]),e._v(" "),a("p",[e._v("You'll also need to update your database schema for the newest version of Pterodactyl. Running the two commands below\nwill update the schema and ensure the default eggs we ship are up to date (and add any new ones we might have). Just\nremember, "),a("em",[e._v("never edit core eggs we ship")]),e._v("! They will be overwritten by this update process.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan migrate "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--force")]),e._v("\nphp artisan db:seed "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--force")]),e._v("\n")])])]),a("h2",{attrs:{id:"set-permissions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#set-permissions"}},[e._v("#")]),e._v(" Set Permissions")]),e._v(" "),a("p",[e._v("The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this\nis "),a("code",[e._v("www-data")]),e._v(" but can vary from system to system — sometimes being "),a("code",[e._v("nginx")]),e._v(", "),a("code",[e._v("apache")]),e._v(", or even "),a("code",[e._v("nobody")]),e._v(".")]),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("# If using NGINX or Apache (not on CentOS):")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" www-data:www-data * \n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using NGINX on CentOS:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" nginx:nginx *\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using Apache on CentOS")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" apache:apache *\n")])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/57.f50380a8.js b/assets/js/57.5d950550.js similarity index 96% rename from assets/js/57.f50380a8.js rename to assets/js/57.5d950550.js index 52ffcc40..3788ea33 100644 --- a/assets/js/57.f50380a8.js +++ b/assets/js/57.5d950550.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{316:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[e._v("#")]),e._v(" Upgrading")]),e._v(" "),t("p",[e._v("Upgrading the Panel is a relatively simple process. Below you will find a list of articles that will walk you through\nthe upgrade process for each version of the software.")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Version is End-of-Life")]),e._v(" "),t("p",[e._v("This documentation is for "),t("strong",[e._v("end-of-life 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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(" in production environments.")],1)]),e._v(" "),t("h2",{attrs:{id:"maintenance-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#maintenance-mode"}},[e._v("#")]),e._v(" Maintenance Mode")]),e._v(" "),t("p",[e._v('Whenever you are performing an upgrade, you should be sure to place your Panel into "maintenance mode". This will prevent\nusers from encountering unexpected errors, and ensure everything can be upgraded before users encounter potentially new features.')]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Put the Panel into maintenance mode and deny user access")]),e._v("\nphp artisan down\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Bring the Panel back up to receive connections.")]),e._v("\nphp artisan up\n")])])]),t("h2",{attrs:{id:"restarting-queue-workers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#restarting-queue-workers"}},[e._v("#")]),e._v(" Restarting Queue Workers")]),e._v(" "),t("p",[e._v("After "),t("em",[e._v("every")]),e._v(" update, you should restart the queue worker to ensure that the new code is being loaded in and used.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan queue:restart\n")])])]),t("h2",{attrs:{id:"version-specific-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#version-specific-guides"}},[e._v("#")]),e._v(" Version Specific Guides")]),e._v(" "),t("ul",[t("li",[t("RouterLink",{attrs:{to:"/panel/0.7/upgrade/0.6_to_0.7.html"}},[e._v("0.6.X to 0.7.19")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/panel/0.7/upgrade/0.7.html"}},[e._v("0.7.X series")])],1),e._v(" "),t("li",[t("a",{attrs:{href:"/panel/1.0/upgrade/0.7_to_1.0"}},[e._v("0.7.19 to 1.X.X")]),e._v(" "),t("Badge",{attrs:{text:"current",vertical:"middle"}})],1)])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{317:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"upgrading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[e._v("#")]),e._v(" Upgrading")]),e._v(" "),t("p",[e._v("Upgrading the Panel is a relatively simple process. Below you will find a list of articles that will walk you through\nthe upgrade process for each version of the software.")]),e._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[e._v("This Version is End-of-Life")]),e._v(" "),t("p",[e._v("This documentation is for "),t("strong",[e._v("end-of-life 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(" "),t("p",[e._v("You should be installing and using "),t("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[e._v("Pterodactyl Panel 1.0")]),e._v(" in production environments.")],1)]),e._v(" "),t("h2",{attrs:{id:"maintenance-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#maintenance-mode"}},[e._v("#")]),e._v(" Maintenance Mode")]),e._v(" "),t("p",[e._v('Whenever you are performing an upgrade, you should be sure to place your Panel into "maintenance mode". This will prevent\nusers from encountering unexpected errors, and ensure everything can be upgraded before users encounter potentially new features.')]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Put the Panel into maintenance mode and deny user access")]),e._v("\nphp artisan down\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Bring the Panel back up to receive connections.")]),e._v("\nphp artisan up\n")])])]),t("h2",{attrs:{id:"restarting-queue-workers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#restarting-queue-workers"}},[e._v("#")]),e._v(" Restarting Queue Workers")]),e._v(" "),t("p",[e._v("After "),t("em",[e._v("every")]),e._v(" update, you should restart the queue worker to ensure that the new code is being loaded in and used.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan queue:restart\n")])])]),t("h2",{attrs:{id:"version-specific-guides"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#version-specific-guides"}},[e._v("#")]),e._v(" Version Specific Guides")]),e._v(" "),t("ul",[t("li",[t("RouterLink",{attrs:{to:"/panel/0.7/upgrade/0.6_to_0.7.html"}},[e._v("0.6.X to 0.7.19")])],1),e._v(" "),t("li",[t("RouterLink",{attrs:{to:"/panel/0.7/upgrade/0.7.html"}},[e._v("0.7.X series")])],1),e._v(" "),t("li",[t("a",{attrs:{href:"/panel/1.0/upgrade/0.7_to_1.0"}},[e._v("0.7.19 to 1.X.X")]),e._v(" "),t("Badge",{attrs:{text:"current",vertical:"middle"}})],1)])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/63.c87ed4a2.js b/assets/js/63.dfe26c31.js similarity index 97% rename from assets/js/63.c87ed4a2.js rename to assets/js/63.dfe26c31.js index f5e0be3d..a1c05168 100644 --- a/assets/js/63.c87ed4a2.js +++ b/assets/js/63.dfe26c31.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{323:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"updating-the-panel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-the-panel"}},[e._v("#")]),e._v(" Updating the Panel")]),e._v(" "),t("p",[e._v("This documentation covers the process for updating within the "),t("code",[e._v("1.x")]),e._v(" series of releases. This means updating from\n— for example — "),t("code",[e._v("1.5.0")]),e._v(" to "),t("code",[e._v("1.6.0")]),e._v(". "),t("strong",[e._v("Do not use this guide for upgrading from "),t("code",[e._v("0.7")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"panel-version-requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#panel-version-requirements"}},[e._v("#")]),e._v(" Panel Version Requirements")]),e._v(" "),t("p",[e._v("Each version of Pterodactyl Panel also has a corresponding minimum version of Wings that\nis required for it to run. Please see the chart below for how these versions line up. In\nmost cases your base Wings version should match that of your Panel.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Panel Version")]),e._v(" "),t("th",[e._v("Wings Version")]),e._v(" "),t("th",[e._v("Supported")]),e._v(" "),t("th",[e._v("PHP Versions")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("1.0.x")]),e._v(" "),t("td",[e._v("1.0.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.1.x")]),e._v(" "),t("td",[e._v("1.1.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.2.x")]),e._v(" "),t("td",[e._v("1.2.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.3.x")]),e._v(" "),t("td",[e._v("1.3.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.4.x")]),e._v(" "),t("td",[e._v("1.4.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.5.x")]),e._v(" "),t("td",[e._v("1.4.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.6.x")]),e._v(" "),t("td",[e._v("1.4.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.7.x")]),e._v(" "),t("td",[e._v("1.5.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.8.x")]),e._v(" "),t("td",[e._v("1.6.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.9.x")]),e._v(" "),t("td",[e._v("1.6.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.10.x")]),e._v(" "),t("td",[e._v("1.7.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[t("strong",[e._v("1.11.x")])]),e._v(" "),t("td",[t("strong",[e._v("1.11.x")])]),e._v(" "),t("td",[e._v("✅")]),e._v(" "),t("td",[t("s",[e._v("8.1")]),e._v(", 8.2, "),t("strong",[e._v("8.3")])])])])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Wings releases")]),e._v(" "),t("p",[e._v("There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.")])]),e._v(" "),t("h2",{attrs:{id:"update-dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies"}},[e._v("#")]),e._v(" Update Dependencies")]),e._v(" "),t("ul",[t("li",[e._v("PHP "),t("code",[e._v("8.2")]),e._v(", or "),t("code",[e._v("8.3")]),e._v(" (recommended)")]),e._v(" "),t("li",[e._v("Composer "),t("code",[e._v("2.X")])])]),e._v(" "),t("p",[t("strong",[e._v("Before continuing")]),e._v(", please ensure that your system and web server configuration has been upgraded to at least PHP 8.1 by running "),t("code",[e._v("php -v")]),e._v(" and Composer 2 by running "),t("code",[e._v("composer --version")]),e._v(". You\nshould see an output similar to the result below. If you do not see at least PHP 8.1 and Composer 2, you will need to upgrade by following\nour "),t("RouterLink",{attrs:{to:"/guides/php_upgrade.html"}},[e._v("PHP Upgrade Guide")]),e._v(" and return to this documentation afterward.")],1),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("vagrant@pterodactyl:~/app$ php "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-v")]),e._v("\nPHP "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8.1")]),e._v(".5 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("cli"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("built: Apr "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("21")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10")]),e._v(":32:13"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("NTS"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\nCopyright "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("c"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" The PHP Group\nZend Engine v4.1.5, Copyright "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("c"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" Zend Technologies\n with Zend OPcache v8.1.5, Copyright "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("c"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(", by Zend Technologies\n\nvagrant@pterodactyl:~/app$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("composer")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--version")]),e._v("\nComposer version "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2.3")]),e._v(".5 "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),e._v("-04-13 "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16")]),e._v(":43:00\n")])])]),t("h2",{attrs:{id:"self-upgrade"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#self-upgrade"}},[e._v("#")]),e._v(" Self Upgrade")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("The self-upgrade is currently in-operable due to issues with some dependencies we make use of.\nFor the time being please perform a manual upgrade until this issue can be resolved.")])]),e._v(" "),t("h2",{attrs:{id:"manual-upgrade"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manual-upgrade"}},[e._v("#")]),e._v(" Manual Upgrade")]),e._v(" "),t("p",[e._v("If you prefer not to perform the automatic self-upgrade, or need to reference any upgrade steps you can follow\nthe documentation below.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("If you've already performed the self-upgrade successfully you do not need to do anything else on this page.")])]),e._v(" "),t("h3",{attrs:{id:"enter-maintenance-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enter-maintenance-mode"}},[e._v("#")]),e._v(" Enter Maintenance Mode")]),e._v(" "),t("p",[e._v("Whenever you are performing an update you should be sure to place your Panel into maintenance mode. This will prevent\nusers from encountering unexpected errors and ensure everything can be updated before users encounter\npotentially new features.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /var/www/pterodactyl\n\nphp artisan down\n")])])]),t("h3",{attrs:{id:"download-the-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-the-update"}},[e._v("#")]),e._v(" Download the Update")]),e._v(" "),t("p",[e._v("The first step in the update process is to download the new panel files from GitHub. The command below will download\nthe release archive for the most recent version of Pterodactyl, save it in the current directory and will automatically\nunpack the archive into your current folder.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),t("p",[e._v("Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid\nany webserver related errors.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("755")]),e._v(" storage/* bootstrap/cache\n")])])]),t("h3",{attrs:{id:"update-dependencies-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies-2"}},[e._v("#")]),e._v(" Update Dependencies")]),e._v(" "),t("p",[e._v("After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,\nsimply run the commands below and follow any prompts.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("composer")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --no-dev --optimize-autoloader\n")])])]),t("h3",{attrs:{id:"clear-compiled-template-cache"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clear-compiled-template-cache"}},[e._v("#")]),e._v(" Clear Compiled Template Cache")]),e._v(" "),t("p",[e._v("You'll also want to clear the compiled template cache to ensure that new and modified templates show up correctly for\nusers.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan view:clear\nphp artisan config:clear\n")])])]),t("h3",{attrs:{id:"database-updates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#database-updates"}},[e._v("#")]),e._v(" Database Updates")]),e._v(" "),t("p",[e._v("You'll also need to update your database schema for the newest version of Pterodactyl. Running the command below\nwill update the schema and ensure the default eggs we ship are up to date (and add any new ones we might have). Just\nremember, "),t("em",[e._v("never edit core eggs we ship")]),e._v("! They will be overwritten by this update process.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan migrate "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--seed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--force")]),e._v("\n")])])]),t("h3",{attrs:{id:"set-permissions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-permissions"}},[e._v("#")]),e._v(" Set Permissions")]),e._v(" "),t("p",[e._v("The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this\nis "),t("code",[e._v("www-data")]),e._v(" but can vary from system to system — sometimes being "),t("code",[e._v("nginx")]),e._v(", "),t("code",[e._v("caddy")]),e._v(", "),t("code",[e._v("apache")]),e._v(", or even "),t("code",[e._v("nobody")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using NGINX or Apache (not on CentOS)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" www-data:www-data /var/www/pterodactyl/*\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using NGINX on CentOS")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" nginx:nginx /var/www/pterodactyl/*\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using Apache on CentOS")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" apache:apache /var/www/pterodactyl/*\n")])])]),t("h3",{attrs:{id:"restarting-queue-workers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#restarting-queue-workers"}},[e._v("#")]),e._v(" Restarting Queue Workers")]),e._v(" "),t("p",[e._v("After "),t("em",[e._v("every")]),e._v(" update you should restart the queue worker to ensure that the new code is loaded in and used.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan queue:restart\n")])])]),t("h3",{attrs:{id:"exit-maintenance-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#exit-maintenance-mode"}},[e._v("#")]),e._v(" Exit Maintenance Mode")]),e._v(" "),t("p",[e._v("Now that everything has been updated you need to exit maintenance mode so that the Panel can resume accepting\nconnections.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan up\n")])])]),t("h3",{attrs:{id:"telemetry"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#telemetry"}},[e._v("#")]),e._v(" Telemetry")]),e._v(" "),t("p",[e._v("Since 1.11, Pterodactyl will collect anonymous telemetry to help us better understand how the\nsoftware is being used. To learn more about this feature and to opt-out, please see our "),t("RouterLink",{attrs:{to:"/panel/1.0/additional_configuration.html#telemetry"}},[e._v("Telemetry")]),e._v("\ndocumentation. Remember to continue with the rest of the upgrade.")],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/wings/1.0/upgrading.html"}},[e._v("Final Step: Upgrade Wings")])],1)])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{323:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"updating-the-panel"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#updating-the-panel"}},[e._v("#")]),e._v(" Updating the Panel")]),e._v(" "),t("p",[e._v("This documentation covers the process for updating within the "),t("code",[e._v("1.x")]),e._v(" series of releases. This means updating from\n— for example — "),t("code",[e._v("1.5.0")]),e._v(" to "),t("code",[e._v("1.6.0")]),e._v(". "),t("strong",[e._v("Do not use this guide for upgrading from "),t("code",[e._v("0.7")]),e._v(".")])]),e._v(" "),t("h2",{attrs:{id:"panel-version-requirements"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#panel-version-requirements"}},[e._v("#")]),e._v(" Panel Version Requirements")]),e._v(" "),t("p",[e._v("Each version of Pterodactyl Panel also has a corresponding minimum version of Wings that\nis required for it to run. Please see the chart below for how these versions line up. In\nmost cases your base Wings version should match that of your Panel.")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Panel Version")]),e._v(" "),t("th",[e._v("Wings Version")]),e._v(" "),t("th",[e._v("Supported")]),e._v(" "),t("th",[e._v("PHP Versions")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("1.0.x")]),e._v(" "),t("td",[e._v("1.0.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.1.x")]),e._v(" "),t("td",[e._v("1.1.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.2.x")]),e._v(" "),t("td",[e._v("1.2.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.3, 7.4")])]),e._v(" "),t("tr",[t("td",[e._v("1.3.x")]),e._v(" "),t("td",[e._v("1.3.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.4.x")]),e._v(" "),t("td",[e._v("1.4.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.5.x")]),e._v(" "),t("td",[e._v("1.4.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.6.x")]),e._v(" "),t("td",[e._v("1.4.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.7.x")]),e._v(" "),t("td",[e._v("1.5.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0")])]),e._v(" "),t("tr",[t("td",[e._v("1.8.x")]),e._v(" "),t("td",[e._v("1.6.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.9.x")]),e._v(" "),t("td",[e._v("1.6.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[e._v("1.10.x")]),e._v(" "),t("td",[e._v("1.7.x")]),e._v(" "),t("td"),e._v(" "),t("td",[e._v("7.4, 8.0, 8.1")])]),e._v(" "),t("tr",[t("td",[t("strong",[e._v("1.11.x")])]),e._v(" "),t("td",[t("strong",[e._v("1.11.x")])]),e._v(" "),t("td",[e._v("✅")]),e._v(" "),t("td",[t("s",[e._v("8.1")]),e._v(", 8.2, "),t("strong",[e._v("8.3")])])])])]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Wings releases")]),e._v(" "),t("p",[e._v("There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.")])]),e._v(" "),t("h2",{attrs:{id:"update-dependencies"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies"}},[e._v("#")]),e._v(" Update Dependencies")]),e._v(" "),t("ul",[t("li",[e._v("PHP "),t("code",[e._v("8.2")]),e._v(", or "),t("code",[e._v("8.3")]),e._v(" (recommended)")]),e._v(" "),t("li",[e._v("Composer "),t("code",[e._v("2.X")])])]),e._v(" "),t("p",[t("strong",[e._v("Before continuing")]),e._v(", please ensure that your system and web server configuration has been upgraded to at least PHP 8.2 by running "),t("code",[e._v("php -v")]),e._v(" and Composer 2 by running "),t("code",[e._v("composer --version")]),e._v(". You\nshould see an output similar to the result below. If you do not see at least PHP 8.2 and Composer 2, you will need to upgrade by following\nour "),t("RouterLink",{attrs:{to:"/guides/php_upgrade.html"}},[e._v("PHP Upgrade Guide")]),e._v(" and return to this documentation afterward.")],1),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[e._v("vagrant@pterodactyl:~/app$ php "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-v")]),e._v("\nPHP "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("8.2")]),e._v(".5 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("cli"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("built: Dec "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("21")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("10")]),e._v(":32:13"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("NTS"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v("\nCopyright "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("c"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" The PHP Group\nZend Engine v4.1.5, Copyright "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("c"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" Zend Technologies\n with Zend OPcache v8.2.5, Copyright "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),e._v("c"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(", by Zend Technologies\n\nvagrant@pterodactyl:~/app$ "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("composer")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--version")]),e._v("\nComposer version "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2.3")]),e._v(".5 "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("2022")]),e._v("-04-13 "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("16")]),e._v(":43:00\n")])])]),t("h2",{attrs:{id:"self-upgrade"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#self-upgrade"}},[e._v("#")]),e._v(" Self Upgrade")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("The self-upgrade is currently in-operable due to issues with some dependencies we make use of.\nFor the time being please perform a manual upgrade until this issue can be resolved.")])]),e._v(" "),t("h2",{attrs:{id:"manual-upgrade"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manual-upgrade"}},[e._v("#")]),e._v(" Manual Upgrade")]),e._v(" "),t("p",[e._v("If you prefer not to perform the automatic self-upgrade, or need to reference any upgrade steps you can follow\nthe documentation below.")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("If you've already performed the self-upgrade successfully you do not need to do anything else on this page.")])]),e._v(" "),t("h3",{attrs:{id:"enter-maintenance-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enter-maintenance-mode"}},[e._v("#")]),e._v(" Enter Maintenance Mode")]),e._v(" "),t("p",[e._v("Whenever you are performing an update you should be sure to place your Panel into maintenance mode. This will prevent\nusers from encountering unexpected errors and ensure everything can be updated before users encounter\npotentially new features.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /var/www/pterodactyl\n\nphp artisan down\n")])])]),t("h3",{attrs:{id:"download-the-update"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#download-the-update"}},[e._v("#")]),e._v(" Download the Update")]),e._v(" "),t("p",[e._v("The first step in the update process is to download the new panel files from GitHub. The command below will download\nthe release archive for the most recent version of Pterodactyl, save it in the current directory and will automatically\nunpack the archive into your current folder.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-L")]),e._v(" https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-xzv")]),e._v("\n")])])]),t("p",[e._v("Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid\nany webserver related errors.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[e._v("755")]),e._v(" storage/* bootstrap/cache\n")])])]),t("h3",{attrs:{id:"update-dependencies-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#update-dependencies-2"}},[e._v("#")]),e._v(" Update Dependencies")]),e._v(" "),t("p",[e._v("After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,\nsimply run the commands below and follow any prompts.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("composer")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --no-dev --optimize-autoloader\n")])])]),t("h3",{attrs:{id:"clear-compiled-template-cache"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clear-compiled-template-cache"}},[e._v("#")]),e._v(" Clear Compiled Template Cache")]),e._v(" "),t("p",[e._v("You'll also want to clear the compiled template cache to ensure that new and modified templates show up correctly for\nusers.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan view:clear\nphp artisan config:clear\n")])])]),t("h3",{attrs:{id:"database-updates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#database-updates"}},[e._v("#")]),e._v(" Database Updates")]),e._v(" "),t("p",[e._v("You'll also need to update your database schema for the newest version of Pterodactyl. Running the command below\nwill update the schema and ensure the default eggs we ship are up to date (and add any new ones we might have). Just\nremember, "),t("em",[e._v("never edit core eggs we ship")]),e._v("! They will be overwritten by this update process.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan migrate "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--seed")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--force")]),e._v("\n")])])]),t("h3",{attrs:{id:"set-permissions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#set-permissions"}},[e._v("#")]),e._v(" Set Permissions")]),e._v(" "),t("p",[e._v("The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this\nis "),t("code",[e._v("www-data")]),e._v(" but can vary from system to system — sometimes being "),t("code",[e._v("nginx")]),e._v(", "),t("code",[e._v("caddy")]),e._v(", "),t("code",[e._v("apache")]),e._v(", or even "),t("code",[e._v("nobody")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using NGINX or Apache (not on CentOS)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" www-data:www-data /var/www/pterodactyl/*\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using NGINX on CentOS")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" nginx:nginx /var/www/pterodactyl/*\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# If using Apache on CentOS")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-R")]),e._v(" apache:apache /var/www/pterodactyl/*\n")])])]),t("h3",{attrs:{id:"restarting-queue-workers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#restarting-queue-workers"}},[e._v("#")]),e._v(" Restarting Queue Workers")]),e._v(" "),t("p",[e._v("After "),t("em",[e._v("every")]),e._v(" update you should restart the queue worker to ensure that the new code is loaded in and used.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan queue:restart\n")])])]),t("h3",{attrs:{id:"exit-maintenance-mode"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#exit-maintenance-mode"}},[e._v("#")]),e._v(" Exit Maintenance Mode")]),e._v(" "),t("p",[e._v("Now that everything has been updated you need to exit maintenance mode so that the Panel can resume accepting\nconnections.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("php artisan up\n")])])]),t("h3",{attrs:{id:"telemetry"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#telemetry"}},[e._v("#")]),e._v(" Telemetry")]),e._v(" "),t("p",[e._v("Since 1.11, Pterodactyl will collect anonymous telemetry to help us better understand how the\nsoftware is being used. To learn more about this feature and to opt-out, please see our "),t("RouterLink",{attrs:{to:"/panel/1.0/additional_configuration.html#telemetry"}},[e._v("Telemetry")]),e._v("\ndocumentation. Remember to continue with the rest of the upgrade.")],1),e._v(" "),t("p",[t("RouterLink",{attrs:{to:"/wings/1.0/upgrading.html"}},[e._v("Final Step: Upgrade Wings")])],1)])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/64.58b54b08.js b/assets/js/64.c028aa01.js similarity index 99% rename from assets/js/64.58b54b08.js rename to assets/js/64.c028aa01.js index bd6d9ed9..237573f0 100644 --- a/assets/js/64.58b54b08.js +++ b/assets/js/64.c028aa01.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{324:function(e,t,a){"use strict";a.r(t);var n=a(15),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"webserver-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#webserver-configuration"}},[e._v("#")]),e._v(" Webserver Configuration")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("When using the SSL configuration you MUST create SSL certificates, otherwise your webserver will fail to start. See the "),t("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[e._v("Creating SSL Certificates")]),e._v(" documentation page to learn how to create these certificates before continuing.")],1)]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If you are using "),t("a",{attrs:{href:"#caddy-with-automatic-ssl"}},[e._v("Caddy With Automatic SSL")]),e._v(", you do not have to create SSL certificates manually, Caddy will take care of it automatically.")])]),e._v(" "),t("tabs",[t("tab",{attrs:{name:"Nginx With SSL"}},[t("p",[e._v("First, remove the default NGINX configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/nginx/sites-enabled/default\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/nginx/sites-available/")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/nginx/conf.d/")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('server {\n # Replace the example with your domain name or IP address\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n # Replace the example with your domain name or IP address\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 - Replace the example with your domain\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/php8.3-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')])])]),t("h3",{attrs:{id:"enabling-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to enable your NGINX configuration and restart it.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to symlink this file if you are using RHEL, Rocky Linux, or AlmaLinux.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You need to restart nginx regardless of OS.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart nginx\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Nginx Without SSL"}},[t("p",[e._v("First, remove the default NGINX configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/nginx/sites-enabled/default\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/nginx/sites-available/")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/nginx/conf.d/")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('server {\n # Replace the example with your domain name or IP address\n listen 80;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.html index.htm index.php;\n charset utf-8;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location = /favicon.ico { access_log off; log_not_found off; }\n location = /robots.txt { access_log off; log_not_found off; }\n\n access_log off;\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 location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php8.3-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 }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),t("h3",{attrs:{id:"enabling-configuration-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-2"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to enable your NGINX configuration and restart it.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to symlink this file if you are using RHEL, Rocky Linux, or AlmaLinux.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You need to restart nginx regardless of OS.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart nginx\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Apache With SSL"}},[t("p",[e._v("First, remove the default Apache configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("a2dissite 000-default.conf\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/apache2/sites-available")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/httpd/conf.d/")]),e._v(".")]),e._v(" "),t("p",[e._v("Note: When using Apache, make sure you have the "),t("code",[e._v("libapache2-mod-php8.3")]),e._v(" package installed or else PHP will not display on your webserver.")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('\n # Replace the example with your domain name or IP address\n ServerName \n\n RewriteEngine On\n RewriteCond %{HTTPS} !=on\n RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] \n\n\n\n # Replace the example with your domain name or IP address\n ServerName \n DocumentRoot "/var/www/pterodactyl/public"\n\n AllowEncodedSlashes On\n\n php_value upload_max_filesize 100M\n php_value post_max_size 100M\n\n \n Require all granted\n AllowOverride all\n \n\n SSLEngine on\n SSLCertificateFile /etc/letsencrypt/live//fullchain.pem\n SSLCertificateKeyFile /etc/letsencrypt/live//privkey.pem\n \n')])])]),t("h3",{attrs:{id:"enabling-configuration-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-3"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("Once you've created the file above, simply run the commands below. If you are on RHEL, Rocky Linux, or AlmaLinux "),t("em",[e._v("you do not need to run the commands\nbelow!")]),e._v(" You only need to run "),t("code",[e._v("systemctl restart httpd")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to run any of these commands on RHEL, Rocky Linux, or AlmaLinux")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/apache2/sites-available/pterodactyl.conf /etc/apache2/sites-enabled/pterodactyl.conf\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" a2enmod rewrite\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" a2enmod ssl\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart apache2\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Apache Without SSL"}},[t("p",[e._v("First, remove the default Apache configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("a2dissite 000-default.conf\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/apache2/sites-available")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/httpd/conf.d/")]),e._v(".")]),e._v(" "),t("p",[e._v("Note: When using Apache, make sure you have the "),t("code",[e._v("libapache2-mod-php8.3")]),e._v(" package installed or else PHP will not display on your webserver.")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('\n # Replace the example with your domain name or IP address\n ServerName \n DocumentRoot "/var/www/pterodactyl/public"\n \n AllowEncodedSlashes On\n \n php_value upload_max_filesize 100M\n php_value post_max_size 100M\n \n \n AllowOverride all\n Require all granted\n \n\n')])])]),t("h3",{attrs:{id:"enabling-configuration-4"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-4"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("Once you've created the file above, simply run the commands below. If you are on RHEL, Rocky Linux, or AlmaLinux "),t("em",[e._v("you do not need to run the commands\nbelow!")]),e._v(" You only need to run "),t("code",[e._v("systemctl restart httpd")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to run any of these commands on RHEL, Rocky Linux, or AlmaLinux")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/apache2/sites-available/pterodactyl.conf /etc/apache2/sites-enabled/pterodactyl.conf\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" a2enmod rewrite\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart apache2\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Caddy With Automatic SSL"}},[t("p",[e._v("Before adding our custom configuration, let's remove the default one. You can do it either by deleting the contents of config file or by deleting the config file completely and than creating a new one from scratch. The config file path is "),t("code",[e._v("/etc/caddy/Caddyfile")]),e._v(".")]),e._v(" "),t("p",[e._v("To delete the config file completely, run the following command:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/caddy/Caddyfile\n")])])]),t("p",[e._v("Then continue with an editor of your choice to write the config.")]),e._v(" "),t("p",[e._v("You should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n servers :443 {\n timeouts {\n read_body 120s\n }\n }\n}\n\n# Replace the example with your domain name or IP address\n {\n root * /var/www/pterodactyl/public\n\n file_server\n\n php_fastcgi unix//run/php/php8.3-fpm.sock {\n root /var/www/pterodactyl/public\n index index.php\n\n env PHP_VALUE "upload_max_filesize = 100M\n post_max_size = 100M"\n env HTTP_PROXY ""\n env HTTPS "on"\n\n read_timeout 300s\n dial_timeout 300s\n write_timeout 300s\n }\n\n header Strict-Transport-Security "max-age=16768000; preload;"\n header X-Content-Type-Options "nosniff"\n header X-XSS-Protection "1; mode=block;"\n header X-Robots-Tag "none"\n header Content-Security-Policy "frame-ancestors \'self\'"\n header X-Frame-Options "DENY"\n header Referrer-Policy "same-origin"\n\n request_body {\n max_size 100m\n }\n\n respond /.ht* 403\n\n log {\n output file /var/log/caddy/pterodactyl.log {\n roll_size 100MiB\n roll_keep_for 7d\n }\n level INFO\n }\n}')])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If you are using Cloudflare DNS in proxy mode, refer to "),t("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html#method-3:-caddy-(using-cloudflare-api)"}},[e._v("this tutorial")]),e._v(", to see how to configure Caddy to use DNS challenge for obtaining SSL certificates.")],1)]),e._v(" "),t("h3",{attrs:{id:"enabling-configuration-5"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-5"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to restart Caddy.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl restart caddy\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Caddy Without SSL"}},[t("p",[e._v("Before adding our custom configuration, let's remove the default one. You can do it either by deleting the contents of config file or by deleting the config file completely and than creating a new one from scratch. The config file path is "),t("code",[e._v("/etc/caddy/Caddyfile")]),e._v(".")]),e._v(" "),t("p",[e._v("To delete the config file completely, run the following command:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/caddy/Caddyfile\n")])])]),t("p",[e._v("Then continue with an editor of your choice to write the config.")]),e._v(" "),t("p",[e._v("You should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name.")]),e._v(" "),t("p",[e._v("The only two differences are that we have suffixed the "),t("code",[e._v("")]),e._v(" with "),t("code",[e._v(":80")]),e._v(" and in the global config at "),t("code",[e._v("servers")]),e._v(" directive, we have changed the port from "),t("code",[e._v(":443")]),e._v(" to "),t("code",[e._v(":80")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n servers :80 {\n timeouts {\n read_body 120s\n }\n }\n}\n\n# Replace the example with your domain name or IP address\n:80 {\n root * /var/www/pterodactyl/public\n\n file_server\n\n php_fastcgi unix//run/php/php8.3-fpm.sock {\n root /var/www/pterodactyl/public\n index index.php\n\n env PHP_VALUE "upload_max_filesize = 100M\n post_max_size = 100M"\n env HTTP_PROXY ""\n # env HTTPS "on" # IMPORTANT: this is commented out, to disable HTTPS\n\n read_timeout 300s\n dial_timeout 300s\n write_timeout 300s\n }\n\n header Strict-Transport-Security "max-age=16768000; preload;"\n header X-Content-Type-Options "nosniff"\n header X-XSS-Protection "1; mode=block;"\n header X-Robots-Tag "none"\n header Content-Security-Policy "frame-ancestors \'self\'"\n header X-Frame-Options "DENY"\n header Referrer-Policy "same-origin"\n\n request_body {\n max_size 100m\n }\n\n respond /.ht* 403\n\n log {\n output file /var/log/caddy/pterodactyl.log {\n roll_size 100MiB\n roll_keep_for 7d\n }\n level INFO\n }\n}')])])]),t("h3",{attrs:{id:"enabling-configuration-6"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-6"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to restart Caddy.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl restart caddy\n")])])])])],1),e._v(" "),t("h4",{attrs:{id:"next-step-wings-installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#next-step-wings-installation"}},[e._v("#")]),e._v(" Next Step: "),t("RouterLink",{attrs:{to:"/wings/installing.html"}},[e._v("Wings Installation")])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{325:function(e,t,a){"use strict";a.r(t);var n=a(15),r=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"webserver-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#webserver-configuration"}},[e._v("#")]),e._v(" Webserver Configuration")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("p",[e._v("When using the SSL configuration you MUST create SSL certificates, otherwise your webserver will fail to start. See the "),t("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[e._v("Creating SSL Certificates")]),e._v(" documentation page to learn how to create these certificates before continuing.")],1)]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If you are using "),t("a",{attrs:{href:"#caddy-with-automatic-ssl"}},[e._v("Caddy With Automatic SSL")]),e._v(", you do not have to create SSL certificates manually, Caddy will take care of it automatically.")])]),e._v(" "),t("tabs",[t("tab",{attrs:{name:"Nginx With SSL"}},[t("p",[e._v("First, remove the default NGINX configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/nginx/sites-enabled/default\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/nginx/sites-available/")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/nginx/conf.d/")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('server {\n # Replace the example with your domain name or IP address\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n # Replace the example with your domain name or IP address\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 - Replace the example with your domain\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/php8.3-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')])])]),t("h3",{attrs:{id:"enabling-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to enable your NGINX configuration and restart it.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to symlink this file if you are using RHEL, Rocky Linux, or AlmaLinux.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You need to restart nginx regardless of OS.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart nginx\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Nginx Without SSL"}},[t("p",[e._v("First, remove the default NGINX configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/nginx/sites-enabled/default\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/nginx/sites-available/")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/nginx/conf.d/")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('server {\n # Replace the example with your domain name or IP address\n listen 80;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.html index.htm index.php;\n charset utf-8;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location = /favicon.ico { access_log off; log_not_found off; }\n location = /robots.txt { access_log off; log_not_found off; }\n\n access_log off;\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 location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php8.3-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 }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),t("h3",{attrs:{id:"enabling-configuration-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-2"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to enable your NGINX configuration and restart it.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to symlink this file if you are using RHEL, Rocky Linux, or AlmaLinux.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You need to restart nginx regardless of OS.")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart nginx\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Apache With SSL"}},[t("p",[e._v("First, remove the default Apache configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("a2dissite 000-default.conf\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/apache2/sites-available")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/httpd/conf.d/")]),e._v(".")]),e._v(" "),t("p",[e._v("Note: When using Apache, make sure you have the "),t("code",[e._v("libapache2-mod-php8.3")]),e._v(" package installed or else PHP will not display on your webserver.")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('\n # Replace the example with your domain name or IP address\n ServerName \n\n RewriteEngine On\n RewriteCond %{HTTPS} !=on\n RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] \n\n\n\n # Replace the example with your domain name or IP address\n ServerName \n DocumentRoot "/var/www/pterodactyl/public"\n\n AllowEncodedSlashes On\n\n php_value upload_max_filesize 100M\n php_value post_max_size 100M\n\n \n Require all granted\n AllowOverride all\n \n\n SSLEngine on\n SSLCertificateFile /etc/letsencrypt/live//fullchain.pem\n SSLCertificateKeyFile /etc/letsencrypt/live//privkey.pem\n \n')])])]),t("h3",{attrs:{id:"enabling-configuration-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-3"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("Once you've created the file above, simply run the commands below. If you are on RHEL, Rocky Linux, or AlmaLinux "),t("em",[e._v("you do not need to run the commands\nbelow!")]),e._v(" You only need to run "),t("code",[e._v("systemctl restart httpd")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to run any of these commands on RHEL, Rocky Linux, or AlmaLinux")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/apache2/sites-available/pterodactyl.conf /etc/apache2/sites-enabled/pterodactyl.conf\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" a2enmod rewrite\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" a2enmod ssl\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart apache2\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Apache Without SSL"}},[t("p",[e._v("First, remove the default Apache configuration.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("a2dissite 000-default.conf\n")])])]),t("p",[e._v("Now, you should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name being used in a file called\n"),t("code",[e._v("pterodactyl.conf")]),e._v(" and place the file in "),t("code",[e._v("/etc/apache2/sites-available")]),e._v(", or — if on RHEL, Rocky Linux, or AlmaLinux, "),t("code",[e._v("/etc/httpd/conf.d/")]),e._v(".")]),e._v(" "),t("p",[e._v("Note: When using Apache, make sure you have the "),t("code",[e._v("libapache2-mod-php8.3")]),e._v(" package installed or else PHP will not display on your webserver.")]),e._v(" "),t("div",{staticClass:"language-conf extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('\n # Replace the example with your domain name or IP address\n ServerName \n DocumentRoot "/var/www/pterodactyl/public"\n \n AllowEncodedSlashes On\n \n php_value upload_max_filesize 100M\n php_value post_max_size 100M\n \n \n AllowOverride all\n Require all granted\n \n\n')])])]),t("h3",{attrs:{id:"enabling-configuration-4"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-4"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("Once you've created the file above, simply run the commands below. If you are on RHEL, Rocky Linux, or AlmaLinux "),t("em",[e._v("you do not need to run the commands\nbelow!")]),e._v(" You only need to run "),t("code",[e._v("systemctl restart httpd")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# You do not need to run any of these commands on RHEL, Rocky Linux, or AlmaLinux")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("ln")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-s")]),e._v(" /etc/apache2/sites-available/pterodactyl.conf /etc/apache2/sites-enabled/pterodactyl.conf\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" a2enmod rewrite\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl restart apache2\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Caddy With Automatic SSL"}},[t("p",[e._v("Before adding our custom configuration, let's remove the default one. You can do it either by deleting the contents of config file or by deleting the config file completely and than creating a new one from scratch. The config file path is "),t("code",[e._v("/etc/caddy/Caddyfile")]),e._v(".")]),e._v(" "),t("p",[e._v("To delete the config file completely, run the following command:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/caddy/Caddyfile\n")])])]),t("p",[e._v("Then continue with an editor of your choice to write the config.")]),e._v(" "),t("p",[e._v("You should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name.")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n servers :443 {\n timeouts {\n read_body 120s\n }\n }\n}\n\n# Replace the example with your domain name or IP address\n {\n root * /var/www/pterodactyl/public\n\n file_server\n\n php_fastcgi unix//run/php/php8.3-fpm.sock {\n root /var/www/pterodactyl/public\n index index.php\n\n env PHP_VALUE "upload_max_filesize = 100M\n post_max_size = 100M"\n env HTTP_PROXY ""\n env HTTPS "on"\n\n read_timeout 300s\n dial_timeout 300s\n write_timeout 300s\n }\n\n header Strict-Transport-Security "max-age=16768000; preload;"\n header X-Content-Type-Options "nosniff"\n header X-XSS-Protection "1; mode=block;"\n header X-Robots-Tag "none"\n header Content-Security-Policy "frame-ancestors \'self\'"\n header X-Frame-Options "DENY"\n header Referrer-Policy "same-origin"\n\n request_body {\n max_size 100m\n }\n\n respond /.ht* 403\n\n log {\n output file /var/log/caddy/pterodactyl.log {\n roll_size 100MiB\n roll_keep_for 7d\n }\n level INFO\n }\n}')])])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),t("p",[e._v("If you are using Cloudflare DNS in proxy mode, refer to "),t("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html#method-3:-caddy-(using-cloudflare-api)"}},[e._v("this tutorial")]),e._v(", to see how to configure Caddy to use DNS challenge for obtaining SSL certificates.")],1)]),e._v(" "),t("h3",{attrs:{id:"enabling-configuration-5"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-5"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to restart Caddy.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl restart caddy\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Caddy Without SSL"}},[t("p",[e._v("Before adding our custom configuration, let's remove the default one. You can do it either by deleting the contents of config file or by deleting the config file completely and than creating a new one from scratch. The config file path is "),t("code",[e._v("/etc/caddy/Caddyfile")]),e._v(".")]),e._v(" "),t("p",[e._v("To delete the config file completely, run the following command:")]),e._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/caddy/Caddyfile\n")])])]),t("p",[e._v("Then continue with an editor of your choice to write the config.")]),e._v(" "),t("p",[e._v("You should paste the contents of the file below, replacing "),t("code",[e._v("")]),e._v(" with your domain name.")]),e._v(" "),t("p",[e._v("The only two differences are that we have suffixed the "),t("code",[e._v("")]),e._v(" with "),t("code",[e._v(":80")]),e._v(" and in the global config at "),t("code",[e._v("servers")]),e._v(" directive, we have changed the port from "),t("code",[e._v(":443")]),e._v(" to "),t("code",[e._v(":80")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('{\n servers :80 {\n timeouts {\n read_body 120s\n }\n }\n}\n\n# Replace the example with your domain name or IP address\n:80 {\n root * /var/www/pterodactyl/public\n\n file_server\n\n php_fastcgi unix//run/php/php8.3-fpm.sock {\n root /var/www/pterodactyl/public\n index index.php\n\n env PHP_VALUE "upload_max_filesize = 100M\n post_max_size = 100M"\n env HTTP_PROXY ""\n # env HTTPS "on" # IMPORTANT: this is commented out, to disable HTTPS\n\n read_timeout 300s\n dial_timeout 300s\n write_timeout 300s\n }\n\n header Strict-Transport-Security "max-age=16768000; preload;"\n header X-Content-Type-Options "nosniff"\n header X-XSS-Protection "1; mode=block;"\n header X-Robots-Tag "none"\n header Content-Security-Policy "frame-ancestors \'self\'"\n header X-Frame-Options "DENY"\n header Referrer-Policy "same-origin"\n\n request_body {\n max_size 100m\n }\n\n respond /.ht* 403\n\n log {\n output file /var/log/caddy/pterodactyl.log {\n roll_size 100MiB\n roll_keep_for 7d\n }\n level INFO\n }\n}')])])]),t("h3",{attrs:{id:"enabling-configuration-6"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#enabling-configuration-6"}},[e._v("#")]),e._v(" Enabling Configuration")]),e._v(" "),t("p",[e._v("The final step is to restart Caddy.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl restart caddy\n")])])])])],1),e._v(" "),t("h4",{attrs:{id:"next-step-wings-installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#next-step-wings-installation"}},[e._v("#")]),e._v(" Next Step: "),t("RouterLink",{attrs:{to:"/wings/installing.html"}},[e._v("Wings Installation")])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/65.372034bb.js b/assets/js/65.61c0bfd2.js similarity index 98% rename from assets/js/65.372034bb.js rename to assets/js/65.61c0bfd2.js index 1546e78b..eb4f08fc 100644 --- a/assets/js/65.372034bb.js +++ b/assets/js/65.61c0bfd2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{325:function(e,t,r){"use strict";r.r(t);var a=r(15),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"about"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#about"}},[e._v("#")]),e._v(" About")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#core-project-team"}},[e._v("Core Project Team")])]),t("li",[t("a",{attrs:{href:"#community-team"}},[e._v("Community Team")])]),t("li",[t("a",{attrs:{href:"#sponsors"}},[e._v("Sponsors")])]),t("li",[t("a",{attrs:{href:"#license"}},[e._v("License")])]),t("li",[t("a",{attrs:{href:"#release-signing"}},[e._v("Release Signing")])])])]),t("p"),e._v(" "),t("h2",{attrs:{id:"core-project-team"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#core-project-team"}},[e._v("#")]),e._v(" Core Project Team")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Name")]),e._v(" "),t("th",[e._v("Discord Name")]),e._v(" "),t("th",[e._v("Primary Role")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[t("a",{attrs:{href:"https://daneeveritt.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Dane Everitt"),t("OutboundLink")],1)]),e._v(" "),t("td",[t("code",[e._v(".tacticalfish")])]),e._v(" "),t("td",[e._v("Founder & Former Project Maintainer")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://matthewp.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Matthew Penner"),t("OutboundLink")],1)]),e._v(" "),t("td",[t("code",[e._v("matthewp")])]),e._v(" "),t("td",[e._v("Project Maintainer")])]),e._v(" "),t("tr",[t("td",[e._v("Stepan Fedotov")]),e._v(" "),t("td",[t("code",[e._v("trixter")])]),e._v(" "),t("td",[e._v("WHMCS Module Maintainer")])]),e._v(" "),t("tr",[t("td",[e._v("Michael Parker")]),e._v(" "),t("td",[t("code",[e._v("parkervcp")])]),e._v(" "),t("td",[e._v("Egg Developer, Docker Integration")])])])]),e._v(" "),t("p",[e._v("Members of the project team have a red username in our Discord server.")]),e._v(" "),t("h2",{attrs:{id:"community-team"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#community-team"}},[e._v("#")]),e._v(" Community Team")]),e._v(" "),t("p",[e._v("Pterodactyl would not be as successful as it is today without the help of our fantastic community support team. These\nmembers can be found in our Discord server and are distinguished with a yellow username.")]),e._v(" "),t("h2",{attrs:{id:"sponsors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sponsors"}},[e._v("#")]),e._v(" Sponsors")]),e._v(" "),t("p",[e._v("The following companies help fund Pterodactyl's development. "),t("a",{attrs:{href:"https://github.com/sponsors/matthewpi",target:"_blank",rel:"noopener noreferrer"}},[e._v("Interested in becoming a sponsor?"),t("OutboundLink")],1)]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Company")]),e._v(" "),t("th",[e._v("About")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[t("a",{attrs:{href:"https://aussieserverhosts.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Aussie Server Hosts")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("No frills Australian Owned and operated High Performance Server hosting for some of the most demanding games serving Australia and New Zealand.")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://codenode.gg/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("CodeNode LLC")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("Looking for simplicity? Well, look no further! CodeNode has got you covered with everything you need at the rock-bottom price of $1.75 per GB, including dedicated IPs in Dallas, Texas, and Amsterdam, Netherlands. We're not just good, we're the best in the game!")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://www.bisecthosting.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("BisectHosting")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("BisectHosting provides Minecraft, Valheim and other server hosting services with the highest reliability and lightning fast support since 2012.")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://minestrator.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("MineStrator")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("Looking for the most highend French hosting company for your minecraft server? More than 24,000 members on our discord trust us. Give us a try!")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://hostez.io",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("HostEZ")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("US & EU Rust & Minecraft Hosting. DDoS Protected bare metal, VPS and colocation with low latency, high uptime and maximum availability. EZ!")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://blueprint.zip/?pterodactyl=true",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Blueprint")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("Create and install Pterodactyl addons and themes with the growing Blueprint framework - the package-manager for Pterodactyl. Use multiple modifications at once without worrying about conflicts and make use of the large extension ecosystem.")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://indifferentbroccoli.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("indifferent broccoli")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("indifferent broccoli is a game server hosting and rental company. With us, you get top-notch computer power for your gaming sessions. We destroy lag, latency, and complexity--letting you focus on the fun stuff.")])])])]),e._v(" "),t("h2",{attrs:{id:"license"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[e._v("#")]),e._v(" License")]),e._v(" "),t("p",[e._v("Pterodactyl® Copyright © 2015 Dane Everitt and contributors.")]),e._v(" "),t("p",[e._v("Code released under the "),t("a",{attrs:{href:"https://github.com/pterodactyl/panel/blob/1.0-develop/LICENSE.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("MIT License"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"release-signing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-signing"}},[e._v("#")]),e._v(" Release Signing")]),e._v(" "),t("p",[e._v("Previously, releases were signed by a GPG key. All recent releases are now signed using an SSH signing key.")]),e._v(" "),t("p",[e._v("This key is used to sign release tags and commits created by Matthew Penner. This key was first used to sign\n"),t("code",[e._v("v1.10.2")]),e._v(" for the Panel and "),t("code",[e._v("v1.7.1")]),e._v(" for Wings and has been used ever since.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKL873MsP1OFfffNC8n9WcVuOXOSW65/q26MIzib0K9k\n")])])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{324:function(e,t,r){"use strict";r.r(t);var a=r(15),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"about"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#about"}},[e._v("#")]),e._v(" About")]),e._v(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#core-project-team"}},[e._v("Core Project Team")])]),t("li",[t("a",{attrs:{href:"#community-team"}},[e._v("Community Team")])]),t("li",[t("a",{attrs:{href:"#sponsors"}},[e._v("Sponsors")])]),t("li",[t("a",{attrs:{href:"#license"}},[e._v("License")])]),t("li",[t("a",{attrs:{href:"#release-signing"}},[e._v("Release Signing")])])])]),t("p"),e._v(" "),t("h2",{attrs:{id:"core-project-team"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#core-project-team"}},[e._v("#")]),e._v(" Core Project Team")]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Name")]),e._v(" "),t("th",[e._v("Discord Name")]),e._v(" "),t("th",[e._v("Primary Role")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[t("a",{attrs:{href:"https://daneeveritt.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Dane Everitt"),t("OutboundLink")],1)]),e._v(" "),t("td",[t("code",[e._v(".tacticalfish")])]),e._v(" "),t("td",[e._v("Founder & Former Project Maintainer")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://matthewp.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Matthew Penner"),t("OutboundLink")],1)]),e._v(" "),t("td",[t("code",[e._v("matthewp")])]),e._v(" "),t("td",[e._v("Project Maintainer")])]),e._v(" "),t("tr",[t("td",[e._v("Stepan Fedotov")]),e._v(" "),t("td",[t("code",[e._v("trixter")])]),e._v(" "),t("td",[e._v("WHMCS Module Maintainer")])]),e._v(" "),t("tr",[t("td",[e._v("Michael Parker")]),e._v(" "),t("td",[t("code",[e._v("parkervcp")])]),e._v(" "),t("td",[e._v("Egg Developer, Docker Integration")])])])]),e._v(" "),t("p",[e._v("Members of the project team have a red username in our Discord server.")]),e._v(" "),t("h2",{attrs:{id:"community-team"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#community-team"}},[e._v("#")]),e._v(" Community Team")]),e._v(" "),t("p",[e._v("Pterodactyl would not be as successful as it is today without the help of our fantastic community support team. These\nmembers can be found in our Discord server and are distinguished with a yellow username.")]),e._v(" "),t("h2",{attrs:{id:"sponsors"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#sponsors"}},[e._v("#")]),e._v(" Sponsors")]),e._v(" "),t("p",[e._v("The following companies help fund Pterodactyl's development. "),t("a",{attrs:{href:"https://github.com/sponsors/matthewpi",target:"_blank",rel:"noopener noreferrer"}},[e._v("Interested in becoming a sponsor?"),t("OutboundLink")],1)]),e._v(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Company")]),e._v(" "),t("th",[e._v("About")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[t("a",{attrs:{href:"https://aussieserverhosts.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Aussie Server Hosts")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("No frills Australian Owned and operated High Performance Server hosting for some of the most demanding games serving Australia and New Zealand.")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://codenode.gg/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("CodeNode LLC")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("Looking for simplicity? Well, look no further! CodeNode has got you covered with everything you need at the rock-bottom price of $1.75 per GB, including dedicated IPs in Dallas, Texas, and Amsterdam, Netherlands. We're not just good, we're the best in the game!")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://www.bisecthosting.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("BisectHosting")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("BisectHosting provides Minecraft, Valheim and other server hosting services with the highest reliability and lightning fast support since 2012.")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://minestrator.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("MineStrator")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("Looking for the most highend French hosting company for your minecraft server? More than 24,000 members on our discord trust us. Give us a try!")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://hostez.io",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("HostEZ")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("US & EU Rust & Minecraft Hosting. DDoS Protected bare metal, VPS and colocation with low latency, high uptime and maximum availability. EZ!")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://blueprint.zip/?pterodactyl=true",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("Blueprint")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("Create and install Pterodactyl addons and themes with the growing Blueprint framework - the package-manager for Pterodactyl. Use multiple modifications at once without worrying about conflicts and make use of the large extension ecosystem.")])]),e._v(" "),t("tr",[t("td",[t("a",{attrs:{href:"https://indifferentbroccoli.com/",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("indifferent broccoli")]),t("OutboundLink")],1)]),e._v(" "),t("td",[e._v("indifferent broccoli is a game server hosting and rental company. With us, you get top-notch computer power for your gaming sessions. We destroy lag, latency, and complexity--letting you focus on the fun stuff.")])])])]),e._v(" "),t("h2",{attrs:{id:"license"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[e._v("#")]),e._v(" License")]),e._v(" "),t("p",[e._v("Pterodactyl® Copyright © 2015 Dane Everitt and contributors.")]),e._v(" "),t("p",[e._v("Code released under the "),t("a",{attrs:{href:"https://github.com/pterodactyl/panel/blob/1.0-develop/LICENSE.md",target:"_blank",rel:"noopener noreferrer"}},[e._v("MIT License"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"release-signing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#release-signing"}},[e._v("#")]),e._v(" Release Signing")]),e._v(" "),t("p",[e._v("Previously, releases were signed by a GPG key. All recent releases are now signed using an SSH signing key.")]),e._v(" "),t("p",[e._v("This key is used to sign release tags and commits created by Matthew Penner. This key was first used to sign\n"),t("code",[e._v("v1.10.2")]),e._v(" for the Panel and "),t("code",[e._v("v1.7.1")]),e._v(" for Wings and has been used ever since.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKL873MsP1OFfffNC8n9WcVuOXOSW65/q26MIzib0K9k\n")])])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/68.66b31eec.js b/assets/js/68.48fdc234.js similarity index 99% rename from assets/js/68.66b31eec.js rename to assets/js/68.48fdc234.js index 56dac66d..84e817b4 100644 --- a/assets/js/68.66b31eec.js +++ b/assets/js/68.48fdc234.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{329:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"creating-ssl-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-ssl-certificates"}},[e._v("#")]),e._v(" Creating SSL Certificates")]),e._v(" "),t("p",[e._v("This tutorial briefly covers creating new SSL certificates for your panel and wings.")]),e._v(" "),t("tabs",[t("tab",{attrs:{name:"Method 1: Certbot"}},[t("p",[e._v("To begin, we will install certbot, a simple script that automatically renews our certificates and allows much\neasier creation of them. The command below is for Ubuntu distributions, but you can always check "),t("a",{attrs:{href:"https://certbot.eff.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Certbot's official\nsite"),t("OutboundLink")],1),e._v(" for installation instructions. We have also included a command below to install certbot's\nNginx/Apache plugin so you won't have to stop your webserver.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" certbot\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Nginx")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" python3-certbot-nginx\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Apache")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" python3-certbot-apache\n")])])]),t("h2",{attrs:{id:"creating-a-certificate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),t("p",[e._v("After installing the certbot, we need to generate a certificate. There are a couple of ways to do that, but the easiest\nis to use the web server-specific certbot plugin you just installed. For Wings-only machines that don't need a web server, use the standalone or DNS method of the certbot as you don't need a web server for it.")]),e._v(" "),t("p",[e._v("Then, in the command below, you should replace "),t("code",[e._v("example.com")]),e._v(" with the domain you would like to generate a certificate\nfor. When you have multiple domains you would like certificates for, simply add more "),t("code",[e._v("-d anotherdomain.com")]),e._v(" flags to the\ncommand. You can also look into generating a wildcard certificate but that is not covered in this tutorial.")]),e._v(" "),t("p",[e._v("When you are using certbot's Nginx/Apache plugin, you won't need to restart your webserver to have the certificate\napplied assuming that you've already configured the webservers to use SSL as instructed in the "),t("a",{attrs:{href:"https://pterodactyl.io/panel/1.0/webserver_configuration.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("web server configuration step"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"http-challenge"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#http-challenge"}},[e._v("#")]),e._v(" HTTP challenge")]),e._v(" "),t("p",[e._v("HTTP challenge requires you to expose port 80 for the challenge verification.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Nginx")]),e._v("\ncertbot certonly "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--nginx")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Apache")]),e._v("\ncertbot certonly "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--apache")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Standalone - Use this if neither works. Make sure to stop your webserver first when using this method.")]),e._v("\ncertbot certonly "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--standalone")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n")])])]),t("h3",{attrs:{id:"dns-challenge"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dns-challenge"}},[e._v("#")]),e._v(" DNS challenge")]),e._v(" "),t("p",[e._v("DNS challenge requires you to create a new TXT DNS record to verify domain ownership, instead of having to expose port 80. The instructions are displayed when you run the certbot command below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("certbot "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--manual")]),e._v(" --preferred-challenges dns certonly\n")])])]),t("h3",{attrs:{id:"auto-renewal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),t("p",[e._v("You'll also probably want to configure the automatic renewal of certificates to prevent unexpected certificate expirations.\nYou can open crontab with "),t("code",[e._v("sudo crontab -e")]),e._v(" and add the line from below to the bottom of it for attempting renewal every day at 23 (11 PM).")]),e._v(" "),t("p",[e._v("Deploy hook would restart the Nginx service to apply a new certificate when it's renewed successfully. Change "),t("code",[e._v("nginx")]),e._v(" in the restart command to suit your own needs, such as to "),t("code",[e._v("apache")]),e._v(" or "),t("code",[e._v("wings")]),e._v(".")]),e._v(" "),t("p",[e._v("For advanced users, we suggest installing and using "),t("a",{attrs:{href:"https://acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh"),t("OutboundLink")],1),e._v("\nwhich provides more options, and is much more powerful than certbot.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"\n')])])]),t("h3",{attrs:{id:"troubleshooting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),t("p",[e._v("If you get an "),t("code",[e._v("Insecure Connection")]),e._v(" or SSL/TLS related error when trying to access your panel or wings, the certificate has likely expired.\nThis can be easily fixed by renewing the SSL certificate, although using the command "),t("code",[e._v("certbot renew")]),e._v(" might not do the job if port 80 is in use, as it'll return errors like: "),t("code",[e._v("Error: Attempting to renew cert (domain) from /etc/letsencrypt/renew/domain.conf produced an unexpected error")]),e._v(".")]),e._v(" "),t("p",[e._v("This will happen especially if you're running Nginx instead of Apache. The solution for this is to use Nginx or Apache plugins with "),t("code",[e._v("--nginx")]),e._v(" and "),t("code",[e._v("--apache")]),e._v(". Alternatively, you can stop Nginx, then renew the certificate, and finally restart Nginx. Replace "),t("code",[e._v("nginx")]),e._v(" with your own web server or with "),t("code",[e._v("wings")]),e._v(" should you be renewing the certificate for Wings.")]),e._v(" "),t("p",[e._v("Stop Nginx:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl stop nginx\n")])])]),t("p",[e._v("Renew the certificate:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("certbot renew\n")])])]),t("p",[e._v("Once the process has completed, you can restart the Nginx service:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl start nginx\n")])])]),t("p",[e._v("You may also need to restart Wings as not every service is able to automatically apply an updated certificate:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl restart wings\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Method 2: acme.sh (using Cloudflare API)"}},[t("p",[e._v("This is for advanced users, whose server systems do not have access to port 80. The command below is for Ubuntu distributions and CloudFlare API (you may google for other APIs for other DNS providers), but you can always check "),t("a",{attrs:{href:"https://github.com/acmesh-official/acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh's official site"),t("OutboundLink")],1),e._v(" for installation instructions. Make sure you read both instructions, as some people may have moved to CloudFlare's "),t("a",{attrs:{href:"https://blog.cloudflare.com/permissions-best-practices",target:"_blank",rel:"noopener noreferrer"}},[e._v("new authorization system"),t("OutboundLink")],1),e._v(" (Modern), but others "),t("a",{attrs:{href:"https://cloudflare.tv/event/ea8JJLgR",target:"_blank",rel:"noopener noreferrer"}},[e._v("have not"),t("OutboundLink")],1),e._v(" (Legacy).")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" https://get.acme.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n")])])]),t("h3",{attrs:{id:"obtaining-cloudflare-api-key-legacy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-key-legacy"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Key (Legacy)")]),e._v(" "),t("p",[e._v('After installing acme.sh, we need to fetch a CloudFlare API key. On Cloudfare\'s website, select your domain, then on the right side, copy your "Zone ID" and "Account ID" then click on "Get your API token", click on "Create Token" > select the template "Edit zone DNS" > select the scope of "Zone Resources" and then click on "Continue to summary", copy your token.')]),e._v(" "),t("h3",{attrs:{id:"creating-a-certificate-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate-2"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),t("p",[e._v("Since the configuration file is based on Certbot, we need to create the folder manually.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-p")]),e._v(" /etc/letsencrypt/live/example.com\n")])])]),t("p",[e._v("After installing acme.sh and obtaining CloudFlare API key, we need to then generate a certificate. First, input the CloudFlare API credentials.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Token")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_API_Key"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Account_ID")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Account_ID"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Zone_ID")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Zone_ID"')]),e._v("\n")])])]),t("h3",{attrs:{id:"obtaining-cloudflare-api-key-modern"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-key-modern"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Key (Modern)")]),e._v(" "),t("p",[e._v('After installing acme.sh, we need to fetch a CloudFlare API key. On Cloudfare\'s website, click on your profile on the top right. Then go to "My Profile", on the left you will find "API Tokens". Click it and it\'ll bring you to '),t("a",{attrs:{href:"https://dash.cloudflare.com/profile/api-tokens",target:"_blank",rel:"noopener noreferrer"}},[e._v("the API tokens page"),t("OutboundLink")],1),e._v('. Select "Create Token" and use the "Edit zone DNS" template. Then once on the next page, go to "Zone Resources" and "Include" - "Specific Zone" - (Select the domain you want to use). Then continue to the summary. Confirm you\'d like to create the token.')]),e._v(" "),t("h3",{attrs:{id:"creating-a-certificate-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate-3"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),t("p",[e._v("Since the configuration file is based on Certbot, we need to create the folder manually.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-p")]),e._v(" /etc/letsencrypt/live/example.com\n")])])]),t("p",[e._v("After installing acme.sh and obtaining the CloudFlare API key, we need to then generate a certificate. First, input the CloudFlare API credentials.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Key")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_API_Key"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Email")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Email"')]),e._v("\n")])])]),t("p",[e._v("Then create the certificate. Since the API key is bound to the domain, Cloudflare should allow you to generate one.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("acme.sh "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--issue")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--dns")]),e._v(" dns_cf "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"example.com"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--server")]),e._v(" letsencrypt "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--key-file /etc/letsencrypt/live/example.com/privkey.pem "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem\n")])])]),t("h3",{attrs:{id:"auto-renewal-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal-2"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),t("p",[e._v("After running the script for the first time, it will be added to the crontab automatically. You may edit the auto-renewal interval by editing the crontab.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("crontab")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v("\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Method 3: Caddy (using Cloudflare API)"}},[t("p",[e._v("This is for advanced users, who are running Cloudflare in proxy mode or do not have access to port "),t("code",[e._v("80")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"installing-caddy-with-cloudflare-dns-plugin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-caddy-with-cloudflare-dns-plugin"}},[e._v("#")]),e._v(" Installing Caddy with Cloudflare DNS plugin")]),e._v(" "),t("p",[e._v("Caddy does not come by default with Cloudflare DNS plugin, you need to install it yourself.")]),e._v(" "),t("p",[e._v("There are two main methods:")]),e._v(" "),t("ol",[t("li",[e._v("Using "),t("code",[e._v("xcaddy")]),e._v(" - CLI tool to build your own Caddy build")]),e._v(" "),t("li",[e._v("Downloading prebuilt binary from "),t("a",{attrs:{href:"https://caddyserver.com/download",target:"_blank",rel:"noopener noreferrer"}},[e._v("Caddy's download page"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Using Ansible to download and install Caddy with plugins. See "),t("a",{attrs:{href:"https://github.com/caddy-ansible/caddy-ansible",target:"_blank",rel:"noopener noreferrer"}},[e._v("caddy-ansible"),t("OutboundLink")],1)])]),e._v(" "),t("h4",{attrs:{id:"build-caddy-using-xcaddy-on-your-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-caddy-using-xcaddy-on-your-server"}},[e._v("#")]),e._v(" Build Caddy using "),t("code",[e._v("xcaddy")]),e._v(" on your server")]),e._v(" "),t("p",[e._v("Please refer to "),t("a",{attrs:{href:"https://caddyserver.com/docs/build#xcaddy",target:"_blank",rel:"noopener noreferrer"}},[e._v("Caddy docs on building Caddy"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"obtaining-cloudflare-api-token"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-token"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Token")]),e._v(" "),t("p",[e._v('After installing acme.sh, we need to fetch a CloudFlare API key. Please make sure that a DNS record (A or CNAME record) is pointing to your target node, and set the cloud to grey (bypassing CloudFlare proxy). Then go to My Profile > API keys and on Global API Key subtab, click on "view", enter your CloudFlare password, and copy the API key to clipboard.')]),e._v(" "),t("p",[e._v('After install Caddy with Cloudflare DNS plugin, we need to fetch a Cloudflare API token. Please make sure that a DNS record (A or CNAME record) is pointing at your target node. Then go to My Profile > API Tokens and on API Tokens click "Create Token". Create API Token > API token templates, at the end of line with "Edit zone DNS", click "Use template". Under '),t("strong",[e._v("Zone Resources")]),e._v(', select your DNS zone for which you wish to create the API token, click "Continue to summary". Review the API token summary and click "Create Token". And finally copy the API token to clipboard.')]),e._v(" "),t("h3",{attrs:{id:"reconfiguring-caddy-to-use-cloudflare-dns-for-obtaining-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reconfiguring-caddy-to-use-cloudflare-dns-for-obtaining-certificates"}},[e._v("#")]),e._v(" Reconfiguring Caddy to use Cloudflare DNS for obtaining certificates")]),e._v(" "),t("p",[e._v("Create an environment variable file (like "),t("code",[e._v(".env")]),e._v("), keep in mind that this file contains secrets and should not be accessed by public.")]),e._v(" "),t("p",[e._v("We recommend that you create the secret file in the following location: "),t("code",[e._v("/etc/caddy/.secrets.env")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CLOUDFLARE_API_TOKEN")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("your cloudflare api token"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])]),t("p",[e._v("For security reasons, we recommend setting permissions to "),t("code",[e._v("0600")]),e._v(" (only owner can read or write to the file).")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set ownership of the `.secrets.env` file to `caddy` system user")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" caddy:caddy /etc/caddy/.secrets.env\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set read-write permissions only to owner - the `caddy` system user")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" 0600 /etc/caddy/.secrets.env\n")])])]),t("p",[e._v("Modify the systemd unit file, to load environment variables from file (add "),t("code",[e._v("--envfile /etc/caddy/.secrets.env")]),e._v(" flag to "),t("code",[e._v("ExecStart")]),e._v("), the default systemd unit file location is "),t("code",[e._v("/etc/systemd/system/caddy.service")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-unit extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("[Unit]\nDescription=Caddy\nDocumentation=https://caddyserver.com/docs/\nAfter=network.target network-online.target\nRequires=network-online.target\n\n[Service]\nType=notify\nUser=caddy\nGroup=caddy\nExecStart=/usr/bin/caddy run --environ --envfile /etc/caddy/.secrets.env --config /etc/caddy/Caddyfile\nExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile\nTimeoutStopSec=5s\nLimitNOFILE=1048576\nLimitNPROC=512\nPrivateTmp=true\nProtectSystem=full\nAmbientCapabilities=CAP_NET_BIND_SERVICE\n\n[Install]\nWantedBy=multi-user.target\n")])])]),t("p",[e._v("You can add a "),t("code",[e._v("tls")]),e._v(" block to your "),t("code",[e._v("Caddyfile")]),e._v(", under the "),t("code",[e._v("")]),e._v(" block of your panel configuration, the Caddy config file location is "),t("code",[e._v("/etc/caddy/Caddyfile")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-caddyfile extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v(" {\n # ...\n\n tls {\n dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n }\n}\n")])])])])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{330:function(e,t,a){"use strict";a.r(t);var s=a(15),r=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"creating-ssl-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-ssl-certificates"}},[e._v("#")]),e._v(" Creating SSL Certificates")]),e._v(" "),t("p",[e._v("This tutorial briefly covers creating new SSL certificates for your panel and wings.")]),e._v(" "),t("tabs",[t("tab",{attrs:{name:"Method 1: Certbot"}},[t("p",[e._v("To begin, we will install certbot, a simple script that automatically renews our certificates and allows much\neasier creation of them. The command below is for Ubuntu distributions, but you can always check "),t("a",{attrs:{href:"https://certbot.eff.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Certbot's official\nsite"),t("OutboundLink")],1),e._v(" for installation instructions. We have also included a command below to install certbot's\nNginx/Apache plugin so you won't have to stop your webserver.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" certbot\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Nginx")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" python3-certbot-nginx\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Apache")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-y")]),e._v(" python3-certbot-apache\n")])])]),t("h2",{attrs:{id:"creating-a-certificate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),t("p",[e._v("After installing the certbot, we need to generate a certificate. There are a couple of ways to do that, but the easiest\nis to use the web server-specific certbot plugin you just installed. For Wings-only machines that don't need a web server, use the standalone or DNS method of the certbot as you don't need a web server for it.")]),e._v(" "),t("p",[e._v("Then, in the command below, you should replace "),t("code",[e._v("example.com")]),e._v(" with the domain you would like to generate a certificate\nfor. When you have multiple domains you would like certificates for, simply add more "),t("code",[e._v("-d anotherdomain.com")]),e._v(" flags to the\ncommand. You can also look into generating a wildcard certificate but that is not covered in this tutorial.")]),e._v(" "),t("p",[e._v("When you are using certbot's Nginx/Apache plugin, you won't need to restart your webserver to have the certificate\napplied assuming that you've already configured the webservers to use SSL as instructed in the "),t("a",{attrs:{href:"https://pterodactyl.io/panel/1.0/webserver_configuration.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("web server configuration step"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"http-challenge"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#http-challenge"}},[e._v("#")]),e._v(" HTTP challenge")]),e._v(" "),t("p",[e._v("HTTP challenge requires you to expose port 80 for the challenge verification.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Nginx")]),e._v("\ncertbot certonly "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--nginx")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Apache")]),e._v("\ncertbot certonly "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--apache")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Standalone - Use this if neither works. Make sure to stop your webserver first when using this method.")]),e._v("\ncertbot certonly "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--standalone")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com\n")])])]),t("h3",{attrs:{id:"dns-challenge"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#dns-challenge"}},[e._v("#")]),e._v(" DNS challenge")]),e._v(" "),t("p",[e._v("DNS challenge requires you to create a new TXT DNS record to verify domain ownership, instead of having to expose port 80. The instructions are displayed when you run the certbot command below.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("certbot "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" example.com "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--manual")]),e._v(" --preferred-challenges dns certonly\n")])])]),t("h3",{attrs:{id:"auto-renewal"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),t("p",[e._v("You'll also probably want to configure the automatic renewal of certificates to prevent unexpected certificate expirations.\nYou can open crontab with "),t("code",[e._v("sudo crontab -e")]),e._v(" and add the line from below to the bottom of it for attempting renewal every day at 23 (11 PM).")]),e._v(" "),t("p",[e._v("Deploy hook would restart the Nginx service to apply a new certificate when it's renewed successfully. Change "),t("code",[e._v("nginx")]),e._v(" in the restart command to suit your own needs, such as to "),t("code",[e._v("apache")]),e._v(" or "),t("code",[e._v("wings")]),e._v(".")]),e._v(" "),t("p",[e._v("For advanced users, we suggest installing and using "),t("a",{attrs:{href:"https://acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh"),t("OutboundLink")],1),e._v("\nwhich provides more options, and is much more powerful than certbot.")]),e._v(" "),t("div",{staticClass:"language-text extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v('0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"\n')])])]),t("h3",{attrs:{id:"troubleshooting"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),t("p",[e._v("If you get an "),t("code",[e._v("Insecure Connection")]),e._v(" or SSL/TLS related error when trying to access your panel or wings, the certificate has likely expired.\nThis can be easily fixed by renewing the SSL certificate, although using the command "),t("code",[e._v("certbot renew")]),e._v(" might not do the job if port 80 is in use, as it'll return errors like: "),t("code",[e._v("Error: Attempting to renew cert (domain) from /etc/letsencrypt/renew/domain.conf produced an unexpected error")]),e._v(".")]),e._v(" "),t("p",[e._v("This will happen especially if you're running Nginx instead of Apache. The solution for this is to use Nginx or Apache plugins with "),t("code",[e._v("--nginx")]),e._v(" and "),t("code",[e._v("--apache")]),e._v(". Alternatively, you can stop Nginx, then renew the certificate, and finally restart Nginx. Replace "),t("code",[e._v("nginx")]),e._v(" with your own web server or with "),t("code",[e._v("wings")]),e._v(" should you be renewing the certificate for Wings.")]),e._v(" "),t("p",[e._v("Stop Nginx:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl stop nginx\n")])])]),t("p",[e._v("Renew the certificate:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("certbot renew\n")])])]),t("p",[e._v("Once the process has completed, you can restart the Nginx service:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl start nginx\n")])])]),t("p",[e._v("You may also need to restart Wings as not every service is able to automatically apply an updated certificate:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("systemctl restart wings\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Method 2: acme.sh (using Cloudflare API)"}},[t("p",[e._v("This is for advanced users, whose server systems do not have access to port 80. The command below is for Ubuntu distributions and CloudFlare API (you may google for other APIs for other DNS providers), but you can always check "),t("a",{attrs:{href:"https://github.com/acmesh-official/acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh's official site"),t("OutboundLink")],1),e._v(" for installation instructions. Make sure you read both instructions, as some people may have moved to CloudFlare's "),t("a",{attrs:{href:"https://blog.cloudflare.com/permissions-best-practices",target:"_blank",rel:"noopener noreferrer"}},[e._v("new authorization system"),t("OutboundLink")],1),e._v(" (Modern), but others "),t("a",{attrs:{href:"https://cloudflare.tv/event/ea8JJLgR",target:"_blank",rel:"noopener noreferrer"}},[e._v("have not"),t("OutboundLink")],1),e._v(" (Legacy).")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" https://get.acme.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n")])])]),t("h3",{attrs:{id:"obtaining-cloudflare-api-key-legacy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-key-legacy"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Key (Legacy)")]),e._v(" "),t("p",[e._v('After installing acme.sh, we need to fetch a CloudFlare API key. On Cloudfare\'s website, select your domain, then on the right side, copy your "Zone ID" and "Account ID" then click on "Get your API token", click on "Create Token" > select the template "Edit zone DNS" > select the scope of "Zone Resources" and then click on "Continue to summary", copy your token.')]),e._v(" "),t("h3",{attrs:{id:"creating-a-certificate-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate-2"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),t("p",[e._v("Since the configuration file is based on Certbot, we need to create the folder manually.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-p")]),e._v(" /etc/letsencrypt/live/example.com\n")])])]),t("p",[e._v("After installing acme.sh and obtaining CloudFlare API key, we need to then generate a certificate. First, input the CloudFlare API credentials.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Token")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_API_Key"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Account_ID")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Account_ID"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Zone_ID")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Zone_ID"')]),e._v("\n")])])]),t("h3",{attrs:{id:"obtaining-cloudflare-api-key-modern"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-key-modern"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Key (Modern)")]),e._v(" "),t("p",[e._v('After installing acme.sh, we need to fetch a CloudFlare API key. On Cloudfare\'s website, click on your profile on the top right. Then go to "My Profile", on the left you will find "API Tokens". Click it and it\'ll bring you to '),t("a",{attrs:{href:"https://dash.cloudflare.com/profile/api-tokens",target:"_blank",rel:"noopener noreferrer"}},[e._v("the API tokens page"),t("OutboundLink")],1),e._v('. Select "Create Token" and use the "Edit zone DNS" template. Then once on the next page, go to "Zone Resources" and "Include" - "Specific Zone" - (Select the domain you want to use). Then continue to the summary. Confirm you\'d like to create the token.')]),e._v(" "),t("h3",{attrs:{id:"creating-a-certificate-3"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate-3"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),t("p",[e._v("Since the configuration file is based on Certbot, we need to create the folder manually.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-p")]),e._v(" /etc/letsencrypt/live/example.com\n")])])]),t("p",[e._v("After installing acme.sh and obtaining the CloudFlare API key, we need to then generate a certificate. First, input the CloudFlare API credentials.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Key")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_API_Key"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Email")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Email"')]),e._v("\n")])])]),t("p",[e._v("Then create the certificate. Since the API key is bound to the domain, Cloudflare should allow you to generate one.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("acme.sh "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--issue")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--dns")]),e._v(" dns_cf "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-d")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"example.com"')]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--server")]),e._v(" letsencrypt "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--key-file /etc/letsencrypt/live/example.com/privkey.pem "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem\n")])])]),t("h3",{attrs:{id:"auto-renewal-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal-2"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),t("p",[e._v("After running the script for the first time, it will be added to the crontab automatically. You may edit the auto-renewal interval by editing the crontab.")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("crontab")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("-e")]),e._v("\n")])])])]),e._v(" "),t("tab",{attrs:{name:"Method 3: Caddy (using Cloudflare API)"}},[t("p",[e._v("This is for advanced users, who are running Cloudflare in proxy mode or do not have access to port "),t("code",[e._v("80")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"installing-caddy-with-cloudflare-dns-plugin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installing-caddy-with-cloudflare-dns-plugin"}},[e._v("#")]),e._v(" Installing Caddy with Cloudflare DNS plugin")]),e._v(" "),t("p",[e._v("Caddy does not come by default with Cloudflare DNS plugin, you need to install it yourself.")]),e._v(" "),t("p",[e._v("There are two main methods:")]),e._v(" "),t("ol",[t("li",[e._v("Using "),t("code",[e._v("xcaddy")]),e._v(" - CLI tool to build your own Caddy build")]),e._v(" "),t("li",[e._v("Downloading prebuilt binary from "),t("a",{attrs:{href:"https://caddyserver.com/download",target:"_blank",rel:"noopener noreferrer"}},[e._v("Caddy's download page"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Using Ansible to download and install Caddy with plugins. See "),t("a",{attrs:{href:"https://github.com/caddy-ansible/caddy-ansible",target:"_blank",rel:"noopener noreferrer"}},[e._v("caddy-ansible"),t("OutboundLink")],1)])]),e._v(" "),t("h4",{attrs:{id:"build-caddy-using-xcaddy-on-your-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#build-caddy-using-xcaddy-on-your-server"}},[e._v("#")]),e._v(" Build Caddy using "),t("code",[e._v("xcaddy")]),e._v(" on your server")]),e._v(" "),t("p",[e._v("Please refer to "),t("a",{attrs:{href:"https://caddyserver.com/docs/build#xcaddy",target:"_blank",rel:"noopener noreferrer"}},[e._v("Caddy docs on building Caddy"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"obtaining-cloudflare-api-token"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-token"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Token")]),e._v(" "),t("p",[e._v('After installing acme.sh, we need to fetch a CloudFlare API key. Please make sure that a DNS record (A or CNAME record) is pointing to your target node, and set the cloud to grey (bypassing CloudFlare proxy). Then go to My Profile > API keys and on Global API Key subtab, click on "view", enter your CloudFlare password, and copy the API key to clipboard.')]),e._v(" "),t("p",[e._v('After install Caddy with Cloudflare DNS plugin, we need to fetch a Cloudflare API token. Please make sure that a DNS record (A or CNAME record) is pointing at your target node. Then go to My Profile > API Tokens and on API Tokens click "Create Token". Create API Token > API token templates, at the end of line with "Edit zone DNS", click "Use template". Under '),t("strong",[e._v("Zone Resources")]),e._v(', select your DNS zone for which you wish to create the API token, click "Continue to summary". Review the API token summary and click "Create Token". And finally copy the API token to clipboard.')]),e._v(" "),t("h3",{attrs:{id:"reconfiguring-caddy-to-use-cloudflare-dns-for-obtaining-certificates"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#reconfiguring-caddy-to-use-cloudflare-dns-for-obtaining-certificates"}},[e._v("#")]),e._v(" Reconfiguring Caddy to use Cloudflare DNS for obtaining certificates")]),e._v(" "),t("p",[e._v("Create an environment variable file (like "),t("code",[e._v(".env")]),e._v("), keep in mind that this file contains secrets and should not be accessed by public.")]),e._v(" "),t("p",[e._v("We recommend that you create the secret file in the following location: "),t("code",[e._v("/etc/caddy/.secrets.env")]),e._v(".")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CLOUDFLARE_API_TOKEN")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v("<")]),e._v("your cloudflare api token"),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">")]),e._v("\n")])])]),t("p",[e._v("For security reasons, we recommend setting permissions to "),t("code",[e._v("0600")]),e._v(" (only owner can read or write to the file).")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set ownership of the `.secrets.env` file to `caddy` system user")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chown")]),e._v(" caddy:caddy /etc/caddy/.secrets.env\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set read-write permissions only to owner - the `caddy` system user")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" 0600 /etc/caddy/.secrets.env\n")])])]),t("p",[e._v("Modify the systemd unit file, to load environment variables from file (add "),t("code",[e._v("--envfile /etc/caddy/.secrets.env")]),e._v(" flag to "),t("code",[e._v("ExecStart")]),e._v("), the default systemd unit file location is "),t("code",[e._v("/etc/systemd/system/caddy.service")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-unit extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br"),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("[Unit]\nDescription=Caddy\nDocumentation=https://caddyserver.com/docs/\nAfter=network.target network-online.target\nRequires=network-online.target\n\n[Service]\nType=notify\nUser=caddy\nGroup=caddy\nExecStart=/usr/bin/caddy run --environ --envfile /etc/caddy/.secrets.env --config /etc/caddy/Caddyfile\nExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile\nTimeoutStopSec=5s\nLimitNOFILE=1048576\nLimitNPROC=512\nPrivateTmp=true\nProtectSystem=full\nAmbientCapabilities=CAP_NET_BIND_SERVICE\n\n[Install]\nWantedBy=multi-user.target\n")])])]),t("p",[e._v("You can add a "),t("code",[e._v("tls")]),e._v(" block to your "),t("code",[e._v("Caddyfile")]),e._v(", under the "),t("code",[e._v("")]),e._v(" block of your panel configuration, the Caddy config file location is "),t("code",[e._v("/etc/caddy/Caddyfile")]),e._v(":")]),e._v(" "),t("div",{staticClass:"language-caddyfile extra-class"},[t("div",{staticClass:"highlight-lines"},[t("br"),t("br"),t("br"),t("br"),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("div",{staticClass:"highlighted"},[e._v(" ")]),t("br")]),t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v(" {\n # ...\n\n tls {\n dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n }\n}\n")])])])])],1)],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/69.d04c26ab.js b/assets/js/69.42581cdd.js similarity index 98% rename from assets/js/69.d04c26ab.js rename to assets/js/69.42581cdd.js index 6f001a6c..093ceb2f 100644 --- a/assets/js/69.d04c26ab.js +++ b/assets/js/69.42581cdd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{331:function(a,e,s){"use strict";s.r(e);var t=s(15),r=Object(t.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"setting-up-mysql"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-mysql"}},[a._v("#")]),a._v(" Setting up MySQL")]),a._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("Creating a database for Pterodactyl")]),e("ul",[e("li",[e("a",{attrs:{href:"#logging-in"}},[a._v("Logging In")])]),e("li",[e("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),e("li",[e("a",{attrs:{href:"#create-a-database"}},[a._v("Create a database")])]),e("li",[e("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])])])]),e("li",[e("a",{attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("Creating a Database Host for Nodes")]),e("ul",[e("li",[e("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),e("li",[e("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])]),e("li",[e("a",{attrs:{href:"#allowing-external-database-access"}},[a._v("Allowing external database access")])])])])])]),e("p"),a._v(" "),e("h2",{attrs:{id:"creating-a-database-for-pterodactyl"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("#")]),a._v(" Creating a database for Pterodactyl")]),a._v(" "),e("p",[a._v("MySQL is a core component of Pterodactyl Panel but it can be confusing to setup and use if you've never done so before.\nThis is a very basic tutorial that skims just enough of the surface to set MySQL up and running with the panel.\nIf you're interested in learning more, there are some great tutorials available on the Internet.")]),a._v(" "),e("h3",{attrs:{id:"logging-in"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging-in"}},[a._v("#")]),a._v(" Logging In")]),a._v(" "),e("p",[a._v("The first step in this process is to login to the MySQL command line where we will be executing some statements to get\nthings setup. To do so, simply run the command below and provide the Root MySQL account's password that you setup when\ninstalling MySQL. If you do not remember doing this, chances are you can just hit enter as no password is set.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# If using MariaDB (v11.0.0+)")]),a._v("\nmariadb "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("u root "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("p\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# If using MySQL")]),a._v("\nmysql "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("u root "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("p\n")])])]),e("h3",{attrs:{id:"creating-a-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),e("p",[a._v("For security sake, and due to changes in MySQL 5.7, you'll need to create a new user for the panel. To do so, we want\nto first tell MySQL to use the mysql database, which stores such information.")]),a._v(" "),e("p",[a._v("Next, we will create a user called "),e("code",[a._v("pterodactyl")]),a._v(" and allow logins from localhost which prevents any external connections\nto our database. You can also use "),e("code",[a._v("%")]),a._v(" as a wildcard or enter a numeric IP. We will also set the account password\nto "),e("code",[a._v("somePassword")]),a._v(".")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Remember to change 'somePassword' below to be a unique password specific to this account.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somePassword'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"create-a-database"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#create-a-database"}},[a._v("#")]),a._v(" Create a database")]),a._v(" "),e("p",[a._v("Next, we need to create a database for the panel. In this tutorial we will be naming the database "),e("code",[a._v("panel")]),a._v(", but you can\nsubstitute that for whatever name you wish.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("DATABASE")]),a._v(" panel"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"assigning-permissions"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),e("p",[a._v("Finally, we need to tell MySQL that our pterodactyl user should have access to the panel database. To do this, simply\nrun the command below.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" panel"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h2",{attrs:{id:"creating-a-database-host-for-nodes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("#")]),a._v(" Creating a Database Host for Nodes")]),a._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),e("p",[a._v("This section covers creating a MySQL user that has permission to create and modify users. This allows the Panel to create per-server databases on the given host.")])]),a._v(" "),e("h3",{attrs:{id:"creating-a-user-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user-2"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),e("p",[a._v("If your database is on a different host than the one where your Panel or Daemon is installed make sure to use the IP address of the machine the Panel is running on. If you use "),e("code",[a._v("127.0.0.1")]),a._v(" and try to connect externally, you will receive a connection refused error.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# You should change the username and password below to something unique.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somepassword'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"assigning-permissions-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions-2"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),e("p",[a._v("The command below will give your newly created user the ability to create additional users, as well as create and destroy databases. As above, ensure "),e("code",[a._v("127.0.0.1")]),a._v(" matches the IP address you used in the previous command.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("WITH")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("OPTION")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"allowing-external-database-access"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allowing-external-database-access"}},[a._v("#")]),a._v(" Allowing external database access")]),a._v(" "),e("p",[a._v("Chances are you'll need to allow external access to this MySQL instance in order to allow servers to connect to it. To do this, open "),e("code",[a._v("my.cnf")]),a._v(", which varies in location depending on your OS and how MySQL was installed. You can type "),e("code",[a._v("find /etc -iname my.cnf")]),a._v(" to locate it.")]),a._v(" "),e("p",[a._v("Open "),e("code",[a._v("my.cnf")]),a._v(", add text below to the bottom of the file and save it:")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("[mysqld]\nbind-address=0.0.0.0\n")])])]),e("p",[a._v("Restart MySQL/MariaDB to apply these changes. This will override the default MySQL configuration, which by default will only accept requests from localhost. Updating this will allow connections on all interfaces, and thus, external connections. Make sure to allow the MySQL port (default 3306) in your firewall.")]),a._v(" "),e("p",[a._v("If your Database and Wings are on the same machine and won't need external access, you can also use the "),e("code",[a._v("docker0")]),a._v(" interface IP address rather than "),e("code",[a._v("127.0.0.1")]),a._v(". This IP address can be found by running "),e("code",[a._v("ip addr | grep docker0")]),a._v(", and it likely looks like "),e("code",[a._v("172.x.x.x")]),a._v(".")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{329:function(a,e,s){"use strict";s.r(e);var t=s(15),r=Object(t.a)({},(function(){var a=this,e=a._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"setting-up-mysql"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-mysql"}},[a._v("#")]),a._v(" Setting up MySQL")]),a._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("Creating a database for Pterodactyl")]),e("ul",[e("li",[e("a",{attrs:{href:"#logging-in"}},[a._v("Logging In")])]),e("li",[e("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),e("li",[e("a",{attrs:{href:"#create-a-database"}},[a._v("Create a database")])]),e("li",[e("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])])])]),e("li",[e("a",{attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("Creating a Database Host for Nodes")]),e("ul",[e("li",[e("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),e("li",[e("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])]),e("li",[e("a",{attrs:{href:"#allowing-external-database-access"}},[a._v("Allowing external database access")])])])])])]),e("p"),a._v(" "),e("h2",{attrs:{id:"creating-a-database-for-pterodactyl"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("#")]),a._v(" Creating a database for Pterodactyl")]),a._v(" "),e("p",[a._v("MySQL is a core component of Pterodactyl Panel but it can be confusing to setup and use if you've never done so before.\nThis is a very basic tutorial that skims just enough of the surface to set MySQL up and running with the panel.\nIf you're interested in learning more, there are some great tutorials available on the Internet.")]),a._v(" "),e("h3",{attrs:{id:"logging-in"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#logging-in"}},[a._v("#")]),a._v(" Logging In")]),a._v(" "),e("p",[a._v("The first step in this process is to login to the MySQL command line where we will be executing some statements to get\nthings setup. To do so, simply run the command below and provide the Root MySQL account's password that you setup when\ninstalling MySQL. If you do not remember doing this, chances are you can just hit enter as no password is set.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# If using MariaDB (v11.0.0+)")]),a._v("\nmariadb "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("u root "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("p\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# If using MySQL")]),a._v("\nmysql "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("u root "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("p\n")])])]),e("h3",{attrs:{id:"creating-a-user"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),e("p",[a._v("For security sake, and due to changes in MySQL 5.7, you'll need to create a new user for the panel. To do so, we want\nto first tell MySQL to use the mysql database, which stores such information.")]),a._v(" "),e("p",[a._v("Next, we will create a user called "),e("code",[a._v("pterodactyl")]),a._v(" and allow logins from localhost which prevents any external connections\nto our database. You can also use "),e("code",[a._v("%")]),a._v(" as a wildcard or enter a numeric IP. We will also set the account password\nto "),e("code",[a._v("somePassword")]),a._v(".")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# Remember to change 'somePassword' below to be a unique password specific to this account.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somePassword'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"create-a-database"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#create-a-database"}},[a._v("#")]),a._v(" Create a database")]),a._v(" "),e("p",[a._v("Next, we need to create a database for the panel. In this tutorial we will be naming the database "),e("code",[a._v("panel")]),a._v(", but you can\nsubstitute that for whatever name you wish.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("DATABASE")]),a._v(" panel"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"assigning-permissions"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),e("p",[a._v("Finally, we need to tell MySQL that our pterodactyl user should have access to the panel database. To do this, simply\nrun the command below.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" panel"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h2",{attrs:{id:"creating-a-database-host-for-nodes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("#")]),a._v(" Creating a Database Host for Nodes")]),a._v(" "),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),e("p",[a._v("This section covers creating a MySQL user that has permission to create and modify users. This allows the Panel to create per-server databases on the given host.")])]),a._v(" "),e("h3",{attrs:{id:"creating-a-user-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user-2"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),e("p",[a._v("If your database is on a different host than the one where your Panel or Daemon is installed make sure to use the IP address of the machine the Panel is running on. If you use "),e("code",[a._v("127.0.0.1")]),a._v(" and try to connect externally, you will receive a connection refused error.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# You should change the username and password below to something unique.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somepassword'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"assigning-permissions-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions-2"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),e("p",[a._v("The command below will give your newly created user the ability to create additional users, as well as create and destroy databases. As above, ensure "),e("code",[a._v("127.0.0.1")]),a._v(" matches the IP address you used in the previous command.")]),a._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("WITH")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("OPTION")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),e("h3",{attrs:{id:"allowing-external-database-access"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allowing-external-database-access"}},[a._v("#")]),a._v(" Allowing external database access")]),a._v(" "),e("p",[a._v("Chances are you'll need to allow external access to this MySQL instance in order to allow servers to connect to it. To do this, open "),e("code",[a._v("my.cnf")]),a._v(", which varies in location depending on your OS and how MySQL was installed. You can type "),e("code",[a._v("find /etc -iname my.cnf")]),a._v(" to locate it.")]),a._v(" "),e("p",[a._v("Open "),e("code",[a._v("my.cnf")]),a._v(", add text below to the bottom of the file and save it:")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("[mysqld]\nbind-address=0.0.0.0\n")])])]),e("p",[a._v("Restart MySQL/MariaDB to apply these changes. This will override the default MySQL configuration, which by default will only accept requests from localhost. Updating this will allow connections on all interfaces, and thus, external connections. Make sure to allow the MySQL port (default 3306) in your firewall.")]),a._v(" "),e("p",[a._v("If your Database and Wings are on the same machine and won't need external access, you can also use the "),e("code",[a._v("docker0")]),a._v(" interface IP address rather than "),e("code",[a._v("127.0.0.1")]),a._v(". This IP address can be found by running "),e("code",[a._v("ip addr | grep docker0")]),a._v(", and it likely looks like "),e("code",[a._v("172.x.x.x")]),a._v(".")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/70.20bc2184.js b/assets/js/70.cbd191fe.js similarity index 99% rename from assets/js/70.20bc2184.js rename to assets/js/70.cbd191fe.js index 6214b153..83b8d13f 100644 --- a/assets/js/70.20bc2184.js +++ b/assets/js/70.cbd191fe.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{330:function(t,e,a){"use strict";a.r(e);var s=a(15),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"additional-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")]),e("ul",[e("li",[e("a",{attrs:{href:"#available-keys"}},[t._v("Available Keys")])]),e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("Enabling Cloudflare proxy")])]),e("li",[e("a",{attrs:{href:"#container-pid-limit"}},[t._v("Container PID Limit")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#throttles-limits"}},[t._v("Throttles Limits")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#installer-limits"}},[t._v("Installer Limits")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#other-values"}},[t._v("Other values")])])])]),e("p"),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("These are advanced configurations for Wings. You risk breaking Wings and making containers unusable if\nyou misconfigure something. Proceed only if you know what each configuration value does.")])]),t._v(" "),e("p",[t._v("You must apply all changes to your Wings "),e("code",[t._v("config.yml")]),t._v(" file located at "),e("code",[t._v("/etc/pterodactyl")]),t._v(" and restart wings. Verify your config file using "),e("a",{attrs:{href:"http://www.yamllint.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Yaml Lint"),e("OutboundLink")],1),t._v(" should you receive errors related to YAML parsing.")]),t._v(" "),e("h2",{attrs:{id:"private-registries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),e("p",[t._v("You can use these settings to authenticate against (private) docker registries when pulling images.")]),t._v(" "),e("h3",{attrs:{id:"available-keys"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#available-keys"}},[t._v("#")]),t._v(" Available Keys")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("name")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),e("td",[t._v("Registry address")])]),t._v(" "),e("tr",[e("td",[t._v("username")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),e("td",[t._v("Registry username")])]),t._v(" "),e("tr",[e("td",[t._v("password")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),e("td",[t._v("Registry password")])])])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registries")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registry.example.com")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("username")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registryusername"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("password")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registrypassword"')]),t._v("\n")])])]),e("h2",{attrs:{id:"custom-network-interfaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),e("p",[t._v("You can change the network interface that Wings uses for all containers by editing the network name; it is by default set to "),e("code",[t._v("pterodactyl_nw")]),t._v(". For example, to enable Docker host mode change the network name to "),e("code",[t._v("host")]),t._v(".")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("Changing network mode to "),e("code",[t._v("host")]),t._v(" grants Pterodactyl direct access to all machine interfaces and Panel users can bind to any IP or Port even if it's not allocated to their container. You will lose all benefits of Docker network isolation. It is not recommended for public installations that are hosting other users' servers.")])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-2"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n")])])]),e("p",[t._v("After making changes, the following commands will stop the Wings, remove the Pterodactyl network, and start the Wings again. Run at your own risk.\n"),e("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])]),t._v(" "),e("h2",{attrs:{id:"enabling-cloudflare-proxy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("#")]),t._v(" Enabling Cloudflare proxy")]),t._v(" "),e("p",[t._v("Cloudflare proxying of the Wings isn't beneficial since users will be connecting to the machine directly and bypassing any Cloudflare protection. As such, your Node machine IP will still be exposed.")]),t._v(" "),e("p",[t._v("To enable Cloudflare proxy, you must change the Wings port to one of the Cloudflare HTTPS ports with caching enabled (more info "),e("a",{attrs:{href:"https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1),t._v('), such as 8443, because Cloudflare only supports HTTP on port 8080. Select your Node in the Admin Panel, and on the settings tab, change the port. Make sure that you set "Not Behind Proxy" when using Full SSL settings in Cloudflare. Then on Cloudflare dashboard, your FQDN must have an orange cloud enabled beside it.')]),t._v(" "),e("p",[t._v("You are unable to proxy the SFTP port through Cloudflare unless you have their enterprise plan.")]),t._v(" "),e("h2",{attrs:{id:"container-pid-limit"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#container-pid-limit"}},[t._v("#")]),t._v(" Container PID Limit")]),t._v(" "),e("p",[t._v("You can change the total number of processes that can be active in a container at any given moment by changing the "),e("code",[t._v("container_pid_limit")]),t._v(" value. The default value is "),e("code",[t._v("512")]),t._v(".\nYou can set it to "),e("code",[t._v("0")]),t._v(" to disable the limit completely. However, this is "),e("em",[t._v("not")]),t._v(" recommended as the limit prevents malicious overloading of the node.\nRestart wings and your game server to apply the new limit.")]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-3"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-3"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_pid_limit")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("512")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n")])])]),e("h2",{attrs:{id:"throttles-limits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#throttles-limits"}},[t._v("#")]),t._v(" Throttles Limits")]),t._v(" "),e("p",[t._v("You can use these settings to adjust or completely disable throttling.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("enabled")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),e("td",[t._v("Whether or not the throttler is enabled")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("lines")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("2000")]),t._v(" "),e("td",[t._v("Total lines that can be output in a given line_reset_interval period")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("maximum_trigger_count")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),e("td",[t._v("Amount of times throttle limit can be triggered before the server will be stopped")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("line_reset_interval")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),e("td",[t._v("The amount of time after which the number of lines processed is reset to 0")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("decay_interval")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("10000")]),t._v(" "),e("td",[t._v("Time in milliseconds that must pass without triggering throttle limit before trigger count is decremented")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("stop_grace_period")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("15")]),t._v(" "),e("td",[t._v("Time that a server is allowed to be stopping for before it is terminated forcefully if it triggers output throttle")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("write_limit")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),e("td",[t._v("Impose I/O write limit for backups to the disk, 0 = unlimited. Value greater than 0 throttles write speed to the set value in MiB/s")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("download_limit")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),e("td",[t._v("Impose a Network I/O read limit for archives, 0 = unlimited. Value greater than 0 throttles read speed to the set value in MiB/s")])])])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-4"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("throttles")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("enabled")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("lines")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("maximum_trigger_count")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("line_reset_interval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("decay_interval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("stop_grace_period")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v("\n")])])]),e("h2",{attrs:{id:"installer-limits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installer-limits"}},[t._v("#")]),t._v(" Installer Limits")]),t._v(" "),e("p",[t._v("Defines the limits on the installer containers that prevents a server's installation process from unintentionally consuming more resources than expected. This is used in conjunction with the server's defined limits. Whichever value is higher will take precedence in the install containers.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("memory")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("1024")]),t._v(" "),e("td",[t._v("The maximum amount of memory install container can use unless server memory limit is higher than this value")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("cpu")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),e("td",[t._v("The maximum amount of cpu install container can use unless server cpu limit is higher than this value")])])])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-5"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-5"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("installer_limits")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("memory")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cpu")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n")])])]),e("h2",{attrs:{id:"other-values"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#other-values"}},[t._v("#")]),t._v(" Other values")]),t._v(" "),e("p",[t._v("More commonly discussed values. View all Wings config values and explanations in "),e("a",{attrs:{href:"https://github.com/pterodactyl/wings/tree/develop/config",target:"_blank",rel:"noopener noreferrer"}},[t._v("these two files."),e("OutboundLink")],1)]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("debug")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("false")]),t._v(" "),e("td",[t._v("Force Wings to run in debug mode")])]),t._v(" "),e("tr",[e("td",[t._v("tmpfs_size")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),e("td",[t._v("The size of the /tmp directory in MB when mounted into a container")])]),t._v(" "),e("tr",[e("td",[t._v("websocket_log_count")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("150")]),t._v(" "),e("td",[t._v("The number of lines to display in the console")])]),t._v(" "),e("tr",[e("td",[t._v("detect_clean_exit_as_crash")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),e("td",[t._v("Mark server as crashed if it's stopped without user interaction, e.g., not pressing stop button")])]),t._v(" "),e("tr",[e("td",[t._v("(crash detection) timeout")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("60")]),t._v(" "),e("td",[t._v("Timeout between server crashes that will not cause the server to be automatically restarted")])]),t._v(" "),e("tr",[e("td",[t._v("app_name")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v('"Pterodactyl"')]),t._v(" "),e("td",[t._v("Changes the name of the daemon, shown in the panel's game console")])]),t._v(" "),e("tr",[e("td",[t._v("check_permissions_on_boot")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),e("td",[t._v("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")])])])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{331:function(t,e,a){"use strict";a.r(e);var s=a(15),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"additional-configuration"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),e("p"),e("div",{staticClass:"table-of-contents"},[e("ul",[e("li",[e("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")]),e("ul",[e("li",[e("a",{attrs:{href:"#available-keys"}},[t._v("Available Keys")])]),e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("Enabling Cloudflare proxy")])]),e("li",[e("a",{attrs:{href:"#container-pid-limit"}},[t._v("Container PID Limit")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#throttles-limits"}},[t._v("Throttles Limits")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#installer-limits"}},[t._v("Installer Limits")]),e("ul",[e("li",[e("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),e("li",[e("a",{attrs:{href:"#other-values"}},[t._v("Other values")])])])]),e("p"),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("These are advanced configurations for Wings. You risk breaking Wings and making containers unusable if\nyou misconfigure something. Proceed only if you know what each configuration value does.")])]),t._v(" "),e("p",[t._v("You must apply all changes to your Wings "),e("code",[t._v("config.yml")]),t._v(" file located at "),e("code",[t._v("/etc/pterodactyl")]),t._v(" and restart wings. Verify your config file using "),e("a",{attrs:{href:"http://www.yamllint.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Yaml Lint"),e("OutboundLink")],1),t._v(" should you receive errors related to YAML parsing.")]),t._v(" "),e("h2",{attrs:{id:"private-registries"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),e("p",[t._v("You can use these settings to authenticate against (private) docker registries when pulling images.")]),t._v(" "),e("h3",{attrs:{id:"available-keys"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#available-keys"}},[t._v("#")]),t._v(" Available Keys")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("name")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),e("td",[t._v("Registry address")])]),t._v(" "),e("tr",[e("td",[t._v("username")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),e("td",[t._v("Registry username")])]),t._v(" "),e("tr",[e("td",[t._v("password")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),e("td",[t._v("Registry password")])])])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registries")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registry.example.com")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("username")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registryusername"')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("password")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registrypassword"')]),t._v("\n")])])]),e("h2",{attrs:{id:"custom-network-interfaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),e("p",[t._v("You can change the network interface that Wings uses for all containers by editing the network name; it is by default set to "),e("code",[t._v("pterodactyl_nw")]),t._v(". For example, to enable Docker host mode change the network name to "),e("code",[t._v("host")]),t._v(".")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("Changing network mode to "),e("code",[t._v("host")]),t._v(" grants Pterodactyl direct access to all machine interfaces and Panel users can bind to any IP or Port even if it's not allocated to their container. You will lose all benefits of Docker network isolation. It is not recommended for public installations that are hosting other users' servers.")])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-2"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n")])])]),e("p",[t._v("After making changes, the following commands will stop the Wings, remove the Pterodactyl network, and start the Wings again. Run at your own risk.\n"),e("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])]),t._v(" "),e("h2",{attrs:{id:"enabling-cloudflare-proxy"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("#")]),t._v(" Enabling Cloudflare proxy")]),t._v(" "),e("p",[t._v("Cloudflare proxying of the Wings isn't beneficial since users will be connecting to the machine directly and bypassing any Cloudflare protection. As such, your Node machine IP will still be exposed.")]),t._v(" "),e("p",[t._v("To enable Cloudflare proxy, you must change the Wings port to one of the Cloudflare HTTPS ports with caching enabled (more info "),e("a",{attrs:{href:"https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/",target:"_blank",rel:"noopener noreferrer"}},[t._v("here"),e("OutboundLink")],1),t._v('), such as 8443, because Cloudflare only supports HTTP on port 8080. Select your Node in the Admin Panel, and on the settings tab, change the port. Make sure that you set "Not Behind Proxy" when using Full SSL settings in Cloudflare. Then on Cloudflare dashboard, your FQDN must have an orange cloud enabled beside it.')]),t._v(" "),e("p",[t._v("You are unable to proxy the SFTP port through Cloudflare unless you have their enterprise plan.")]),t._v(" "),e("h2",{attrs:{id:"container-pid-limit"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#container-pid-limit"}},[t._v("#")]),t._v(" Container PID Limit")]),t._v(" "),e("p",[t._v("You can change the total number of processes that can be active in a container at any given moment by changing the "),e("code",[t._v("container_pid_limit")]),t._v(" value. The default value is "),e("code",[t._v("512")]),t._v(".\nYou can set it to "),e("code",[t._v("0")]),t._v(" to disable the limit completely. However, this is "),e("em",[t._v("not")]),t._v(" recommended as the limit prevents malicious overloading of the node.\nRestart wings and your game server to apply the new limit.")]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-3"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-3"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_pid_limit")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("512")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n")])])]),e("h2",{attrs:{id:"throttles-limits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#throttles-limits"}},[t._v("#")]),t._v(" Throttles Limits")]),t._v(" "),e("p",[t._v("You can use these settings to adjust or completely disable throttling.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("enabled")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),e("td",[t._v("Whether or not the throttler is enabled")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("lines")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("2000")]),t._v(" "),e("td",[t._v("Total lines that can be output in a given line_reset_interval period")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("maximum_trigger_count")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),e("td",[t._v("Amount of times throttle limit can be triggered before the server will be stopped")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("line_reset_interval")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),e("td",[t._v("The amount of time after which the number of lines processed is reset to 0")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("decay_interval")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("10000")]),t._v(" "),e("td",[t._v("Time in milliseconds that must pass without triggering throttle limit before trigger count is decremented")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("stop_grace_period")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("15")]),t._v(" "),e("td",[t._v("Time that a server is allowed to be stopping for before it is terminated forcefully if it triggers output throttle")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("write_limit")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),e("td",[t._v("Impose I/O write limit for backups to the disk, 0 = unlimited. Value greater than 0 throttles write speed to the set value in MiB/s")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("download_limit")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),e("td",[t._v("Impose a Network I/O read limit for archives, 0 = unlimited. Value greater than 0 throttles read speed to the set value in MiB/s")])])])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-4"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("throttles")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("enabled")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("lines")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("maximum_trigger_count")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("line_reset_interval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("decay_interval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("stop_grace_period")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v("\n")])])]),e("h2",{attrs:{id:"installer-limits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installer-limits"}},[t._v("#")]),t._v(" Installer Limits")]),t._v(" "),e("p",[t._v("Defines the limits on the installer containers that prevents a server's installation process from unintentionally consuming more resources than expected. This is used in conjunction with the server's defined limits. Whichever value is higher will take precedence in the install containers.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("memory")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("1024")]),t._v(" "),e("td",[t._v("The maximum amount of memory install container can use unless server memory limit is higher than this value")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("cpu")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),e("td",[t._v("The maximum amount of cpu install container can use unless server cpu limit is higher than this value")])])])]),t._v(" "),e("h3",{attrs:{id:"example-of-usage-5"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-5"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),e("div",{staticClass:"language-yml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("installer_limits")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("memory")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cpu")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n")])])]),e("h2",{attrs:{id:"other-values"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#other-values"}},[t._v("#")]),t._v(" Other values")]),t._v(" "),e("p",[t._v("More commonly discussed values. View all Wings config values and explanations in "),e("a",{attrs:{href:"https://github.com/pterodactyl/wings/tree/develop/config",target:"_blank",rel:"noopener noreferrer"}},[t._v("these two files."),e("OutboundLink")],1)]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Setting Key")]),t._v(" "),e("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),e("th",[t._v("Notes")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("debug")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("false")]),t._v(" "),e("td",[t._v("Force Wings to run in debug mode")])]),t._v(" "),e("tr",[e("td",[t._v("tmpfs_size")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),e("td",[t._v("The size of the /tmp directory in MB when mounted into a container")])]),t._v(" "),e("tr",[e("td",[t._v("websocket_log_count")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("150")]),t._v(" "),e("td",[t._v("The number of lines to display in the console")])]),t._v(" "),e("tr",[e("td",[t._v("detect_clean_exit_as_crash")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),e("td",[t._v("Mark server as crashed if it's stopped without user interaction, e.g., not pressing stop button")])]),t._v(" "),e("tr",[e("td",[t._v("(crash detection) timeout")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("60")]),t._v(" "),e("td",[t._v("Timeout between server crashes that will not cause the server to be automatically restarted")])]),t._v(" "),e("tr",[e("td",[t._v("app_name")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v('"Pterodactyl"')]),t._v(" "),e("td",[t._v("Changes the name of the daemon, shown in the panel's game console")])]),t._v(" "),e("tr",[e("td",[t._v("check_permissions_on_boot")]),t._v(" "),e("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),e("td",[t._v("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")])])])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/71.e6dd244d.js b/assets/js/71.023c6d55.js similarity index 97% rename from assets/js/71.e6dd244d.js rename to assets/js/71.023c6d55.js index c569fe37..fa2aa1b7 100644 --- a/assets/js/71.e6dd244d.js +++ b/assets/js/71.023c6d55.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{334:function(t,s,a){"use strict";a.r(s);var e=a(15),r=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"upgrading-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-wings"}},[t._v("#")]),t._v(" Upgrading Wings")]),t._v(" "),s("p",[t._v("Upgrading Wings is a painless process and should take less than a minute to complete.")]),t._v(" "),s("h2",{attrs:{id:"wings-version-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#wings-version-requirements"}},[t._v("#")]),t._v(" Wings Version Requirements")]),t._v(" "),s("p",[t._v("Each version of Pterodactyl Panel also has a corresponding minimum version of Wings that\nis required for it to run. Please see the chart below for how these versions line up. In\nmost cases your base Wings version should match that of your Panel.")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("Panel Version")]),t._v(" "),s("th",[t._v("Wings Version")]),t._v(" "),s("th",[t._v("Supported")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("1.0.x")]),t._v(" "),s("td",[t._v("1.0.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.1.x")]),t._v(" "),s("td",[t._v("1.1.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.2.x")]),t._v(" "),s("td",[t._v("1.2.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.3.x")]),t._v(" "),s("td",[t._v("1.3.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.4.x")]),t._v(" "),s("td",[t._v("1.4.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.5.x")]),t._v(" "),s("td",[t._v("1.4.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.6.x")]),t._v(" "),s("td",[t._v("1.4.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.7.x")]),t._v(" "),s("td",[t._v("1.5.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.8.x")]),t._v(" "),s("td",[t._v("1.6.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.9.x")]),t._v(" "),s("td",[t._v("1.6.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.10.x")]),t._v(" "),s("td",[t._v("1.7.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[s("strong",[t._v("1.11.x")])]),t._v(" "),s("td",[s("strong",[t._v("1.11.x")])]),t._v(" "),s("td",[t._v("✅")])])])]),t._v(" "),s("p",[s("em",[t._v("NOTE: There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.")])]),t._v(" "),s("h2",{attrs:{id:"download-updated-binary"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-updated-binary"}},[t._v("#")]),t._v(" Download Updated Binary")]),t._v(" "),s("p",[t._v("First, download the updated wings binary into "),s("code",[t._v("/usr/local/bin")]),t._v(". You will need to stop Wings briefly. "),s("em",[t._v("Your running\nservers "),s("strong",[t._v("will not")]),t._v(" be affected.")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl stop wings\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-o")]),t._v(" /usr/local/bin/wings "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uname")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-m")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x86_64"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),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('"amd64"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),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('"arm64"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v('"\n'),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("chmod")]),t._v(" u+x /usr/local/bin/wings\n")])])]),s("h2",{attrs:{id:"restart-process"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#restart-process"}},[t._v("#")]),t._v(" Restart Process")]),t._v(" "),s("p",[t._v("Finally, restart the wings process. Your running servers will not be affected and any open\nconnections to the instance will re-connect automatically.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl restart wings\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{333:function(t,s,a){"use strict";a.r(s);var e=a(15),r=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"upgrading-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-wings"}},[t._v("#")]),t._v(" Upgrading Wings")]),t._v(" "),s("p",[t._v("Upgrading Wings is a painless process and should take less than a minute to complete.")]),t._v(" "),s("h2",{attrs:{id:"wings-version-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#wings-version-requirements"}},[t._v("#")]),t._v(" Wings Version Requirements")]),t._v(" "),s("p",[t._v("Each version of Pterodactyl Panel also has a corresponding minimum version of Wings that\nis required for it to run. Please see the chart below for how these versions line up. In\nmost cases your base Wings version should match that of your Panel.")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("Panel Version")]),t._v(" "),s("th",[t._v("Wings Version")]),t._v(" "),s("th",[t._v("Supported")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("1.0.x")]),t._v(" "),s("td",[t._v("1.0.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.1.x")]),t._v(" "),s("td",[t._v("1.1.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.2.x")]),t._v(" "),s("td",[t._v("1.2.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.3.x")]),t._v(" "),s("td",[t._v("1.3.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.4.x")]),t._v(" "),s("td",[t._v("1.4.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.5.x")]),t._v(" "),s("td",[t._v("1.4.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.6.x")]),t._v(" "),s("td",[t._v("1.4.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.7.x")]),t._v(" "),s("td",[t._v("1.5.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.8.x")]),t._v(" "),s("td",[t._v("1.6.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.9.x")]),t._v(" "),s("td",[t._v("1.6.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("1.10.x")]),t._v(" "),s("td",[t._v("1.7.x")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[s("strong",[t._v("1.11.x")])]),t._v(" "),s("td",[s("strong",[t._v("1.11.x")])]),t._v(" "),s("td",[t._v("✅")])])])]),t._v(" "),s("p",[s("em",[t._v("NOTE: There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.")])]),t._v(" "),s("h2",{attrs:{id:"download-updated-binary"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#download-updated-binary"}},[t._v("#")]),t._v(" Download Updated Binary")]),t._v(" "),s("p",[t._v("First, download the updated wings binary into "),s("code",[t._v("/usr/local/bin")]),t._v(". You will need to stop Wings briefly. "),s("em",[t._v("Your running\nservers "),s("strong",[t._v("will not")]),t._v(" be affected.")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl stop wings\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-o")]),t._v(" /usr/local/bin/wings "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("uname")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-m")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x86_64"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),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('"amd64"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),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('"arm64"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v('"\n'),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("chmod")]),t._v(" u+x /usr/local/bin/wings\n")])])]),s("h2",{attrs:{id:"restart-process"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#restart-process"}},[t._v("#")]),t._v(" Restart Process")]),t._v(" "),s("p",[t._v("Finally, restart the wings process. Your running servers will not be affected and any open\nconnections to the instance will re-connect automatically.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl restart wings\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/9.90f962cd.js b/assets/js/9.ef5a635a.js similarity index 97% rename from assets/js/9.90f962cd.js rename to assets/js/9.ef5a635a.js index b0032e75..89c621fe 100644 --- a/assets/js/9.90f962cd.js +++ b/assets/js/9.ef5a635a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{257:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Process_Management.516b5b6f.png"},265:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Select.5a2867ee.png"},266:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Copy_Settings_From.e3102cdd.png"},267:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Variables.3962b264.png"},268:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Startup.b6e22637.png"},287:function(e,t,a){"use strict";a.r(t);var s=a(15),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"creating-a-custom-egg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-egg"}},[e._v("#")]),e._v(" Creating a Custom Egg")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("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(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#create-new-option"}},[e._v("Create New Option")])]),t("li",[t("a",{attrs:{href:"#configure-process-management"}},[e._v("Configure Process Management")]),t("ul",[t("li",[t("a",{attrs:{href:"#stop-command"}},[e._v("Stop Command")])]),t("li",[t("a",{attrs:{href:"#log-storage"}},[e._v("Log Storage")])]),t("li",[t("a",{attrs:{href:"#configuration-files"}},[e._v("Configuration Files")])]),t("li",[t("a",{attrs:{href:"#start-configuration"}},[e._v("Start Configuration")])])])]),t("li",[t("a",{attrs:{href:"#copy-settings-from"}},[e._v("Copy Settings From")])]),t("li",[t("a",{attrs:{href:"#egg-variables"}},[e._v("Egg Variables")])]),t("li",[t("a",{attrs:{href:"#list-of-default-variables"}},[e._v("List of default variables")])])])]),t("p"),e._v(" "),t("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.\nThe "),t("code",[e._v("Folder Name")]),e._v(" "),t("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(" "),t("p",[e._v("The default start command is also required, however it can be changed per-option.")]),e._v(" "),t("h2",{attrs:{id:"create-new-option"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-new-option"}},[e._v("#")]),e._v(" Create New Option")]),e._v(" "),t("p",[e._v("After creating the service, in the bottom right of the page you should see a button titled "),t("code",[e._v("New Egg")]),e._v(", press it.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(265),alt:""}})]),e._v(" "),t("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 "),t("code",[e._v("Associated Nest")]),e._v(" dropdown.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(257),alt:""}})]),e._v(" "),t("p",[e._v("After that, enter an Option Name to describe it, in this case I am using "),t("code",[e._v("Widget")]),e._v(". You will also need to provide a\n"),t("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(" "),t("p",[t("em",[e._v("Docker images must be specifically designed to work with Pterodactyl Panel.")]),e._v(" You should read more about that in\nour "),t("RouterLink",{attrs:{to:"/community/config/eggs/creating_a_custom_image.html"}},[e._v("Creating a Docker Image")]),e._v(" guide.")],1),e._v(" "),t("h2",{attrs:{id:"configure-process-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-process-management"}},[e._v("#")]),e._v(" Configure Process Management")]),e._v(" "),t("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(" "),t("p",[t("img",{attrs:{src:a(257),alt:""}})]),e._v(" "),t("p",[e._v("The first field you'll encounter is "),t("code",[e._v("Copy Settings From")]),e._v(". The default selection is "),t("code",[e._v("None")]),e._v(". That is expected, and okay.\nThis dropdown is discussed at the end of this article.")]),e._v(" "),t("h3",{attrs:{id:"stop-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#stop-command"}},[e._v("#")]),e._v(" Stop Command")]),e._v(" "),t("p",[e._v("Next, you'll encounter "),t("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 "),t("code",[e._v("stop")]),e._v(" or "),t("code",[e._v("end")]),e._v(". Certain programs and games don't have a specified stop command, so\nyou can enter "),t("code",[e._v("^C")]),e._v(" to have the daemon execute a "),t("code",[e._v("SIGINT")]),e._v(" to end the process.")]),e._v(" "),t("h3",{attrs:{id:"log-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#log-storage"}},[e._v("#")]),e._v(" Log Storage")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h3",{attrs:{id:"configuration-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configuration-files"}},[e._v("#")]),e._v(" Configuration Files")]),e._v(" "),t("p",[e._v("The next block is one of the most complex blocks, the "),t("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(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server.properties"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"properties"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-ip"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enable-query"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"true"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"query.port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("In this example, we are telling the Daemon to read "),t("code",[e._v("server.properties")]),e._v(" in "),t("code",[e._v("/home/container")]),e._v(". Within this block, we\ndefine a "),t("code",[e._v("parser")]),e._v(", in this case "),t("code",[e._v("properties")]),e._v(" but the following are "),t("a",{attrs:{href:"https://github.com/pterodactyl/wings/blob/develop/parser/parser.go#L25-L30",target:"_blank",rel:"noopener noreferrer"}},[e._v("valid parsers"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("ul",[t("li",[t("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(" "),t("li",[t("code",[e._v("yaml")]),e._v(" (supports "),t("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),t("li",[t("code",[e._v("properties")])]),e._v(" "),t("li",[t("code",[e._v("ini")])]),e._v(" "),t("li",[t("code",[e._v("json")]),e._v(" (supports "),t("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),t("li",[t("code",[e._v("xml")])])]),e._v(" "),t("p",[e._v("Once you have defined a parser, we then define a "),t("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 "),t("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 "),t("code",[e._v("server.json")]),e._v(" file. In this case, we're assigning the default server port to be used as the "),t("code",[e._v("server-port")]),e._v(" and\n"),t("code",[e._v("query.port")]),e._v(". "),t("strong",[e._v("These placeholders are case sensitive, and should have no spaces in them.")])]),e._v(" "),t("p",[e._v("You can have multiple files listed here, the Daemon will process them in parallel before starting the server. When\nusing "),t("code",[e._v("yaml")]),e._v(" or "),t("code",[e._v("json")]),e._v(" you can use more advanced searching for elements.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"config.yml"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"yaml"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_enabled"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].host"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0:{{server.build.default.port}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servers.*.address"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"127.0.0.1"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"localhost"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("In this example, we are parsing "),t("code",[e._v("config.yml")]),e._v(" using the "),t("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, "),t("code",[e._v("servers.*.address")]),e._v(" uses wildcard matching to match any items\nwithin the "),t("code",[e._v("servers")]),e._v(" block, and then finding each "),t("code",[e._v("address")]),e._v(" block for those items.")]),e._v(" "),t("div",{pre:!0},[t("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 "),t("code",[e._v("127.0.0.1")]),e._v(" or "),t("code",[e._v("localhost")]),e._v(" and replacing them with the\ndocker interface defined in the configuration file using "),t("code",[e._v("{{config.docker.interface}}")]),e._v(".")])]),t("h3",{attrs:{id:"start-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#start-configuration"}},[e._v("#")]),e._v(" Start Configuration")]),e._v(" "),t("p",[e._v("The last block to configure is the "),t("code",[e._v("Start Configuration")]),e._v(" for servers running using this service option.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"done"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('")! For help, type "')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("In the example block above, we define "),t("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 "),t("code",[e._v("ON")]),e._v(" rather\nthan "),t("code",[e._v("STARTING")]),e._v(".")]),e._v(" "),t("p",[e._v("That concludes basic service option configuration.")]),e._v(" "),t("h2",{attrs:{id:"copy-settings-from"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#copy-settings-from"}},[e._v("#")]),e._v(" Copy Settings From")]),e._v(" "),t("p",[e._v("As mentioned above, there is a unique "),t("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(" "),t("p",[t("img",{attrs:{src:a(266),alt:""}})]),e._v(" "),t("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(" "),t("p",[e._v("For example, lets look at the "),t("code",[e._v("Sponge (SpongeVanilla)")]),e._v(" service option.")]),e._v(" "),t("p",[e._v("As you can see, it as been told to copy settings from "),t("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 "),t("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(" "),t("p",[t("em",[e._v("Please note that "),t("code",[e._v("Copy Settings From")]),e._v(" does not support nested copies, you can only copy from a single parent,\nand that parent "),t("strong",[e._v("must not be copying from another option.")])])]),e._v(" "),t("h2",{attrs:{id:"egg-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#egg-variables"}},[e._v("#")]),e._v(" Egg Variables")]),e._v(" "),t("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 "),t("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(" "),t("p",[t("img",{attrs:{src:a(267),alt:""}})]),e._v(" "),t("div",{pre:!0},[t("p",[e._v("The name and description are rather self-explanitory, so I'll skip down to the "),t("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 "),t("code",[e._v("{{WOOZLE_WOO}}")]),e._v(", within file modifications as "),t("code",[e._v("{{env.WOOZLE_WOO}}")]),e._v(", or\njust "),t("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.")])]),t("p",[e._v("The next section is "),t("code",[e._v("Permissions")]),e._v(", which is a dropdown with two options: "),t("code",[e._v("Users Can View")]),e._v(" and "),t("code",[e._v("Users Can Edit")]),e._v(".")]),e._v(" "),t("ul",[t("li",[t("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(" "),t("li",[t("code",[e._v("Users Can Edit")]),e._v(" — allows a user to edit the value of the variable, for example the name of their "),t("code",[e._v("server.jar")]),e._v(" file\nif running Minecraft.")])]),e._v(" "),t("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(" "),t("p",[e._v("Finally, you will need to define some input rules to validate the value against. In this example, we use\n"),t("code",[e._v("required|string|between:1,10")]),e._v(", which means the field is "),t("code",[e._v("required")]),e._v(", must be a "),t("code",[e._v("string")]),e._v(", and must be between "),t("code",[e._v("1")]),e._v(" and\n"),t("code",[e._v("10")]),e._v(" characters in length. You can find "),t("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"),t("OutboundLink")],1),e._v("\non the Laravel website. You can also use ReGEX based validation by using the "),t("code",[e._v("regex:")]),e._v(" rule flag. For example,\n"),t("a",{attrs:{href:"https://regex101.com/r/k4oEOn/1",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("required|regex:/^([\\w\\d._-]+)(\\.jar)$/")]),t("OutboundLink")],1),e._v(" will require the field, and will match the\nregex as any letters or numbers ("),t("code",[e._v("\\w\\d")]),e._v(") including underscore ("),t("code",[e._v("_")]),e._v("), periods ("),t("code",[e._v(".")]),e._v("), and dashes ("),t("code",[e._v("-")]),e._v(") ending in "),t("code",[e._v(".jar")]),e._v(".")]),e._v(" "),t("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(" "),t("p",[t("img",{attrs:{src:a(268),alt:""}})]),e._v(" "),t("h2",{attrs:{id:"list-of-default-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-of-default-variables"}},[e._v("#")]),e._v(" List of default variables")]),e._v(" "),t("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(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Variable")]),e._v(" "),t("th",[e._v("Description")]),e._v(" "),t("th",[e._v("Example")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("TZ")]),e._v(" "),t("td",[e._v("Time Zone")]),e._v(" "),t("td",[t("code",[e._v("Etc/UTC")])])]),e._v(" "),t("tr",[t("td",[e._v("STARTUP")]),e._v(" "),t("td",[e._v("Startup command of the egg")]),e._v(" "),t("td",[t("code",[e._v("java -Xms128M -Xmx"+e._s(e.SERVER_MEMORY)+"M -jar "+e._s(e.SERVER_JARFILE))])])]),e._v(" "),t("tr",[t("td",[e._v("SERVER_MEMORY")]),e._v(" "),t("td",[e._v("Memory available for the server in MB")]),e._v(" "),t("td",[t("code",[e._v("512")])])]),e._v(" "),t("tr",[t("td",[e._v("SERVER_IP")]),e._v(" "),t("td",[e._v("Default ip of the server")]),e._v(" "),t("td",[t("code",[e._v("127.0.0.1")])])]),e._v(" "),t("tr",[t("td",[e._v("SERVER_PORT")]),e._v(" "),t("td",[e._v("Primary Server Port")]),e._v(" "),t("td",[t("code",[e._v("27015")])])]),e._v(" "),t("tr",[t("td",[e._v("P_SERVER_LOCATION")]),e._v(" "),t("td",[e._v("Location of the server")]),e._v(" "),t("td",[t("code",[e._v("Example City")])])]),e._v(" "),t("tr",[t("td",[e._v("P_SERVER_UUID")]),e._v(" "),t("td",[e._v("UUID of the server")]),e._v(" "),t("td",[t("code",[e._v("539fdca8-4a08-4551-a8d2-8ee5475b50d9")])])]),e._v(" "),t("tr",[t("td",[e._v("P_SERVER_ALLOCATION_LIMIT")]),e._v(" "),t("td",[e._v("Limit of allocations allowed for the server")]),e._v(" "),t("td",[t("code",[e._v("0")])])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{257:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Process_Management.516b5b6f.png"},268:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Select.5a2867ee.png"},269:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Copy_Settings_From.e3102cdd.png"},270:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Variables.3962b264.png"},271:function(e,t,a){e.exports=a.p+"assets/img/Pterodactyl_Create_New_Egg_Startup.b6e22637.png"},291:function(e,t,a){"use strict";a.r(t);var s=a(15),n=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"creating-a-custom-egg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-egg"}},[e._v("#")]),e._v(" Creating a Custom Egg")]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),t("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(" "),t("p"),t("div",{staticClass:"table-of-contents"},[t("ul",[t("li",[t("a",{attrs:{href:"#create-new-option"}},[e._v("Create New Option")])]),t("li",[t("a",{attrs:{href:"#configure-process-management"}},[e._v("Configure Process Management")]),t("ul",[t("li",[t("a",{attrs:{href:"#stop-command"}},[e._v("Stop Command")])]),t("li",[t("a",{attrs:{href:"#log-storage"}},[e._v("Log Storage")])]),t("li",[t("a",{attrs:{href:"#configuration-files"}},[e._v("Configuration Files")])]),t("li",[t("a",{attrs:{href:"#start-configuration"}},[e._v("Start Configuration")])])])]),t("li",[t("a",{attrs:{href:"#copy-settings-from"}},[e._v("Copy Settings From")])]),t("li",[t("a",{attrs:{href:"#egg-variables"}},[e._v("Egg Variables")])]),t("li",[t("a",{attrs:{href:"#list-of-default-variables"}},[e._v("List of default variables")])])])]),t("p"),e._v(" "),t("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.\nThe "),t("code",[e._v("Folder Name")]),e._v(" "),t("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(" "),t("p",[e._v("The default start command is also required, however it can be changed per-option.")]),e._v(" "),t("h2",{attrs:{id:"create-new-option"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#create-new-option"}},[e._v("#")]),e._v(" Create New Option")]),e._v(" "),t("p",[e._v("After creating the service, in the bottom right of the page you should see a button titled "),t("code",[e._v("New Egg")]),e._v(", press it.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(268),alt:""}})]),e._v(" "),t("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 "),t("code",[e._v("Associated Nest")]),e._v(" dropdown.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(257),alt:""}})]),e._v(" "),t("p",[e._v("After that, enter an Option Name to describe it, in this case I am using "),t("code",[e._v("Widget")]),e._v(". You will also need to provide a\n"),t("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(" "),t("p",[t("em",[e._v("Docker images must be specifically designed to work with Pterodactyl Panel.")]),e._v(" You should read more about that in\nour "),t("RouterLink",{attrs:{to:"/community/config/eggs/creating_a_custom_image.html"}},[e._v("Creating a Docker Image")]),e._v(" guide.")],1),e._v(" "),t("h2",{attrs:{id:"configure-process-management"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configure-process-management"}},[e._v("#")]),e._v(" Configure Process Management")]),e._v(" "),t("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(" "),t("p",[t("img",{attrs:{src:a(257),alt:""}})]),e._v(" "),t("p",[e._v("The first field you'll encounter is "),t("code",[e._v("Copy Settings From")]),e._v(". The default selection is "),t("code",[e._v("None")]),e._v(". That is expected, and okay.\nThis dropdown is discussed at the end of this article.")]),e._v(" "),t("h3",{attrs:{id:"stop-command"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#stop-command"}},[e._v("#")]),e._v(" Stop Command")]),e._v(" "),t("p",[e._v("Next, you'll encounter "),t("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 "),t("code",[e._v("stop")]),e._v(" or "),t("code",[e._v("end")]),e._v(". Certain programs and games don't have a specified stop command, so\nyou can enter "),t("code",[e._v("^C")]),e._v(" to have the daemon execute a "),t("code",[e._v("SIGINT")]),e._v(" to end the process.")]),e._v(" "),t("h3",{attrs:{id:"log-storage"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#log-storage"}},[e._v("#")]),e._v(" Log Storage")]),e._v(" "),t("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(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h3",{attrs:{id:"configuration-files"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#configuration-files"}},[e._v("#")]),e._v(" Configuration Files")]),e._v(" "),t("p",[e._v("The next block is one of the most complex blocks, the "),t("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(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server.properties"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"properties"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-ip"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"enable-query"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"true"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"server-port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"query.port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("In this example, we are telling the Daemon to read "),t("code",[e._v("server.properties")]),e._v(" in "),t("code",[e._v("/home/container")]),e._v(". Within this block, we\ndefine a "),t("code",[e._v("parser")]),e._v(", in this case "),t("code",[e._v("properties")]),e._v(" but the following are "),t("a",{attrs:{href:"https://github.com/pterodactyl/wings/blob/develop/parser/parser.go#L25-L30",target:"_blank",rel:"noopener noreferrer"}},[e._v("valid parsers"),t("OutboundLink")],1),e._v(":")]),e._v(" "),t("ul",[t("li",[t("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(" "),t("li",[t("code",[e._v("yaml")]),e._v(" (supports "),t("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),t("li",[t("code",[e._v("properties")])]),e._v(" "),t("li",[t("code",[e._v("ini")])]),e._v(" "),t("li",[t("code",[e._v("json")]),e._v(" (supports "),t("code",[e._v("*")]),e._v(" notation)")]),e._v(" "),t("li",[t("code",[e._v("xml")])])]),e._v(" "),t("p",[e._v("Once you have defined a parser, we then define a "),t("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 "),t("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 "),t("code",[e._v("server.json")]),e._v(" file. In this case, we're assigning the default server port to be used as the "),t("code",[e._v("server-port")]),e._v(" and\n"),t("code",[e._v("query.port")]),e._v(". "),t("strong",[e._v("These placeholders are case sensitive, and should have no spaces in them.")])]),e._v(" "),t("p",[e._v("You can have multiple files listed here, the Daemon will process them in parallel before starting the server. When\nusing "),t("code",[e._v("yaml")]),e._v(" or "),t("code",[e._v("json")]),e._v(" you can use more advanced searching for elements.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"config.yml"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"parser"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"yaml"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"find"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_enabled"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean"}},[e._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].query_port"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{server.build.default.port}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"listeners[0].host"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"0.0.0.0:{{server.build.default.port}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"servers.*.address"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"127.0.0.1"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"localhost"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"{{config.docker.interface}}"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("In this example, we are parsing "),t("code",[e._v("config.yml")]),e._v(" using the "),t("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, "),t("code",[e._v("servers.*.address")]),e._v(" uses wildcard matching to match any items\nwithin the "),t("code",[e._v("servers")]),e._v(" block, and then finding each "),t("code",[e._v("address")]),e._v(" block for those items.")]),e._v(" "),t("div",{pre:!0},[t("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 "),t("code",[e._v("127.0.0.1")]),e._v(" or "),t("code",[e._v("localhost")]),e._v(" and replacing them with the\ndocker interface defined in the configuration file using "),t("code",[e._v("{{config.docker.interface}}")]),e._v(".")])]),t("h3",{attrs:{id:"start-configuration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#start-configuration"}},[e._v("#")]),e._v(" Start Configuration")]),e._v(" "),t("p",[e._v("The last block to configure is the "),t("code",[e._v("Start Configuration")]),e._v(" for servers running using this service option.")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"done"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('")! For help, type "')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("In the example block above, we define "),t("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 "),t("code",[e._v("ON")]),e._v(" rather\nthan "),t("code",[e._v("STARTING")]),e._v(".")]),e._v(" "),t("p",[e._v("That concludes basic service option configuration.")]),e._v(" "),t("h2",{attrs:{id:"copy-settings-from"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#copy-settings-from"}},[e._v("#")]),e._v(" Copy Settings From")]),e._v(" "),t("p",[e._v("As mentioned above, there is a unique "),t("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(" "),t("p",[t("img",{attrs:{src:a(269),alt:""}})]),e._v(" "),t("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(" "),t("p",[e._v("For example, lets look at the "),t("code",[e._v("Sponge (SpongeVanilla)")]),e._v(" service option.")]),e._v(" "),t("p",[e._v("As you can see, it as been told to copy settings from "),t("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 "),t("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(" "),t("p",[t("em",[e._v("Please note that "),t("code",[e._v("Copy Settings From")]),e._v(" does not support nested copies, you can only copy from a single parent,\nand that parent "),t("strong",[e._v("must not be copying from another option.")])])]),e._v(" "),t("h2",{attrs:{id:"egg-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#egg-variables"}},[e._v("#")]),e._v(" Egg Variables")]),e._v(" "),t("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 "),t("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(" "),t("p",[t("img",{attrs:{src:a(270),alt:""}})]),e._v(" "),t("div",{pre:!0},[t("p",[e._v("The name and description are rather self-explanitory, so I'll skip down to the "),t("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 "),t("code",[e._v("{{WOOZLE_WOO}}")]),e._v(", within file modifications as "),t("code",[e._v("{{env.WOOZLE_WOO}}")]),e._v(", or\njust "),t("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.")])]),t("p",[e._v("The next section is "),t("code",[e._v("Permissions")]),e._v(", which is a dropdown with two options: "),t("code",[e._v("Users Can View")]),e._v(" and "),t("code",[e._v("Users Can Edit")]),e._v(".")]),e._v(" "),t("ul",[t("li",[t("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(" "),t("li",[t("code",[e._v("Users Can Edit")]),e._v(" — allows a user to edit the value of the variable, for example the name of their "),t("code",[e._v("server.jar")]),e._v(" file\nif running Minecraft.")])]),e._v(" "),t("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(" "),t("p",[e._v("Finally, you will need to define some input rules to validate the value against. In this example, we use\n"),t("code",[e._v("required|string|between:1,10")]),e._v(", which means the field is "),t("code",[e._v("required")]),e._v(", must be a "),t("code",[e._v("string")]),e._v(", and must be between "),t("code",[e._v("1")]),e._v(" and\n"),t("code",[e._v("10")]),e._v(" characters in length. You can find "),t("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"),t("OutboundLink")],1),e._v("\non the Laravel website. You can also use ReGEX based validation by using the "),t("code",[e._v("regex:")]),e._v(" rule flag. For example,\n"),t("a",{attrs:{href:"https://regex101.com/r/k4oEOn/1",target:"_blank",rel:"noopener noreferrer"}},[t("code",[e._v("required|regex:/^([\\w\\d._-]+)(\\.jar)$/")]),t("OutboundLink")],1),e._v(" will require the field, and will match the\nregex as any letters or numbers ("),t("code",[e._v("\\w\\d")]),e._v(") including underscore ("),t("code",[e._v("_")]),e._v("), periods ("),t("code",[e._v(".")]),e._v("), and dashes ("),t("code",[e._v("-")]),e._v(") ending in "),t("code",[e._v(".jar")]),e._v(".")]),e._v(" "),t("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(" "),t("p",[t("img",{attrs:{src:a(271),alt:""}})]),e._v(" "),t("h2",{attrs:{id:"list-of-default-variables"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#list-of-default-variables"}},[e._v("#")]),e._v(" List of default variables")]),e._v(" "),t("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(" "),t("table",[t("thead",[t("tr",[t("th",[e._v("Variable")]),e._v(" "),t("th",[e._v("Description")]),e._v(" "),t("th",[e._v("Example")])])]),e._v(" "),t("tbody",[t("tr",[t("td",[e._v("TZ")]),e._v(" "),t("td",[e._v("Time Zone")]),e._v(" "),t("td",[t("code",[e._v("Etc/UTC")])])]),e._v(" "),t("tr",[t("td",[e._v("STARTUP")]),e._v(" "),t("td",[e._v("Startup command of the egg")]),e._v(" "),t("td",[t("code",[e._v("java -Xms128M -Xmx"+e._s(e.SERVER_MEMORY)+"M -jar "+e._s(e.SERVER_JARFILE))])])]),e._v(" "),t("tr",[t("td",[e._v("SERVER_MEMORY")]),e._v(" "),t("td",[e._v("Memory available for the server in MB")]),e._v(" "),t("td",[t("code",[e._v("512")])])]),e._v(" "),t("tr",[t("td",[e._v("SERVER_IP")]),e._v(" "),t("td",[e._v("Default ip of the server")]),e._v(" "),t("td",[t("code",[e._v("127.0.0.1")])])]),e._v(" "),t("tr",[t("td",[e._v("SERVER_PORT")]),e._v(" "),t("td",[e._v("Primary Server Port")]),e._v(" "),t("td",[t("code",[e._v("27015")])])]),e._v(" "),t("tr",[t("td",[e._v("P_SERVER_LOCATION")]),e._v(" "),t("td",[e._v("Location of the server")]),e._v(" "),t("td",[t("code",[e._v("Example City")])])]),e._v(" "),t("tr",[t("td",[e._v("P_SERVER_UUID")]),e._v(" "),t("td",[e._v("UUID of the server")]),e._v(" "),t("td",[t("code",[e._v("539fdca8-4a08-4551-a8d2-8ee5475b50d9")])])]),e._v(" "),t("tr",[t("td",[e._v("P_SERVER_ALLOCATION_LIMIT")]),e._v(" "),t("td",[e._v("Limit of allocations allowed for the server")]),e._v(" "),t("td",[t("code",[e._v("0")])])])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/app.fd9a0bbb.js b/assets/js/app.322e86a5.js similarity index 88% rename from assets/js/app.fd9a0bbb.js rename to assets/js/app.322e86a5.js index a70746ab..38ac2045 100644 --- a/assets/js/app.fd9a0bbb.js +++ b/assets/js/app.322e86a5.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],u=e[2],f=0,p=[];f=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(i.path||""),p=e&&e.path||"/",d=u.path?k(u.path,p,n||i.append):p,h=function(t,e,n){void 0===e&&(e={});var r,o=n||f;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(c):c(a)}return r}(u.query,i.query,r&&r.options.parseQuery),v=i.hash||u.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:d,query:h,hash:v}}var q,W=function(){},G={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),a=i.location,s=i.route,l=i.href,u={},c=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,v=null==f?"router-link-exact-active":f,g=null==this.activeClass?p:this.activeClass,m=null==this.exactActiveClass?v:this.exactActiveClass,y=s.redirectedFrom?h(null,H(s.redirectedFrom),null,n):s;u[m]=b(r,y,this.exactPath),u[g]=this.exact||this.exactPath?u[m]:function(t,e){return 0===t.path.replace(d,"/").indexOf(e.path.replace(d,"/"))&&(!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 _=u[m]?this.ariaCurrentValue:null,w=function(t){K(t)&&(e.replace?n.replace(a,W):n.push(a,W))},x={click:K};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=w})):x[this.event]=w;var C={class:u},k=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:l,route:s,navigate:w,isActive:u[g],isExactActive:u[m]});if(k){if(1===k.length)return k[0];if(k.length>1||!k.length)return 0===k.length?t():t("span",{},k)}if("a"===this.tag)C.on=x,C.attrs={href:l,"aria-current":_};else{var S=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=V(c.path,s.params),l(c,s,a)}if(s.path){s.params={};for(var d=0;d-1}function St(t,e){return kt(t)&&t._isRouter&&(null==e||t.type===e)}function Pt(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Ot(t){return function(e,n,r){var o=!1,i=0,a=null;Et(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,u=Tt((function(e){var o;((o=e).__esModule||$t&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:q.extend(e),n.components[s]=e,--i<=0&&r()})),c=Tt((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=kt(t)?t:new Error(e),r(a))}));try{l=t(u,c)}catch(t){c(t)}if(l)if("function"==typeof l.then)l.then(u,c);else{var f=l.component;f&&"function"==typeof f.then&&f.then(u,c)}}})),o||r()}}function Et(t,e){return jt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function jt(t){return Array.prototype.concat.apply([],t)}var $t="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Tt(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 At=function(t,e){this.router=t,this.base=function(t){if(!t)if(X){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=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Lt(t,e,n,r){var o=Et(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=q.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return jt(r?o.reverse():o)}function Dt(t,e){if(e)return function(){return t.apply(e,arguments)}}At.prototype.listen=function(t){this.cb=t},At.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},At.prototype.onError=function(t){this.errorCbs.push(t)},At.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(St(t,bt.redirected)&&i===g||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},At.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!St(t)&&kt(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},l=t.matched.length-1,u=o.matched.length-1;if(b(t,o)&&l===u&&t.matched[l]===o.matched[u])return this.ensureURL(),t.hash&&st(this.router,o,t,!1),s(((a=xt(i=o,t,bt.duplicated,'Avoided redundant navigation to current location: "'+i.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=gt&&n;r&&this.listeners.push(at());var o=function(){var n=t.current,o=Rt(t.base);t.current===g&&o===t._startLocation||t.transitionTo(o,(function(t){r&&st(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){mt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){yt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Rt(this.base)!==this.current.fullPath){var e=S(this.base+this.current.fullPath);t?mt(e):yt(e)}},e.prototype.getCurrentLocation=function(){return Rt(this.base)},e}(At);function Rt(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(S(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Mt=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Rt(t);if(!/^\/#/.test(e))return window.location.replace(S(t+"/#"+e)),!0}(this.base)||Nt()}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=gt&&e;n&&this.listeners.push(at());var r=function(){var e=t.current;Nt()&&t.transitionTo(Ut(),(function(r){n&&st(t.router,r,e,!0),gt||Bt(r.fullPath)}))},o=gt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){zt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ut()!==e&&(t?zt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return Ut()},e}(At);function Nt(){var t=Ut();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function Ut(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ft(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function zt(t){gt?mt(Ft(t)):window.location.hash=t}function Bt(t){gt?yt(Ft(t)):window.location.replace(Ft(t))}var Vt=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){St(t,bt.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}(At),Ht=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Y(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!gt&&!1!==t.fallback,this.fallback&&(e="hash"),X||(e="abstract"),this.mode=e,e){case"history":this.history=new It(this,t.base);break;case"hash":this.history=new Mt(this,t.base,this.fallback);break;case"abstract":this.history=new Vt(this,t.base);break;default:0}},qt={currentRoute:{configurable:!0}};Ht.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qt.currentRoute.get=function(){return this.history&&this.history.current},Ht.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 It||n instanceof Mt){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;gt&&o&&"fullPath"in t&&st(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ht.prototype.beforeEach=function(t){return Gt(this.beforeHooks,t)},Ht.prototype.beforeResolve=function(t){return Gt(this.resolveHooks,t)},Ht.prototype.afterEach=function(t){return Gt(this.afterHooks,t)},Ht.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ht.prototype.onError=function(t){this.history.onError(t)},Ht.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)},Ht.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)},Ht.prototype.go=function(t){this.history.go(t)},Ht.prototype.back=function(){this.go(-1)},Ht.prototype.forward=function(){this.go(1)},Ht.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]}))}))):[]},Ht.prototype.resolve=function(t,e,n){var r=H(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?S(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ht.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ht.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Ht.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ht.prototype,qt);var Wt=Ht;function Gt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ht.install=function t(e){if(!t.installed||q!==e){t.installed=!0,q=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",x),e.component("RouterLink",G);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ht.version="3.6.5",Ht.isNavigationFailure=St,Ht.NavigationFailureType=bt,Ht.START_LOCATION=g,X&&window.Vue&&window.Vue.use(Ht);n(92);n(121),n(90);var Kt={DropdownLink:()=>Promise.all([n.e(0),n.e(8)]).then(n.bind(null,244)),DropdownTransition:()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,243)),Home:()=>Promise.all([n.e(1),n.e(11)]).then(n.bind(null,258)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2),n.e(4)]).then(n.bind(null,282)),NavLink:()=>n.e(16).then(n.bind(null,241)),NavLinks:()=>Promise.all([n.e(0),n.e(7)]).then(n.bind(null,246)),Navbar:()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,259)),NotFound:()=>n.e(24).then(n.bind(null,283)),Page:()=>n.e(17).then(n.bind(null,260)),SearchBox:()=>n.e(25).then(n.bind(null,250)),Sidebar:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,281)),SidebarButton:()=>n.e(26).then(n.bind(null,252)),SidebarGroup:()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,261)),SidebarLink:()=>n.e(18).then(n.bind(null,247)),SlickCarousel:()=>Promise.all([n.e(1),n.e(27)]).then(n.bind(null,249)),VersionSelect:()=>n.e(19).then(n.bind(null,251)),VersionSelectItem:()=>n.e(28).then(n.bind(null,245))},Xt={"v-680eebc3":()=>n.e(29).then(n.bind(null,284)),"v-4e72e1d8":()=>n.e(30).then(n.bind(null,285)),"v-7d127123":()=>n.e(31).then(n.bind(null,286)),"v-4a1e6e3a":()=>n.e(9).then(n.bind(null,287)),"v-ef34fffa":()=>n.e(33).then(n.bind(null,288)),"v-622f23e3":()=>n.e(12).then(n.bind(null,289)),"v-10fe793a":()=>n.e(32).then(n.bind(null,290)),"v-090070fa":()=>n.e(34).then(n.bind(null,291)),"v-67c3f2ba":()=>n.e(10).then(n.bind(null,292)),"v-0af75f63":()=>n.e(35).then(n.bind(null,293)),"v-cc322cfa":()=>n.e(36).then(n.bind(null,294)),"v-e4c1f74e":()=>n.e(37).then(n.bind(null,295)),"v-26037fe3":()=>n.e(38).then(n.bind(null,296)),"v-37f7de3e":()=>n.e(40).then(n.bind(null,297)),"v-7c7b3203":()=>n.e(41).then(n.bind(null,298)),"v-07a77f72":()=>n.e(42).then(n.bind(null,299)),"v-9619ebfa":()=>n.e(39).then(n.bind(null,300)),"v-00d38f11":()=>n.e(43).then(n.bind(null,301)),"v-d39223ba":()=>n.e(20).then(n.bind(null,302)),"v-6f0eac21":()=>n.e(45).then(n.bind(null,303)),"v-a31c3dba":()=>n.e(44).then(n.bind(null,304)),"v-481dea23":()=>n.e(46).then(n.bind(null,305)),"v-15b388aa":()=>n.e(47).then(n.bind(null,306)),"v-7f0b5429":()=>n.e(49).then(n.bind(null,307)),"v-8a6363ba":()=>n.e(48).then(n.bind(null,308)),"v-c0e60bfa":()=>n.e(21).then(n.bind(null,309)),"v-29055241":()=>n.e(50).then(n.bind(null,310)),"v-589003f5":()=>n.e(51).then(n.bind(null,311)),"v-019cb63a":()=>n.e(52).then(n.bind(null,312)),"v-7ffeb723":()=>n.e(53).then(n.bind(null,313)),"v-4f03fe0f":()=>n.e(55).then(n.bind(null,314)),"v-9478f2ba":()=>n.e(54).then(n.bind(null,315)),"v-c249e07a":()=>n.e(57).then(n.bind(null,316)),"v-5baa92ba":()=>n.e(56).then(n.bind(null,317)),"v-27941b23":()=>n.e(58).then(n.bind(null,318)),"v-6f4baca5":()=>n.e(59).then(n.bind(null,319)),"v-fa75e63a":()=>n.e(60).then(n.bind(null,320)),"v-dacf6e56":()=>n.e(61).then(n.bind(null,321)),"v-8eec473a":()=>n.e(62).then(n.bind(null,322)),"v-29d5bc56":()=>n.e(63).then(n.bind(null,323)),"v-cbda523a":()=>n.e(64).then(n.bind(null,324)),"v-a75af93a":()=>n.e(65).then(n.bind(null,325)),"v-22ba6d3a":()=>n.e(66).then(n.bind(null,326)),"v-d6319362":()=>n.e(67).then(n.bind(null,327)),"v-7b99cfba":()=>n.e(14).then(n.bind(null,328)),"v-6ec4d123":()=>n.e(68).then(n.bind(null,329)),"v-6cd19ba3":()=>n.e(70).then(n.bind(null,330)),"v-5c5d50fa":()=>n.e(69).then(n.bind(null,331)),"v-1ec46263":()=>n.e(22).then(n.bind(null,332)),"v-55eb8eca":()=>n.e(15).then(n.bind(null,333)),"v-9213d4fa":()=>n.e(71).then(n.bind(null,334))};function Qt(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Jt=/-(\w)/g,Yt=Qt(t=>t.replace(Jt,(t,e)=>e?e.toUpperCase():"")),Zt=/\B([A-Z])/g,te=Qt(t=>t.replace(Zt,"-$1").toLowerCase()),ee=Qt(t=>t.charAt(0).toUpperCase()+t.slice(1));function ne(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ee(Yt(e))):t(ee(e))||t(te(e))}const re=Object.assign({},Kt,Xt),oe=t=>re[t],ie=t=>Xt[t],ae=t=>Kt[t],se=t=>r.a.component(t);function le(t){return ne(ie,t)}function ue(t){return ne(ae,t)}function ce(t){return ne(oe,t)}function fe(t){return ne(se,t)}function pe(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!fe(t)&&ce(t)){const e=await ce(t)();r.a.component(t,e.default)}}))}function de(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var he=n(87),ve=n.n(he),ge=n(88),me=n.n(ge);function ye(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function be(t=""){return t?``:""}function _e(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function we(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xe=[{created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${me()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=be(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=_e(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ve()([{name:"description",content:this.$description}],t,this.siteMeta,we)},updateCanonicalLink(){ye(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",be(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){_e(null,this.currentMetaTags),ye()}}],Ce={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return de("layout",t),r.a.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},ke=n(15),Se=Object(ke.a)(Ce,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Se,"mixins",xe);const Pe=[{name:"v-680eebc3",path:"/404.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-680eebc3").then(n)}},{name:"v-4e72e1d8",path:"/",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-4e72e1d8").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-7d127123",path:"/community/about.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7d127123").then(n)}},{name:"v-4a1e6e3a",path:"/community/config/eggs/creating_a_custom_egg.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-4a1e6e3a").then(n)}},{name:"v-ef34fffa",path:"/community/customization/panel.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-ef34fffa").then(n)}},{name:"v-622f23e3",path:"/community/config/nodes/add_node.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-622f23e3").then(n)}},{name:"v-10fe793a",path:"/community/config/eggs/creating_a_custom_image.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-10fe793a").then(n)}},{name:"v-090070fa",path:"/community/customization/wings.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-090070fa").then(n)}},{name:"v-67c3f2ba",path:"/community/games/minecraft.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-67c3f2ba").then(n)}},{name:"v-0af75f63",path:"/community/installation-guides/panel/centos7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-0af75f63").then(n)}},{name:"v-cc322cfa",path:"/community/installation-guides/panel/centos8.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-cc322cfa").then(n)}},{name:"v-e4c1f74e",path:"/community/installation-guides/panel/debian.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-e4c1f74e").then(n)}},{name:"v-26037fe3",path:"/community/installation-guides/wings/centos7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-26037fe3").then(n)}},{name:"v-37f7de3e",path:"/community/installation-guides/wings/debian.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-37f7de3e").then(n)}},{name:"v-7c7b3203",path:"/community/tutorials/artisan.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7c7b3203").then(n)}},{name:"v-07a77f72",path:"/daemon/0.6/configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-07a77f72").then(n)}},{name:"v-9619ebfa",path:"/community/installation-guides/wings/centos8.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-9619ebfa").then(n)}},{name:"v-00d38f11",path:"/daemon/0.6/debian_8_docker.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-00d38f11").then(n)}},{name:"v-d39223ba",path:"/daemon/0.6/installing.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-d39223ba").then(n)}},{name:"v-6f0eac21",path:"/daemon/0.6/standalone_sftp.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6f0eac21").then(n)}},{name:"v-a31c3dba",path:"/daemon/0.6/kernel_modifications.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-a31c3dba").then(n)}},{name:"v-481dea23",path:"/daemon/0.6/upgrade/0.4_to_0.5.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-481dea23").then(n)}},{name:"v-15b388aa",path:"/daemon/0.6/upgrade/0.5.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-15b388aa").then(n)}},{name:"v-7f0b5429",path:"/daemon/0.6/upgrade/0.6.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7f0b5429").then(n)}},{name:"v-8a6363ba",path:"/daemon/0.6/upgrade/0.5_to_0.6.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-8a6363ba").then(n)}},{name:"v-c0e60bfa",path:"/guides/mounts.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-c0e60bfa").then(n)}},{name:"v-29055241",path:"/daemon/0.6/upgrading.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-29055241").then(n)}},{name:"v-589003f5",path:"/guides/php_upgrade.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-589003f5").then(n)}},{name:"v-019cb63a",path:"/panel/0.7/configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-019cb63a").then(n)}},{name:"v-7ffeb723",path:"/panel/0.7/getting_started.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7ffeb723").then(n)}},{name:"v-4f03fe0f",path:"/panel/0.7/upgrade/0.6_to_0.7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-4f03fe0f").then(n)}},{name:"v-9478f2ba",path:"/panel/0.7/troubleshooting.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-9478f2ba").then(n)}},{name:"v-c249e07a",path:"/panel/0.7/upgrading.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-c249e07a").then(n)}},{name:"v-5baa92ba",path:"/panel/0.7/upgrade/0.7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-5baa92ba").then(n)}},{name:"v-27941b23",path:"/panel/0.7/webserver_configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-27941b23").then(n)}},{name:"v-6f4baca5",path:"/panel/1.0/additional_configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6f4baca5").then(n)}},{name:"v-fa75e63a",path:"/panel/1.0/getting_started.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-fa75e63a").then(n)}},{name:"v-dacf6e56",path:"/panel/1.0/legacy_upgrade.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-dacf6e56").then(n)}},{name:"v-8eec473a",path:"/panel/1.0/troubleshooting.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-8eec473a").then(n)}},{name:"v-29d5bc56",path:"/panel/1.0/updating.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-29d5bc56").then(n)}},{name:"v-cbda523a",path:"/panel/1.0/webserver_configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-cbda523a").then(n)}},{name:"v-a75af93a",path:"/project/about.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-a75af93a").then(n)}},{name:"v-22ba6d3a",path:"/project/community.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-22ba6d3a").then(n)}},{name:"v-d6319362",path:"/project/introduction.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-d6319362").then(n)}},{name:"v-7b99cfba",path:"/project/terms.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7b99cfba").then(n)}},{name:"v-6ec4d123",path:"/tutorials/creating_ssl_certificates.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6ec4d123").then(n)}},{name:"v-6cd19ba3",path:"/wings/1.0/configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6cd19ba3").then(n)}},{name:"v-5c5d50fa",path:"/tutorials/mysql_setup.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-5c5d50fa").then(n)}},{name:"v-1ec46263",path:"/wings/1.0/migrating.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-1ec46263").then(n)}},{name:"v-55eb8eca",path:"/wings/1.0/installing.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-55eb8eca").then(n)}},{name:"v-9213d4fa",path:"/wings/1.0/upgrading.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-9213d4fa").then(n)}},{path:"*",component:Se}],Oe={title:"Pterodactyl",description:"Pterodactyl is an 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.",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 © Dane Everitt and 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:"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:"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:"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:"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 Dependencies",slug:"install-dependencies"},{level:3,title:"SELinux Configuration",slug:"selinux-configuration"},{level:3,title:"Installing Dependencies",slug:"installing-dependencies"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"PHP Configuration",slug:"php-configuration"},{level:3,title:"SELinux configuration",slug:"selinux-configuration-2"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Enterprise Linux 8 and Fedora Server 40",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 Dependencies",slug:"install-dependencies"},{level:3,title:"SELinux Configuration",slug:"selinux-configuration"},{level:3,title:"Installing Dependencies",slug:"installing-dependencies"},{level:2,title:"PHP Configuration",slug:"php-configuration"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Debian 11 & 12",frontmatter:{},regularPath:"/community/installation-guides/panel/debian.html",relativePath:"community/installation-guides/panel/debian.md",key:"v-e4c1f74e",path:"/community/installation-guides/panel/debian.html",headers:[{level:2,title:"Dependency Installation",slug:"dependency-installation"},{level:3,title:"Installing Composer",slug:"installing-composer"},{level:3,title:"Download Files",slug:"download-files"}]},{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 Dependencies",slug:"install-dependencies"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Debian 11 & 12",frontmatter:{},regularPath:"/community/installation-guides/wings/debian.html",relativePath:"community/installation-guides/wings/debian.md",key:"v-37f7de3e",path:"/community/installation-guides/wings/debian.html",headers:[{level:2,title:"Install",slug:"install"}]},{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:{meta:[{name:"robots",content:"noindex"}]},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:"Enterprise Linux 8 and Fedora Server 40",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 Dependencies",slug:"install-dependencies"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Docker on Debian 8",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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:"Standalone SFTP Server",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Kernel Modifications",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Upgrading 0.4.X to 0.5.X",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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.6 Series",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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 0.5.X to 0.6.X",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"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",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"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"},{level:3,title:"Return to the 1.X.X Upgrade Guide",slug:"return-to-the-1-x-x-upgrade-guide"}]},{title:"Environment Configuration",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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:"Upgrading 0.6 to 0.7",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Troubleshooting",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Upgrading 0.7 Series",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Webserver Configuration",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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"},{level:2,title:"Telemetry",slug:"telemetry"},{level:3,title:"How does it work?",slug:"how-does-it-work"},{level:3,title:"What data is collected?",slug:"what-data-is-collected"},{level:3,title:"How is the data stored?",slug:"how-is-the-data-stored"},{level:3,title:"Why?",slug:"why"},{level:3,title:"Enabling Telemetry",slug:"enabling-telemetry"},{level:3,title:"Disabling Telemetry",slug:"disabling-telemetry"}]},{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"},{level:3,title:"Telemetry",slug:"telemetry"}]},{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:"Containers don't have internet? Probably a DNS issue!",slug:"containers-don-t-have-internet-probably-a-dns-issue"},{level:2,title:"Schedule Troubleshooting",slug:"schedule-troubleshooting"},{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"},{level:3,title:"Telemetry",slug:"telemetry"}]},{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"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-5"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-6"}]},{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:"Release Signing",slug:"release-signing"}]},{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:"Simple Setup Diagram",slug:"simple-setup-diagram"},{level:2,title:"Advanced Setup Diagram",slug:"advanced-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:2,title:"Creating a Certificate",slug:"creating-a-certificate"},{level:3,title:"HTTP challenge",slug:"http-challenge"},{level:3,title:"DNS challenge",slug:"dns-challenge"},{level:3,title:"Auto Renewal",slug:"auto-renewal"},{level:3,title:"Troubleshooting",slug:"troubleshooting"},{level:3,title:"Obtaining CloudFlare API Key (Legacy)",slug:"obtaining-cloudflare-api-key-legacy"},{level:3,title:"Creating a Certificate",slug:"creating-a-certificate-2"},{level:3,title:"Obtaining CloudFlare API Key (Modern)",slug:"obtaining-cloudflare-api-key-modern"},{level:3,title:"Creating a Certificate",slug:"creating-a-certificate-3"},{level:3,title:"Auto Renewal",slug:"auto-renewal-2"},{level:3,title:"Installing Caddy with Cloudflare DNS plugin",slug:"installing-caddy-with-cloudflare-dns-plugin"},{level:3,title:"Obtaining CloudFlare API Token",slug:"obtaining-cloudflare-api-token"},{level:3,title:"Reconfiguring Caddy to use Cloudflare DNS for obtaining certificates",slug:"reconfiguring-caddy-to-use-cloudflare-dns-for-obtaining-certificates"}]},{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:"Container PID Limit",slug:"container-pid-limit"},{level:3,title:"Example of usage",slug:"example-of-usage-3"},{level:2,title:"Throttles Limits",slug:"throttles-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-4"},{level:2,title:"Installer Limits",slug:"installer-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-5"},{level:2,title:"Other values",slug:"other-values"}]},{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:"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:"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:"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/debian.md"]},{title:"Wings Installation",collapsable:!1,children:["/community/installation-guides/wings/centos7.md","/community/installation-guides/wings/centos8.md","/community/installation-guides/wings/debian.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.11",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.11",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"]}]}}};function Ee(...t){const e=new RegExp("/{1,}","g");return t.join("/").replace(e,"/")}n(235);r.a.component("Badge",()=>n.e(23).then(n.bind(null,335)));var je=n(89),$e=n.n(je),Te=[({Vue:t,options:e,router:n,siteData:r,isServer:o})=>{var i;(i=r.themeConfig.sidebar,Object.entries(i).map(([t,e])=>e.filter(t=>Array.isArray(t.versions)).map(e=>({...e,path:Ee(t,e.path)}))).flat()).forEach(t=>{n.addRoutes(n.options.routes.map(e=>{if(e.path.startsWith(t.path+t.currentVersion))return[{path:e.path.replace(t.currentVersion,"current"),redirect:e.path},{path:e.path.replace(t.currentVersion+"/",""),redirect:e.path}]}).filter(t=>t).flat().concat([{path:"/panel/1.0/upgrade/1.0.html",redirect:"/panel/1.0/updating.html"},{path:"/panel/1.0/upgrade/0.7_to_1.0.html",redirect:"/panel/1.0/legacy_upgrade.html"}]))})},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},({Vue:t})=>t.use($e.a)],Ae=[];class Le extends class{constructor(){this.store=new r.a({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){r.a.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Le.prototype,{getPageAsyncComponent:le,getLayoutAsyncComponent:ue,getAsyncComponent:ce,getVueComponent:fe});var De={install(t){const e=new Le;t.$vuepress=e,t.prototype.$vuepress=e}};function Ie(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Re={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return de("pageKey",e),r.a.component(e)||r.a.component(e,le(e)),r.a.component(e)?t(e):t("")}},Me={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ne={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Ue=(n(236),n(237),Object(ke.a)(Ne,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Fe={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};r.a.config.productionTip=!1,r.a.use(Wt),r.a.use(De),r.a.mixin(function(t,e,n=r.a){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const o=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),a),{computed:a}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"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||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!r.a.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Ie(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Ie(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Ie(t,o)?r(o):Ie(t,n)?r(n):r()}})}(n);const o={};try{await Promise.all(Te.filter(t=>"function"==typeof t).map(e=>e({Vue:r.a,options:o,router:n,siteData:Oe,isServer:t})))}catch(t){console.error(t)}return{app:new r.a(Object.assign(o,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Ae.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file + */function o(t,e){for(var n in e)t[n]=e[n];return t}var i=/[!'()*]/g,a=function(t){return"%"+t.charCodeAt(0).toString(16)},s=/%2C/g,l=function(t){return encodeURIComponent(t).replace(i,a).replace(s,",")};function u(t){try{return decodeURIComponent(t)}catch(t){0}return t}var c=function(t){return null==t||"object"==typeof t?t:String(t)};function f(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=u(n.shift()),o=n.length>0?u(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function p(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return l(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(l(e)):r.push(l(e)+"="+l(t)))})),r.join("&")}return l(e)+"="+l(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var d=/\/?$/;function h(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=v(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:y(e,o),matched:t?m(t):[]};return n&&(a.redirectedFrom=y(n,o)),Object.freeze(a)}function v(t){if(Array.isArray(t))return t.map(v);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=v(t[n]);return e}return t}var g=h(null,{path:"/"});function m(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function y(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||p)(r)+o}function b(t,e,n){return e===g?t===e:!!e&&(t.path&&e.path?t.path.replace(d,"")===e.path.replace(d,"")&&(n||t.hash===e.hash&&_(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&_(t.query,e.query)&&_(t.params,e.params))))}function _(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?_(i,a):String(i)===String(a)}))}function w(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(i.path||""),p=e&&e.path||"/",d=u.path?k(u.path,p,n||i.append):p,h=function(t,e,n){void 0===e&&(e={});var r,o=n||f;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(c):c(a)}return r}(u.query,i.query,r&&r.options.parseQuery),v=i.hash||u.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:d,query:h,hash:v}}var q,W=function(){},G={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),a=i.location,s=i.route,l=i.href,u={},c=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,v=null==f?"router-link-exact-active":f,g=null==this.activeClass?p:this.activeClass,m=null==this.exactActiveClass?v:this.exactActiveClass,y=s.redirectedFrom?h(null,H(s.redirectedFrom),null,n):s;u[m]=b(r,y,this.exactPath),u[g]=this.exact||this.exactPath?u[m]:function(t,e){return 0===t.path.replace(d,"/").indexOf(e.path.replace(d,"/"))&&(!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 _=u[m]?this.ariaCurrentValue:null,w=function(t){K(t)&&(e.replace?n.replace(a,W):n.push(a,W))},x={click:K};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=w})):x[this.event]=w;var C={class:u},k=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:l,route:s,navigate:w,isActive:u[g],isExactActive:u[m]});if(k){if(1===k.length)return k[0];if(k.length>1||!k.length)return 0===k.length?t():t("span",{},k)}if("a"===this.tag)C.on=x,C.attrs={href:l,"aria-current":_};else{var S=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=V(c.path,s.params),l(c,s,a)}if(s.path){s.params={};for(var d=0;d-1}function St(t,e){return kt(t)&&t._isRouter&&(null==e||t.type===e)}function Pt(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Ot(t){return function(e,n,r){var o=!1,i=0,a=null;Et(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,u=Tt((function(e){var o;((o=e).__esModule||$t&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:q.extend(e),n.components[s]=e,--i<=0&&r()})),c=Tt((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=kt(t)?t:new Error(e),r(a))}));try{l=t(u,c)}catch(t){c(t)}if(l)if("function"==typeof l.then)l.then(u,c);else{var f=l.component;f&&"function"==typeof f.then&&f.then(u,c)}}})),o||r()}}function Et(t,e){return jt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function jt(t){return Array.prototype.concat.apply([],t)}var $t="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Tt(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 At=function(t,e){this.router=t,this.base=function(t){if(!t)if(X){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=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Lt(t,e,n,r){var o=Et(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=q.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return jt(r?o.reverse():o)}function Dt(t,e){if(e)return function(){return t.apply(e,arguments)}}At.prototype.listen=function(t){this.cb=t},At.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},At.prototype.onError=function(t){this.errorCbs.push(t)},At.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(St(t,bt.redirected)&&i===g||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},At.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!St(t)&&kt(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},l=t.matched.length-1,u=o.matched.length-1;if(b(t,o)&&l===u&&t.matched[l]===o.matched[u])return this.ensureURL(),t.hash&&st(this.router,o,t,!1),s(((a=xt(i=o,t,bt.duplicated,'Avoided redundant navigation to current location: "'+i.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=gt&&n;r&&this.listeners.push(at());var o=function(){var n=t.current,o=Rt(t.base);t.current===g&&o===t._startLocation||t.transitionTo(o,(function(t){r&&st(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){mt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){yt(S(r.base+t.fullPath)),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Rt(this.base)!==this.current.fullPath){var e=S(this.base+this.current.fullPath);t?mt(e):yt(e)}},e.prototype.getCurrentLocation=function(){return Rt(this.base)},e}(At);function Rt(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(S(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Mt=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Rt(t);if(!/^\/#/.test(e))return window.location.replace(S(t+"/#"+e)),!0}(this.base)||Nt()}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=gt&&e;n&&this.listeners.push(at());var r=function(){var e=t.current;Nt()&&t.transitionTo(Ut(),(function(r){n&&st(t.router,r,e,!0),gt||Bt(r.fullPath)}))},o=gt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){zt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),st(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ut()!==e&&(t?zt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return Ut()},e}(At);function Nt(){var t=Ut();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function Ut(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ft(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function zt(t){gt?mt(Ft(t)):window.location.hash=t}function Bt(t){gt?yt(Ft(t)):window.location.replace(Ft(t))}var Vt=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){St(t,bt.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}(At),Ht=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Y(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!gt&&!1!==t.fallback,this.fallback&&(e="hash"),X||(e="abstract"),this.mode=e,e){case"history":this.history=new It(this,t.base);break;case"hash":this.history=new Mt(this,t.base,this.fallback);break;case"abstract":this.history=new Vt(this,t.base);break;default:0}},qt={currentRoute:{configurable:!0}};Ht.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qt.currentRoute.get=function(){return this.history&&this.history.current},Ht.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 It||n instanceof Mt){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;gt&&o&&"fullPath"in t&&st(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ht.prototype.beforeEach=function(t){return Gt(this.beforeHooks,t)},Ht.prototype.beforeResolve=function(t){return Gt(this.resolveHooks,t)},Ht.prototype.afterEach=function(t){return Gt(this.afterHooks,t)},Ht.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ht.prototype.onError=function(t){this.history.onError(t)},Ht.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)},Ht.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)},Ht.prototype.go=function(t){this.history.go(t)},Ht.prototype.back=function(){this.go(-1)},Ht.prototype.forward=function(){this.go(1)},Ht.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]}))}))):[]},Ht.prototype.resolve=function(t,e,n){var r=H(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?S(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Ht.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ht.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Ht.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ht.prototype,qt);var Wt=Ht;function Gt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ht.install=function t(e){if(!t.installed||q!==e){t.installed=!0,q=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",x),e.component("RouterLink",G);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Ht.version="3.6.5",Ht.isNavigationFailure=St,Ht.NavigationFailureType=bt,Ht.START_LOCATION=g,X&&window.Vue&&window.Vue.use(Ht);n(92);n(121),n(90);var Kt={DropdownLink:()=>Promise.all([n.e(0),n.e(8)]).then(n.bind(null,244)),DropdownTransition:()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,243)),Home:()=>Promise.all([n.e(1),n.e(11)]).then(n.bind(null,258)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2),n.e(4)]).then(n.bind(null,282)),NavLink:()=>n.e(16).then(n.bind(null,241)),NavLinks:()=>Promise.all([n.e(0),n.e(7)]).then(n.bind(null,246)),Navbar:()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,259)),NotFound:()=>n.e(24).then(n.bind(null,283)),Page:()=>n.e(17).then(n.bind(null,260)),SearchBox:()=>n.e(25).then(n.bind(null,250)),Sidebar:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,281)),SidebarButton:()=>n.e(26).then(n.bind(null,252)),SidebarGroup:()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,261)),SidebarLink:()=>n.e(18).then(n.bind(null,247)),SlickCarousel:()=>Promise.all([n.e(1),n.e(27)]).then(n.bind(null,249)),VersionSelect:()=>n.e(19).then(n.bind(null,251)),VersionSelectItem:()=>n.e(28).then(n.bind(null,245))},Xt={"v-680eebc3":()=>n.e(29).then(n.bind(null,284)),"v-7d127123":()=>n.e(31).then(n.bind(null,285)),"v-4e72e1d8":()=>n.e(30).then(n.bind(null,286)),"v-10fe793a":()=>n.e(32).then(n.bind(null,287)),"v-622f23e3":()=>n.e(12).then(n.bind(null,288)),"v-ef34fffa":()=>n.e(33).then(n.bind(null,289)),"v-090070fa":()=>n.e(34).then(n.bind(null,290)),"v-4a1e6e3a":()=>n.e(9).then(n.bind(null,291)),"v-67c3f2ba":()=>n.e(10).then(n.bind(null,292)),"v-0af75f63":()=>n.e(35).then(n.bind(null,293)),"v-cc322cfa":()=>n.e(36).then(n.bind(null,294)),"v-e4c1f74e":()=>n.e(37).then(n.bind(null,295)),"v-26037fe3":()=>n.e(38).then(n.bind(null,296)),"v-9619ebfa":()=>n.e(39).then(n.bind(null,297)),"v-37f7de3e":()=>n.e(40).then(n.bind(null,298)),"v-7c7b3203":()=>n.e(41).then(n.bind(null,299)),"v-00d38f11":()=>n.e(43).then(n.bind(null,300)),"v-07a77f72":()=>n.e(42).then(n.bind(null,301)),"v-d39223ba":()=>n.e(20).then(n.bind(null,302)),"v-a31c3dba":()=>n.e(44).then(n.bind(null,303)),"v-481dea23":()=>n.e(46).then(n.bind(null,304)),"v-6f0eac21":()=>n.e(45).then(n.bind(null,305)),"v-15b388aa":()=>n.e(47).then(n.bind(null,306)),"v-8a6363ba":()=>n.e(48).then(n.bind(null,307)),"v-7f0b5429":()=>n.e(49).then(n.bind(null,308)),"v-c0e60bfa":()=>n.e(21).then(n.bind(null,309)),"v-589003f5":()=>n.e(51).then(n.bind(null,310)),"v-019cb63a":()=>n.e(52).then(n.bind(null,311)),"v-29055241":()=>n.e(50).then(n.bind(null,312)),"v-7ffeb723":()=>n.e(53).then(n.bind(null,313)),"v-4f03fe0f":()=>n.e(55).then(n.bind(null,314)),"v-9478f2ba":()=>n.e(54).then(n.bind(null,315)),"v-5baa92ba":()=>n.e(56).then(n.bind(null,316)),"v-c249e07a":()=>n.e(57).then(n.bind(null,317)),"v-27941b23":()=>n.e(58).then(n.bind(null,318)),"v-6f4baca5":()=>n.e(59).then(n.bind(null,319)),"v-fa75e63a":()=>n.e(60).then(n.bind(null,320)),"v-dacf6e56":()=>n.e(61).then(n.bind(null,321)),"v-8eec473a":()=>n.e(62).then(n.bind(null,322)),"v-29d5bc56":()=>n.e(63).then(n.bind(null,323)),"v-a75af93a":()=>n.e(65).then(n.bind(null,324)),"v-cbda523a":()=>n.e(64).then(n.bind(null,325)),"v-22ba6d3a":()=>n.e(66).then(n.bind(null,326)),"v-d6319362":()=>n.e(67).then(n.bind(null,327)),"v-7b99cfba":()=>n.e(14).then(n.bind(null,328)),"v-5c5d50fa":()=>n.e(69).then(n.bind(null,329)),"v-6ec4d123":()=>n.e(68).then(n.bind(null,330)),"v-6cd19ba3":()=>n.e(70).then(n.bind(null,331)),"v-55eb8eca":()=>n.e(15).then(n.bind(null,332)),"v-9213d4fa":()=>n.e(71).then(n.bind(null,333)),"v-1ec46263":()=>n.e(22).then(n.bind(null,334))};function Qt(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Jt=/-(\w)/g,Yt=Qt(t=>t.replace(Jt,(t,e)=>e?e.toUpperCase():"")),Zt=/\B([A-Z])/g,te=Qt(t=>t.replace(Zt,"-$1").toLowerCase()),ee=Qt(t=>t.charAt(0).toUpperCase()+t.slice(1));function ne(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ee(Yt(e))):t(ee(e))||t(te(e))}const re=Object.assign({},Kt,Xt),oe=t=>re[t],ie=t=>Xt[t],ae=t=>Kt[t],se=t=>r.a.component(t);function le(t){return ne(ie,t)}function ue(t){return ne(ae,t)}function ce(t){return ne(oe,t)}function fe(t){return ne(se,t)}function pe(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!fe(t)&&ce(t)){const e=await ce(t)();r.a.component(t,e.default)}}))}function de(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var he=n(87),ve=n.n(he),ge=n(88),me=n.n(ge);function ye(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function be(t=""){return t?``:""}function _e(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function we(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xe=[{created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${me()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=be(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=_e(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ve()([{name:"description",content:this.$description}],t,this.siteMeta,we)},updateCanonicalLink(){ye(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",be(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){_e(null,this.currentMetaTags),ye()}}],Ce={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return de("layout",t),r.a.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},ke=n(15),Se=Object(ke.a)(Ce,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Se,"mixins",xe);const Pe=[{name:"v-680eebc3",path:"/404.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-680eebc3").then(n)}},{name:"v-7d127123",path:"/community/about.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7d127123").then(n)}},{name:"v-4e72e1d8",path:"/",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-4e72e1d8").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-10fe793a",path:"/community/config/eggs/creating_a_custom_image.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-10fe793a").then(n)}},{name:"v-622f23e3",path:"/community/config/nodes/add_node.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-622f23e3").then(n)}},{name:"v-ef34fffa",path:"/community/customization/panel.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-ef34fffa").then(n)}},{name:"v-090070fa",path:"/community/customization/wings.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-090070fa").then(n)}},{name:"v-4a1e6e3a",path:"/community/config/eggs/creating_a_custom_egg.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-4a1e6e3a").then(n)}},{name:"v-67c3f2ba",path:"/community/games/minecraft.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-67c3f2ba").then(n)}},{name:"v-0af75f63",path:"/community/installation-guides/panel/centos7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-0af75f63").then(n)}},{name:"v-cc322cfa",path:"/community/installation-guides/panel/centos8.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-cc322cfa").then(n)}},{name:"v-e4c1f74e",path:"/community/installation-guides/panel/debian.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-e4c1f74e").then(n)}},{name:"v-26037fe3",path:"/community/installation-guides/wings/centos7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-26037fe3").then(n)}},{name:"v-9619ebfa",path:"/community/installation-guides/wings/centos8.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-9619ebfa").then(n)}},{name:"v-37f7de3e",path:"/community/installation-guides/wings/debian.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-37f7de3e").then(n)}},{name:"v-7c7b3203",path:"/community/tutorials/artisan.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7c7b3203").then(n)}},{name:"v-00d38f11",path:"/daemon/0.6/debian_8_docker.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-00d38f11").then(n)}},{name:"v-07a77f72",path:"/daemon/0.6/configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-07a77f72").then(n)}},{name:"v-d39223ba",path:"/daemon/0.6/installing.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-d39223ba").then(n)}},{name:"v-a31c3dba",path:"/daemon/0.6/kernel_modifications.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-a31c3dba").then(n)}},{name:"v-481dea23",path:"/daemon/0.6/upgrade/0.4_to_0.5.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-481dea23").then(n)}},{name:"v-6f0eac21",path:"/daemon/0.6/standalone_sftp.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6f0eac21").then(n)}},{name:"v-15b388aa",path:"/daemon/0.6/upgrade/0.5.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-15b388aa").then(n)}},{name:"v-8a6363ba",path:"/daemon/0.6/upgrade/0.5_to_0.6.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-8a6363ba").then(n)}},{name:"v-7f0b5429",path:"/daemon/0.6/upgrade/0.6.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7f0b5429").then(n)}},{name:"v-c0e60bfa",path:"/guides/mounts.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-c0e60bfa").then(n)}},{name:"v-589003f5",path:"/guides/php_upgrade.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-589003f5").then(n)}},{name:"v-019cb63a",path:"/panel/0.7/configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-019cb63a").then(n)}},{name:"v-29055241",path:"/daemon/0.6/upgrading.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-29055241").then(n)}},{name:"v-7ffeb723",path:"/panel/0.7/getting_started.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7ffeb723").then(n)}},{name:"v-4f03fe0f",path:"/panel/0.7/upgrade/0.6_to_0.7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-4f03fe0f").then(n)}},{name:"v-9478f2ba",path:"/panel/0.7/troubleshooting.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-9478f2ba").then(n)}},{name:"v-5baa92ba",path:"/panel/0.7/upgrade/0.7.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-5baa92ba").then(n)}},{name:"v-c249e07a",path:"/panel/0.7/upgrading.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-c249e07a").then(n)}},{name:"v-27941b23",path:"/panel/0.7/webserver_configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-27941b23").then(n)}},{name:"v-6f4baca5",path:"/panel/1.0/additional_configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6f4baca5").then(n)}},{name:"v-fa75e63a",path:"/panel/1.0/getting_started.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-fa75e63a").then(n)}},{name:"v-dacf6e56",path:"/panel/1.0/legacy_upgrade.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-dacf6e56").then(n)}},{name:"v-8eec473a",path:"/panel/1.0/troubleshooting.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-8eec473a").then(n)}},{name:"v-29d5bc56",path:"/panel/1.0/updating.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-29d5bc56").then(n)}},{name:"v-a75af93a",path:"/project/about.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-a75af93a").then(n)}},{name:"v-cbda523a",path:"/panel/1.0/webserver_configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-cbda523a").then(n)}},{name:"v-22ba6d3a",path:"/project/community.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-22ba6d3a").then(n)}},{name:"v-d6319362",path:"/project/introduction.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-d6319362").then(n)}},{name:"v-7b99cfba",path:"/project/terms.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-7b99cfba").then(n)}},{name:"v-5c5d50fa",path:"/tutorials/mysql_setup.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-5c5d50fa").then(n)}},{name:"v-6ec4d123",path:"/tutorials/creating_ssl_certificates.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6ec4d123").then(n)}},{name:"v-6cd19ba3",path:"/wings/1.0/configuration.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-6cd19ba3").then(n)}},{name:"v-55eb8eca",path:"/wings/1.0/installing.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-55eb8eca").then(n)}},{name:"v-9213d4fa",path:"/wings/1.0/upgrading.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-9213d4fa").then(n)}},{name:"v-1ec46263",path:"/wings/1.0/migrating.html",component:Se,beforeEnter:(t,e,n)=>{pe("Layout","v-1ec46263").then(n)}},{path:"*",component:Se}],Oe={title:"Pterodactyl",description:"Pterodactyl is an 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.",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:"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:"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 © Dane Everitt and contributors"},regularPath:"/",relativePath:"README.md",key:"v-4e72e1d8",path:"/"},{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:"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 Dependencies",slug:"install-dependencies"},{level:3,title:"SELinux Configuration",slug:"selinux-configuration"},{level:3,title:"Installing Dependencies",slug:"installing-dependencies"},{level:2,title:"Server Configuration",slug:"server-configuration"},{level:3,title:"PHP Configuration",slug:"php-configuration"},{level:3,title:"SELinux configuration",slug:"selinux-configuration-2"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Enterprise Linux 8 and Fedora Server 40",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 Dependencies",slug:"install-dependencies"},{level:3,title:"SELinux Configuration",slug:"selinux-configuration"},{level:3,title:"Installing Dependencies",slug:"installing-dependencies"},{level:2,title:"PHP Configuration",slug:"php-configuration"},{level:2,title:"Installing the Panel",slug:"installing-the-panel"}]},{title:"Debian 11 & 12",frontmatter:{},regularPath:"/community/installation-guides/panel/debian.html",relativePath:"community/installation-guides/panel/debian.md",key:"v-e4c1f74e",path:"/community/installation-guides/panel/debian.html",headers:[{level:2,title:"Dependency Installation",slug:"dependency-installation"},{level:3,title:"Installing Composer",slug:"installing-composer"},{level:3,title:"Download Files",slug:"download-files"}]},{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 Dependencies",slug:"install-dependencies"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Enterprise Linux 8 and Fedora Server 40",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 Dependencies",slug:"install-dependencies"},{level:2,title:"Installing Wings",slug:"installing-wings"}]},{title:"Debian 11 & 12",frontmatter:{},regularPath:"/community/installation-guides/wings/debian.html",relativePath:"community/installation-guides/wings/debian.md",key:"v-37f7de3e",path:"/community/installation-guides/wings/debian.html",headers:[{level:2,title:"Install",slug:"install"}]},{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:{meta:[{name:"robots",content:"noindex"}]},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:"Additional Configuration",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Installation",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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:"Upgrading 0.4.X to 0.5.X",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Standalone SFTP Server",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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.5 Series",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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:"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"},{level:3,title:"Return to the 1.X.X Upgrade Guide",slug:"return-to-the-1-x-x-upgrade-guide"}]},{title:"Environment Configuration",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Upgrading",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Getting Started",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Upgrading 0.6 to 0.7",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:"Troubleshooting",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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.7 Series",frontmatter:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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:{meta:[{name:"robots",content:"noindex"}]},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"},{level:2,title:"Telemetry",slug:"telemetry"},{level:3,title:"How does it work?",slug:"how-does-it-work"},{level:3,title:"What data is collected?",slug:"what-data-is-collected"},{level:3,title:"How is the data stored?",slug:"how-is-the-data-stored"},{level:3,title:"Why?",slug:"why"},{level:3,title:"Enabling Telemetry",slug:"enabling-telemetry"},{level:3,title:"Disabling Telemetry",slug:"disabling-telemetry"}]},{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"},{level:3,title:"Telemetry",slug:"telemetry"}]},{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:"Containers don't have internet? Probably a DNS issue!",slug:"containers-don-t-have-internet-probably-a-dns-issue"},{level:2,title:"Schedule Troubleshooting",slug:"schedule-troubleshooting"},{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"},{level:3,title:"Telemetry",slug:"telemetry"}]},{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:"Release Signing",slug:"release-signing"}]},{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"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-5"},{level:3,title:"Enabling Configuration",slug:"enabling-configuration-6"}]},{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:"Simple Setup Diagram",slug:"simple-setup-diagram"},{level:2,title:"Advanced Setup Diagram",slug:"advanced-setup-diagram"}]},{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:"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:2,title:"Creating a Certificate",slug:"creating-a-certificate"},{level:3,title:"HTTP challenge",slug:"http-challenge"},{level:3,title:"DNS challenge",slug:"dns-challenge"},{level:3,title:"Auto Renewal",slug:"auto-renewal"},{level:3,title:"Troubleshooting",slug:"troubleshooting"},{level:3,title:"Obtaining CloudFlare API Key (Legacy)",slug:"obtaining-cloudflare-api-key-legacy"},{level:3,title:"Creating a Certificate",slug:"creating-a-certificate-2"},{level:3,title:"Obtaining CloudFlare API Key (Modern)",slug:"obtaining-cloudflare-api-key-modern"},{level:3,title:"Creating a Certificate",slug:"creating-a-certificate-3"},{level:3,title:"Auto Renewal",slug:"auto-renewal-2"},{level:3,title:"Installing Caddy with Cloudflare DNS plugin",slug:"installing-caddy-with-cloudflare-dns-plugin"},{level:3,title:"Obtaining CloudFlare API Token",slug:"obtaining-cloudflare-api-token"},{level:3,title:"Reconfiguring Caddy to use Cloudflare DNS for obtaining certificates",slug:"reconfiguring-caddy-to-use-cloudflare-dns-for-obtaining-certificates"}]},{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:"Container PID Limit",slug:"container-pid-limit"},{level:3,title:"Example of usage",slug:"example-of-usage-3"},{level:2,title:"Throttles Limits",slug:"throttles-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-4"},{level:2,title:"Installer Limits",slug:"installer-limits"},{level:3,title:"Example of usage",slug:"example-of-usage-5"},{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:"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"}]},{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"}]}],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/debian.md"]},{title:"Wings Installation",collapsable:!1,children:["/community/installation-guides/wings/centos7.md","/community/installation-guides/wings/centos8.md","/community/installation-guides/wings/debian.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.11",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.11",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"]}]}}};function Ee(...t){const e=new RegExp("/{1,}","g");return t.join("/").replace(e,"/")}n(235);r.a.component("Badge",()=>n.e(23).then(n.bind(null,335)));var je=n(89),$e=n.n(je),Te=[({Vue:t,options:e,router:n,siteData:r,isServer:o})=>{var i;(i=r.themeConfig.sidebar,Object.entries(i).map(([t,e])=>e.filter(t=>Array.isArray(t.versions)).map(e=>({...e,path:Ee(t,e.path)}))).flat()).forEach(t=>{n.addRoutes(n.options.routes.map(e=>{if(e.path.startsWith(t.path+t.currentVersion))return[{path:e.path.replace(t.currentVersion,"current"),redirect:e.path},{path:e.path.replace(t.currentVersion+"/",""),redirect:e.path}]}).filter(t=>t).flat().concat([{path:"/panel/1.0/upgrade/1.0.html",redirect:"/panel/1.0/updating.html"},{path:"/panel/1.0/upgrade/0.7_to_1.0.html",redirect:"/panel/1.0/legacy_upgrade.html"}]))})},{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},({Vue:t})=>t.use($e.a)],Ae=[];class Le extends class{constructor(){this.store=new r.a({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){r.a.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Le.prototype,{getPageAsyncComponent:le,getLayoutAsyncComponent:ue,getAsyncComponent:ce,getVueComponent:fe});var De={install(t){const e=new Le;t.$vuepress=e,t.prototype.$vuepress=e}};function Ie(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Re={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return de("pageKey",e),r.a.component(e)||r.a.component(e,le(e)),r.a.component(e)?t(e):t("")}},Me={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ne={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Ue=(n(236),n(237),Object(ke.a)(Ne,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Fe={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};r.a.config.productionTip=!1,r.a.use(Wt),r.a.use(De),r.a.mixin(function(t,e,n=r.a){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const o=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),a={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),a),{computed:a}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"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||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!r.a.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Ie(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Ie(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Ie(t,o)?r(o):Ie(t,n)?r(n):r()}})}(n);const o={};try{await Promise.all(Te.filter(t=>"function"==typeof t).map(e=>e({Vue:r.a,options:o,router:n,siteData:Oe,isServer:t})))}catch(t){console.error(t)}return{app:new r.a(Object.assign(o,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Ae.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/community/about.html b/community/about.html index 6893bf06..e22235a7 100644 --- a/community/about.html +++ b/community/about.html @@ -15,7 +15,7 @@ - + @@ -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 af51f175..ba50606b 100644 --- a/community/config/eggs/creating_a_custom_egg.html +++ b/community/config/eggs/creating_a_custom_egg.html @@ -15,7 +15,7 @@ - + @@ -115,6 +115,6 @@ regex as any letters or numbers (\w\d) including underscore (Debian 11 & 12
    - + diff --git a/community/config/eggs/creating_a_custom_image.html b/community/config/eggs/creating_a_custom_image.html index 64697143..b1d76270 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 01a7508a..06fddc2e 100644 --- a/community/config/nodes/add_node.html +++ b/community/config/nodes/add_node.html @@ -15,7 +15,7 @@ - + @@ -48,6 +48,6 @@ or Debian.

    Minecraft
    - + diff --git a/community/customization/panel.html b/community/customization/panel.html index 47d36d46..93152a35 100644 --- a/community/customization/panel.html +++ b/community/customization/panel.html @@ -15,7 +15,7 @@ - + @@ -55,6 +55,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 89382903..ebc44c70 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 c04216ea..6f94d7bf 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 1a9b34fd..edc48f3e 100644 --- a/community/installation-guides/panel/centos7.html +++ b/community/installation-guides/panel/centos7.html @@ -15,7 +15,7 @@ - + @@ -94,6 +94,6 @@ setsebool -P httpd_unified Community Guides and Tutorials
    - + diff --git a/community/installation-guides/panel/centos8.html b/community/installation-guides/panel/centos8.html index 9e4fdd1c..d4adc8b5 100644 --- a/community/installation-guides/panel/centos8.html +++ b/community/installation-guides/panel/centos8.html @@ -15,7 +15,7 @@ - + @@ -82,6 +82,6 @@ pm.max_requests = 200 ← CentOS 7
    - + diff --git a/community/installation-guides/panel/debian.html b/community/installation-guides/panel/debian.html index 796a0fe8..d0dd1028 100644 --- a/community/installation-guides/panel/debian.html +++ b/community/installation-guides/panel/debian.html @@ -15,7 +15,7 @@ - + @@ -56,6 +56,6 @@ ← Enterprise Linux 8 and Fedora Server 40
    - + diff --git a/community/installation-guides/wings/centos7.html b/community/installation-guides/wings/centos7.html index 041985b4..2470898e 100644 --- a/community/installation-guides/wings/centos7.html +++ b/community/installation-guides/wings/centos7.html @@ -15,7 +15,7 @@ - + @@ -57,6 +57,6 @@ firewall-cmd --reloadDebian 11 & 12
    - + diff --git a/community/installation-guides/wings/centos8.html b/community/installation-guides/wings/centos8.html index dd95230b..b37b914a 100644 --- a/community/installation-guides/wings/centos8.html +++ b/community/installation-guides/wings/centos8.html @@ -15,7 +15,7 @@ - + @@ -59,6 +59,6 @@ firewall-cmd --reloadCentOS 7
    - + diff --git a/community/installation-guides/wings/debian.html b/community/installation-guides/wings/debian.html index 9cce8380..33df6451 100644 --- a/community/installation-guides/wings/debian.html +++ b/community/installation-guides/wings/debian.html @@ -15,7 +15,7 @@ - + @@ -39,6 +39,6 @@ ← Enterprise Linux 8 and Fedora Server 40
    - + diff --git a/community/tutorials/artisan.html b/community/tutorials/artisan.html index e6a305eb..08fad629 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 84b4f6e3..b8cf71b8 100644 --- a/daemon/0.6/configuration.html +++ b/daemon/0.6/configuration.html @@ -16,7 +16,7 @@ - + @@ -98,6 +98,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 0d0e6f8c..2afbcc2d 100644 --- a/daemon/0.6/debian_8_docker.html +++ b/daemon/0.6/debian_8_docker.html @@ -16,7 +16,7 @@ - + @@ -70,6 +70,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 1f3005eb..c5ea7dc3 100644 --- a/daemon/0.6/installing.html +++ b/daemon/0.6/installing.html @@ -16,7 +16,7 @@ - + @@ -105,6 +105,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 bcecbd61..abde904f 100644 --- a/daemon/0.6/kernel_modifications.html +++ b/daemon/0.6/kernel_modifications.html @@ -16,7 +16,7 @@ - + @@ -70,6 +70,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 bea2a7ae..1eea325a 100644 --- a/daemon/0.6/standalone_sftp.html +++ b/daemon/0.6/standalone_sftp.html @@ -16,7 +16,7 @@ - + @@ -85,6 +85,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 6dd1b395..81f1905b 100644 --- a/daemon/0.6/upgrade/0.4_to_0.5.html +++ b/daemon/0.6/upgrade/0.4_to_0.5.html @@ -16,7 +16,7 @@ - + @@ -76,6 +76,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 9e0413a0..48c2601f 100644 --- a/daemon/0.6/upgrade/0.5.html +++ b/daemon/0.6/upgrade/0.5.html @@ -16,7 +16,7 @@ - + @@ -53,6 +53,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 6109a87d..2c26b822 100644 --- a/daemon/0.6/upgrade/0.5_to_0.6.html +++ b/daemon/0.6/upgrade/0.5_to_0.6.html @@ -16,7 +16,7 @@ - + @@ -63,6 +63,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 8aa182fc..ff92cfd2 100644 --- a/daemon/0.6/upgrade/0.6.html +++ b/daemon/0.6/upgrade/0.6.html @@ -16,7 +16,7 @@ - + @@ -55,6 +55,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 c3f5a18f..3f27b754 100644 --- a/daemon/0.6/upgrading.html +++ b/daemon/0.6/upgrading.html @@ -16,7 +16,7 @@ - + @@ -47,6 +47,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 effcc2fa..e2458abd 100644 --- a/guides/mounts.html +++ b/guides/mounts.html @@ -15,7 +15,7 @@ - + @@ -52,6 +52,6 @@ Keep in mind that the folder you want to mount into needs to exist for the mount

    - + diff --git a/guides/php_upgrade.html b/guides/php_upgrade.html index e567f78c..6d5809c4 100644 --- a/guides/php_upgrade.html +++ b/guides/php_upgrade.html @@ -15,7 +15,7 @@ - + @@ -62,6 +62,6 @@ a2dismod php* a2enmod php8.3

    # Return to the 1.X.X Upgrade Guide

    - + diff --git a/index.html b/index.html index 6d980ecf..60406bf1 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ - + @@ -57,6 +57,6 @@ Take the plunge today and discover why thousands of users trust Pterodactyl® to manage their game servers.

    - + diff --git a/panel/0.7/configuration.html b/panel/0.7/configuration.html index 314126a2..326fc405 100644 --- a/panel/0.7/configuration.html +++ b/panel/0.7/configuration.html @@ -16,7 +16,7 @@ - + @@ -81,6 +81,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 3b79c948..5366d0f6 100644 --- a/panel/0.7/getting_started.html +++ b/panel/0.7/getting_started.html @@ -16,7 +16,7 @@ - + @@ -141,6 +141,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 ca698f1c..948b2170 100644 --- a/panel/0.7/troubleshooting.html +++ b/panel/0.7/troubleshooting.html @@ -16,7 +16,7 @@ - + @@ -95,6 +95,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 18abbc0e..e574f643 100644 --- a/panel/0.7/upgrade/0.6_to_0.7.html +++ b/panel/0.7/upgrade/0.6_to_0.7.html @@ -16,7 +16,7 @@ - + @@ -82,6 +82,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 956eae0e..4a1d53b1 100644 --- a/panel/0.7/upgrade/0.7.html +++ b/panel/0.7/upgrade/0.7.html @@ -16,7 +16,7 @@ - + @@ -72,6 +72,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 8cc00da1..343a303d 100644 --- a/panel/0.7/upgrading.html +++ b/panel/0.7/upgrading.html @@ -16,7 +16,7 @@ - + @@ -54,6 +54,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 93e82a01..d1e10b7f 100644 --- a/panel/0.7/webserver_configuration.html +++ b/panel/0.7/webserver_configuration.html @@ -16,7 +16,7 @@ - + @@ -214,6 +214,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 2fdcb2b9..dd1bbfe0 100644 --- a/panel/1.0/additional_configuration.html +++ b/panel/1.0/additional_configuration.html @@ -15,7 +15,7 @@ - + @@ -140,6 +140,6 @@ and either remove the PTERODACTYL_TELEMETRY_ENABLED line, or set it the --telemetry flag for a non-interactive setup.

    # Disabling Telemetry

    To disable telemetry, edit your .env file and set PTERODACTYL_TELEMETRY_ENABLED to false.

    PTERODACTYL_TELEMETRY_ENABLED=false
     

    You may also use the php artisan p:environment:setup command to disable telemetry, optionally with the --telemetry=false flag for a non-interactive setup.

    - + diff --git a/panel/1.0/getting_started.html b/panel/1.0/getting_started.html index f6257daf..ea0a27be 100644 --- a/panel/1.0/getting_started.html +++ b/panel/1.0/getting_started.html @@ -15,7 +15,7 @@ - + @@ -151,6 +151,6 @@ when the service starts.

    If you are using redis for your system, yo

    # Telemetry

    Since 1.11, Pterodactyl will collect anonymous telemetry to help us better understand how the software is being used. To learn more about this feature and to opt-out, please see our Telemetry documentation. Make sure to continue with the rest of the installation process.

    # Next Step: Webserver Configuration

    - + diff --git a/panel/1.0/legacy_upgrade.html b/panel/1.0/legacy_upgrade.html index f5fa722e..05eae753 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 2af13bca..58484fad 100644 --- a/panel/1.0/troubleshooting.html +++ b/panel/1.0/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -104,6 +104,6 @@ resolvectl status

    If this returns different DNS Servers than 1.1.1.1 and 1.0.0.1 you'll need to edit the wings 'config.yml' file to use the DNS servers that were returned from the command. If you see output that looks like an IPV6 address in addition to your IPV4 DNS Servers, make sure you put that in the IPV6 section and not the IPV4 section. To be clear, if you have to use different DNS Servers than the default, make sure to REMOVE 1.1.1.1 and 1.0.0.1 from the wings config; don't just add the new servers, replace the old servers.

    # Schedule Troubleshooting

    • Check logs from your queue manager journalctl -xeu pteroq
    • Restart pteroq systemctl restart pteroq
    • Clear schedule cache php /var/www/pterodactyl/artisan schedule:clear-cache
    • Check your php version - up to 8.3 is supported php -v
    • Check your crontab syntax using https://crontab.guru/ (opens new window) - make sure it's what you intended
    • Verify the problem is with the schedule and not with the tasks you have set up (Set the first task in your schedule to something you know prints a message in the console, ie. run say test in the console for a Minecraft server, if the text "test" shows up in the console successfully, set the first task to say test so you know if it runs
    • Are your tasks off by a bit? Make sure you on the latest version of the panel? In version 1.11.5 there was a fix for schedules running at the wrong time. Alternatively, you may have the wrong timezone set. Make sure your timezones all match.
    • System Timezone timedatectl
    • Panel Timezone nano /var/www/pterodactyl/.env
    • Wings Timezone (Passed to containers as the TZ environmental variable, unrelated to schedules but while you're checking timezones you may as well set this too) nano /etc/pterodactyl/config.yml
    • Check your database where schedules are stored - MariaDB by default
    • systemctl status mariadb - if it's not active, journalctl -xeu mariadb
    • Check queue handler - Redis by default
    • systemctl status redis - if it's not active, journalctl -xeu redis (On some distributions the service will be named redis-server instead)
    • Check for panel errors tail -n 150 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | nc pteropaste.com 99

    # 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 1fa75e39..18cc3dcb 100644 --- a/panel/1.0/updating.html +++ b/panel/1.0/updating.html @@ -15,7 +15,7 @@ - + @@ -46,13 +46,13 @@ current

  • # Updating the Panel

    This documentation covers the process for updating within the 1.x series of releases. This means updating from — for example — 1.5.0 to 1.6.0. Do not use this guide for upgrading from 0.7.

    # Panel Version Requirements

    Each version of Pterodactyl Panel also has a corresponding minimum version of Wings that is required for it to run. Please see the chart below for how these versions line up. In -most cases your base Wings version should match that of your Panel.

    Panel Version Wings Version Supported PHP Versions
    1.0.x 1.0.x 7.3, 7.4
    1.1.x 1.1.x 7.3, 7.4
    1.2.x 1.2.x 7.3, 7.4
    1.3.x 1.3.x 7.4, 8.0
    1.4.x 1.4.x 7.4, 8.0
    1.5.x 1.4.x 7.4, 8.0
    1.6.x 1.4.x 7.4, 8.0
    1.7.x 1.5.x 7.4, 8.0
    1.8.x 1.6.x 7.4, 8.0, 8.1
    1.9.x 1.6.x 7.4, 8.0, 8.1
    1.10.x 1.7.x 7.4, 8.0, 8.1
    1.11.x 1.11.x 8.1, 8.2, 8.3

    Wings releases

    There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.

    # Update Dependencies

    • PHP 8.2, or 8.3 (recommended)
    • Composer 2.X

    Before continuing, please ensure that your system and web server configuration has been upgraded to at least PHP 8.1 by running php -v and Composer 2 by running composer --version. You -should see an output similar to the result below. If you do not see at least PHP 8.1 and Composer 2, you will need to upgrade by following +most cases your base Wings version should match that of your Panel.

    Panel Version Wings Version Supported PHP Versions
    1.0.x 1.0.x 7.3, 7.4
    1.1.x 1.1.x 7.3, 7.4
    1.2.x 1.2.x 7.3, 7.4
    1.3.x 1.3.x 7.4, 8.0
    1.4.x 1.4.x 7.4, 8.0
    1.5.x 1.4.x 7.4, 8.0
    1.6.x 1.4.x 7.4, 8.0
    1.7.x 1.5.x 7.4, 8.0
    1.8.x 1.6.x 7.4, 8.0, 8.1
    1.9.x 1.6.x 7.4, 8.0, 8.1
    1.10.x 1.7.x 7.4, 8.0, 8.1
    1.11.x 1.11.x 8.1, 8.2, 8.3

    Wings releases

    There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.

    # Update Dependencies

    • PHP 8.2, or 8.3 (recommended)
    • Composer 2.X

    Before continuing, please ensure that your system and web server configuration has been upgraded to at least PHP 8.2 by running php -v and Composer 2 by running composer --version. You +should see an output similar to the result below. If you do not see at least PHP 8.2 and Composer 2, you will need to upgrade by following our PHP Upgrade Guide and return to this documentation afterward.

    vagrant@pterodactyl:~/app$ php -v
    -PHP 8.1.5 (cli) (built: Apr 21 2022 10:32:13) (NTS)
    +PHP 8.2.5 (cli) (built: Dec 21 2022 10:32:13) (NTS)
     Copyright (c) The PHP Group
     Zend Engine v4.1.5, Copyright (c) Zend Technologies
    -    with Zend OPcache v8.1.5, Copyright (c), by Zend Technologies
    +    with Zend OPcache v8.2.5, Copyright (c), by Zend Technologies
     
     vagrant@pterodactyl:~/app$ composer --version
     Composer version 2.3.5 2022-04-13 16:43:00
    @@ -91,6 +91,6 @@ connections.

    # Telemetry 

    Since 1.11, Pterodactyl will collect anonymous telemetry to help us better understand how the software is being used. To learn more about this feature and to opt-out, please see our Telemetry documentation. Remember to continue with the rest of the upgrade.

    Final Step: Upgrade Wings

    - + diff --git a/panel/1.0/webserver_configuration.html b/panel/1.0/webserver_configuration.html index 8cd68210..8b9fa9ad 100644 --- a/panel/1.0/webserver_configuration.html +++ b/panel/1.0/webserver_configuration.html @@ -15,7 +15,7 @@ - + @@ -329,6 +329,6 @@ below! You only need to run systemctl restart httpd.

    # Enabling Configuration

    The final step is to restart Caddy.

    systemctl restart caddy
     

    # Next Step: Wings Installation

    - + diff --git a/project/about.html b/project/about.html index 8777a686..ccdb2530 100644 --- a/project/about.html +++ b/project/about.html @@ -15,7 +15,7 @@ - + @@ -50,6 +50,6 @@ members can be found in our Discord server and are distinguished with a yellow u ← Introduction
    - + diff --git a/project/community.html b/project/community.html index 418dee50..1558e299 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 4bf79936..7376f8f9 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 d2b5ee6a..f4a371a8 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 9b797110..a744657a 100644 --- a/tutorials/creating_ssl_certificates.html +++ b/tutorials/creating_ssl_certificates.html @@ -15,7 +15,7 @@ - + @@ -121,6 +121,6 @@ WantedBy=multi-user.target ← Setting up MySQL
    - + diff --git a/tutorials/mysql_setup.html b/tutorials/mysql_setup.html index 55b84a50..7e9260b0 100644 --- a/tutorials/mysql_setup.html +++ b/tutorials/mysql_setup.html @@ -15,7 +15,7 @@ - + @@ -70,6 +70,6 @@ bind-address=0.0.0.0 ← Community Standards
    - + diff --git a/wings/1.0/configuration.html b/wings/1.0/configuration.html index fa02ba2f..945142ae 100644 --- a/wings/1.0/configuration.html +++ b/wings/1.0/configuration.html @@ -15,7 +15,7 @@ - + @@ -71,6 +71,6 @@ Restart wings and your game server to apply the new limit.

    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 9b4594ad..d7e6089d 100644 --- a/wings/1.0/installing.html +++ b/wings/1.0/installing.html @@ -15,7 +15,7 @@ - + @@ -90,6 +90,6 @@ RestartSec=5s WantedBy=multi-user.target

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

    sudo 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 64a25bc8..9ded5120 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 02a5c9ac..e207d019 100644 --- a/wings/1.0/upgrading.html +++ b/wings/1.0/upgrading.html @@ -15,7 +15,7 @@ - + @@ -52,6 +52,6 @@ servers will not be affected.

    # 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
     
    - +