diff --git a/404.html b/404.html index 71546ac8..68988b0b 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + @@ -46,6 +46,6 @@ current

  • - + diff --git a/assets/js/19.f4317cfa.js b/assets/js/19.029b8520.js similarity index 99% rename from assets/js/19.f4317cfa.js rename to assets/js/19.029b8520.js index 754728de..b3f3b1a3 100644 --- a/assets/js/19.f4317cfa.js +++ b/assets/js/19.029b8520.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{364:function(e,A){e.exports="data:image/png;base64,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"},365:function(e,A,a){e.exports=a.p+"assets/img/example_setup.dc8ff2a7.png"},420:function(e,A,a){"use strict";a.r(A);var t=a(48),n=Object(t.a)({},(function(){var e=this,A=e.$createElement,t=e._self._c||A;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"terminology"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#terminology"}},[e._v("#")]),e._v(" Terminology")]),e._v(" "),t("p",[t("strong",[e._v("Panel")]),e._v(" — This refers to Pterodactyl Panel itself, and is what allows you to add additional\nnodes and servers to the system.")]),e._v(" "),t("p",[t("strong",[e._v("Node")]),e._v(" — A node is a physical machine that runs an instance of Wings.")]),e._v(" "),t("p",[t("strong",[e._v("Wings")]),e._v(" — The newer service written in Go that interfaces with Docker and the Panel to provide secure access for\ncontrolling servers via the Panel.")]),e._v(" "),t("p",[t("strong",[e._v("Server")]),e._v(" — In this case, a server refers to a running instance that is created by the panel. These servers are\ncreated on nodes, and you can have multiple servers per node.")]),e._v(" "),t("p",[t("strong",[e._v("Docker")]),e._v(" — Docker is a platform that lets you separate the application from your infrastructure into isolated, secure containers.")]),e._v(" "),t("p",[t("strong",[e._v("Docker Image")]),e._v(" — A Docker image contains everything needed to run a containerized application. (e.g. Java for a Minecraft Server).")]),e._v(" "),t("p",[t("strong",[e._v("Container")]),e._v(" — Each server will be running inside an isolated container to enforce hardware limitations\n(such as CPU and RAM) and avoid any interference between servers on one node. These are created by Docker.")]),e._v(" "),t("p",[t("strong",[e._v("Nest")]),e._v(" — Each nest is usually used as a specific game or service, for example: Minecraft, Teamspeak or Terraria and can contain many eggs.")]),e._v(" "),t("p",[t("strong",[e._v("Egg")]),e._v(" — Each egg is usually used to store the configuration of a specific type of game, for example: Vanilla, Spigot or Bungeecord for Minecraft.")]),e._v(" "),t("p",[t("strong",[e._v("Yolks")]),e._v(" — A curated collection of core docker images that can be used with Pterodactyl's Egg system.")]),e._v(" "),t("h2",{attrs:{id:"simple-setup-diagram"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#simple-setup-diagram"}},[e._v("#")]),e._v(" Simple Setup Diagram")]),e._v(" "),t("p",[t("img",{attrs:{src:a(364),alt:""}})]),e._v(" "),t("h2",{attrs:{id:"advanced-setup-diagram"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-setup-diagram"}},[e._v("#")]),e._v(" Advanced Setup Diagram")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Panel and Wings on the same machine")]),e._v(" "),t("p",[e._v("It is also possible to install wings on the panel machine so it acts as panel and node machine at once.")])]),e._v(" "),t("p",[t("img",{attrs:{src:a(365),alt:""}})])])}),[],!1,null,null,null);A.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{364:function(e,A){e.exports="data:image/png;base64,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"},365:function(e,A,a){e.exports=a.p+"assets/img/example_setup.dc8ff2a7.png"},418:function(e,A,a){"use strict";a.r(A);var t=a(48),n=Object(t.a)({},(function(){var e=this,A=e.$createElement,t=e._self._c||A;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"terminology"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#terminology"}},[e._v("#")]),e._v(" Terminology")]),e._v(" "),t("p",[t("strong",[e._v("Panel")]),e._v(" — This refers to Pterodactyl Panel itself, and is what allows you to add additional\nnodes and servers to the system.")]),e._v(" "),t("p",[t("strong",[e._v("Node")]),e._v(" — A node is a physical machine that runs an instance of Wings.")]),e._v(" "),t("p",[t("strong",[e._v("Wings")]),e._v(" — The newer service written in Go that interfaces with Docker and the Panel to provide secure access for\ncontrolling servers via the Panel.")]),e._v(" "),t("p",[t("strong",[e._v("Server")]),e._v(" — In this case, a server refers to a running instance that is created by the panel. These servers are\ncreated on nodes, and you can have multiple servers per node.")]),e._v(" "),t("p",[t("strong",[e._v("Docker")]),e._v(" — Docker is a platform that lets you separate the application from your infrastructure into isolated, secure containers.")]),e._v(" "),t("p",[t("strong",[e._v("Docker Image")]),e._v(" — A Docker image contains everything needed to run a containerized application. (e.g. Java for a Minecraft Server).")]),e._v(" "),t("p",[t("strong",[e._v("Container")]),e._v(" — Each server will be running inside an isolated container to enforce hardware limitations\n(such as CPU and RAM) and avoid any interference between servers on one node. These are created by Docker.")]),e._v(" "),t("p",[t("strong",[e._v("Nest")]),e._v(" — Each nest is usually used as a specific game or service, for example: Minecraft, Teamspeak or Terraria and can contain many eggs.")]),e._v(" "),t("p",[t("strong",[e._v("Egg")]),e._v(" — Each egg is usually used to store the configuration of a specific type of game, for example: Vanilla, Spigot or Bungeecord for Minecraft.")]),e._v(" "),t("p",[t("strong",[e._v("Yolks")]),e._v(" — A curated collection of core docker images that can be used with Pterodactyl's Egg system.")]),e._v(" "),t("h2",{attrs:{id:"simple-setup-diagram"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#simple-setup-diagram"}},[e._v("#")]),e._v(" Simple Setup Diagram")]),e._v(" "),t("p",[t("img",{attrs:{src:a(364),alt:""}})]),e._v(" "),t("h2",{attrs:{id:"advanced-setup-diagram"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#advanced-setup-diagram"}},[e._v("#")]),e._v(" Advanced Setup Diagram")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Panel and Wings on the same machine")]),e._v(" "),t("p",[e._v("It is also possible to install wings on the panel machine so it acts as panel and node machine at once.")])]),e._v(" "),t("p",[t("img",{attrs:{src:a(365),alt:""}})])])}),[],!1,null,null,null);A.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/20.178448b6.js b/assets/js/20.178448b6.js new file mode 100644 index 00000000..0f6f6044 --- /dev/null +++ b/assets/js/20.178448b6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{339:function(e,t,a){e.exports=a.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},366:function(e,t,a){e.exports=a.p+"assets/img/node_allocations.323d67f2.png"},422:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"installing-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[e._v("#")]),e._v(" Installing Wings")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("You should only install Wings if you are running "),s("strong",[e._v("Pterodactyl 1.x")]),e._v(". Do not install this software\nfor previous versions of Pterodactyl.")])]),e._v(" "),s("h2",{attrs:{id:"supported-systems"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#supported-systems"}},[e._v("#")]),e._v(" Supported Systems")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("Operating System")]),e._v(" "),s("th",[e._v("Version")]),e._v(" "),s("th",{staticStyle:{"text-align":"center"}},[e._v("Supported")]),e._v(" "),s("th",[e._v("Notes")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[s("strong",[e._v("Ubuntu")])]),e._v(" "),s("td",[e._v("18.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td",[e._v("Documentation written assuming Ubuntu 18.04 as the base OS.")])]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("20.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("22.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("CentOS")])]),e._v(" "),s("td",[e._v("7")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("8")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td",[e._v("Note that CentOS 8 is EOL. Use Rocky or Alma Linux.")])]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("Debian")])]),e._v(" "),s("td",[e._v("10")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("11")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("Windows")])]),e._v(" "),s("td",[e._v("All")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("❌")]),e._v(" "),s("td",[e._v("This software will not run in Windows environments.")])])])]),e._v(" "),s("h2",{attrs:{id:"system-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[e._v("#")]),e._v(" System Requirements")]),e._v(" "),s("p",[e._v("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.")]),e._v(" "),s("p",[e._v("When your provider uses "),s("code",[e._v("Virtuozzo")]),e._v(", "),s("code",[e._v("OpenVZ")]),e._v(" (or "),s("code",[e._v("OVZ")]),e._v("), or "),s("code",[e._v("LXC")]),e._v(" 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.")]),e._v(" "),s("p",[e._v("The easiest way to check is to type "),s("code",[e._v("systemd-detect-virt")]),e._v(".\nIf the result doesn't contain "),s("code",[e._v("OpenVZ")]),e._v(" or"),s("code",[e._v("LXC")]),e._v(", it should be fine. The result of "),s("code",[e._v("none")]),e._v(" will appear when running dedicated hardware without any virtualization.")]),e._v(" "),s("p",[e._v("Should that not work for some reason, or you're still unsure, you can also run the command below.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("dane@pterodactyl:~$ "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dmidecode -s system-manufacturer\nVMware, Inc.\n")])])]),s("h2",{attrs:{id:"dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),s("ul",[s("li",[e._v("curl")]),e._v(" "),s("li",[e._v("Docker")])]),e._v(" "),s("h3",{attrs:{id:"installing-docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-docker"}},[e._v("#")]),e._v(" Installing Docker")]),e._v(" "),s("p",[e._v("For a quick install of Docker CE, you can execute the command below:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sSL https://get.docker.com/ "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CHANNEL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("stable "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n")])])]),s("p",[e._v("If you would rather do a manual installation, please reference the official Docker documentation for how to install Docker CE on your server. Some quick links\nare listed below for commonly supported systems.")]),e._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),s("OutboundLink")],1)])]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("Check your Kernel")]),e._v(" "),s("p",[e._v("Please be aware that some hosts install a modified kernel that does not support important docker features. Please\ncheck your kernel by running "),s("code",[e._v("uname -r")]),e._v(". If your kernel ends in "),s("code",[e._v("-xxxx-grs-ipv6-64")]),e._v(" or "),s("code",[e._v("-xxxx-mod-std-ipv6-64")]),e._v(" you're\nprobably using a non-supported kernel. Check our "),s("RouterLink",{attrs:{to:"/daemon/0.6/kernel_modifications.html"}},[e._v("Kernel Modifications")]),e._v(" guide for details.")],1)]),e._v(" "),s("h4",{attrs:{id:"start-docker-on-boot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-docker-on-boot"}},[e._v("#")]),e._v(" Start Docker on Boot")]),e._v(" "),s("p",[e._v("If you are on an operating system with systemd (Ubuntu 16+, Debian 8+, CentOS 7+) run the command below to have Docker start when you boot your machine.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now docker\n")])])]),s("h4",{attrs:{id:"enabling-swap"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enabling-swap"}},[e._v("#")]),e._v(" Enabling Swap")]),e._v(" "),s("p",[e._v("On most systems, Docker will be unable to setup swap space by default. You can confirm this by running "),s("code",[e._v("docker info")]),e._v(" and looking for the output of "),s("code",[e._v("WARNING: No swap limit support")]),e._v(" near the bottom.")]),e._v(" "),s("p",[e._v("Enabling swap is entirely optional, but we recommended doing it if you will be hosting for others and to prevent OOM errors.")]),e._v(" "),s("p",[e._v("To enable swap, open "),s("code",[e._v("/etc/default/grub")]),e._v(" as a root user and find the line starting with "),s("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(". Make\nsure the line includes "),s("code",[e._v("swapaccount=1")]),e._v(" somewhere inside the double-quotes.")]),e._v(" "),s("p",[e._v("After that, run "),s("code",[e._v("sudo update-grub")]),e._v(" followed by "),s("code",[e._v("sudo reboot")]),e._v(" to restart the server and have swap enabled.\nBelow is an example of what the line should look like, "),s("em",[e._v("do not copy this line verbatim. It often has additional OS-specific parameters.")])]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"\n')])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("GRUB Configuration")]),e._v(" "),s("p",[e._v("Some Linux distros may ignore "),s("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(". Therefore you might have to use "),s("code",[e._v("GRUB_CMDLINE_LINUX")]),e._v(" instead should the default one not work for you.")])]),e._v(" "),s("h2",{attrs:{id:"installing-wings-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings-2"}},[e._v("#")]),e._v(" Installing Wings")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /etc/pterodactyl\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L -o /usr/local/bin/wings "),s("span",{pre:!0,attrs:{class:"token string"}},[e._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"}},[e._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("uname")]),e._v(" -m"),s("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v('"')]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("==")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"x86_64"')]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"amd64"')]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("||")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"arm64"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v('"\n'),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" u+x /usr/local/bin/wings\n")])])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("OVH/SYS Servers")]),e._v(" "),s("p",[e._v("If you are using a server provided by OVH or SoYouStart please be aware that your main drive space is probably allocated to\n"),s("code",[e._v("/home")]),e._v(", and not "),s("code",[e._v("/")]),e._v(" by default. Please consider using "),s("code",[e._v("/home/daemon-data")]),e._v(" for server data. This can be easily\nset when creating the node.")])]),e._v(" "),s("h2",{attrs:{id:"configure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure"}},[e._v("#")]),e._v(" Configure")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("p",[e._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 "),s("code",[e._v("config.yml")]),e._v(" in "),s("code",[e._v("/etc/pterodactyl")]),e._v(" and save it.")]),e._v(" "),s("p",[e._v("Alternatively, you can click on the Generate Token button, copy the bash command and paste it into your terminal.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(339),alt:"example image of wings configuration"}})]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("When your Panel is using SSL, the Wings must also have one created for its FQDN. See "),s("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[e._v("Creating SSL Certificates")]),e._v(" documentation page for how to create these certificates before continuing.")],1)]),e._v(" "),s("h3",{attrs:{id:"starting-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#starting-wings"}},[e._v("#")]),e._v(" Starting Wings")]),e._v(" "),s("p",[e._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 "),s("code",[e._v("CTRL+C")]),e._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.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" wings --debug\n")])])]),s("p",[e._v("You may optionally add the "),s("code",[e._v("--debug")]),e._v(" flag to run Wings in debug mode.")]),e._v(" "),s("h3",{attrs:{id:"daemonizing-using-systemd"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#daemonizing-using-systemd"}},[e._v("#")]),e._v(" Daemonizing (using systemd)")]),e._v(" "),s("p",[e._v("Running 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 "),s("code",[e._v("wings.service")]),e._v(" in the "),s("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\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")])])]),s("p",[e._v("Then, run the commands below to reload systemd and start Wings.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now wings\n")])])]),s("h3",{attrs:{id:"node-allocations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#node-allocations"}},[e._v("#")]),e._v(" Node Allocations")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(366),alt:"example image of node allocations"}})]),e._v(" "),s("p",[e._v("Type "),s("code",[e._v("hostname -I | awk '{print $1}'")]),e._v(" to find the IP to be used for the allocation. Alternatively, you can type "),s("code",[e._v('ip addr | grep "inet "')]),e._v(" to see all your available interfaces and IP addresses. Do not use 127.0.0.1 for allocations.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/20.e5a0bcca.js b/assets/js/20.e5a0bcca.js deleted file mode 100644 index 5a66a3c0..00000000 --- a/assets/js/20.e5a0bcca.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{339:function(e,t,a){e.exports=a.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},366:function(e,t,a){e.exports=a.p+"assets/img/node_allocations.323d67f2.png"},424:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"installing-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[e._v("#")]),e._v(" Installing Wings")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("You should only install Wings if you are running "),s("strong",[e._v("Pterodactyl 1.x")]),e._v(". Do not install this software\nfor previous versions of Pterodactyl.")])]),e._v(" "),s("h2",{attrs:{id:"supported-systems"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#supported-systems"}},[e._v("#")]),e._v(" Supported Systems")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("Operating System")]),e._v(" "),s("th",[e._v("Version")]),e._v(" "),s("th",{staticStyle:{"text-align":"center"}},[e._v("Supported")]),e._v(" "),s("th",[e._v("Notes")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[s("strong",[e._v("Ubuntu")])]),e._v(" "),s("td",[e._v("18.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td",[e._v("Documentation written assuming Ubuntu 18.04 as the base OS.")])]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("20.04")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("CentOS")])]),e._v(" "),s("td",[e._v("7")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("8")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td",[e._v("Note that CentOS 8 is EOL. Use Rocky or Alma Linux.")])]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("Debian")])]),e._v(" "),s("td",[e._v("9")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("10")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td"),e._v(" "),s("td",[e._v("11")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[s("strong",[e._v("Windows")])]),e._v(" "),s("td",[e._v("All")]),e._v(" "),s("td",{staticStyle:{"text-align":"center"}},[e._v("❌")]),e._v(" "),s("td",[e._v("This software will not run in Windows environments.")])])])]),e._v(" "),s("h2",{attrs:{id:"system-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#system-requirements"}},[e._v("#")]),e._v(" System Requirements")]),e._v(" "),s("p",[e._v("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.")]),e._v(" "),s("p",[e._v("When your provider uses "),s("code",[e._v("Virtuozzo")]),e._v(", "),s("code",[e._v("OpenVZ")]),e._v(" (or "),s("code",[e._v("OVZ")]),e._v("), or "),s("code",[e._v("LXC")]),e._v(" 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.")]),e._v(" "),s("p",[e._v("The easiest way to check is to type "),s("code",[e._v("systemd-detect-virt")]),e._v(".\nIf the result doesn't contain "),s("code",[e._v("OpenVZ")]),e._v(" or"),s("code",[e._v("LXC")]),e._v(", it should be fine. The result of "),s("code",[e._v("none")]),e._v(" will appear when running dedicated hardware without any virtualization.")]),e._v(" "),s("p",[e._v("Should that not work for some reason, or you're still unsure, you can also run the command below.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("dane@pterodactyl:~$ "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" dmidecode -s system-manufacturer\nVMware, Inc.\n")])])]),s("h2",{attrs:{id:"dependencies"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),s("ul",[s("li",[e._v("curl")]),e._v(" "),s("li",[e._v("Docker")])]),e._v(" "),s("h3",{attrs:{id:"installing-docker"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-docker"}},[e._v("#")]),e._v(" Installing Docker")]),e._v(" "),s("p",[e._v("For a quick install of Docker CE, you can execute the command below:")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sSL https://get.docker.com/ "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CHANNEL")]),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("stable "),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n")])])]),s("p",[e._v("If you would rather do a manual installation, please reference the official Docker documentation for how to install Docker CE on your server. Some quick links\nare listed below for commonly supported systems.")]),e._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ubuntu"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("CentOS"),s("OutboundLink")],1)]),e._v(" "),s("li",[s("a",{attrs:{href:"https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce",target:"_blank",rel:"noopener noreferrer"}},[e._v("Debian"),s("OutboundLink")],1)])]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("Check your Kernel")]),e._v(" "),s("p",[e._v("Please be aware that some hosts install a modified kernel that does not support important docker features. Please\ncheck your kernel by running "),s("code",[e._v("uname -r")]),e._v(". If your kernel ends in "),s("code",[e._v("-xxxx-grs-ipv6-64")]),e._v(" or "),s("code",[e._v("-xxxx-mod-std-ipv6-64")]),e._v(" you're\nprobably using a non-supported kernel. Check our "),s("RouterLink",{attrs:{to:"/daemon/0.6/kernel_modifications.html"}},[e._v("Kernel Modifications")]),e._v(" guide for details.")],1)]),e._v(" "),s("h4",{attrs:{id:"start-docker-on-boot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#start-docker-on-boot"}},[e._v("#")]),e._v(" Start Docker on Boot")]),e._v(" "),s("p",[e._v("If you are on an operating system with systemd (Ubuntu 16+, Debian 8+, CentOS 7+) run the command below to have Docker start when you boot your machine.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now docker\n")])])]),s("h4",{attrs:{id:"enabling-swap"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enabling-swap"}},[e._v("#")]),e._v(" Enabling Swap")]),e._v(" "),s("p",[e._v("On most systems, Docker will be unable to setup swap space by default. You can confirm this by running "),s("code",[e._v("docker info")]),e._v(" and looking for the output of "),s("code",[e._v("WARNING: No swap limit support")]),e._v(" near the bottom.")]),e._v(" "),s("p",[e._v("Enabling swap is entirely optional, but we recommended doing it if you will be hosting for others and to prevent OOM errors.")]),e._v(" "),s("p",[e._v("To enable swap, open "),s("code",[e._v("/etc/default/grub")]),e._v(" as a root user and find the line starting with "),s("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(". Make\nsure the line includes "),s("code",[e._v("swapaccount=1")]),e._v(" somewhere inside the double-quotes.")]),e._v(" "),s("p",[e._v("After that, run "),s("code",[e._v("sudo update-grub")]),e._v(" followed by "),s("code",[e._v("sudo reboot")]),e._v(" to restart the server and have swap enabled.\nBelow is an example of what the line should look like, "),s("em",[e._v("do not copy this line verbatim. It often has additional OS-specific parameters.")])]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v('GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"\n')])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("GRUB Configuration")]),e._v(" "),s("p",[e._v("Some Linux distros may ignore "),s("code",[e._v("GRUB_CMDLINE_LINUX_DEFAULT")]),e._v(". Therefore you might have to use "),s("code",[e._v("GRUB_CMDLINE_LINUX")]),e._v(" instead should the default one not work for you.")])]),e._v(" "),s("h2",{attrs:{id:"installing-wings-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings-2"}},[e._v("#")]),e._v(" Installing Wings")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /etc/pterodactyl\n"),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L -o /usr/local/bin/wings "),s("span",{pre:!0,attrs:{class:"token string"}},[e._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"}},[e._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("uname")]),e._v(" -m"),s("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v('"')]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("==")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"x86_64"')]),e._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("&&")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"amd64"')]),e._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[e._v("||")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[e._v('"arm64"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v('"\n'),s("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" u+x /usr/local/bin/wings\n")])])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("OVH/SYS Servers")]),e._v(" "),s("p",[e._v("If you are using a server provided by OVH or SoYouStart please be aware that your main drive space is probably allocated to\n"),s("code",[e._v("/home")]),e._v(", and not "),s("code",[e._v("/")]),e._v(" by default. Please consider using "),s("code",[e._v("/home/daemon-data")]),e._v(" for server data. This can be easily\nset when creating the node.")])]),e._v(" "),s("h2",{attrs:{id:"configure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configure"}},[e._v("#")]),e._v(" Configure")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("p",[e._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 "),s("code",[e._v("config.yml")]),e._v(" in "),s("code",[e._v("/etc/pterodactyl")]),e._v(" and save it.")]),e._v(" "),s("p",[e._v("Alternatively, you can click on the Generate Token button, copy the bash command and paste it into your terminal.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(339),alt:"example image of wings configuration"}})]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("When your Panel is using SSL, the Wings must also have one created for its FQDN. See "),s("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[e._v("Creating SSL Certificates")]),e._v(" documentation page for how to create these certificates before continuing.")],1)]),e._v(" "),s("h3",{attrs:{id:"starting-wings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#starting-wings"}},[e._v("#")]),e._v(" Starting Wings")]),e._v(" "),s("p",[e._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 "),s("code",[e._v("CTRL+C")]),e._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.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" wings --debug\n")])])]),s("p",[e._v("You may optionally add the "),s("code",[e._v("--debug")]),e._v(" flag to run Wings in debug mode.")]),e._v(" "),s("h3",{attrs:{id:"daemonizing-using-systemd"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#daemonizing-using-systemd"}},[e._v("#")]),e._v(" Daemonizing (using systemd)")]),e._v(" "),s("p",[e._v("Running 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 "),s("code",[e._v("wings.service")]),e._v(" in the "),s("code",[e._v("/etc/systemd/system")]),e._v(" directory.")]),e._v(" "),s("div",{staticClass:"language-text extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("[Unit]\nDescription=Pterodactyl Wings Daemon\nAfter=docker.service\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")])])]),s("p",[e._v("Then, run the commands below to reload systemd and start Wings.")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[e._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now wings\n")])])]),s("h3",{attrs:{id:"node-allocations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#node-allocations"}},[e._v("#")]),e._v(" Node Allocations")]),e._v(" "),s("p",[e._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.")]),e._v(" "),s("p",[s("img",{attrs:{src:a(366),alt:"example image of node allocations"}})]),e._v(" "),s("p",[e._v("Type "),s("code",[e._v("hostname -I | awk '{print $1}'")]),e._v(" to find the IP to be used for the allocation. Alternatively, you can type "),s("code",[e._v('ip addr | grep "inet "')]),e._v(" to see all your available interfaces and IP addresses. Do not use 127.0.0.1 for allocations.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/23.2a91dfc8.js b/assets/js/23.15d6f9c5.js similarity index 98% rename from assets/js/23.2a91dfc8.js rename to assets/js/23.15d6f9c5.js index 641f1690..1f656758 100644 --- a/assets/js/23.2a91dfc8.js +++ b/assets/js/23.15d6f9c5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{339:function(e,t,s){e.exports=s.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},425:function(e,t,s){"use strict";s.r(t);var n=s(48),a=Object(n.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"migrating-to-wings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#migrating-to-wings"}},[e._v("#")]),e._v(" Migrating to Wings")]),e._v(" "),n("p",[e._v("This guide is for people looking to migrate from the old Node.JS daemon to Wings. Please see the\n"),n("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(" "),n("div",{staticClass:"custom-block danger"},[n("p",{staticClass:"custom-block-title"},[e._v("Panel Version Requirement")]),e._v(" "),n("p",[e._v("You "),n("strong",[e._v("must")]),e._v(" be running Pterodactyl Panel 1.X in order to use Wings.")])]),e._v(" "),n("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(" "),n("h2",{attrs:{id:"install-wings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#install-wings"}},[e._v("#")]),e._v(" Install Wings")]),e._v(" "),n("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(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /etc/pterodactyl\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L -o /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" u+x /usr/local/bin/wings\n")])])]),n("h2",{attrs:{id:"copy-new-configuration-file"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#copy-new-configuration-file"}},[e._v("#")]),e._v(" Copy New Configuration File")]),e._v(" "),n("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(" "),n("p",[e._v("Simply copy and paste the code block and paste it into a file called "),n("code",[e._v("config.yml")]),e._v(" within the "),n("code",[e._v("/etc/pterodactyl")]),e._v("\ndirectory and save it.")]),e._v(" "),n("p",[n("img",{attrs:{src:s(339),alt:""}})]),e._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),n("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(" "),n("p",[e._v("From there you can make any adjustments as necessary.")])]),e._v(" "),n("h2",{attrs:{id:"remove-old-daemon"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#remove-old-daemon"}},[e._v("#")]),e._v(" Remove Old Daemon")]),e._v(" "),n("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"),n("code",[e._v("/srv/daemon")]),e._v(" directory.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Stop the old daemon.")]),e._v("\nsystemctl stop wings\n\n"),n("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"),n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# purposes of this migration. Remeber, server data is stored in /srv/daemon-data.")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" -rf /srv/daemon\n\n"),n("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"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y remove nodejs "),n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or: yum remove nodejs")]),e._v("\n")])])]),n("h3",{attrs:{id:"remove-standalone-sftp"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#remove-standalone-sftp"}},[e._v("#")]),e._v(" Remove Standalone SFTP")]),e._v(" "),n("p",[e._v("If you've used the "),n("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(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# stop and disable the standalone sftp")]),e._v("\nsystemctl disable --now pterosftp\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# delete the systemd service")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/systemd/system/pterosftp.service\n")])])]),n("h2",{attrs:{id:"daemonize-wings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-wings"}},[e._v("#")]),e._v(" Daemonize Wings")]),e._v(" "),n("p",[e._v("You'll then need to edit your existing "),n("code",[e._v("systemd")]),e._v(" service file for Wings to point to the new control software. To do\nthis, open "),n("code",[e._v("/etc/systemd/system/wings.service")]),e._v(" and replace the entire contents of the file with the following:")]),e._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("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")])])]),n("p",[e._v("Then, start wings.")]),e._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("systemctl daemon-reload\nsystemctl enable --now wings\n")])])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[e._v("What if Wings doesn't start?")]),e._v(" "),n("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(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("sudo wings --debug\n")])])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{339:function(e,t,s){e.exports=s.p+"assets/img/wings_configuration_example.9f3fdd0b.png"},423:function(e,t,s){"use strict";s.r(t);var n=s(48),a=Object(n.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",{attrs:{id:"migrating-to-wings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#migrating-to-wings"}},[e._v("#")]),e._v(" Migrating to Wings")]),e._v(" "),n("p",[e._v("This guide is for people looking to migrate from the old Node.JS daemon to Wings. Please see the\n"),n("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(" "),n("div",{staticClass:"custom-block danger"},[n("p",{staticClass:"custom-block-title"},[e._v("Panel Version Requirement")]),e._v(" "),n("p",[e._v("You "),n("strong",[e._v("must")]),e._v(" be running Pterodactyl Panel 1.X in order to use Wings.")])]),e._v(" "),n("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(" "),n("h2",{attrs:{id:"install-wings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#install-wings"}},[e._v("#")]),e._v(" Install Wings")]),e._v(" "),n("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(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" -p /etc/pterodactyl\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -L -o /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" u+x /usr/local/bin/wings\n")])])]),n("h2",{attrs:{id:"copy-new-configuration-file"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#copy-new-configuration-file"}},[e._v("#")]),e._v(" Copy New Configuration File")]),e._v(" "),n("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(" "),n("p",[e._v("Simply copy and paste the code block and paste it into a file called "),n("code",[e._v("config.yml")]),e._v(" within the "),n("code",[e._v("/etc/pterodactyl")]),e._v("\ndirectory and save it.")]),e._v(" "),n("p",[n("img",{attrs:{src:s(339),alt:""}})]),e._v(" "),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),n("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(" "),n("p",[e._v("From there you can make any adjustments as necessary.")])]),e._v(" "),n("h2",{attrs:{id:"remove-old-daemon"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#remove-old-daemon"}},[e._v("#")]),e._v(" Remove Old Daemon")]),e._v(" "),n("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"),n("code",[e._v("/srv/daemon")]),e._v(" directory.")]),e._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Stop the old daemon.")]),e._v("\nsystemctl stop wings\n\n"),n("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"),n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# purposes of this migration. Remeber, server data is stored in /srv/daemon-data.")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" -rf /srv/daemon\n\n"),n("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"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y remove nodejs "),n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# or: yum remove nodejs")]),e._v("\n")])])]),n("h3",{attrs:{id:"remove-standalone-sftp"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#remove-standalone-sftp"}},[e._v("#")]),e._v(" Remove Standalone SFTP")]),e._v(" "),n("p",[e._v("If you've used the "),n("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(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# stop and disable the standalone sftp")]),e._v("\nsystemctl disable --now pterosftp\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# delete the systemd service")]),e._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[e._v("rm")]),e._v(" /etc/systemd/system/pterosftp.service\n")])])]),n("h2",{attrs:{id:"daemonize-wings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#daemonize-wings"}},[e._v("#")]),e._v(" Daemonize Wings")]),e._v(" "),n("p",[e._v("You'll then need to edit your existing "),n("code",[e._v("systemd")]),e._v(" service file for Wings to point to the new control software. To do\nthis, open "),n("code",[e._v("/etc/systemd/system/wings.service")]),e._v(" and replace the entire contents of the file with the following:")]),e._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("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")])])]),n("p",[e._v("Then, start wings.")]),e._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("systemctl daemon-reload\nsystemctl enable --now wings\n")])])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[e._v("What if Wings doesn't start?")]),e._v(" "),n("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(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[e._v("sudo wings --debug\n")])])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/38.b955d4bc.js b/assets/js/38.b955d4bc.js deleted file mode 100644 index 9052c7c3..00000000 --- a/assets/js/38.b955d4bc.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{381:function(t,a,s){"use strict";s.r(a);var e=s(48),r=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"debian-9"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#debian-9"}},[t._v("#")]),t._v(" Debian 9")]),t._v(" "),s("p",[t._v("In this guide we will install Pterodactyl v1.x — including all of it's dependencies — and configure our webserver to serve it using SSL.")]),t._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#install-requirements"}},[t._v("Install Requirements")]),s("ul",[s("li",[s("a",{attrs:{href:"#mariadb"}},[t._v("MariaDB")])]),s("li",[s("a",{attrs:{href:"#php-7-4"}},[t._v("PHP 7.4")])]),s("li",[s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),s("li",[s("a",{attrs:{href:"#redis"}},[t._v("Redis")])]),s("li",[s("a",{attrs:{href:"#additional-utilities"}},[t._v("Additional Utilities")])])])]),s("li",[s("a",{attrs:{href:"#server-configuration"}},[t._v("Server Configuration")]),s("ul",[s("li",[s("a",{attrs:{href:"#configuring-mariadb"}},[t._v("Configuring MariaDB")])]),s("li",[s("a",{attrs:{href:"#setup-php"}},[t._v("Setup PHP")])]),s("li",[s("a",{attrs:{href:"#nginx"}},[t._v("Nginx")])]),s("li",[s("a",{attrs:{href:"#redis-setup"}},[t._v("Redis Setup")])])])]),s("li",[s("a",{attrs:{href:"#installing-the-panel"}},[t._v("Installing the Panel")])])])]),s("p"),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("This guide is based off the "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[t._v("official installation documentation")]),t._v(" but is tailored specifically for Debian 9.")],1)]),t._v(" "),s("h2",{attrs:{id:"install-requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#install-requirements"}},[t._v("#")]),t._v(" Install Requirements")]),t._v(" "),s("p",[t._v("We will first begin by installing all of Pterodactyl's "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#dependencies"}},[t._v("required")]),t._v(" dependencies.")],1),t._v(" "),s("h3",{attrs:{id:"mariadb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mariadb"}},[t._v("#")]),t._v(" MariaDB")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install the MariaDB repo for debian")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y software-properties-common dirmngr\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("sudo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("bash")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install MariaDB")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y mariadb-common mariadb-server mariadb-client\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Start maraidb")]),t._v("\nsystemctl start mariadb\nsystemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" mariadb\n")])])]),s("h3",{attrs:{id:"php-7-4"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-7-4"}},[t._v("#")]),t._v(" PHP 7.4")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install the PHP 7.4 repo for debian")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y ca-certificates apt-transport-https\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("wget")]),t._v(" -q https://packages.sury.org/php/apt.gpg -O- "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" apt-key "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deb https://packages.sury.org/php/ stretch main"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("tee")]),t._v(" /etc/apt/sources.list.d/php.list\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Get apt updates")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install PHP 7.4")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y php7.4 php7.4-"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"nginx"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y nginx\n")])])]),s("h3",{attrs:{id:"redis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redis"}},[t._v("#")]),t._v(" Redis")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y redis-server\n\nsystemctl start redis-server\nsystemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" redis-server\n")])])]),s("h3",{attrs:{id:"additional-utilities"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#additional-utilities"}},[t._v("#")]),t._v(" Additional Utilities")]),t._v(" "),s("h4",{attrs:{id:"certbot"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#certbot"}},[t._v("#")]),t._v(" Certbot")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y certbot "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v("\n")])])]),s("h4",{attrs:{id:"composer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#composer"}},[t._v("#")]),t._v(" Composer")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -sS https://getcomposer.org/installer "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" php -- --install-dir"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/usr/local/bin --filename"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("composer\n")])])]),s("h2",{attrs:{id:"server-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#server-configuration"}},[t._v("#")]),t._v(" Server Configuration")]),t._v(" "),s("p",[t._v("This following section covers the configuration of parts of the server to run the panel.")]),t._v(" "),s("h3",{attrs:{id:"configuring-mariadb"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuring-mariadb"}},[t._v("#")]),t._v(" Configuring MariaDB")]),t._v(" "),s("p",[t._v("The fastest way to set up mariadb is to use the "),s("code",[t._v("mysql_secure_installation")]),t._v(" command and follow prompts")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("mysql_secure_installation\n")])])]),s("p",[t._v("The following are safe defaults.")]),t._v(" "),s("p",[t._v("Change to your own secure password"),s("br"),t._v(" "),s("code",[t._v("Set root password? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Get rid of users that could access the db by default"),s("br"),t._v(" "),s("code",[t._v("Remove anonymous users? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Keep root off the external interfaces"),s("br"),t._v(" "),s("code",[t._v("Disallow root login remotely? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Extra databases that aren't needed"),s("br"),t._v(" "),s("code",[t._v("Remove test database and access to it? [Y/n] Y")])]),t._v(" "),s("p",[t._v("Clears and sets all the changes made"),s("br"),t._v(" "),s("code",[t._v("Reload privilege tables now? [Y/n] Y")])]),t._v(" "),s("p",[t._v("All done! If you've completed all of the above steps, your MariaDB installation should now be secure.")]),t._v(" "),s("h4",{attrs:{id:"adding-mariadb-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#adding-mariadb-user"}},[t._v("#")]),t._v(" Adding MariaDB user")]),t._v(" "),s("p",[t._v("To add your first user to the database, see our tutorial on "),s("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[t._v("setting up MySQL")]),t._v(".")],1),t._v(" "),s("h3",{attrs:{id:"setup-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup-php"}},[t._v("#")]),t._v(" Setup PHP")]),t._v(" "),s("p",[t._v("The default php-fpm configuration is fine to use and can be started and then enabled on the system using the\ncommands below.")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("systemctl "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" php7.4-fpm\nsystemctl start php7.4-fpm\n")])])]),s("h3",{attrs:{id:"nginx-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#nginx-2"}},[t._v("#")]),t._v(" Nginx")]),t._v(" "),s("p",[t._v("Please check our "),s("RouterLink",{attrs:{to:"/tutorials/creating_ssl_certificates.html"}},[t._v("tutorial")]),t._v(" on generating SSL certificates for more information.")],1),t._v(" "),s("h4",{attrs:{id:"ssl-configuration"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ssl-configuration"}},[t._v("#")]),t._v(" SSL Configuration")]),t._v(" "),s("div",{staticClass:"language-conf extra-class"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('server_tokens off;\n\nserver {\n listen 80;\n server_name ;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name ;\n\n root /var/www/pterodactyl/public;\n index index.php;\n\n access_log /var/log/nginx/pterodactyl.app-access.log;\n error_log /var/log/nginx/pterodactyl.app-error.log error;\n\n # allow larger file uploads and longer script runtimes\n client_max_body_size 100m;\n client_body_timeout 120s;\n\n sendfile off;\n\n # SSL Configuration\n ssl_certificate /etc/letsencrypt/live//fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live//privkey.pem;\n ssl_session_cache shared:SSL:10m;\n ssl_protocols TLSv1.2 TLSv1.3;\n ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";\n ssl_prefer_server_ciphers on;\n\n # See https://hstspreload.org/ before uncommenting the line below.\n # add_header Strict-Transport-Security "max-age=15768000; preload;";\n add_header X-Content-Type-Options nosniff;\n add_header X-XSS-Protection "1; mode=block";\n add_header X-Robots-Tag none;\n add_header Content-Security-Policy "frame-ancestors \'self\'";\n add_header X-Frame-Options DENY;\n add_header Referrer-Policy same-origin;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n fastcgi_pass unix:/run/php/php7.4-fpm.sock;\n fastcgi_index index.php;\n include fastcgi_params;\n fastcgi_param PHP_VALUE "upload_max_filesize = 100M \\n post_max_size=100M";\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n fastcgi_param HTTP_PROXY "";\n fastcgi_intercept_errors off;\n fastcgi_buffer_size 16k;\n fastcgi_buffers 4 16k;\n fastcgi_connect_timeout 300;\n fastcgi_send_timeout 300;\n fastcgi_read_timeout 300;\n include /etc/nginx/fastcgi_params;\n }\n\n location ~ /\\.ht {\n deny all;\n }\n}\n')])])]),s("h3",{attrs:{id:"redis-setup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redis-setup"}},[t._v("#")]),t._v(" Redis Setup")]),t._v(" "),s("p",[t._v("The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into\n"),s("a",{attrs:{href:"https://community.pivotal.io/s/article/How-to-setup-and-run-multiple-Redis-server-instances-on-a-Linux-host",target:"_blank",rel:"noopener noreferrer"}},[t._v("running another Redis instance"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"installing-the-panel"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installing-the-panel"}},[t._v("#")]),t._v(" Installing the Panel")]),t._v(" "),s("p",[t._v("Excellent, we now have all of the required dependencies installed and configured. From here, follow the "),s("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#download-files"}},[t._v("official Panel installation documentation")]),t._v(".")],1)])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/38.ea3ffaf8.js b/assets/js/38.ea3ffaf8.js new file mode 100644 index 00000000..69c89af7 --- /dev/null +++ b/assets/js/38.ea3ffaf8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{381:function(s,t,a){"use strict";a.r(t);var e=a(48),n=Object(e.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"debian-11"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#debian-11"}},[s._v("#")]),s._v(" Debian 11")]),s._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#dependency-installation"}},[s._v("Dependency Installation")]),a("ul",[a("li",[a("a",{attrs:{href:"#installing-composer"}},[s._v("Installing Composer")])]),a("li",[a("a",{attrs:{href:"#download-files"}},[s._v("Download Files")])])])])])]),a("p"),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("This guide is based off the "),a("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html"}},[s._v("official installation documentation")]),s._v(" but is tailored specifically for Debian 11.")],1)]),s._v(" "),a("h2",{attrs:{id:"dependency-installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dependency-installation"}},[s._v("#")]),s._v(" Dependency Installation")]),s._v(" "),a("p",[s._v("In this guide, we will install the required dependencies for the Pterodactyl panel. After that, you can follow the official installation documentation.")]),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("# Update package lists")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" update -y\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install necessary packages")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" -y "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" software-properties-common "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" ca-certificates gnupg2 "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" lsb-release\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Add repository for PHP")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deb https://packages.sury.org/php/ '),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),s._v("lsb_release -sc"),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(' main"')]),s._v(" "),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 function"}},[s._v("tee")]),s._v(" /etc/apt/sources.list.d/sury-php.list\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://packages.sury.org/php/apt.gpg "),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(" gpg --dearmor -o /etc/apt/trusted.gpg.d/sury-keyring.gpg\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Add repository for Redis")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -fsSL https://packages.redis.io/gpg "),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(" gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg\n\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$(")]),s._v("lsb_release -cs"),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v(")")])]),s._v(' main"')]),s._v(" "),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 function"}},[s._v("tee")]),s._v(" /etc/apt/sources.list.d/redis.list\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Update package lists")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" update -y\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install PHP and required extensions")]),s._v("\n"),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(" -y php8.1 php8.1-"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# MariaDB repo setup script")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup "),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 function"}},[s._v("bash")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# Install the rest of dependencies")]),s._v("\n"),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(" -y mariadb-server nginx "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("tar")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("unzip")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" redis-server\n\n")])])]),a("h3",{attrs:{id:"installing-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-composer"}},[s._v("#")]),s._v(" Installing Composer")]),s._v(" "),a("p",[s._v("Composer is a dependency manager for PHP that allows us to ship everything you'll need code wise to operate the Panel. You'll\nneed composer installed before continuing in this process.")]),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("curl")]),s._v(" -sS https://getcomposer.org/installer "),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(" php -- --install-dir"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/bin --filename"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("composer\n")])])]),a("h3",{attrs:{id:"download-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[s._v("#")]),s._v(" Download Files")]),s._v(" "),a("p",[s._v("Great, now all of the dependencies have been dealt with. Continue the installation by following the "),a("RouterLink",{attrs:{to:"/panel/1.0/getting_started.html#download-files"}},[s._v("official documentation Download Files section")]),s._v(".")],1)])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/44.1b22667c.js b/assets/js/44.1b22667c.js new file mode 100644 index 00000000..dde10252 --- /dev/null +++ b/assets/js/44.1b22667c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{387:function(t,n,a){"use strict";a.r(n);var i=a(48),e=Object(i.a)({},(function(){var t=this,n=t.$createElement,a=t._self._c||n;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"debian-11"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#debian-11"}},[t._v("#")]),t._v(" Debian 11")]),t._v(" "),a("h2",{attrs:{id:"install"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install"}},[t._v("#")]),t._v(" Install")]),t._v(" "),a("p",[t._v("There is no additional configuration required for Wings on Debian 11. You can follow the "),a("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=e.exports}}]); \ No newline at end of file diff --git a/assets/js/44.5f8766e6.js b/assets/js/44.5f8766e6.js deleted file mode 100644 index 5e318d63..00000000 --- a/assets/js/44.5f8766e6.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{387:function(t,s,a){"use strict";a.r(s);var e=a(48),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"debian-9"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#debian-9"}},[t._v("#")]),t._v(" Debian 9")]),t._v(" "),a("p",[t._v("In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.")]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#install-requirements"}},[t._v("Install Requirements")]),a("ul",[a("li",[a("a",{attrs:{href:"#docker"}},[t._v("Docker")])])])]),a("li",[a("a",{attrs:{href:"#installing-wings"}},[t._v("Installing Wings")])])])]),a("p"),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("This guide is based off the "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html"}},[t._v("official installation documentation")]),t._v(" but is tailored specifically for Debian 9.")],1)]),t._v(" "),a("h2",{attrs:{id:"install-requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#install-requirements"}},[t._v("#")]),t._v(" Install Requirements")]),t._v(" "),a("p",[t._v("We will first begin by installing all of Wings' "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html#dependencies"}},[t._v("required")]),t._v(" dependencies.")],1),t._v(" "),a("h3",{attrs:{id:"docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker"}},[t._v("#")]),t._v(" Docker")]),t._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"}},[t._v("## install apt tools")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y apt-transport-https ca-certificates "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" gnupg2 software-properties-common\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Import the docker gpg key")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -fsSL https://download.docker.com/linux/debian/gpg "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" apt-key "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),t._v(" -\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Add the docker stable repo")]),t._v("\nadd-apt-repository "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deb [arch=amd64] https://download.docker.com/linux/debian '),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),t._v("lsb_release -cs"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v(' stable"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Install docker")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" update -y\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("apt")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y docker-ce\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Enable docker service")]),t._v("\nsystemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("enable")]),t._v(" docker\nsystemctl start docker\n")])])]),a("h2",{attrs:{id:"installing-wings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-wings"}},[t._v("#")]),t._v(" Installing Wings")]),t._v(" "),a("p",[t._v("Great, now all of the dependencies have been dealt with. From here follow the "),a("RouterLink",{attrs:{to:"/wings/1.0/installing.html#enabling-swap"}},[t._v("official Wings installation documentation")]),t._v(".")],1)])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/67.b21761dc.js b/assets/js/67.b21761dc.js deleted file mode 100644 index bab0254e..00000000 --- a/assets/js/67.b21761dc.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{412:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[e._v("#")]),e._v(" Getting Started")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#picking-a-server-os"}},[e._v("Picking a Server OS")])]),a("li",[a("a",{attrs:{href:"#dependencies"}},[e._v("Dependencies")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-dependency-installation"}},[e._v("Example Dependency Installation")])]),a("li",[a("a",{attrs:{href:"#installing-composer"}},[e._v("Installing Composer")])])])]),a("li",[a("a",{attrs:{href:"#download-files"}},[e._v("Download Files")])]),a("li",[a("a",{attrs:{href:"#installation"}},[e._v("Installation")]),a("ul",[a("li",[a("a",{attrs:{href:"#environment-configuration"}},[e._v("Environment Configuration")])]),a("li",[a("a",{attrs:{href:"#database-setup"}},[e._v("Database Setup")])]),a("li",[a("a",{attrs:{href:"#add-the-first-user"}},[e._v("Add The First User")])]),a("li",[a("a",{attrs:{href:"#set-permissions"}},[e._v("Set Permissions")])])])]),a("li",[a("a",{attrs:{href:"#queue-listeners"}},[e._v("Queue Listeners")]),a("ul",[a("li",[a("a",{attrs:{href:"#crontab-configuration"}},[e._v("Crontab Configuration")])]),a("li",[a("a",{attrs:{href:"#create-queue-worker"}},[e._v("Create Queue Worker")])])])])])]),a("p"),e._v(" "),a("p",[e._v("Pterodactyl Panel is designed to run on your own web server. You will need to have root access to your server in order to run and use this panel.")]),e._v(" "),a("p",[e._v("You are expected to understand how to read documentation to use this Panel. We have spent many hours detailing how to install or upgrade our\nsoftware; take some time and read rather than copy and pasting and then complaining when things do not work. This panel does\nnot exist as a drag-and-drop service to run your servers. It is a highly complex system requiring multiple dependencies and\nadministrators willing to spend some time learning how to use it. "),a("strong",[e._v("If you expect to be able to install this with no understanding\nof basic linux system administration you should stop and turn around now.")])]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Looking for something simple to setup?")]),e._v(" "),a("p",[a("a",{attrs:{href:"https://wisp.gg",target:"_blank",rel:"noopener noreferrer"}},[e._v("WISP"),a("OutboundLink")],1),e._v(" is a Pterodactyl powered SaaS suitable for enterprise and personal use. Offering all the features without the setup hassle, and fully compatible with Pterodactyl eggs. Comparable to MultiCraft or TCAdmin while offering new and unique features. Click here to "),a("a",{attrs:{href:"https://wisp.gg/features",target:"_blank",rel:"noopener noreferrer"}},[e._v("learn more"),a("OutboundLink")],1),e._v(".")])]),e._v(" "),a("h2",{attrs:{id:"picking-a-server-os"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#picking-a-server-os"}},[e._v("#")]),e._v(" Picking a Server OS")]),e._v(" "),a("p",[e._v("Pterodactyl runs on a wide range of operating systems, so pick whichever you are most comfortable using.")]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("Pterodactyl does not support most OpenVZ systems due to incompatibilities with Docker. If you are planning on running\nthis software on an OpenVZ based system you will — most likely — not be successful.")])]),e._v(" "),a("table",[a("thead",[a("tr",[a("th",[e._v("Operating System")]),e._v(" "),a("th",[e._v("Version")]),e._v(" "),a("th",{staticStyle:{"text-align":"center"}},[e._v("Supported")]),e._v(" "),a("th",[e._v("Notes")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[a("strong",[e._v("Ubuntu")])]),e._v(" "),a("td",[e._v("18.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Documentation written assuming Ubuntu 18.04 as the base OS.")])]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("20.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("22.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("MariaDB can be installed without the repo setup script.")])]),e._v(" "),a("tr",[a("td",[a("strong",[e._v("CentOS")])]),e._v(" "),a("td",[e._v("7")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Extra repos are required.")])]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("8")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Note that CentOS 8 is EOL. Use Rocky or Alma Linux.")])]),e._v(" "),a("tr",[a("td",[a("strong",[e._v("Debian")])]),e._v(" "),a("td",[e._v("9")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Extra repos are required.")])]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("10")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("11")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")])])]),e._v(" "),a("h2",{attrs:{id:"dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),a("ul",[a("li",[e._v("PHP "),a("code",[e._v("7.4")]),e._v(", "),a("code",[e._v("8.0")]),e._v(" or "),a("code",[e._v("8.1")]),e._v(" (recommended) with the following extensions: "),a("code",[e._v("cli")]),e._v(", "),a("code",[e._v("openssl")]),e._v(", "),a("code",[e._v("gd")]),e._v(", "),a("code",[e._v("mysql")]),e._v(", "),a("code",[e._v("PDO")]),e._v(", "),a("code",[e._v("mbstring")]),e._v(", "),a("code",[e._v("tokenizer")]),e._v(", "),a("code",[e._v("bcmath")]),e._v(", "),a("code",[e._v("xml")]),e._v(" or "),a("code",[e._v("dom")]),e._v(", "),a("code",[e._v("curl")]),e._v(", "),a("code",[e._v("zip")]),e._v(", and "),a("code",[e._v("fpm")]),e._v(" if you are planning to use NGINX.")]),e._v(" "),a("li",[e._v("MySQL "),a("code",[e._v("5.7.22")]),e._v(" and higher (MySQL "),a("code",[e._v("8")]),e._v(" recommended) "),a("strong",[e._v("or")]),e._v(" MariaDB "),a("code",[e._v("10.2")]),e._v(" and higher.")]),e._v(" "),a("li",[e._v("Redis ("),a("code",[e._v("redis-server")]),e._v(")")]),e._v(" "),a("li",[e._v("A webserver (Apache, NGINX, Caddy, etc.)")]),e._v(" "),a("li",[a("code",[e._v("curl")])]),e._v(" "),a("li",[a("code",[e._v("tar")])]),e._v(" "),a("li",[a("code",[e._v("unzip")])]),e._v(" "),a("li",[a("code",[e._v("git")])]),e._v(" "),a("li",[a("code",[e._v("composer")]),e._v(" v2")])]),e._v(" "),a("h3",{attrs:{id:"example-dependency-installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-dependency-installation"}},[e._v("#")]),e._v(" Example Dependency Installation")]),e._v(" "),a("p",[e._v("The commands below are simply an example of how you might install these dependencies. Please consult with your\noperating system's package manager to determine the correct packages to install.")]),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('# Add "add-apt-repository" command')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" software-properties-common "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" apt-transport-https ca-certificates gnupg\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add additional repositories for PHP, Redis, and MariaDB")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("LC_ALL")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("C.UTF-8 add-apt-repository -y ppa:ondrej/php\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add Redis official APT repository")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -fsSL https://packages.redis.io/gpg "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("lsb_release -cs"),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(' main"')]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tee")]),e._v(" /etc/apt/sources.list.d/redis.list\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# MariaDB repo setup script can be skipped on Ubuntu 22.04")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Update repositories list")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add universe repository if you are on Ubuntu 18.04")]),e._v("\napt-add-repository universe\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Install Dependencies")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" php8.1 php8.1-"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" mariadb-server nginx "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("unzip")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" redis-server\n")])])]),a("h3",{attrs:{id:"installing-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-composer"}},[e._v("#")]),e._v(" Installing Composer")]),e._v(" "),a("p",[e._v("Composer is a dependency manager for PHP that allows us to ship everything you'll need code wise to operate the Panel. You'll\nneed composer installed before continuing in this process.")]),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(" -sS https://getcomposer.org/installer "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" php -- --install-dir"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/usr/local/bin --filename"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("composer\n")])])]),a("h2",{attrs:{id:"download-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),a("p",[e._v("The first step in this process is to create the folder where the panel will live and then move ourselves into that\nnewly created folder. Below is an example of how to perform this operation.")]),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("mkdir")]),e._v(" -p /var/www/pterodactyl\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /var/www/pterodactyl\n")])])]),a("p",[e._v("Once you have created a new directory for the Panel and moved into it you'll need to download the Panel files. This\nis as simple as using "),a("code",[e._v("curl")]),e._v(" to download our pre-packaged content. Once it is downloaded you'll need to unpack the archive\nand then set the correct permissions on the "),a("code",[e._v("storage/")]),e._v(" and "),a("code",[e._v("bootstrap/cache/")]),e._v(" directories. These directories\nallow us to store files as well as keep a speedy cache available to reduce load times.")]),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(" -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" -xzvf panel.tar.gz\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" -R "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("755")]),e._v(" storage/* bootstrap/cache/\n")])])]),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),a("p",[e._v("Now that all of the files have been downloaded we need to configure some core aspects of the Panel.")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Database Configuration")]),e._v(" "),a("p",[e._v("You will need a database setup and a user with the correct permissions created for that database before\ncontinuing any further. See below to create a user and database for your Pterodactyl panel quickly. To find more detailed information\nplease have a look at "),a("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[e._v("Setting up MySQL")]),e._v(".")],1),e._v(" "),a("div",{staticClass:"language-sql extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[e._v("mysql "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("-")]),e._v("u root "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("-")]),e._v("p\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Remember to change 'yourPassword' below to be a unique password")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("CREATE")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("USER")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'pterodactyl'")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("@'127.0.0.1'")]),e._v(" IDENTIFIED "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("BY")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'yourPassword'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("CREATE")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("DATABASE")]),e._v(" panel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("GRANT")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("ALL")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("PRIVILEGES")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("ON")]),e._v(" panel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("*")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("TO")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'pterodactyl'")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("@'127.0.0.1'")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("WITH")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("GRANT")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("OPTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("exit")]),e._v("\n")])])])]),e._v(" "),a("p",[e._v("First we will copy over our default environment settings file, install core dependencies, and then generate a\nnew application encryption key.")]),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("cp")]),e._v(" .env.example .env\ncomposer "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --no-dev --optimize-autoloader\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Only run the command below if you are installing this Panel for")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# the first time and do not have any Pterodactyl Panel data in the database.")]),e._v("\nphp artisan key:generate --force\n")])])]),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),a("p",[e._v("Back up your encryption key (APP_KEY in the "),a("code",[e._v(".env")]),e._v(" file). It is used as an encryption key for all data that needs to be stored securely (e.g. api keys).\nStore it somewhere safe - not just on your server. If you lose it all encrypted data is irrecoverable -- even if you have database backups.")])]),e._v(" "),a("h3",{attrs:{id:"environment-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#environment-configuration"}},[e._v("#")]),e._v(" Environment Configuration")]),e._v(" "),a("p",[e._v("Pterodactyl's core environment is easily configured using a few different CLI commands built into the app. This step\nwill cover setting up things such as sessions, caching, database credentials, and email sending.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan p:environment:setup\nphp artisan p:environment:database\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v('# To use PHP\'s internal mail sending (not recommended), select "mail". To use a')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v('# custom SMTP server, select "smtp".')]),e._v("\nphp artisan p:environment:mail\n")])])]),a("h3",{attrs:{id:"database-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-setup"}},[e._v("#")]),e._v(" Database Setup")]),e._v(" "),a("p",[e._v("Now we need to setup all of the base data for the Panel in the database you created earlier. "),a("strong",[e._v("The command below\nmay take some time to run depending on your machine. Please "),a("em",[e._v("DO NOT")]),e._v(" exit the process until it is completed!")]),e._v(" This\ncommand will setup the database tables and then add all of the Nests & Eggs that power Pterodactyl.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan migrate --seed --force\n")])])]),a("h3",{attrs:{id:"add-the-first-user"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-the-first-user"}},[e._v("#")]),e._v(" Add The First User")]),e._v(" "),a("p",[e._v("You'll then need to create an administrative user so that you can log into the panel. To do so, run the command below.\nAt this time passwords "),a("strong",[e._v("must")]),e._v(" meet the following requirements: 8 characters, mixed case, at least one number.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan p:user:make\n")])])]),a("h3",{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 in the installation process is to set the correct permissions on the Panel files so that the webserver can\nuse them correctly.")]),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(" -R www-data:www-data /var/www/pterodactyl/*\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(" -R nginx:nginx /var/www/pterodactyl/*\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(" -R apache:apache /var/www/pterodactyl/*\n")])])]),a("h2",{attrs:{id:"queue-listeners"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#queue-listeners"}},[e._v("#")]),e._v(" Queue Listeners")]),e._v(" "),a("p",[e._v("We make use of queues to make the application faster and handle sending emails and other actions in the background.\nYou will need to setup the queue worker for these actions to be processed.")]),e._v(" "),a("h3",{attrs:{id:"crontab-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#crontab-configuration"}},[e._v("#")]),e._v(" Crontab Configuration")]),e._v(" "),a("p",[e._v("The first thing we need to do is create a new cronjob that runs every minute to process specific Pterodactyl tasks, such\nas session cleanup and sending scheduled tasks to daemons. You'll want to open your crontab using "),a("code",[e._v("sudo crontab -e")]),e._v(" and\nthen paste the line below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("* * * * * php /var/www/pterodactyl/artisan schedule:run "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">>")]),e._v(" /dev/null "),a("span",{pre:!0,attrs:{class:"token operator"}},[a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("2")]),e._v(">")]),a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("&1")]),e._v("\n")])])]),a("h3",{attrs:{id:"create-queue-worker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-queue-worker"}},[e._v("#")]),e._v(" Create Queue Worker")]),e._v(" "),a("p",[e._v("Next you need to create a new systemd worker to keep our queue process running in the background. This queue is responsible\nfor sending emails and handling many other background tasks for Pterodactyl.")]),e._v(" "),a("p",[e._v("Create a file called "),a("code",[e._v("pteroq.service")]),e._v(" in "),a("code",[e._v("/etc/systemd/system")]),e._v(" with the contents below.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("# Pterodactyl Queue Worker File\n# ----------------------------------\n\n[Unit]\nDescription=Pterodactyl Queue Worker\nAfter=redis-server.service\n\n[Service]\n# On some systems the user and group might be different.\n# Some systems use `apache` or `nginx` as the user and group.\nUser=www-data\nGroup=www-data\nRestart=always\nExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3\nStartLimitInterval=180\nStartLimitBurst=30\nRestartSec=5s\n\n[Install]\nWantedBy=multi-user.target\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Redis on CentOS")]),e._v(" "),a("p",[e._v("If you are using CentOS, you will need to replace "),a("code",[e._v("redis-server.service")]),e._v(" with "),a("code",[e._v("redis.service")]),e._v(" at the "),a("code",[e._v("After=")]),e._v(" line in order to ensure "),a("code",[e._v("redis")]),e._v(" starts before the queue worker.")])]),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 are not using "),a("code",[e._v("redis")]),e._v(" for anything you should remove the "),a("code",[e._v("After=")]),e._v(" line, otherwise you will encounter errors\nwhen the service starts.")])]),e._v(" "),a("p",[e._v("If you are using redis for your system, you will want to make sure to enable that it will start on boot. You can do that by running the following command:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now redis-server\n")])])]),a("p",[e._v("Finally, enable the service and set it to boot on machine start.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now pteroq.service\n")])])]),a("h4",{attrs:{id:"next-step-webserver-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-step-webserver-configuration"}},[e._v("#")]),e._v(" Next Step: "),a("a",{attrs:{href:"./webserver_configuration"}},[e._v("Webserver Configuration")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/67.b6bf9549.js b/assets/js/67.b6bf9549.js new file mode 100644 index 00000000..71f43028 --- /dev/null +++ b/assets/js/67.b6bf9549.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{412:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[e._v("#")]),e._v(" Getting Started")]),e._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#picking-a-server-os"}},[e._v("Picking a Server OS")])]),a("li",[a("a",{attrs:{href:"#dependencies"}},[e._v("Dependencies")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-dependency-installation"}},[e._v("Example Dependency Installation")])]),a("li",[a("a",{attrs:{href:"#installing-composer"}},[e._v("Installing Composer")])])])]),a("li",[a("a",{attrs:{href:"#download-files"}},[e._v("Download Files")])]),a("li",[a("a",{attrs:{href:"#installation"}},[e._v("Installation")]),a("ul",[a("li",[a("a",{attrs:{href:"#environment-configuration"}},[e._v("Environment Configuration")])]),a("li",[a("a",{attrs:{href:"#database-setup"}},[e._v("Database Setup")])]),a("li",[a("a",{attrs:{href:"#add-the-first-user"}},[e._v("Add The First User")])]),a("li",[a("a",{attrs:{href:"#set-permissions"}},[e._v("Set Permissions")])])])]),a("li",[a("a",{attrs:{href:"#queue-listeners"}},[e._v("Queue Listeners")]),a("ul",[a("li",[a("a",{attrs:{href:"#crontab-configuration"}},[e._v("Crontab Configuration")])]),a("li",[a("a",{attrs:{href:"#create-queue-worker"}},[e._v("Create Queue Worker")])])])])])]),a("p"),e._v(" "),a("p",[e._v("Pterodactyl Panel is designed to run on your own web server. You will need to have root access to your server in order to run and use this panel.")]),e._v(" "),a("p",[e._v("You are expected to understand how to read documentation to use this Panel. We have spent many hours detailing how to install or upgrade our\nsoftware; take some time and read rather than copy and pasting and then complaining when things do not work. This panel does\nnot exist as a drag-and-drop service to run your servers. It is a highly complex system requiring multiple dependencies and\nadministrators willing to spend some time learning how to use it. "),a("strong",[e._v("If you expect to be able to install this with no understanding\nof basic linux system administration you should stop and turn around now.")])]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Looking for something simple to setup?")]),e._v(" "),a("p",[a("a",{attrs:{href:"https://wisp.gg",target:"_blank",rel:"noopener noreferrer"}},[e._v("WISP"),a("OutboundLink")],1),e._v(" is a Pterodactyl powered SaaS suitable for enterprise and personal use. Offering all the features without the setup hassle, and fully compatible with Pterodactyl eggs. Comparable to MultiCraft or TCAdmin while offering new and unique features. Click here to "),a("a",{attrs:{href:"https://wisp.gg/features",target:"_blank",rel:"noopener noreferrer"}},[e._v("learn more"),a("OutboundLink")],1),e._v(".")])]),e._v(" "),a("h2",{attrs:{id:"picking-a-server-os"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#picking-a-server-os"}},[e._v("#")]),e._v(" Picking a Server OS")]),e._v(" "),a("p",[e._v("Pterodactyl runs on a wide range of operating systems, so pick whichever you are most comfortable using.")]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("Pterodactyl does not support most OpenVZ systems due to incompatibilities with Docker. If you are planning on running\nthis software on an OpenVZ based system you will — most likely — not be successful.")])]),e._v(" "),a("table",[a("thead",[a("tr",[a("th",[e._v("Operating System")]),e._v(" "),a("th",[e._v("Version")]),e._v(" "),a("th",{staticStyle:{"text-align":"center"}},[e._v("Supported")]),e._v(" "),a("th",[e._v("Notes")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[a("strong",[e._v("Ubuntu")])]),e._v(" "),a("td",[e._v("18.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Documentation written assuming Ubuntu 18.04 as the base OS.")])]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("20.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("22.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("22.04")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("MariaDB can be installed without the repo setup script.")])]),e._v(" "),a("tr",[a("td",[a("strong",[e._v("CentOS")])]),e._v(" "),a("td",[e._v("7")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Extra repos are required.")])]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("8")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td",[e._v("Note that CentOS 8 is EOL. Use Rocky or Alma Linux.")])]),e._v(" "),a("tr",[a("td",[a("strong",[e._v("Debian")])]),e._v(" "),a("td",[e._v("10")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")]),e._v(" "),a("tr",[a("td"),e._v(" "),a("td",[e._v("11")]),e._v(" "),a("td",{staticStyle:{"text-align":"center"}},[e._v("✅")]),e._v(" "),a("td")])])]),e._v(" "),a("h2",{attrs:{id:"dependencies"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dependencies"}},[e._v("#")]),e._v(" Dependencies")]),e._v(" "),a("ul",[a("li",[e._v("PHP "),a("code",[e._v("7.4")]),e._v(", "),a("code",[e._v("8.0")]),e._v(" or "),a("code",[e._v("8.1")]),e._v(" (recommended) with the following extensions: "),a("code",[e._v("cli")]),e._v(", "),a("code",[e._v("openssl")]),e._v(", "),a("code",[e._v("gd")]),e._v(", "),a("code",[e._v("mysql")]),e._v(", "),a("code",[e._v("PDO")]),e._v(", "),a("code",[e._v("mbstring")]),e._v(", "),a("code",[e._v("tokenizer")]),e._v(", "),a("code",[e._v("bcmath")]),e._v(", "),a("code",[e._v("xml")]),e._v(" or "),a("code",[e._v("dom")]),e._v(", "),a("code",[e._v("curl")]),e._v(", "),a("code",[e._v("zip")]),e._v(", and "),a("code",[e._v("fpm")]),e._v(" if you are planning to use NGINX.")]),e._v(" "),a("li",[e._v("MySQL "),a("code",[e._v("5.7.22")]),e._v(" and higher (MySQL "),a("code",[e._v("8")]),e._v(" recommended) "),a("strong",[e._v("or")]),e._v(" MariaDB "),a("code",[e._v("10.2")]),e._v(" and higher.")]),e._v(" "),a("li",[e._v("Redis ("),a("code",[e._v("redis-server")]),e._v(")")]),e._v(" "),a("li",[e._v("A webserver (Apache, NGINX, Caddy, etc.)")]),e._v(" "),a("li",[a("code",[e._v("curl")])]),e._v(" "),a("li",[a("code",[e._v("tar")])]),e._v(" "),a("li",[a("code",[e._v("unzip")])]),e._v(" "),a("li",[a("code",[e._v("git")])]),e._v(" "),a("li",[a("code",[e._v("composer")]),e._v(" v2")])]),e._v(" "),a("h3",{attrs:{id:"example-dependency-installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-dependency-installation"}},[e._v("#")]),e._v(" Example Dependency Installation")]),e._v(" "),a("p",[e._v("The commands below are simply an example of how you might install these dependencies. Please consult with your\noperating system's package manager to determine the correct packages to install.")]),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('# Add "add-apt-repository" command')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" software-properties-common "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" apt-transport-https ca-certificates gnupg\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add additional repositories for PHP, Redis, and MariaDB")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a("span",{pre:!0,attrs:{class:"token environment constant"}},[e._v("LC_ALL")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("C.UTF-8 add-apt-repository -y ppa:ondrej/php\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add Redis official APT repository")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -fsSL https://packages.redis.io/gpg "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("echo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("$(")]),e._v("lsb_release -cs"),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v(")")])]),e._v(' main"')]),e._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tee")]),e._v(" /etc/apt/sources.list.d/redis.list\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# MariaDB repo setup script can be skipped on Ubuntu 22.04")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("curl")]),e._v(" -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("bash")]),e._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Update repositories list")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Add universe repository if you are on Ubuntu 18.04")]),e._v("\napt-add-repository universe\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Install Dependencies")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" -y "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" php8.1 php8.1-"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v(" mariadb-server nginx "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("unzip")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" redis-server\n")])])]),a("h3",{attrs:{id:"installing-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installing-composer"}},[e._v("#")]),e._v(" Installing Composer")]),e._v(" "),a("p",[e._v("Composer is a dependency manager for PHP that allows us to ship everything you'll need code wise to operate the Panel. You'll\nneed composer installed before continuing in this process.")]),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(" -sS https://getcomposer.org/installer "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" php -- --install-dir"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("/usr/local/bin --filename"),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v("composer\n")])])]),a("h2",{attrs:{id:"download-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-files"}},[e._v("#")]),e._v(" Download Files")]),e._v(" "),a("p",[e._v("The first step in this process is to create the folder where the panel will live and then move ourselves into that\nnewly created folder. Below is an example of how to perform this operation.")]),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("mkdir")]),e._v(" -p /var/www/pterodactyl\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("cd")]),e._v(" /var/www/pterodactyl\n")])])]),a("p",[e._v("Once you have created a new directory for the Panel and moved into it you'll need to download the Panel files. This\nis as simple as using "),a("code",[e._v("curl")]),e._v(" to download our pre-packaged content. Once it is downloaded you'll need to unpack the archive\nand then set the correct permissions on the "),a("code",[e._v("storage/")]),e._v(" and "),a("code",[e._v("bootstrap/cache/")]),e._v(" directories. These directories\nallow us to store files as well as keep a speedy cache available to reduce load times.")]),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(" -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("tar")]),e._v(" -xzvf panel.tar.gz\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("chmod")]),e._v(" -R "),a("span",{pre:!0,attrs:{class:"token number"}},[e._v("755")]),e._v(" storage/* bootstrap/cache/\n")])])]),a("h2",{attrs:{id:"installation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[e._v("#")]),e._v(" Installation")]),e._v(" "),a("p",[e._v("Now that all of the files have been downloaded we need to configure some core aspects of the Panel.")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Database Configuration")]),e._v(" "),a("p",[e._v("You will need a database setup and a user with the correct permissions created for that database before\ncontinuing any further. See below to create a user and database for your Pterodactyl panel quickly. To find more detailed information\nplease have a look at "),a("RouterLink",{attrs:{to:"/tutorials/mysql_setup.html"}},[e._v("Setting up MySQL")]),e._v(".")],1),e._v(" "),a("div",{staticClass:"language-sql extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[e._v("mysql "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("-")]),e._v("u root "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("-")]),e._v("p\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Remember to change 'yourPassword' below to be a unique password")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("CREATE")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("USER")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'pterodactyl'")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("@'127.0.0.1'")]),e._v(" IDENTIFIED "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("BY")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'yourPassword'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("CREATE")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("DATABASE")]),e._v(" panel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("GRANT")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("ALL")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("PRIVILEGES")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("ON")]),e._v(" panel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("*")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("TO")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v("'pterodactyl'")]),a("span",{pre:!0,attrs:{class:"token variable"}},[e._v("@'127.0.0.1'")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("WITH")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("GRANT")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("OPTION")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(";")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[e._v("exit")]),e._v("\n")])])])]),e._v(" "),a("p",[e._v("First we will copy over our default environment settings file, install core dependencies, and then generate a\nnew application encryption key.")]),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("cp")]),e._v(" .env.example .env\ncomposer "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" --no-dev --optimize-autoloader\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Only run the command below if you are installing this Panel for")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# the first time and do not have any Pterodactyl Panel data in the database.")]),e._v("\nphp artisan key:generate --force\n")])])]),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[e._v("DANGER")]),e._v(" "),a("p",[e._v("Back up your encryption key (APP_KEY in the "),a("code",[e._v(".env")]),e._v(" file). It is used as an encryption key for all data that needs to be stored securely (e.g. api keys).\nStore it somewhere safe - not just on your server. If you lose it all encrypted data is irrecoverable -- even if you have database backups.")])]),e._v(" "),a("h3",{attrs:{id:"environment-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#environment-configuration"}},[e._v("#")]),e._v(" Environment Configuration")]),e._v(" "),a("p",[e._v("Pterodactyl's core environment is easily configured using a few different CLI commands built into the app. This step\nwill cover setting up things such as sessions, caching, database credentials, and email sending.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan p:environment:setup\nphp artisan p:environment:database\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v('# To use PHP\'s internal mail sending (not recommended), select "mail". To use a')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v('# custom SMTP server, select "smtp".')]),e._v("\nphp artisan p:environment:mail\n")])])]),a("h3",{attrs:{id:"database-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#database-setup"}},[e._v("#")]),e._v(" Database Setup")]),e._v(" "),a("p",[e._v("Now we need to setup all of the base data for the Panel in the database you created earlier. "),a("strong",[e._v("The command below\nmay take some time to run depending on your machine. Please "),a("em",[e._v("DO NOT")]),e._v(" exit the process until it is completed!")]),e._v(" This\ncommand will setup the database tables and then add all of the Nests & Eggs that power Pterodactyl.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan migrate --seed --force\n")])])]),a("h3",{attrs:{id:"add-the-first-user"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#add-the-first-user"}},[e._v("#")]),e._v(" Add The First User")]),e._v(" "),a("p",[e._v("You'll then need to create an administrative user so that you can log into the panel. To do so, run the command below.\nAt this time passwords "),a("strong",[e._v("must")]),e._v(" meet the following requirements: 8 characters, mixed case, at least one number.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("php artisan p:user:make\n")])])]),a("h3",{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 in the installation process is to set the correct permissions on the Panel files so that the webserver can\nuse them correctly.")]),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(" -R www-data:www-data /var/www/pterodactyl/*\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(" -R nginx:nginx /var/www/pterodactyl/*\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(" -R apache:apache /var/www/pterodactyl/*\n")])])]),a("h2",{attrs:{id:"queue-listeners"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#queue-listeners"}},[e._v("#")]),e._v(" Queue Listeners")]),e._v(" "),a("p",[e._v("We make use of queues to make the application faster and handle sending emails and other actions in the background.\nYou will need to setup the queue worker for these actions to be processed.")]),e._v(" "),a("h3",{attrs:{id:"crontab-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#crontab-configuration"}},[e._v("#")]),e._v(" Crontab Configuration")]),e._v(" "),a("p",[e._v("The first thing we need to do is create a new cronjob that runs every minute to process specific Pterodactyl tasks, such\nas session cleanup and sending scheduled tasks to daemons. You'll want to open your crontab using "),a("code",[e._v("sudo crontab -e")]),e._v(" and\nthen paste the line below.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("* * * * * php /var/www/pterodactyl/artisan schedule:run "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(">>")]),e._v(" /dev/null "),a("span",{pre:!0,attrs:{class:"token operator"}},[a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("2")]),e._v(">")]),a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[e._v("&1")]),e._v("\n")])])]),a("h3",{attrs:{id:"create-queue-worker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#create-queue-worker"}},[e._v("#")]),e._v(" Create Queue Worker")]),e._v(" "),a("p",[e._v("Next you need to create a new systemd worker to keep our queue process running in the background. This queue is responsible\nfor sending emails and handling many other background tasks for Pterodactyl.")]),e._v(" "),a("p",[e._v("Create a file called "),a("code",[e._v("pteroq.service")]),e._v(" in "),a("code",[e._v("/etc/systemd/system")]),e._v(" with the contents below.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("# Pterodactyl Queue Worker File\n# ----------------------------------\n\n[Unit]\nDescription=Pterodactyl Queue Worker\nAfter=redis-server.service\n\n[Service]\n# On some systems the user and group might be different.\n# Some systems use `apache` or `nginx` as the user and group.\nUser=www-data\nGroup=www-data\nRestart=always\nExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3\nStartLimitInterval=180\nStartLimitBurst=30\nRestartSec=5s\n\n[Install]\nWantedBy=multi-user.target\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("Redis on CentOS")]),e._v(" "),a("p",[e._v("If you are using CentOS, you will need to replace "),a("code",[e._v("redis-server.service")]),e._v(" with "),a("code",[e._v("redis.service")]),e._v(" at the "),a("code",[e._v("After=")]),e._v(" line in order to ensure "),a("code",[e._v("redis")]),e._v(" starts before the queue worker.")])]),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 are not using "),a("code",[e._v("redis")]),e._v(" for anything you should remove the "),a("code",[e._v("After=")]),e._v(" line, otherwise you will encounter errors\nwhen the service starts.")])]),e._v(" "),a("p",[e._v("If you are using redis for your system, you will want to make sure to enable that it will start on boot. You can do that by running the following command:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now redis-server\n")])])]),a("p",[e._v("Finally, enable the service and set it to boot on machine start.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" systemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("enable")]),e._v(" --now pteroq.service\n")])])]),a("h4",{attrs:{id:"next-step-webserver-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#next-step-webserver-configuration"}},[e._v("#")]),e._v(" Next Step: "),a("a",{attrs:{href:"./webserver_configuration"}},[e._v("Webserver Configuration")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/72.064e6a7c.js b/assets/js/72.c3387ba5.js similarity index 99% rename from assets/js/72.064e6a7c.js rename to assets/js/72.c3387ba5.js index dd4e45ff..1c2a39e2 100644 --- a/assets/js/72.064e6a7c.js +++ b/assets/js/72.c3387ba5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{417:function(e,t,r){"use strict";r.r(t);var n=r(48),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"about"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#about"}},[e._v("#")]),e._v(" About")]),e._v(" "),r("p"),r("div",{staticClass:"table-of-contents"},[r("ul",[r("li",[r("a",{attrs:{href:"#core-project-team"}},[e._v("Core Project Team")])]),r("li",[r("a",{attrs:{href:"#community-team"}},[e._v("Community Team")])]),r("li",[r("a",{attrs:{href:"#sponsors"}},[e._v("Sponsors")])]),r("li",[r("a",{attrs:{href:"#license"}},[e._v("License")])]),r("li",[r("a",{attrs:{href:"#gpg-signature"}},[e._v("GPG Signature")])])])]),r("p"),e._v(" "),r("h2",{attrs:{id:"core-project-team"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#core-project-team"}},[e._v("#")]),e._v(" Core Project Team")]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("Name")]),e._v(" "),r("th",[e._v("Discord Name")]),e._v(" "),r("th",[e._v("Primary Role")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[r("a",{attrs:{href:"https://daneeveritt.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Dane Everitt"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("Tactical Fish#8008")])]),e._v(" "),r("td",[e._v("Project Maintainer")])]),e._v(" "),r("tr",[r("td",[e._v("Stepan Fedotov")]),e._v(" "),r("td",[r("code",[e._v("Trixter#0001")])]),e._v(" "),r("td",[e._v("WISP & WHMCS Module Maintainer")])]),e._v(" "),r("tr",[r("td",[e._v("Michael Parker")]),e._v(" "),r("td",[r("code",[e._v("parkervcp#6789")])]),e._v(" "),r("td",[e._v("Egg Developer, Docker Integration")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://anand.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Anand Capur"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("Arcdigital#1337")])]),e._v(" "),r("td",[e._v("Mobile/Cloud Project Lead")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://schrej.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jakob Schrettenbrunner"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("schrej#1337")])]),e._v(" "),r("td",[e._v("Developer")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://lancepioch.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Lance Pioch"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("ShadowLancer#5209")])]),e._v(" "),r("td",[e._v("Developer")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://matthewp.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Matthew Penner"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("matthewp#0001")])]),e._v(" "),r("td",[e._v("Developer")])])])]),e._v(" "),r("p",[e._v("Members of the project team have a red username in our Discord server.")]),e._v(" "),r("h2",{attrs:{id:"community-team"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#community-team"}},[e._v("#")]),e._v(" Community Team")]),e._v(" "),r("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(" "),r("h2",{attrs:{id:"sponsors"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#sponsors"}},[e._v("#")]),e._v(" Sponsors")]),e._v(" "),r("p",[e._v("The following companies help to fund Pterodactyl's developement. "),r("a",{attrs:{href:"https://github.com/sponsors/DaneEveritt",target:"_blank",rel:"noopener noreferrer"}},[e._v("Interested in becoming a sponsor?"),r("OutboundLink")],1)]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("Company")]),e._v(" "),r("th",[e._v("About")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[r("a",{attrs:{href:"https://wisp.gg",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("WISP")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Extra features.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://bloom.host",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Bloom.host")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Bloom.host offers dedicated core VPS and Minecraft hosting with Ryzen 9 processors. With owned-hardware, we offer truly unbeatable prices on high-performance hosting.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://minestrator.com/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("MineStrator")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Looking for a French highend hosting company for you minecraft server? More than 14,000 members on our discord, trust us.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://dedicatedmc.io/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("DedicatedMC")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("DedicatedMC provides Raw Power hosting at affordable pricing, making sure to never compromise on your performance and giving you the best performance money can buy.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://www.skynode.pro/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Skynode")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Skynode provides blazing fast game servers along with a top-notch user experience. Whatever our clients are looking for, we're able to provide it!")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://xcore-server.de/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("XCORE")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("XCORE offers High-End Servers for hosting and gaming since 2012. Fast, excellent and well-known for eSports Gaming.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://royalehosting.net/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("RoyaleHosting")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Build your dreams and deploy them with RoyaleHosting’s reliable servers and network. Easy to use, provisioned in a couple of minutes.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://spillhosting.no/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Spill Hosting")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Spill Hosting is a Norwegian hosting service, which aims for inexpensive services on quality servers. Premium i9-9900K processors will run your game like a dream.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://deinserverhost.de/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("DeinServerHost")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("DeinServerHost offers Dedicated, vps and Gameservers for many popular Games like Minecraft and Rust in Germany since 2013.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://hostbend.com/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("HostBend")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("HostBend offers a variety of solutions for developers, students, and others who have a tight budget but don't want to compromise quality and support.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://capitolsolutions.cloud/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Capitol Hosting Solutions")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("CHS is "),r("em",[e._v("the")]),e._v(" budget friendly hosting company for Australian and American gamers, offering a variety of plans from Web Hosting to Game Servers; Custom Solutions too!")])])])]),e._v(" "),r("h2",{attrs:{id:"license"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[e._v("#")]),e._v(" License")]),e._v(" "),r("div",{staticClass:"language-text extra-class"},[r("pre",{pre:!0,attrs:{class:"language-text"}},[r("code",[e._v('Copyright (c) 2015 - 2021 Dane Everitt .\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n')])])]),r("h2",{attrs:{id:"gpg-signature"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#gpg-signature"}},[e._v("#")]),e._v(" GPG Signature")]),e._v(" "),r("p",[e._v("Starting with Panel "),r("code",[e._v("v0.4.0")]),e._v(" all releases are signed with the GPG key below. All releases include a detached key as\nwell to verify your download against.")]),e._v(" "),r("p",[e._v("Releases also include a SHA256 checksum.")]),e._v(" "),r("div",{staticClass:"language-txt extra-class"},[r("pre",{pre:!0,attrs:{class:"language-text"}},[r("code",[e._v("-----BEGIN PGP PUBLIC KEY BLOCK-----\n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\ngkSI5o2kam0QGYUhqg==\n=rDb0\n-----END PGP PUBLIC KEY BLOCK-----\n")])])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{426:function(e,t,r){"use strict";r.r(t);var n=r(48),o=Object(n.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"about"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#about"}},[e._v("#")]),e._v(" About")]),e._v(" "),r("p"),r("div",{staticClass:"table-of-contents"},[r("ul",[r("li",[r("a",{attrs:{href:"#core-project-team"}},[e._v("Core Project Team")])]),r("li",[r("a",{attrs:{href:"#community-team"}},[e._v("Community Team")])]),r("li",[r("a",{attrs:{href:"#sponsors"}},[e._v("Sponsors")])]),r("li",[r("a",{attrs:{href:"#license"}},[e._v("License")])]),r("li",[r("a",{attrs:{href:"#gpg-signature"}},[e._v("GPG Signature")])])])]),r("p"),e._v(" "),r("h2",{attrs:{id:"core-project-team"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#core-project-team"}},[e._v("#")]),e._v(" Core Project Team")]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("Name")]),e._v(" "),r("th",[e._v("Discord Name")]),e._v(" "),r("th",[e._v("Primary Role")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[r("a",{attrs:{href:"https://daneeveritt.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Dane Everitt"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("Tactical Fish#8008")])]),e._v(" "),r("td",[e._v("Project Maintainer")])]),e._v(" "),r("tr",[r("td",[e._v("Stepan Fedotov")]),e._v(" "),r("td",[r("code",[e._v("Trixter#0001")])]),e._v(" "),r("td",[e._v("WISP & WHMCS Module Maintainer")])]),e._v(" "),r("tr",[r("td",[e._v("Michael Parker")]),e._v(" "),r("td",[r("code",[e._v("parkervcp#6789")])]),e._v(" "),r("td",[e._v("Egg Developer, Docker Integration")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://anand.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Anand Capur"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("Arcdigital#1337")])]),e._v(" "),r("td",[e._v("Mobile/Cloud Project Lead")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://schrej.net/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jakob Schrettenbrunner"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("schrej#1337")])]),e._v(" "),r("td",[e._v("Developer")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://lancepioch.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Lance Pioch"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("ShadowLancer#5209")])]),e._v(" "),r("td",[e._v("Developer")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://matthewp.io/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Matthew Penner"),r("OutboundLink")],1)]),e._v(" "),r("td",[r("code",[e._v("matthewp#0001")])]),e._v(" "),r("td",[e._v("Developer")])])])]),e._v(" "),r("p",[e._v("Members of the project team have a red username in our Discord server.")]),e._v(" "),r("h2",{attrs:{id:"community-team"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#community-team"}},[e._v("#")]),e._v(" Community Team")]),e._v(" "),r("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(" "),r("h2",{attrs:{id:"sponsors"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#sponsors"}},[e._v("#")]),e._v(" Sponsors")]),e._v(" "),r("p",[e._v("The following companies help to fund Pterodactyl's developement. "),r("a",{attrs:{href:"https://github.com/sponsors/DaneEveritt",target:"_blank",rel:"noopener noreferrer"}},[e._v("Interested in becoming a sponsor?"),r("OutboundLink")],1)]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("Company")]),e._v(" "),r("th",[e._v("About")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[r("a",{attrs:{href:"https://wisp.gg",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("WISP")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Extra features.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://bloom.host",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Bloom.host")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Bloom.host offers dedicated core VPS and Minecraft hosting with Ryzen 9 processors. With owned-hardware, we offer truly unbeatable prices on high-performance hosting.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://minestrator.com/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("MineStrator")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Looking for a French highend hosting company for you minecraft server? More than 14,000 members on our discord, trust us.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://dedicatedmc.io/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("DedicatedMC")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("DedicatedMC provides Raw Power hosting at affordable pricing, making sure to never compromise on your performance and giving you the best performance money can buy.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://www.skynode.pro/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Skynode")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Skynode provides blazing fast game servers along with a top-notch user experience. Whatever our clients are looking for, we're able to provide it!")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://xcore-server.de/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("XCORE")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("XCORE offers High-End Servers for hosting and gaming since 2012. Fast, excellent and well-known for eSports Gaming.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://royalehosting.net/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("RoyaleHosting")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Build your dreams and deploy them with RoyaleHosting’s reliable servers and network. Easy to use, provisioned in a couple of minutes.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://spillhosting.no/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Spill Hosting")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("Spill Hosting is a Norwegian hosting service, which aims for inexpensive services on quality servers. Premium i9-9900K processors will run your game like a dream.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://deinserverhost.de/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("DeinServerHost")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("DeinServerHost offers Dedicated, vps and Gameservers for many popular Games like Minecraft and Rust in Germany since 2013.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://hostbend.com/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("HostBend")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("HostBend offers a variety of solutions for developers, students, and others who have a tight budget but don't want to compromise quality and support.")])]),e._v(" "),r("tr",[r("td",[r("a",{attrs:{href:"https://capitolsolutions.cloud/",target:"_blank",rel:"noopener noreferrer"}},[r("strong",[e._v("Capitol Hosting Solutions")]),r("OutboundLink")],1)]),e._v(" "),r("td",[e._v("CHS is "),r("em",[e._v("the")]),e._v(" budget friendly hosting company for Australian and American gamers, offering a variety of plans from Web Hosting to Game Servers; Custom Solutions too!")])])])]),e._v(" "),r("h2",{attrs:{id:"license"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[e._v("#")]),e._v(" License")]),e._v(" "),r("div",{staticClass:"language-text extra-class"},[r("pre",{pre:!0,attrs:{class:"language-text"}},[r("code",[e._v('Copyright (c) 2015 - 2021 Dane Everitt .\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n')])])]),r("h2",{attrs:{id:"gpg-signature"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#gpg-signature"}},[e._v("#")]),e._v(" GPG Signature")]),e._v(" "),r("p",[e._v("Starting with Panel "),r("code",[e._v("v0.4.0")]),e._v(" all releases are signed with the GPG key below. All releases include a detached key as\nwell to verify your download against.")]),e._v(" "),r("p",[e._v("Releases also include a SHA256 checksum.")]),e._v(" "),r("div",{staticClass:"language-txt extra-class"},[r("pre",{pre:!0,attrs:{class:"language-text"}},[r("code",[e._v("-----BEGIN PGP PUBLIC KEY BLOCK-----\nmQINBFfi+X4BEADeE8lUOD8rbBDIlHMNaBEO2kKn35jqbW4sJE4qDhOKMIT3sovp\nCc0WDiuyoJ6Oyz707jCiEdhpvWqtPJHpVe1Z3Qj/1D7BrT3VbyzJqdK/GJ8RYWk3\nYXej7SKiu3HWlT2oKN1n3hVMKg0wdaVloxfe+REtebKIBVliic24kueoQwug6Tuk\nEldq2mYcfSjJmiTe+4r96L8+MYhmFQ5DL+MFcBmLsdeQiPOODDP4AqQPKVR/wrl6\nK45eVQJFbc3pNsyrOrSUzosaLtR+8UosiBX6rkFCCCxeYS3dqLPxT118cCTNZZgx\n5mxf7ZnM7qaublq5TG0RCM9nUPB+D58RuvwMCFZ/mu7s/n4I3lV4PLVBgxXbRglj\nNS54XqFhKKTUCDLJRn5jAb1UHaXS97KuhABUu2ViCn0BBnEnVK0eddaDPLqR5L3/\nkbjj1vPiZaOOU1+e3CShiLhas0s7SkxG6Rb9wLZwRiqMqY9pKBMzVagPSbYBXEkE\nyL+yoldfdDl5QKflCRovbK3SAV3b+UOtqteRBIRuz2kMvciH9qOBkK1PCbd/dOI7\nf4vi4r8VUk7DqdqZyhEk3F3Wtydy/+vRkpngnGcemEz6BGAr3YJz4WYpcoRmMGSw\nbr8YGlWRyfOofl2YcMoKIENhG/sdQ3YsQelnfrPumOhOdcNnjwqlNSxBBwARAQAB\ntCNEYW5lIEV2ZXJpdHQgPGRhbmVAZGFuZWV2ZXJpdHQuY29tPokCPQQTAQoAJwUC\nV+L5fgIbAwUJB4YfgAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDupmEDs9cf\nU2bGEAC0Ze0ATnyicC6OBamzk1I+CmHCX5I43H4EbliMmZtgEY6141hdFgXOfQk5\nxoOhv/yf3FHSjZW6m6h7W8NLGGQVXrp9aUHFbXiodoRuxaZvYrbGQskzYStC2GzJ\neURuSOiwRaqHVNNHG7o1N1NCyCmoFiZZ6BfC1QOKI6z8b4mKiiq8242Umih1Z4rU\n25jK5amM7vpYYo/+DgIfU6JCz0cO5GKuymWULpsSN3sgG3jyX9gwz0o0Ytwcx6Sf\nVREy8R+xkPTMAVJJjiFN6nPR+/cgU+6hJmCoN26NTA5xqJJ+IBnBlN0Mbej3YOWo\najo0L0S7cPFujmKxAUnrGyW/KsrYrXmeAvWpVw4MuJysJBRcpVQSdDTmfIPzKDzz\nOCpzt+lMVY29r7GKj082OXYgmZA8JiMyFzxfN4EUeMaPAxyun1O7CJCCLNtRKm85\nqYypc7EcbbXJJrMCb2ONEiu1vBHTMS3cM+9efGYZiYmcdB6Uo9IszC3Zw8DzNLzp\nUvHfV1ErPypTrclSEIzGDkRiZH7781qcjSHC7UAMxxhnlUYZmWP3zO+gzZ6NYJui\nQ3oeHZKpL7FqFoiwRONm4DDMhMfGYieW+Mer9jc49kBGotr2VUAp8cWhOrc+AC+g\nVkT3D/kd2u/ZDkHaLfhHZtbgtoNUBASkrE3EE6Q5usOo6rMDuLkCDQRX4vl+ARAA\n20T1kmwUnLWOZyPuiYfSirSGHs+9hPnf3oIakblfbCG1V3NBtOZe0pDU58kC7LDw\nww5dfrAuaczZTCJ5c8rNhpwN4CGSd2Y/9www2qKuaTRt/7qkPPQ05QDbGClw5Rpe\nkcpPiLIapMsEs/z/6v4bUhP4vDMgca9RNeaB1LWORWImvEx/F/mYMBQO2eZDdvOE\nFxnMpf73xGcps7pTibH7pb4kQlPw15jZZfjv7dkaLipYtHXuDCiZqkqGtu7xHXRN\n+PRIs0uEYPOG6Rxja2lE1rqRzFLk/U/wVWhE6LphD+nTQoKGzSK64RD58fI/kS45\nou8cU65Z4hWOS8CVyFVOOusMITsykPudWMwAoho3C/mqmHH2dd9WQkm9s+LsR9I+\nhiTL0erhaLkvaPSkoZ5NWF7E0NJBxCrsHBan8VcwZsd00V59LpJi4X41AdaVFX3P\noe7ZbpwTdY2HtulqYYtvoAlR42GGbMhkfYPhmZ6qgEXP4horeNQp1zeFb9hasTwU\n3b/KfWzUpSRWC43NASCs4uM6pbzWdRvyGEhAhT9+UPka+z5emKCHn+X7vdvQ1XMe\nbo4Avs89TubAooigBOmfyJnyW96U2UaAxkdroxUSM3Efit4OiOq+GeHizYuUwL3M\n+wR6yx5g7GO0JV1Lk9rmWYFajEXG+2ALRTolL4FZYVMAEQEAAYkCJQQYAQoADwUC\nV+L5fgIbDAUJB4YfgAAKCRDupmEDs9cfU96QEADPX08kGhIx7UVEMWLa0+izPeDp\nyzBpti0eGiSo8AjaYaIqfTZH2JqNlqGp6NVyRK+qffBXwP+1dKsUHUFnlb8Dsgf4\nq66JmRmmcZL18X9dmt7HYU0GCQvLf+wFHSFUkgBNuZowItMj3D1ddO8XAR/9PBln\nStwEUorpbOKZAIttUTjcK/jMM9oVQ2f27EmkLtd/xItESFQIhvnTeNBmr1wTW80e\nkzF/yRqCj7kuE4O/aYr0VzfYtjaI/tmc1uYWe1lPxh1WpsWlfPB/nNdljcT/gD+S\nzowlmFmusVsJpZSU0o4Vgq1q5osYXIDsI10i2GCCIj0QV3gZRCNls2WRkvNz0vMu\nOmQIoPWK4zpRbEjUWjr/dCS9AZMuY721xCgUQWN1ATVJmtaq4GWZK7ABIjOy2DnK\nRstB3Hjtt/Inzx+jTEhENPTJd88fSshPUF5Pw5gUV5PufpMN8IUdOCxCfkT0MWx5\nr21QpUVjOOQkWzTracAtYBbzYCGuIG1VVr19EfE00yCbSHtcWp4bzGi9ysyJXNUU\nTT4F3+enjnip2pfE1nrLCl4V5y/yN/0MQWLTf0aBASVKQGe4whcdjfNyA/YiGZnt\nODa+GmluC+jU1znpmgxBiTftk/S3L2UZf3ejglaqAdaZMIXu3Vc3bcQ4eMkPRlbb\ngkSI5o2kam0QGYUhqg==\n=rDb0\n-----END PGP PUBLIC KEY BLOCK-----\n")])])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/73.fad96c92.js b/assets/js/73.3c0e5aad.js similarity index 98% rename from assets/js/73.fad96c92.js rename to assets/js/73.3c0e5aad.js index a4731156..76ded676 100644 --- a/assets/js/73.fad96c92.js +++ b/assets/js/73.3c0e5aad.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{418:function(e,t,i){"use strict";i.r(t);var o=i(48),n=Object(o.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",{attrs:{id:"community-standards"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#community-standards"}},[e._v("#")]),e._v(" Community Standards")]),e._v(" "),i("p",[e._v("Pterodactyl has grown from a community of tens in 2015 to a community of thousands in 2020. During that time\nthere have been countless growing pains and community has changed in an innumerable number of ways. At our heart\nhowever, Pterodactyl continues to exist for one purpose: to be "),i("em",[e._v("the")]),e._v(" platform for running your game servers.")]),e._v(" "),i("p",[e._v("In order to keep true to that goal, and continue to foster one of the largest open-source game panel communities\nout there, we've adopted a simple set of guidelines for participating in this community. The goal of these guidelines\nis to foster an inclusive, welcoming environment for new users, and provide a space for the thousands of existing\nusers, administrators, network owners, and hosting companies to co-exist.")]),e._v(" "),i("p",[e._v("These rules and guidelines extend to all facets of the Pterodactyl Community, including but not limited to our\nDiscord Server and all activities within the GitHub Organization.")]),e._v(" "),i("h2",{attrs:{id:"community-guidelines"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#community-guidelines"}},[e._v("#")]),e._v(" Community Guidelines")]),e._v(" "),i("p",[e._v("At the most basic level, these guidelines can be distilled down to:")]),e._v(" "),i("ol",[i("li",[e._v("Be a decent human.")]),e._v(" "),i("li",[e._v("Patience is a virtue.")])]),e._v(" "),i("h3",{attrs:{id:"be-mature"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#be-mature"}},[e._v("#")]),e._v(" Be Mature")]),e._v(" "),i("p",[e._v('You are expected to be mature and control your behavior in a manner that adheres to basic human decency. If you are\nunable to do this you will be removed from the community. Personal attacks, spam (in any form), "doxxing", or otherwise\nacting out is not allowed.')]),e._v(" "),i("p",[e._v("This community is fairly lax in regards to moderating language. However, the following are some examples of\nbehavior that is absolutely "),i("em",[e._v("not")]),e._v(" tolerated and for which you will be removed from the community.")]),e._v(" "),i("ul",[i("li",[e._v("Racist, sexist, homophobic, transphobic, or otherwise deregatory speech, images, insinuations, or any language whose\nsole purpose is to denigrate any individual, organization, or class of individual.")]),e._v(" "),i("li",[e._v('Threats of violence against any person, group, or organization including "doxxing" of these entities.')]),e._v(" "),i("li",[e._v("Pornographic or excessively violent content.")])]),e._v(" "),i("h3",{attrs:{id:"limit-the-drama"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#limit-the-drama"}},[e._v("#")]),e._v(" Limit the Drama")]),e._v(" "),i("p",[e._v("Discussion, including linking to or discussing sites or software, that exists to cast a negative image of other\ncompanies or users is not allowed. This includes calling out hosts using nulled software, attempting to elicit negative\nreactions towards services or websites, or otherwise stirring up drama.")]),e._v(" "),i("div",{staticClass:"custom-block tip"},[i("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),i("p",[e._v("Assume someone is acting in good faith when responding to them. You don't have to agree with everyone, and you\ndon't need to respond to everything.")])]),e._v(" "),i("h3",{attrs:{id:"be-patient"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#be-patient"}},[e._v("#")]),e._v(" Be Patient")]),e._v(" "),i("p",[e._v("This is an open-source project. No members of the development team are paid in an official capacity to write,\nmaintain, nor support this software. The following actions are discouraged in this community.")]),e._v(" "),i("ul",[i("li",[e._v("Repeatedly asking identical questions within the same channel (or across channels) within short periods of time.\n"),i("ul",[i("li",[e._v("It is expected that some questions will be missed. If it has been a reasonable amount of time and your question\nremains unanswered, you're welcome to re-post it.")])])]),e._v(" "),i("li",[e._v("Keep all support questions within the realm of the support channels.")]),e._v(" "),i("li",[e._v("Do not interrupt conversations in non-support channels solely to request that someone look in a support channel\nand help you.")])]),e._v(" "),i("h3",{attrs:{id:"no-commercial-services"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#no-commercial-services"}},[e._v("#")]),e._v(" No Commercial Services")]),e._v(" "),i("p",[e._v("Discussion of paid installation/upgrade services, modifications, or any other commercial offerings is strictly\nprohibited unless otherwise noted. This also includes reaching out to individuals via Direct Message and offering\nyour services without provocation.")]),e._v(" "),i("div",{staticClass:"custom-block warning"},[i("p",{staticClass:"custom-block-title"},[e._v("Check your Username")]),e._v(" "),i("p",[e._v("Advertising commercial services within your username or display name on Discord is forbidden.")])]),e._v(" "),i("p",[i("RouterLink",{attrs:{to:"/project/about.html#sponsors"}},[e._v("Sponsors")]),e._v(" at the silver tier and higher are exempt from this rule.")],1),e._v(" "),i("h3",{attrs:{id:"no-mention-or-ping-spam"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#no-mention-or-ping-spam"}},[e._v("#")]),e._v(" No Mention or Ping Spam")]),e._v(" "),i("p",[e._v("Please, do not direct message any administrative, development, or notable community members without first\nchecking with them. Keep all support queries within the public support channels unless you have been directly\nasked to move it elsewhere.")]),e._v(" "),i("p",[i("em",[e._v("But what if I am trying to respond back to someone?")]),e._v(" That is fine! We only ask that you not mention people\ndirectly if they're not already involved in a discussion with you.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{417:function(e,t,i){"use strict";i.r(t);var o=i(48),n=Object(o.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",{attrs:{id:"community-standards"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#community-standards"}},[e._v("#")]),e._v(" Community Standards")]),e._v(" "),i("p",[e._v("Pterodactyl has grown from a community of tens in 2015 to a community of thousands in 2020. During that time\nthere have been countless growing pains and community has changed in an innumerable number of ways. At our heart\nhowever, Pterodactyl continues to exist for one purpose: to be "),i("em",[e._v("the")]),e._v(" platform for running your game servers.")]),e._v(" "),i("p",[e._v("In order to keep true to that goal, and continue to foster one of the largest open-source game panel communities\nout there, we've adopted a simple set of guidelines for participating in this community. The goal of these guidelines\nis to foster an inclusive, welcoming environment for new users, and provide a space for the thousands of existing\nusers, administrators, network owners, and hosting companies to co-exist.")]),e._v(" "),i("p",[e._v("These rules and guidelines extend to all facets of the Pterodactyl Community, including but not limited to our\nDiscord Server and all activities within the GitHub Organization.")]),e._v(" "),i("h2",{attrs:{id:"community-guidelines"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#community-guidelines"}},[e._v("#")]),e._v(" Community Guidelines")]),e._v(" "),i("p",[e._v("At the most basic level, these guidelines can be distilled down to:")]),e._v(" "),i("ol",[i("li",[e._v("Be a decent human.")]),e._v(" "),i("li",[e._v("Patience is a virtue.")])]),e._v(" "),i("h3",{attrs:{id:"be-mature"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#be-mature"}},[e._v("#")]),e._v(" Be Mature")]),e._v(" "),i("p",[e._v('You are expected to be mature and control your behavior in a manner that adheres to basic human decency. If you are\nunable to do this you will be removed from the community. Personal attacks, spam (in any form), "doxxing", or otherwise\nacting out is not allowed.')]),e._v(" "),i("p",[e._v("This community is fairly lax in regards to moderating language. However, the following are some examples of\nbehavior that is absolutely "),i("em",[e._v("not")]),e._v(" tolerated and for which you will be removed from the community.")]),e._v(" "),i("ul",[i("li",[e._v("Racist, sexist, homophobic, transphobic, or otherwise deregatory speech, images, insinuations, or any language whose\nsole purpose is to denigrate any individual, organization, or class of individual.")]),e._v(" "),i("li",[e._v('Threats of violence against any person, group, or organization including "doxxing" of these entities.')]),e._v(" "),i("li",[e._v("Pornographic or excessively violent content.")])]),e._v(" "),i("h3",{attrs:{id:"limit-the-drama"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#limit-the-drama"}},[e._v("#")]),e._v(" Limit the Drama")]),e._v(" "),i("p",[e._v("Discussion, including linking to or discussing sites or software, that exists to cast a negative image of other\ncompanies or users is not allowed. This includes calling out hosts using nulled software, attempting to elicit negative\nreactions towards services or websites, or otherwise stirring up drama.")]),e._v(" "),i("div",{staticClass:"custom-block tip"},[i("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),i("p",[e._v("Assume someone is acting in good faith when responding to them. You don't have to agree with everyone, and you\ndon't need to respond to everything.")])]),e._v(" "),i("h3",{attrs:{id:"be-patient"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#be-patient"}},[e._v("#")]),e._v(" Be Patient")]),e._v(" "),i("p",[e._v("This is an open-source project. No members of the development team are paid in an official capacity to write,\nmaintain, nor support this software. The following actions are discouraged in this community.")]),e._v(" "),i("ul",[i("li",[e._v("Repeatedly asking identical questions within the same channel (or across channels) within short periods of time.\n"),i("ul",[i("li",[e._v("It is expected that some questions will be missed. If it has been a reasonable amount of time and your question\nremains unanswered, you're welcome to re-post it.")])])]),e._v(" "),i("li",[e._v("Keep all support questions within the realm of the support channels.")]),e._v(" "),i("li",[e._v("Do not interrupt conversations in non-support channels solely to request that someone look in a support channel\nand help you.")])]),e._v(" "),i("h3",{attrs:{id:"no-commercial-services"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#no-commercial-services"}},[e._v("#")]),e._v(" No Commercial Services")]),e._v(" "),i("p",[e._v("Discussion of paid installation/upgrade services, modifications, or any other commercial offerings is strictly\nprohibited unless otherwise noted. This also includes reaching out to individuals via Direct Message and offering\nyour services without provocation.")]),e._v(" "),i("div",{staticClass:"custom-block warning"},[i("p",{staticClass:"custom-block-title"},[e._v("Check your Username")]),e._v(" "),i("p",[e._v("Advertising commercial services within your username or display name on Discord is forbidden.")])]),e._v(" "),i("p",[i("RouterLink",{attrs:{to:"/project/about.html#sponsors"}},[e._v("Sponsors")]),e._v(" at the silver tier and higher are exempt from this rule.")],1),e._v(" "),i("h3",{attrs:{id:"no-mention-or-ping-spam"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#no-mention-or-ping-spam"}},[e._v("#")]),e._v(" No Mention or Ping Spam")]),e._v(" "),i("p",[e._v("Please, do not direct message any administrative, development, or notable community members without first\nchecking with them. Keep all support queries within the public support channels unless you have been directly\nasked to move it elsewhere.")]),e._v(" "),i("p",[i("em",[e._v("But what if I am trying to respond back to someone?")]),e._v(" That is fine! We only ask that you not mention people\ndirectly if they're not already involved in a discussion with you.")])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/74.1aba3a05.js b/assets/js/74.c44472e4.js similarity index 95% rename from assets/js/74.1aba3a05.js rename to assets/js/74.c44472e4.js index 842cc82b..1cfa477f 100644 --- a/assets/js/74.1aba3a05.js +++ b/assets/js/74.c44472e4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{419:function(e,t,o){"use strict";o.r(t);var a=o(48),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"introduction"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),o("p",[e._v("Pterodactyl is the open-source game server management panel built with PHP, React, and Go. Designed with\nsecurity in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful\nand intuitive UI to administrators and users. What more are you waiting for? Make game servers a first-class\ncitizen on your platform today.")]),e._v(" "),o("h2",{attrs:{id:"supported-games"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#supported-games"}},[e._v("#")]),e._v(" Supported Games")]),e._v(" "),o("p",[e._v("We support a huge variety of games by utilizing Docker containers to isolate each instance, giving you the power\nto host your games across the world without having to bloat each physical machine with additional dependencies.")]),e._v(" "),o("p",[e._v("Some of our core supported games include:")]),e._v(" "),o("ul",[o("li",[e._v("Minecraft — including Spigot, Sponge, Bungeecord, Waterfall, and more")]),e._v(" "),o("li",[e._v("Rust")]),e._v(" "),o("li",[e._v("Terraria")]),e._v(" "),o("li",[e._v("Teamspeak")]),e._v(" "),o("li",[e._v("Mumble")]),e._v(" "),o("li",[e._v("Team Fortress 2")]),e._v(" "),o("li",[e._v("Counter Strike: Global Offensive")]),e._v(" "),o("li",[e._v("Garry's Mod")]),e._v(" "),o("li",[e._v("ARK: Survival Evolved")])]),e._v(" "),o("p",[e._v("In addition to our standard nest of supported games, our community is constantly pushing the limits of this software\nand there are plenty more games available provided by the community. Some of these games include:")]),e._v(" "),o("ul",[o("li",[e._v("Factorio")]),e._v(" "),o("li",[e._v("San Andreas: MP")]),e._v(" "),o("li",[e._v("Pocketmine MP")]),e._v(" "),o("li",[e._v("Squad")]),e._v(" "),o("li",[e._v("FiveM")]),e._v(" "),o("li",[e._v("Xonotic")]),e._v(" "),o("li",[e._v("Discord ATLBot")]),e._v(" "),o("li",[o("a",{attrs:{href:"https://github.com/parkervcp/eggs",target:"_blank",rel:"noopener noreferrer"}},[e._v("and many more..."),o("OutboundLink")],1)])]),e._v(" "),o("h2",{attrs:{id:"responsible-disclosure"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#responsible-disclosure"}},[e._v("#")]),e._v(" Responsible Disclosure")]),e._v(" "),o("p",[e._v("Pterodactyl is completely open-source, and as such completely open to independent users and auditors to browse our\ncode base and hunt for security issues. If you come across anything that raises red flags for you, please do not\nhesitate to reach out directly to "),o("code",[e._v("support@pterodactyl.io")]),e._v(". We ask that you please be responsible when disclosing\nany security concerns and "),o("em",[e._v("do not")]),e._v(" report them on our public facing bug tracker.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{425:function(e,t,o){"use strict";o.r(t);var a=o(48),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",{attrs:{id:"introduction"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[e._v("#")]),e._v(" Introduction")]),e._v(" "),o("p",[e._v("Pterodactyl is the open-source game server management panel built with PHP, React, and Go. Designed with\nsecurity in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful\nand intuitive UI to administrators and users. What more are you waiting for? Make game servers a first-class\ncitizen on your platform today.")]),e._v(" "),o("h2",{attrs:{id:"supported-games"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#supported-games"}},[e._v("#")]),e._v(" Supported Games")]),e._v(" "),o("p",[e._v("We support a huge variety of games by utilizing Docker containers to isolate each instance, giving you the power\nto host your games across the world without having to bloat each physical machine with additional dependencies.")]),e._v(" "),o("p",[e._v("Some of our core supported games include:")]),e._v(" "),o("ul",[o("li",[e._v("Minecraft — including Spigot, Sponge, Bungeecord, Waterfall, and more")]),e._v(" "),o("li",[e._v("Rust")]),e._v(" "),o("li",[e._v("Terraria")]),e._v(" "),o("li",[e._v("Teamspeak")]),e._v(" "),o("li",[e._v("Mumble")]),e._v(" "),o("li",[e._v("Team Fortress 2")]),e._v(" "),o("li",[e._v("Counter Strike: Global Offensive")]),e._v(" "),o("li",[e._v("Garry's Mod")]),e._v(" "),o("li",[e._v("ARK: Survival Evolved")])]),e._v(" "),o("p",[e._v("In addition to our standard nest of supported games, our community is constantly pushing the limits of this software\nand there are plenty more games available provided by the community. Some of these games include:")]),e._v(" "),o("ul",[o("li",[e._v("Factorio")]),e._v(" "),o("li",[e._v("San Andreas: MP")]),e._v(" "),o("li",[e._v("Pocketmine MP")]),e._v(" "),o("li",[e._v("Squad")]),e._v(" "),o("li",[e._v("FiveM")]),e._v(" "),o("li",[e._v("Xonotic")]),e._v(" "),o("li",[e._v("Discord ATLBot")]),e._v(" "),o("li",[o("a",{attrs:{href:"https://github.com/parkervcp/eggs",target:"_blank",rel:"noopener noreferrer"}},[e._v("and many more..."),o("OutboundLink")],1)])]),e._v(" "),o("h2",{attrs:{id:"responsible-disclosure"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#responsible-disclosure"}},[e._v("#")]),e._v(" Responsible Disclosure")]),e._v(" "),o("p",[e._v("Pterodactyl is completely open-source, and as such completely open to independent users and auditors to browse our\ncode base and hunt for security issues. If you come across anything that raises red flags for you, please do not\nhesitate to reach out directly to "),o("code",[e._v("support@pterodactyl.io")]),e._v(". We ask that you please be responsible when disclosing\nany security concerns and "),o("em",[e._v("do not")]),e._v(" report them on our public facing bug tracker.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/75.9013e01c.js b/assets/js/75.61db1f51.js similarity index 99% rename from assets/js/75.9013e01c.js rename to assets/js/75.61db1f51.js index 4d4ffeec..c7394c58 100644 --- a/assets/js/75.9013e01c.js +++ b/assets/js/75.61db1f51.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{421:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"creating-ssl-certificates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-ssl-certificates"}},[e._v("#")]),e._v(" Creating SSL Certificates")]),e._v(" "),a("p",[e._v("This tutorial briefly covers creating new SSL certificates for your panel and wings.")]),e._v(" "),a("tabs",[a("tab",{attrs:{name:"Method 1: Certbot"}},[a("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 "),a("a",{attrs:{href:"https://certbot.eff.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Certbot's official\nsite"),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -y certbot\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Nginx")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -y python3-certbot-nginx\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Apache")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -y python3-certbot-apache\n")])])]),a("h2",{attrs:{id:"creating-a-certificate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),a("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(" "),a("p",[e._v("Then, in the command below, you should replace "),a("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 "),a("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(" "),a("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 "),a("a",{attrs:{href:"https://pterodactyl.io/panel/1.0/webserver_configuration.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("web server configuration step"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("h3",{attrs:{id:"http-challenge"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#http-challenge"}},[e._v("#")]),e._v(" HTTP challenge")]),e._v(" "),a("p",[e._v("HTTP challenge requires you to expose port 80 for the challenge verification.")]),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("# Nginx")]),e._v("\ncertbot certonly --nginx -d example.com\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Apache")]),e._v("\ncertbot certonly --apache -d example.com\n"),a("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 --standalone -d example.com\n")])])]),a("h3",{attrs:{id:"dns-challenge"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dns-challenge"}},[e._v("#")]),e._v(" DNS challenge")]),e._v(" "),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("certbot -d example.com --manual --preferred-challenges dns certonly\n")])])]),a("h3",{attrs:{id:"auto-renewal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),a("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 "),a("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(" "),a("p",[e._v("Deploy hook would restart the Nginx service to apply a new certificate when it's renewed successfully. Change "),a("code",[e._v("nginx")]),e._v(" in the restart command to suit your own needs, such as to "),a("code",[e._v("apache")]),e._v(" or "),a("code",[e._v("wings")]),e._v(".")]),e._v(" "),a("p",[e._v("For advanced users, we suggest installing and using "),a("a",{attrs:{href:"https://acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh"),a("OutboundLink")],1),e._v("\nwhich provides more options, and is much more powerful than certbot.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"\n')])])]),a("h3",{attrs:{id:"troubleshooting"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),a("p",[e._v("If you get an "),a("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 "),a("code",[e._v("certbot renew")]),e._v(" might not do the job if port 80 is in use, as it'll return errors like: "),a("code",[e._v("Error: Attempting to renew cert (domain) from /etc/letsencrypt/renew/domain.conf produced an unexpected error")]),e._v(".")]),e._v(" "),a("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 "),a("code",[e._v("--nginx")]),e._v(" and "),a("code",[e._v("--apache")]),e._v(". Alternatively, you can stop Nginx, then renew the certificate, finally restart Nginx. Replace "),a("code",[e._v("nginx")]),e._v(" with your own web server or with "),a("code",[e._v("wings")]),e._v(" should you be renewing the certificate for Wings.")]),e._v(" "),a("p",[e._v("Stop Nginx:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl stop nginx\n")])])]),a("p",[e._v("Renew the certificate:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("certbot renew\n")])])]),a("p",[e._v("Once the process has complete, you can restart the Nginx service:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl start nginx\n")])])]),a("p",[e._v("You may also need to restart Wings as not every service is able to automatically apply an updated certificate:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl restart wings\n")])])])]),e._v(" "),a("tab",{attrs:{name:"Method 2: acme.sh (Cloudflare)"}},[a("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 "),a("a",{attrs:{href:"https://github.com/Neilpang/acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh's official site"),a("OutboundLink")],1),e._v(" for installation instructions.")]),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(" https://get.acme.sh "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n")])])]),a("h3",{attrs:{id:"obtaining-cloudflare-api-key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-key"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Key")]),e._v(" "),a("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(" "),a("h3",{attrs:{id:"creating-a-certificate-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate-2"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),a("p",[e._v("Since the configuration file is based on Certbot, we need to create the folder manually.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" /etc/letsencrypt/live/example.com\n")])])]),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Key")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_API_Key"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Email")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Account@example.com"')]),e._v("\n\n")])])]),a("p",[e._v("Then create the certificate.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("acme.sh --issue --dns dns_cf -d "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"example.com"')]),e._v(" --server letsencrypt "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--key-file /etc/letsencrypt/live/example.com/privkey.pem "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem\n")])])]),a("h3",{attrs:{id:"auto-renewal-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal-2"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("crontab")]),e._v(" -e\n")])])])])],1)],1)}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{419:function(e,t,a){"use strict";a.r(t);var s=a(48),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"creating-ssl-certificates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-ssl-certificates"}},[e._v("#")]),e._v(" Creating SSL Certificates")]),e._v(" "),a("p",[e._v("This tutorial briefly covers creating new SSL certificates for your panel and wings.")]),e._v(" "),a("tabs",[a("tab",{attrs:{name:"Method 1: Certbot"}},[a("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 "),a("a",{attrs:{href:"https://certbot.eff.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Certbot's official\nsite"),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" update\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -y certbot\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Nginx")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -y python3-certbot-nginx\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Run this if you use Apache")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("apt")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("install")]),e._v(" -y python3-certbot-apache\n")])])]),a("h2",{attrs:{id:"creating-a-certificate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),a("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(" "),a("p",[e._v("Then, in the command below, you should replace "),a("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 "),a("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(" "),a("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 "),a("a",{attrs:{href:"https://pterodactyl.io/panel/1.0/webserver_configuration.html",target:"_blank",rel:"noopener noreferrer"}},[e._v("web server configuration step"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("h3",{attrs:{id:"http-challenge"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#http-challenge"}},[e._v("#")]),e._v(" HTTP challenge")]),e._v(" "),a("p",[e._v("HTTP challenge requires you to expose port 80 for the challenge verification.")]),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("# Nginx")]),e._v("\ncertbot certonly --nginx -d example.com\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Apache")]),e._v("\ncertbot certonly --apache -d example.com\n"),a("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 --standalone -d example.com\n")])])]),a("h3",{attrs:{id:"dns-challenge"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dns-challenge"}},[e._v("#")]),e._v(" DNS challenge")]),e._v(" "),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("certbot -d example.com --manual --preferred-challenges dns certonly\n")])])]),a("h3",{attrs:{id:"auto-renewal"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),a("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 "),a("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(" "),a("p",[e._v("Deploy hook would restart the Nginx service to apply a new certificate when it's renewed successfully. Change "),a("code",[e._v("nginx")]),e._v(" in the restart command to suit your own needs, such as to "),a("code",[e._v("apache")]),e._v(" or "),a("code",[e._v("wings")]),e._v(".")]),e._v(" "),a("p",[e._v("For advanced users, we suggest installing and using "),a("a",{attrs:{href:"https://acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh"),a("OutboundLink")],1),e._v("\nwhich provides more options, and is much more powerful than certbot.")]),e._v(" "),a("div",{staticClass:"language-text extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"\n')])])]),a("h3",{attrs:{id:"troubleshooting"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[e._v("#")]),e._v(" Troubleshooting")]),e._v(" "),a("p",[e._v("If you get an "),a("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 "),a("code",[e._v("certbot renew")]),e._v(" might not do the job if port 80 is in use, as it'll return errors like: "),a("code",[e._v("Error: Attempting to renew cert (domain) from /etc/letsencrypt/renew/domain.conf produced an unexpected error")]),e._v(".")]),e._v(" "),a("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 "),a("code",[e._v("--nginx")]),e._v(" and "),a("code",[e._v("--apache")]),e._v(". Alternatively, you can stop Nginx, then renew the certificate, finally restart Nginx. Replace "),a("code",[e._v("nginx")]),e._v(" with your own web server or with "),a("code",[e._v("wings")]),e._v(" should you be renewing the certificate for Wings.")]),e._v(" "),a("p",[e._v("Stop Nginx:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl stop nginx\n")])])]),a("p",[e._v("Renew the certificate:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("certbot renew\n")])])]),a("p",[e._v("Once the process has complete, you can restart the Nginx service:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl start nginx\n")])])]),a("p",[e._v("You may also need to restart Wings as not every service is able to automatically apply an updated certificate:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("systemctl restart wings\n")])])])]),e._v(" "),a("tab",{attrs:{name:"Method 2: acme.sh (Cloudflare)"}},[a("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 "),a("a",{attrs:{href:"https://github.com/Neilpang/acme.sh",target:"_blank",rel:"noopener noreferrer"}},[e._v("acme.sh's official site"),a("OutboundLink")],1),e._v(" for installation instructions.")]),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(" https://get.acme.sh "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("|")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sh")]),e._v("\n")])])]),a("h3",{attrs:{id:"obtaining-cloudflare-api-key"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#obtaining-cloudflare-api-key"}},[e._v("#")]),e._v(" Obtaining CloudFlare API Key")]),e._v(" "),a("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(" "),a("h3",{attrs:{id:"creating-a-certificate-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-certificate-2"}},[e._v("#")]),e._v(" Creating a Certificate")]),e._v(" "),a("p",[e._v("Since the configuration file is based on Certbot, we need to create the folder manually.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("mkdir")]),e._v(" /etc/letsencrypt/live/example.com\n")])])]),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Key")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_API_Key"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[e._v("export")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[e._v("CF_Email")]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Your_CloudFlare_Account@example.com"')]),e._v("\n\n")])])]),a("p",[e._v("Then create the certificate.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("acme.sh --issue --dns dns_cf -d "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"example.com"')]),e._v(" --server letsencrypt "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--key-file /etc/letsencrypt/live/example.com/privkey.pem "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("\\")]),e._v("\n--fullchain-file /etc/letsencrypt/live/example.com/fullchain.pem\n")])])]),a("h3",{attrs:{id:"auto-renewal-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#auto-renewal-2"}},[e._v("#")]),e._v(" Auto Renewal")]),e._v(" "),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[e._v("sudo")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("crontab")]),e._v(" -e\n")])])])])],1)],1)}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/76.f5041e04.js b/assets/js/76.585f5d41.js similarity index 99% rename from assets/js/76.f5041e04.js rename to assets/js/76.585f5d41.js index ab44b354..521a36be 100644 --- a/assets/js/76.f5041e04.js +++ b/assets/js/76.585f5d41.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{422:function(a,e,s){"use strict";s.r(e);var t=s(48),r=Object(t.a)({},(function(){var a=this,e=a.$createElement,s=a._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"setting-up-mysql"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-mysql"}},[a._v("#")]),a._v(" Setting up MySQL")]),a._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("Creating a database for Pterodactyl")]),s("ul",[s("li",[s("a",{attrs:{href:"#logging-in"}},[a._v("Logging In")])]),s("li",[s("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),s("li",[s("a",{attrs:{href:"#create-a-database"}},[a._v("Create a database")])]),s("li",[s("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])])])]),s("li",[s("a",{attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("Creating a Database Host for Nodes")]),s("ul",[s("li",[s("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),s("li",[s("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])]),s("li",[s("a",{attrs:{href:"#allowing-external-database-access"}},[a._v("Allowing external database access")])])])])])]),s("p"),a._v(" "),s("h2",{attrs:{id:"creating-a-database-for-pterodactyl"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("#")]),a._v(" Creating a database for Pterodactyl")]),a._v(" "),s("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(" "),s("h3",{attrs:{id:"logging-in"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#logging-in"}},[a._v("#")]),a._v(" Logging In")]),a._v(" "),s("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(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("mysql -u root -p\n")])])]),s("h3",{attrs:{id:"creating-a-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),s("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(" "),s("p",[a._v("Next, we will create a user called "),s("code",[a._v("pterodactyl")]),a._v(" and allow logins from localhost which prevents any external connections\nto our database. You can also use "),s("code",[a._v("%")]),a._v(" as a wildcard or enter a numeric IP. We will also set the account password\nto "),s("code",[a._v("somePassword")]),a._v(".")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("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"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somePassword'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"create-a-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-a-database"}},[a._v("#")]),a._v(" Create a database")]),a._v(" "),s("p",[a._v("Next, we need to create a database for the panel. In this tutorial we will be naming the database "),s("code",[a._v("panel")]),a._v(", but you can\nsubstitute that for whatever name you wish.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("DATABASE")]),a._v(" panel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"assigning-permissions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),s("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. If you plan on also using this MySQL instance as a database host on the Panel you'll want to\ninclude the "),s("code",[a._v("WITH GRANT OPTION")]),a._v(" (which we are doing here). If you won't be using this user as part of the host setup\nyou can remove that.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" panel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("WITH")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("OPTION")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h2",{attrs:{id:"creating-a-database-host-for-nodes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("#")]),a._v(" Creating a Database Host for Nodes")]),a._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),s("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(" "),s("h3",{attrs:{id:"creating-a-user-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user-2"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),s("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 "),s("code",[a._v("127.0.0.1")]),a._v(" and try to connect externally, you will receive a connection refused error.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# You should change the username and password below to something unique.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somepassword'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"assigning-permissions-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions-2"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),s("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 "),s("code",[a._v("127.0.0.1")]),a._v(" matches the IP address you used in the previous command.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("WITH")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("OPTION")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"allowing-external-database-access"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#allowing-external-database-access"}},[a._v("#")]),a._v(" Allowing external database access")]),a._v(" "),s("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 "),s("code",[a._v("my.cnf")]),a._v(", which varies in location depending on your OS and how MySQL was installed. You can type "),s("code",[a._v("find /etc -iname my.cnf")]),a._v(" to locate it.")]),a._v(" "),s("p",[a._v("Open "),s("code",[a._v("my.cnf")]),a._v(", add text below to the bottom of the file and save it:")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("[mysqld]\nbind-address=0.0.0.0\n")])])]),s("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(" "),s("p",[a._v("If your Database and Wings are on the same machine and won't need external access, you can also use the "),s("code",[a._v("docker0")]),a._v(" interface IP address rather than "),s("code",[a._v("127.0.0.1")]),a._v(". This IP address can be found by running "),s("code",[a._v("ip addr | grep docker0")]),a._v(", and it likely looks like "),s("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([[76],{420:function(a,e,s){"use strict";s.r(e);var t=s(48),r=Object(t.a)({},(function(){var a=this,e=a.$createElement,s=a._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h1",{attrs:{id:"setting-up-mysql"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setting-up-mysql"}},[a._v("#")]),a._v(" Setting up MySQL")]),a._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("Creating a database for Pterodactyl")]),s("ul",[s("li",[s("a",{attrs:{href:"#logging-in"}},[a._v("Logging In")])]),s("li",[s("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),s("li",[s("a",{attrs:{href:"#create-a-database"}},[a._v("Create a database")])]),s("li",[s("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])])])]),s("li",[s("a",{attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("Creating a Database Host for Nodes")]),s("ul",[s("li",[s("a",{attrs:{href:"#creating-a-user"}},[a._v("Creating a user")])]),s("li",[s("a",{attrs:{href:"#assigning-permissions"}},[a._v("Assigning permissions")])]),s("li",[s("a",{attrs:{href:"#allowing-external-database-access"}},[a._v("Allowing external database access")])])])])])]),s("p"),a._v(" "),s("h2",{attrs:{id:"creating-a-database-for-pterodactyl"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-for-pterodactyl"}},[a._v("#")]),a._v(" Creating a database for Pterodactyl")]),a._v(" "),s("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(" "),s("h3",{attrs:{id:"logging-in"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#logging-in"}},[a._v("#")]),a._v(" Logging In")]),a._v(" "),s("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(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[a._v("mysql -u root -p\n")])])]),s("h3",{attrs:{id:"creating-a-user"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),s("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(" "),s("p",[a._v("Next, we will create a user called "),s("code",[a._v("pterodactyl")]),a._v(" and allow logins from localhost which prevents any external connections\nto our database. You can also use "),s("code",[a._v("%")]),a._v(" as a wildcard or enter a numeric IP. We will also set the account password\nto "),s("code",[a._v("somePassword")]),a._v(".")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("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"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somePassword'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"create-a-database"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-a-database"}},[a._v("#")]),a._v(" Create a database")]),a._v(" "),s("p",[a._v("Next, we need to create a database for the panel. In this tutorial we will be naming the database "),s("code",[a._v("panel")]),a._v(", but you can\nsubstitute that for whatever name you wish.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("DATABASE")]),a._v(" panel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"assigning-permissions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),s("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. If you plan on also using this MySQL instance as a database host on the Panel you'll want to\ninclude the "),s("code",[a._v("WITH GRANT OPTION")]),a._v(" (which we are doing here). If you won't be using this user as part of the host setup\nyou can remove that.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" panel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyl'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("WITH")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("OPTION")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h2",{attrs:{id:"creating-a-database-host-for-nodes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-database-host-for-nodes"}},[a._v("#")]),a._v(" Creating a Database Host for Nodes")]),a._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[a._v("TIP")]),a._v(" "),s("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(" "),s("h3",{attrs:{id:"creating-a-user-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-user-2"}},[a._v("#")]),a._v(" Creating a user")]),a._v(" "),s("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 "),s("code",[a._v("127.0.0.1")]),a._v(" and try to connect externally, you will receive a connection refused error.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# You should change the username and password below to something unique.")]),a._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("CREATE")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("USER")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" IDENTIFIED "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("BY")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'somepassword'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"assigning-permissions-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#assigning-permissions-2"}},[a._v("#")]),a._v(" Assigning permissions")]),a._v(" "),s("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 "),s("code",[a._v("127.0.0.1")]),a._v(" matches the IP address you used in the previous command.")]),a._v(" "),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ALL")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("PRIVILEGES")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("ON")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),s("span",{pre:!0,attrs:{class:"token operator"}},[a._v("*")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("TO")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[a._v("'pterodactyluser'")]),s("span",{pre:!0,attrs:{class:"token variable"}},[a._v("@'127.0.0.1'")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("WITH")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("GRANT")]),a._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("OPTION")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n")])])]),s("h3",{attrs:{id:"allowing-external-database-access"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#allowing-external-database-access"}},[a._v("#")]),a._v(" Allowing external database access")]),a._v(" "),s("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 "),s("code",[a._v("my.cnf")]),a._v(", which varies in location depending on your OS and how MySQL was installed. You can type "),s("code",[a._v("find /etc -iname my.cnf")]),a._v(" to locate it.")]),a._v(" "),s("p",[a._v("Open "),s("code",[a._v("my.cnf")]),a._v(", add text below to the bottom of the file and save it:")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("[mysqld]\nbind-address=0.0.0.0\n")])])]),s("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(" "),s("p",[a._v("If your Database and Wings are on the same machine and won't need external access, you can also use the "),s("code",[a._v("docker0")]),a._v(" interface IP address rather than "),s("code",[a._v("127.0.0.1")]),a._v(". This IP address can be found by running "),s("code",[a._v("ip addr | grep docker0")]),a._v(", and it likely looks like "),s("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/77.49327673.js b/assets/js/77.995dfb5e.js similarity index 99% rename from assets/js/77.49327673.js rename to assets/js/77.995dfb5e.js index 8cb08635..ee727fa2 100644 --- a/assets/js/77.49327673.js +++ b/assets/js/77.995dfb5e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{423:function(t,e,a){"use strict";a.r(e);var s=a(48),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"additional-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")]),a("ul",[a("li",[a("a",{attrs:{href:"#available-keys"}},[t._v("Available Keys")])]),a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("Enabling Cloudflare proxy")])]),a("li",[a("a",{attrs:{href:"#container-pid-limit"}},[t._v("Container PID Limit")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#throttles-limits"}},[t._v("Throttles Limits")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#installer-limits"}},[t._v("Installer Limits")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#other-values"}},[t._v("Other values")])])])]),a("p"),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("These are advanced configurations for 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(" "),a("p",[t._v("You must apply all changes to your Wings "),a("code",[t._v("config.yml")]),t._v(" file located at "),a("code",[t._v("/etc/pterodactyl")]),t._v(" and restart wings. Verify your config file using "),a("a",{attrs:{href:"http://www.yamllint.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Yaml Lint"),a("OutboundLink")],1),t._v(" should you receive errors related to YAML parsing.")]),t._v(" "),a("h2",{attrs:{id:"private-registries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),a("p",[t._v("You can use these settings to authenticate against (private) docker registries when pulling images.")]),t._v(" "),a("h3",{attrs:{id:"available-keys"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#available-keys"}},[t._v("#")]),t._v(" Available Keys")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("name")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),a("td",[t._v("Registry address")])]),t._v(" "),a("tr",[a("td",[t._v("username")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),a("td",[t._v("Registry username")])]),t._v(" "),a("tr",[a("td",[t._v("password")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),a("td",[t._v("Registry password")])])])]),t._v(" "),a("h3",{attrs:{id:"example-of-usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registries")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registry.example.com")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("username")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registryusername"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("password")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registrypassword"')]),t._v("\n")])])]),a("h2",{attrs:{id:"custom-network-interfaces"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),a("p",[t._v("You can change the network interface that Wings uses for all containers by editing the network name; it is by default set to "),a("code",[t._v("pterodactyl_nw")]),t._v(". For example, to enable Docker host mode change the network name to "),a("code",[t._v("host")]),t._v(".")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Changing network mode to "),a("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(" "),a("h3",{attrs:{id:"example-of-usage-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-2"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n")])])]),a("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"),a("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])]),t._v(" "),a("h2",{attrs:{id:"enabling-cloudflare-proxy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("#")]),t._v(" Enabling Cloudflare proxy")]),t._v(" "),a("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(" "),a("p",[t._v("To enable Cloudflare proxy, you must change the Wings port to one of the Cloudflare HTTPS ports, 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.")]),t._v(" "),a("p",[t._v("You are unable to proxy the SFTP port through Cloudflare unless you have their enterprise plan.")]),t._v(" "),a("h2",{attrs:{id:"container-pid-limit"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#container-pid-limit"}},[t._v("#")]),t._v(" Container PID Limit")]),t._v(" "),a("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 "),a("code",[t._v("container_pid_limit")]),t._v(" value. The default value is "),a("code",[t._v("512")]),t._v(".\nYou can set it to "),a("code",[t._v("0")]),t._v(" to disable the limit completely. However, this is "),a("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(" "),a("h3",{attrs:{id:"example-of-usage-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-3"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_pid_limit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("512")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n")])])]),a("h2",{attrs:{id:"throttles-limits"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#throttles-limits"}},[t._v("#")]),t._v(" Throttles Limits")]),t._v(" "),a("p",[t._v("You can use these settings to adjust or completely disable throttling.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("enabled")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),a("td",[t._v("Whether or not the throttler is enabled")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("lines")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("2000")]),t._v(" "),a("td",[t._v("Total lines that can be output in a given line_reset_interval period")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("maximum_trigger_count")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),a("td",[t._v("Amount of times throttle limit can be triggered before the server will be stopped")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("line_reset_interval")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),a("td",[t._v("The amount of time after which the number of lines processed is reset to 0")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("decay_interval")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("10000")]),t._v(" "),a("td",[t._v("Time in milliseconds that must pass without triggering throttle limit before trigger count is decremented")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("stop_grace_period")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("15")]),t._v(" "),a("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(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("write_limit")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),a("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(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("download_limit")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),a("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(" "),a("h3",{attrs:{id:"example-of-usage-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-4"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("throttles")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("enabled")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("lines")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2000")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("maximum_trigger_count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("line_reset_interval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("decay_interval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("stop_grace_period")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v("\n")])])]),a("h2",{attrs:{id:"installer-limits"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installer-limits"}},[t._v("#")]),t._v(" Installer Limits")]),t._v(" "),a("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(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("memory")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("1024")]),t._v(" "),a("td",[t._v("The maximum amount of memory install container can use unless server memory limit is higher than this value")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("cpu")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),a("td",[t._v("The maximum amount of cpu install container can use unless server cpu limit is higher than this value")])])])]),t._v(" "),a("h3",{attrs:{id:"example-of-usage-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-5"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("installer_limits")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("memory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cpu")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n")])])]),a("h2",{attrs:{id:"other-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#other-values"}},[t._v("#")]),t._v(" Other values")]),t._v(" "),a("p",[t._v("More commonly discussed values. View all Wings config values and explanations in "),a("a",{attrs:{href:"https://github.com/pterodactyl/wings/tree/develop/config",target:"_blank",rel:"noopener noreferrer"}},[t._v("these two files."),a("OutboundLink")],1)]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("debug")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("false")]),t._v(" "),a("td",[t._v("Force Wings to run in debug mode")])]),t._v(" "),a("tr",[a("td",[t._v("tmpfs_size")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),a("td",[t._v("The size of the /tmp directory in MB when mounted into a container")])]),t._v(" "),a("tr",[a("td",[t._v("websocket_log_count")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("150")]),t._v(" "),a("td",[t._v("The number of lines to display in the console")])]),t._v(" "),a("tr",[a("td",[t._v("detect_clean_exit_as_crash")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),a("td",[t._v("Mark server as crashed if it's stopped without user interaction, e.g., not pressing stop button")])]),t._v(" "),a("tr",[a("td",[t._v("(crash detection) timeout")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("60")]),t._v(" "),a("td",[t._v("Timeout between server crashes that will not cause the server to be automatically restarted")])]),t._v(" "),a("tr",[a("td",[t._v("app_name")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v('"Pterodactyl"')]),t._v(" "),a("td",[t._v("Changes the name of the daemon, shown in the panel's game console")])]),t._v(" "),a("tr",[a("td",[t._v("check_permissions_on_boot")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),a("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([[77],{421:function(t,e,a){"use strict";a.r(e);var s=a(48),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"additional-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-configuration"}},[t._v("#")]),t._v(" Additional Configuration")]),t._v(" "),a("p"),a("div",{staticClass:"table-of-contents"},[a("ul",[a("li",[a("a",{attrs:{href:"#private-registries"}},[t._v("Private Registries")]),a("ul",[a("li",[a("a",{attrs:{href:"#available-keys"}},[t._v("Available Keys")])]),a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#custom-network-interfaces"}},[t._v("Custom Network Interfaces")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("Enabling Cloudflare proxy")])]),a("li",[a("a",{attrs:{href:"#container-pid-limit"}},[t._v("Container PID Limit")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#throttles-limits"}},[t._v("Throttles Limits")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#installer-limits"}},[t._v("Installer Limits")]),a("ul",[a("li",[a("a",{attrs:{href:"#example-of-usage"}},[t._v("Example of usage")])])])]),a("li",[a("a",{attrs:{href:"#other-values"}},[t._v("Other values")])])])]),a("p"),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("These are advanced configurations for 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(" "),a("p",[t._v("You must apply all changes to your Wings "),a("code",[t._v("config.yml")]),t._v(" file located at "),a("code",[t._v("/etc/pterodactyl")]),t._v(" and restart wings. Verify your config file using "),a("a",{attrs:{href:"http://www.yamllint.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Yaml Lint"),a("OutboundLink")],1),t._v(" should you receive errors related to YAML parsing.")]),t._v(" "),a("h2",{attrs:{id:"private-registries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#private-registries"}},[t._v("#")]),t._v(" Private Registries")]),t._v(" "),a("p",[t._v("You can use these settings to authenticate against (private) docker registries when pulling images.")]),t._v(" "),a("h3",{attrs:{id:"available-keys"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#available-keys"}},[t._v("#")]),t._v(" Available Keys")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("name")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),a("td",[t._v("Registry address")])]),t._v(" "),a("tr",[a("td",[t._v("username")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),a("td",[t._v("Registry username")])]),t._v(" "),a("tr",[a("td",[t._v("password")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("null")]),t._v(" "),a("td",[t._v("Registry password")])])])]),t._v(" "),a("h3",{attrs:{id:"example-of-usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registries")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("registry.example.com")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("username")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registryusername"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("password")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"registrypassword"')]),t._v("\n")])])]),a("h2",{attrs:{id:"custom-network-interfaces"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-network-interfaces"}},[t._v("#")]),t._v(" Custom Network Interfaces")]),t._v(" "),a("p",[t._v("You can change the network interface that Wings uses for all containers by editing the network name; it is by default set to "),a("code",[t._v("pterodactyl_nw")]),t._v(". For example, to enable Docker host mode change the network name to "),a("code",[t._v("host")]),t._v(".")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Changing network mode to "),a("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(" "),a("h3",{attrs:{id:"example-of-usage-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-2"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n")])])]),a("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"),a("code",[t._v("systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings")])]),t._v(" "),a("h2",{attrs:{id:"enabling-cloudflare-proxy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#enabling-cloudflare-proxy"}},[t._v("#")]),t._v(" Enabling Cloudflare proxy")]),t._v(" "),a("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(" "),a("p",[t._v("To enable Cloudflare proxy, you must change the Wings port to one of the Cloudflare HTTPS ports, 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.")]),t._v(" "),a("p",[t._v("You are unable to proxy the SFTP port through Cloudflare unless you have their enterprise plan.")]),t._v(" "),a("h2",{attrs:{id:"container-pid-limit"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#container-pid-limit"}},[t._v("#")]),t._v(" Container PID Limit")]),t._v(" "),a("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 "),a("code",[t._v("container_pid_limit")]),t._v(" value. The default value is "),a("code",[t._v("512")]),t._v(".\nYou can set it to "),a("code",[t._v("0")]),t._v(" to disable the limit completely. However, this is "),a("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(" "),a("h3",{attrs:{id:"example-of-usage-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-3"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("docker")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_pid_limit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("512")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("...")]),t._v("\n")])])]),a("h2",{attrs:{id:"throttles-limits"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#throttles-limits"}},[t._v("#")]),t._v(" Throttles Limits")]),t._v(" "),a("p",[t._v("You can use these settings to adjust or completely disable throttling.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("enabled")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),a("td",[t._v("Whether or not the throttler is enabled")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("lines")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("2000")]),t._v(" "),a("td",[t._v("Total lines that can be output in a given line_reset_interval period")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("maximum_trigger_count")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("5")]),t._v(" "),a("td",[t._v("Amount of times throttle limit can be triggered before the server will be stopped")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("line_reset_interval")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),a("td",[t._v("The amount of time after which the number of lines processed is reset to 0")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("decay_interval")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("10000")]),t._v(" "),a("td",[t._v("Time in milliseconds that must pass without triggering throttle limit before trigger count is decremented")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("stop_grace_period")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("15")]),t._v(" "),a("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(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("write_limit")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),a("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(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("download_limit")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("0")]),t._v(" "),a("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(" "),a("h3",{attrs:{id:"example-of-usage-4"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-4"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("throttles")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("enabled")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean important"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("lines")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2000")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("maximum_trigger_count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("line_reset_interval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("decay_interval")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10000")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("stop_grace_period")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v("\n")])])]),a("h2",{attrs:{id:"installer-limits"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installer-limits"}},[t._v("#")]),t._v(" Installer Limits")]),t._v(" "),a("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(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("memory")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("1024")]),t._v(" "),a("td",[t._v("The maximum amount of memory install container can use unless server memory limit is higher than this value")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("cpu")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),a("td",[t._v("The maximum amount of cpu install container can use unless server cpu limit is higher than this value")])])])]),t._v(" "),a("h3",{attrs:{id:"example-of-usage-5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#example-of-usage-5"}},[t._v("#")]),t._v(" Example of usage")]),t._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("installer_limits")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("memory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cpu")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n")])])]),a("h2",{attrs:{id:"other-values"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#other-values"}},[t._v("#")]),t._v(" Other values")]),t._v(" "),a("p",[t._v("More commonly discussed values. View all Wings config values and explanations in "),a("a",{attrs:{href:"https://github.com/pterodactyl/wings/tree/develop/config",target:"_blank",rel:"noopener noreferrer"}},[t._v("these two files."),a("OutboundLink")],1)]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Setting Key")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Default Value")]),t._v(" "),a("th",[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("debug")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("false")]),t._v(" "),a("td",[t._v("Force Wings to run in debug mode")])]),t._v(" "),a("tr",[a("td",[t._v("tmpfs_size")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("100")]),t._v(" "),a("td",[t._v("The size of the /tmp directory in MB when mounted into a container")])]),t._v(" "),a("tr",[a("td",[t._v("websocket_log_count")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("150")]),t._v(" "),a("td",[t._v("The number of lines to display in the console")])]),t._v(" "),a("tr",[a("td",[t._v("detect_clean_exit_as_crash")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),a("td",[t._v("Mark server as crashed if it's stopped without user interaction, e.g., not pressing stop button")])]),t._v(" "),a("tr",[a("td",[t._v("(crash detection) timeout")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("60")]),t._v(" "),a("td",[t._v("Timeout between server crashes that will not cause the server to be automatically restarted")])]),t._v(" "),a("tr",[a("td",[t._v("app_name")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v('"Pterodactyl"')]),t._v(" "),a("td",[t._v("Changes the name of the daemon, shown in the panel's game console")])]),t._v(" "),a("tr",[a("td",[t._v("check_permissions_on_boot")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("true")]),t._v(" "),a("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/78.9256aa85.js b/assets/js/78.1dc5cc37.js similarity index 98% rename from assets/js/78.9256aa85.js rename to assets/js/78.1dc5cc37.js index 719ba03e..b70707be 100644 --- a/assets/js/78.9256aa85.js +++ b/assets/js/78.1dc5cc37.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{426:function(t,s,a){"use strict";a.r(s);var e=a(48),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"upgrading-wings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-wings"}},[t._v("#")]),t._v(" Upgrading Wings")]),t._v(" "),a("p",[t._v("Upgrading Wings is a painless process and should take less than a minute to complete.")]),t._v(" "),a("h2",{attrs:{id:"wings-version-requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#wings-version-requirements"}},[t._v("#")]),t._v(" Wings Version Requirements")]),t._v(" "),a("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(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Panel Version")]),t._v(" "),a("th",[t._v("Wings Version")]),t._v(" "),a("th",[t._v("Supported")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("1.0.x")]),t._v(" "),a("td",[t._v("1.0.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.1.x")]),t._v(" "),a("td",[t._v("1.1.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.2.x")]),t._v(" "),a("td",[t._v("1.2.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.3.x")]),t._v(" "),a("td",[t._v("1.3.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.4.x")]),t._v(" "),a("td",[t._v("1.4.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.5.x")]),t._v(" "),a("td",[t._v("1.4.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.6.x")]),t._v(" "),a("td",[t._v("1.4.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.7.x")]),t._v(" "),a("td",[t._v("1.5.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.8.x")]),t._v(" "),a("td",[t._v("1.6.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.9.x")]),t._v(" "),a("td",[t._v("1.6.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("strong",[t._v("1.10.x")])]),t._v(" "),a("td",[a("strong",[t._v("1.7.x")])]),t._v(" "),a("td",[t._v("✅")])])])]),t._v(" "),a("h2",{attrs:{id:"download-updated-binary"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-updated-binary"}},[t._v("#")]),t._v(" Download Updated Binary")]),t._v(" "),a("p",[t._v("First, download the updated wings binary into "),a("code",[t._v("/usr/local/bin")]),t._v(". You will need to stop Wings briefly. "),a("em",[t._v("Your running\nservers "),a("strong",[t._v("will not")]),t._v(" be affected.")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("systemctl stop wings\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -L -o /usr/local/bin/wings "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "'),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uname")]),t._v(" -m"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x86_64"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"amd64"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arm64"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v('"\n'),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("chmod")]),t._v(" u+x /usr/local/bin/wings\n")])])]),a("h2",{attrs:{id:"restart-process"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#restart-process"}},[t._v("#")]),t._v(" Restart Process")]),t._v(" "),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("systemctl restart wings\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{424:function(t,s,a){"use strict";a.r(s);var e=a(48),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"upgrading-wings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-wings"}},[t._v("#")]),t._v(" Upgrading Wings")]),t._v(" "),a("p",[t._v("Upgrading Wings is a painless process and should take less than a minute to complete.")]),t._v(" "),a("h2",{attrs:{id:"wings-version-requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#wings-version-requirements"}},[t._v("#")]),t._v(" Wings Version Requirements")]),t._v(" "),a("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(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Panel Version")]),t._v(" "),a("th",[t._v("Wings Version")]),t._v(" "),a("th",[t._v("Supported")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("1.0.x")]),t._v(" "),a("td",[t._v("1.0.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.1.x")]),t._v(" "),a("td",[t._v("1.1.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.2.x")]),t._v(" "),a("td",[t._v("1.2.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.3.x")]),t._v(" "),a("td",[t._v("1.3.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.4.x")]),t._v(" "),a("td",[t._v("1.4.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.5.x")]),t._v(" "),a("td",[t._v("1.4.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.6.x")]),t._v(" "),a("td",[t._v("1.4.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.7.x")]),t._v(" "),a("td",[t._v("1.5.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.8.x")]),t._v(" "),a("td",[t._v("1.6.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("1.9.x")]),t._v(" "),a("td",[t._v("1.6.x")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[a("strong",[t._v("1.10.x")])]),t._v(" "),a("td",[a("strong",[t._v("1.7.x")])]),t._v(" "),a("td",[t._v("✅")])])])]),t._v(" "),a("h2",{attrs:{id:"download-updated-binary"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#download-updated-binary"}},[t._v("#")]),t._v(" Download Updated Binary")]),t._v(" "),a("p",[t._v("First, download the updated wings binary into "),a("code",[t._v("/usr/local/bin")]),t._v(". You will need to stop Wings briefly. "),a("em",[t._v("Your running\nservers "),a("strong",[t._v("will not")]),t._v(" be affected.")])]),t._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("systemctl stop wings\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" -L -o /usr/local/bin/wings "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "'),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("uname")]),t._v(" -m"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x86_64"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"amd64"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"arm64"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v('"\n'),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("chmod")]),t._v(" u+x /usr/local/bin/wings\n")])])]),a("h2",{attrs:{id:"restart-process"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#restart-process"}},[t._v("#")]),t._v(" Restart Process")]),t._v(" "),a("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(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("systemctl restart wings\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/app.1e64a09c.js b/assets/js/app.7c3f5311.js similarity index 76% rename from assets/js/app.1e64a09c.js rename to assets/js/app.7c3f5311.js index 98b35c9b..f333b6a5 100644 --- a/assets/js/app.1e64a09c.js +++ b/assets/js/app.7c3f5311.js @@ -1,11 +1,11 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],u=e[1],l=e[2],f=0,p=[];f=0&&Math.floor(e)===e&&isFinite(t)}function d(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function h(t){return null==t?"":Array.isArray(t)||c(t)&&t.toString===l?JSON.stringify(t,null,2):String(t)}function v(t){var e=parseFloat(t);return isNaN(e)?t:e}function g(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function _(t,e){return b.call(t,e)}function w(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var x=/-(\w)/g,S=w((function(t){return t.replace(x,(function(t,e){return e?e.toUpperCase():""}))})),C=w((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),O=/\B([A-Z])/g,k=w((function(t){return t.replace(O,"-$1").toLowerCase()}));var P=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function E(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function j(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,J=K&&K.indexOf("edge/")>0,Y=(K&&K.indexOf("android"),K&&/iphone|ipad|ipod|ios/.test(K)||"ios"===G),Z=(K&&/chrome\/\d+/.test(K),K&&/phantomjs/.test(K),K&&K.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(V)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===q&&(q=!V&&!W&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),q},it=V&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ot(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&ot(Symbol)&&"undefined"!=typeof Reflect&&ot(Reflect.ownKeys);at="undefined"!=typeof Set&&ot(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ut=$,lt=0,ct=function(){this.id=lt++,this.subs=[]};ct.prototype.addSub=function(t){this.subs.push(t)},ct.prototype.removeSub=function(t){y(this.subs,t)},ct.prototype.depend=function(){ct.target&&ct.target.addDep(this)},ct.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(o&&!_(i,"default"))a=!1;else if(""===a||a===k(t)){var u=Bt(String,i.type);(u<0||s0&&(ce((u=t(u,(n||"")+"_"+r))[0])&&ce(c)&&(f[l]=mt(c.text+u[0].text),u.shift()),f.push.apply(f,u)):s(u)?ce(c)?f[l]=mt(c.text+u):""!==u&&f.push(mt(u)):ce(u)&&ce(c)?f[l]=mt(c.text+u.text):(a(e._isVList)&&o(u.tag)&&i(u.key)&&o(n)&&(u.key="__vlist"+n+"_"+r+"__"),f.push(u)));return f}(t):void 0}function ce(t){return o(t)&&o(t.text)&&!1===t.isComment}function fe(t,e){if(t){for(var n=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==r&&s===n.$key&&!o&&!n.$hasNormal)return n;for(var u in i={},t)t[u]&&"$"!==u[0]&&(i[u]=ve(e,u,t[u]))}else i={};for(var l in e)l in i||(i[l]=ge(e,l));return t&&Object.isExtensible(t)&&(t._normalized=i),B(i,"$stable",a),B(i,"$key",s),B(i,"$hasNormal",o),i}function ve(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:le(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function ge(t,e){return function(){return t[e]}}function me(t,e){var n,r,i,a,s;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,i=t.length;rdocument.createEvent("Event").timeStamp&&(un=function(){return ln.now()})}function cn(){var t,e;for(sn=un(),on=!0,tn.sort((function(t,e){return t.id-e.id})),an=0;anan&&tn[n].id>t.id;)n--;tn.splice(n+1,0,t)}else tn.push(t);rn||(rn=!0,ee(cn))}}(this)},pn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||u(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){zt(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},pn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},pn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var dn={enumerable:!0,configurable:!0,get:$,set:$};function hn(t,e,n){dn.get=function(){return this[e][n]},dn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,dn)}function vn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[];t.$parent&&St(!1);var o=function(o){i.push(o);var a=Nt(o,e,n,t);kt(r,o,a),o in t||hn(t,"_props",o)};for(var a in e)o(a);St(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?$:P(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;c(e=t._data="function"==typeof e?function(t,e){pt();try{return t.call(e,e)}catch(t){return zt(t,e,"data()"),{}}finally{dt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,i=(t.$options.methods,n.length);for(;i--;){var o=n[i];0,r&&_(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&hn(t,"_data",o))}var a;Ot(e,!0)}(t):Ot(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var i in e){var o=e[i],a="function"==typeof o?o:o.get;0,r||(n[i]=new pn(t,a||$,$,gn)),i in t||mn(t,i,o)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!f(t)&&t.test(e)}function Pn(t,e){var n=t.cache,r=t.keys,i=t._vnode;for(var o in n){var a=n[o];if(a){var s=On(a.componentOptions);s&&!e(s)&&En(n,o,r,i)}}}function En(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[e]=null,y(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=wn++,e._isVue=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=It(xn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ke(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,i=n&&n.context;t.$slots=pe(e._renderChildren,i),t.$scopedSlots=r,t._c=function(e,n,r,i){return Ue(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Ue(t,e,n,r,i,!0)};var o=n&&n.data;kt(t,"$attrs",o&&o.attrs||r,null,!0),kt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Ze(e,"beforeCreate"),function(t){var e=fe(t.$options.inject,t);e&&(St(!1),Object.keys(e).forEach((function(n){kt(t,n,e[n])})),St(!0))}(e),vn(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),Ze(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(Sn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Pt,t.prototype.$delete=Et,t.prototype.$watch=function(t,e,n){if(c(e))return _n(this,t,e,n);(n=n||{}).user=!0;var r=new pn(this,t,e,n);if(n.immediate)try{e.call(this,r.value)}catch(t){zt(t,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(Sn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var i=0,o=t.length;i1?E(n):n;for(var r=E(arguments,1),i='event handler for "'+t+'"',o=0,a=n.length;oparseInt(this.max)&&En(a,s[0],s,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return U}};Object.defineProperty(t,"config",e),t.util={warn:ut,extend:j,mergeOptions:It,defineReactive:kt},t.set=Pt,t.delete=Et,t.nextTick=ee,t.observable=function(t){return Ot(t),t},t.options=Object.create(null),M.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,j(t.options.components,An),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=E(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=It(this.options,t),this}}(t),Cn(t),function(t){M.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&c(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Sn),Object.defineProperty(Sn.prototype,"$isServer",{get:rt}),Object.defineProperty(Sn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Sn,"FunctionalRenderContext",{value:Te}),Sn.version="2.6.11";var $n=g("style,class"),Tn=g("input,textarea,option,select,progress"),Ln=g("contenteditable,draggable,spellcheck"),Rn=g("events,caret,typing,plaintext-only"),Dn=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),In="http://www.w3.org/1999/xlink",Mn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Nn=function(t){return Mn(t)?t.slice(6,t.length):""},Un=function(t){return null==t||!1===t};function Fn(t){for(var e=t.data,n=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=Bn(r.data,e));for(;o(n=n.parent);)n&&n.data&&(e=Bn(e,n.data));return function(t,e){if(o(t)||o(e))return zn(t,qn(e));return""}(e.staticClass,e.class)}function Bn(t,e){return{staticClass:zn(t.staticClass,e.staticClass),class:o(t.class)?[t.class,e.class]:e.class}}function zn(t,e){return t?e?t+" "+e:t:e||""}function qn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,i=t.length;r-1?pr(t,e,n):Dn(e)?Un(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Ln(e)?t.setAttribute(e,function(t,e){return Un(e)||"false"===e?"false":"contenteditable"===t&&Rn(e)?e:"true"}(e,n)):Mn(e)?Un(n)?t.removeAttributeNS(In,Nn(e)):t.setAttributeNS(In,e,n):pr(t,e,n)}function pr(t,e,n){if(Un(n))t.removeAttribute(e);else{if(X&&!Q&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var dr={create:cr,update:cr};function hr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var s=Fn(e),u=n._transitionClasses;o(u)&&(s=zn(s,qn(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var vr,gr={create:hr,update:hr};function mr(t,e,n){var r=vr;return function i(){var o=e.apply(null,arguments);null!==o&&_r(t,i,n,r)}}var yr=Gt&&!(Z&&Number(Z[1])<=53);function br(t,e,n,r){if(yr){var i=sn,o=e;e=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}vr.addEventListener(t,e,et?{capture:n,passive:r}:n)}function _r(t,e,n,r){(r||vr).removeEventListener(t,e._wrapper||e,n)}function wr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};vr=e.elm,function(t){if(o(t.__r)){var e=X?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),ae(n,r,br,_r,mr,e.context),vr=void 0}}var xr,Sr={create:wr,update:wr};function Cr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=e.elm,s=t.data.domProps||{},u=e.data.domProps||{};for(n in o(u.__ob__)&&(u=e.data.domProps=j({},u)),s)n in u||(a[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=r;var l=i(r)?"":String(r);Or(a,l)&&(a.value=l)}else if("innerHTML"===n&&Wn(a.tagName)&&i(a.innerHTML)){(xr=xr||document.createElement("div")).innerHTML=""+r+"";for(var c=xr.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;c.firstChild;)a.appendChild(c.firstChild)}else if(r!==s[n])try{a[n]=r}catch(t){}}}}function Or(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(o(r)){if(r.number)return v(n)!==v(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var kr={create:Cr,update:Cr},Pr=w((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Er(t){var e=jr(t.style);return t.staticStyle?j(t.staticStyle,e):e}function jr(t){return Array.isArray(t)?A(t):"string"==typeof t?Pr(t):t}var Ar,$r=/^--/,Tr=/\s*!important$/,Lr=function(t,e,n){if($r.test(e))t.style.setProperty(e,n);else if(Tr.test(n))t.style.setProperty(k(e),n.replace(Tr,""),"important");else{var r=Dr(e);if(Array.isArray(n))for(var i=0,o=n.length;i-1?e.split(Nr).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Fr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Nr).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function Br(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&j(e,zr(t.name||"v")),j(e,t),e}return"string"==typeof t?zr(t):void 0}}var zr=w((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),qr=V&&!Q,Hr="transition",Vr="transitionend",Wr="animation",Gr="animationend";qr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Hr="WebkitTransition",Vr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Wr="WebkitAnimation",Gr="webkitAnimationEnd"));var Kr=V?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Xr(t){Kr((function(){Kr(t)}))}function Qr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Ur(t,e))}function Jr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Fr(t,e)}function Yr(t,e,n){var r=ti(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s="transition"===i?Vr:Gr,u=0,l=function(){t.removeEventListener(s,c),n()},c=function(e){e.target===t&&++u>=a&&l()};setTimeout((function(){u0&&(n="transition",c=a,f=o.length):"animation"===e?l>0&&(n="animation",c=l,f=u.length):f=(n=(c=Math.max(a,l))>0?a>l?"transition":"animation":null)?"transition"===n?o.length:u.length:0,{type:n,timeout:c,propCount:f,hasTransform:"transition"===n&&Zr.test(r[Hr+"Property"])}}function ei(t,e){for(;t.length1}function si(t,e){!0!==e.data.show&&ri(e)}var ui=function(t){var e,n,r={},u=t.modules,l=t.nodeOps;for(e=0;eh?b(t,i(n[m+1])?null:n[m+1].elm,n,d,m,r):d>m&&w(e,p,h)}(p,g,m,n,c):o(m)?(o(t.text)&&l.setTextContent(p,""),b(p,null,m,0,m.length-1,n)):o(g)?w(g,0,g.length-1):o(t.text)&&l.setTextContent(p,""):t.text!==e.text&&l.setTextContent(p,e.text),o(h)&&o(d=h.hook)&&o(d=d.postpatch)&&d(t,e)}}}function O(t,e,n){if(a(n)&&o(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==o&&(a.selected=o);else if(R(di(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function pi(t,e){return e.every((function(e){return!R(e,t)}))}function di(t){return"_value"in t?t._value:t.value}function hi(t){t.target.composing=!0}function vi(t){t.target.composing&&(t.target.composing=!1,gi(t.target,"input"))}function gi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function mi(t){return!t.componentInstance||t.data&&t.data.transition?t:mi(t.componentInstance._vnode)}var yi={model:li,show:{bind:function(t,e,n){var r=e.value,i=(n=mi(n)).data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,ri(n,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=mi(n)).data&&n.data.transition?(n.data.show=!0,r?ri(n,(function(){t.style.display=t.__vOriginalDisplay})):ii(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}}},bi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function _i(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?_i(He(e.children)):t}function wi(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[S(o)]=i[o];return e}function xi(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Si=function(t){return t.tag||qe(t)},Ci=function(t){return"show"===t.name},Oi={name:"transition",props:bi,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Si)).length){0;var r=this.mode;0;var i=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return i;var o=_i(i);if(!o)return i;if(this._leaving)return xi(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:s(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var u=(o.data||(o.data={})).transition=wi(this),l=this._vnode,c=_i(l);if(o.data.directives&&o.data.directives.some(Ci)&&(o.data.show=!0),c&&c.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(o,c)&&!qe(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var f=c.data.transition=j({},u);if("out-in"===r)return this._leaving=!0,se(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),xi(t,i);if("in-out"===r){if(qe(o))return l;var p,d=function(){p()};se(u,"afterEnter",d),se(u,"enterCancelled",d),se(f,"delayLeave",(function(t){p=t}))}}return i}}},ki=j({tag:String,moveClass:String},bi);function Pi(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Ei(t){t.data.newPos=t.elm.getBoundingClientRect()}function ji(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete ki.mode;var Ai={Transition:Oi,TransitionGroup:{props:ki,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var i=Qe(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=wi(this),s=0;s-1?Kn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Kn[t]=/HTMLUnknownElement/.test(e.toString())},j(Sn.options.directives,yi),j(Sn.options.components,Ai),Sn.prototype.__patch__=V?ui:$,Sn.prototype.$mount=function(t,e){return function(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=gt),Ze(t,"beforeMount"),r=function(){t._update(t._render(),n)},new pn(t,r,$,{before:function(){t._isMounted&&!t._isDestroyed&&Ze(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,Ze(t,"mounted")),t}(this,t=t&&V?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},V&&setTimeout((function(){U.devtools&&it&&it.emit("init",Sn)}),0),e.a=Sn},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(4),i=n(78),o=n(9),a=n(55),s=n(81),u=n(115),l=i("wks"),c=r.Symbol,f=u?c:c&&c.withoutSetter||a;t.exports=function(t){return o(l,t)||(s&&o(c,t)?l[t]=c[t]:l[t]=f("Symbol."+t)),l[t]}},function(t,e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof global&&global)||Function("return this")()},function(t,e,n){var r=n(2);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(6);t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e,n){var r=n(5),i=n(114),o=n(7),a=n(53),s=Object.defineProperty;e.f=r?s:function(t,e,n){if(o(t),e=a(e,!0),o(n),i)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(38),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(4),i=n(15),o=n(9),a=n(79),s=n(84),u=n(27),l=u.get,c=u.enforce,f=String(String).split("String");(t.exports=function(t,e,n,s){var u=!!s&&!!s.unsafe,l=!!s&&!!s.enumerable,p=!!s&&!!s.noTargetGet;"function"==typeof n&&("string"!=typeof e||o(n,"name")||i(n,"name",e),c(n).source=f.join("string"==typeof e?e:"")),t!==r?(u?!p&&t[e]&&(l=!0):delete t[e],l?t[e]=n:i(t,e,n)):l?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||s(this)}))},function(t,e,n){var r=n(35),i=n(25);t.exports=function(t){return r(i(t))}},function(t,e,n){var r=n(25);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(88),i=n(11),o=n(196);r||i(Object.prototype,"toString",o,{unsafe:!0})},function(t,e,n){var r=n(5),i=n(8),o=n(36);t.exports=r?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(152),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(5),i=n(2),o=n(9),a=Object.defineProperty,s={},u=function(t){throw t};t.exports=function(t,e){if(o(s,t))return s[t];e||(e={});var n=[][t],l=!!o(e,"ACCESSORS")&&e.ACCESSORS,c=o(e,0)?e[0]:u,f=o(e,1)?e[1]:void 0;return s[t]=!!n&&!i((function(){if(l&&!r)return!0;var t={length:-1};l?a(t,1,{enumerable:!0,get:u}):t[1]=1,n.call(t,c,f)}))}},function(t,e,n){var r=n(120),i=n(4),o=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t])||o(i[t]):r[t]&&r[t][e]||i[t]&&i[t][e]}},function(t,e,n){var r=n(5),i=n(57),o=n(36),a=n(12),s=n(53),u=n(9),l=n(114),c=Object.getOwnPropertyDescriptor;e.f=r?c:function(t,e){if(t=a(t),e=s(e,!0),l)try{return c(t,e)}catch(t){}if(u(t,e))return o(!i.f.call(t,e),t[e])}},function(t,e){t.exports=!1},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,n){var r=n(223),i=n(226);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(0),i=n(33).filter,o=n(59),a=n(19),s=o("filter"),u=a("filter");r({target:"Array",proto:!0,forced:!s||!u},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,e,n){var r,i,o,a=n(184),s=n(4),u=n(6),l=n(15),c=n(9),f=n(56),p=n(39),d=s.WeakMap;if(a){var h=new d,v=h.get,g=h.has,m=h.set;r=function(t,e){return m.call(h,t,e),e},i=function(t){return v.call(h,t)||{}},o=function(t){return g.call(h,t)}}else{var y=f("state");p[y]=!0,r=function(t,e){return l(t,y,e),e},i=function(t){return c(t,y)?t[y]:{}},o=function(t){return c(t,y)}}t.exports={set:r,get:i,has:o,enforce:function(t){return o(t)?i(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!u(e)||(n=i(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){var r=n(18);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){"use strict";var r=n(139).charAt,i=n(27),o=n(121),a=i.set,s=i.getterFor("String Iterator");o(String,"String",(function(t){a(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,e=s(this),n=e.string,i=e.index;return i>=n.length?{value:void 0,done:!0}:(t=r(n,i),e.index+=t.length,{value:t,done:!1})}))},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));n(73);var r=n(47);n(44),n(61),n(93),n(150),n(34),n(14),n(29),n(42);var i=n(69);function o(t){return function(t){if(Array.isArray(t))return Object(r.a)(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||Object(i.a)(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(t,e,n){var r,i=n(7),o=n(116),a=n(83),s=n(39),u=n(119),l=n(80),c=n(56),f=c("IE_PROTO"),p=function(){},d=function(t){return" + diff --git a/community/config/eggs/creating_a_custom_egg.html b/community/config/eggs/creating_a_custom_egg.html index 5395ff01..e1a9824d 100644 --- a/community/config/eggs/creating_a_custom_egg.html +++ b/community/config/eggs/creating_a_custom_egg.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Creating a Custom Egg

    WARNING

    You should not edit existing services or options that ship with the Panel. Each upgrade we push can make minor + (opens new window)

    # Creating a Custom Egg

    WARNING

    You should not edit existing services or options that ship with the Panel. Each upgrade we push can make minor changes to these, and you'll lose any changes you've made.

    The first thing you'll need to do is create a new service. In this case, the name and description speak for themselves in this case. The Folder Name must be a unique name not being used by any other service, and should only contain letters, numbers, underscores, and dashes. This is the name of the folder where the daemon will be storing @@ -115,8 +115,8 @@ on the Laravel website. You can also use ReGEX based validation by using the required|regex:/^([\w\d._-]+)(\.jar)$/ (opens new window) will require the field, and will match the regex as any letters or numbers (\w\d) including underscore (_), periods (.), and dashes (-) ending in .jar.

    They will then be visible when managing the startup for a server in both the Admin CP and on the Front-End.

    # List of default variables

    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.

    Variable Description Example
    TZ Time Zone Etc/UTC
    STARTUP Startup command of the egg java -Xms128M -XmxM -jar
    SERVER_MEMORY Memory available for the server in MB 512
    SERVER_IP Default ip of the server 127.0.0.1
    SERVER_PORT Primary Server Port 27015
    P_SERVER_LOCATION Location of the server Example City
    P_SERVER_UUID UUID of the server 539fdca8-4a08-4551-a8d2-8ee5475b50d9
    P_SERVER_ALLOCATION_LIMIT Limit of allocations allowed for the server 0
    - + diff --git a/community/config/eggs/creating_a_custom_image.html b/community/config/eggs/creating_a_custom_image.html index ab15a067..c3940ff7 100644 --- a/community/config/eggs/creating_a_custom_image.html +++ b/community/config/eggs/creating_a_custom_image.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Creating a Custom Docker Image

    WARNING

    This tutorial uses examples from our core:java (opens new window) docker image, which can be found on GitHub. This tutorial also assumes some knowledge of Docker (opens new window), we suggest reading up if this all looks foreign to you.

    # Creating the Dockerfile

    The most important part of this process is to create the Dockerfile (opens new window) that will be used by the Daemon. Due to heavy restrictions on server containers, you must setup this file in a specific manner.

    We try to make use of Alpine Linux (opens new window) as much as possible for our images in order to keep their size down.

    # ----------------------------------
    @@ -102,6 +102,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 a936ad9e..8b0908da 100644 --- a/community/config/nodes/add_node.html +++ b/community/config/nodes/add_node.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Creating a New Node

    # Location

    Head to the admin panel and click the Nodes tab on the left sidebar. After that, click 'Create New' on the top right side to open the page to add a node.

    # Information Required

    • Name: a quick identifiable name for the node.
    • Description: a long description that is used to help you identify the node.
    • Location: the location you want the node in. These are configured in the 'Locations' section of the panel and one must be created before a node can be created. These simply act as categories for nodes and serve no other purpose at this time.
    • FQDN: the fully qualified domain name for the node — for example: node.pterodactyl.io
    • Communicate over SSL: if the panel is using SSL the Daemon is required to use SSL as well.
    • Behind Proxy: if you have the Daemon behind a proxy that terminates SSL connections before arriving at the Daemon @@ -50,6 +50,6 @@ for more information, or try one of the community guides for Minecraft
    - + diff --git a/community/customization/panel.html b/community/customization/panel.html index c2cb0eef..5dafe1d7 100644 --- a/community/customization/panel.html +++ b/community/customization/panel.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Building Panel Assets

    WARNING

    Do not run the following steps on your production nodes.

    Instructions on how to build the panel are also available in the BUILDING.md (opens new window) file.

    The frontend of the Panel is built with React. Any changes to the source files require to recompile it. + (opens new window)

    # Building Panel Assets

    WARNING

    Do not run the following steps on your production nodes.

    Instructions on how to build the panel are also available in the BUILDING.md (opens new window) file.

    The frontend of the Panel is built with React. Any changes to the source files require to recompile it. This also applies to style sheets. The following sections explain how to do so.

    # Install Dependencies

    The following commands will install the necessary dependencies for building the Panel assets.

    The build tools require NodeJS, yarn is used as the package manager.

    # Ubuntu/Debian
     curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
     apt install -y nodejs
    @@ -56,6 +56,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 43b5ce8c..23734073 100644 --- a/community/customization/wings.html +++ b/community/customization/wings.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Building Wings

    WARNING

    Do not run the following steps on your production nodes.

    Wings is written in Go. This makes it very easy to modify and compile it on your own, and distribute your own binaries. + (opens new window)

    # Building Wings

    WARNING

    Do not run the following steps on your production nodes.

    Wings is written in Go. This makes it very easy to modify and compile it on your own, and distribute your own binaries. This guide will cover the steps necessary to build it yourself.

    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.

    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.

    # Build Requirements

    An up to date version of Go is required to compile Wings. The minimum version can be found at the top of the go.mod (opens new window) file. See the official instructions (opens new window) for help with installing Go.

    # Building

    Execute the following command in your local clone of the repository to compile Wings into a binary.

    go build
     

    You should now have a wings binary file in your wings directory.

    # Install the new binary

    Root required

    Some the following commands require root permissions. Prepend them with sudo if you are not logged in as root.

    1. Backup the current installation of wings
    mv /usr/local/bin/wings /usr/local/bin/wings-backup
     
    1. Place the new binary in /usr/local/bin
    cp ./wings /usr/local/bin
    @@ -49,6 +49,6 @@ systemctl start wings
     
    - + diff --git a/community/games/minecraft.html b/community/games/minecraft.html index 9267ce53..54904946 100644 --- a/community/games/minecraft.html +++ b/community/games/minecraft.html @@ -15,7 +15,7 @@ - + @@ -37,12 +37,12 @@ API (opens new window)

    # Minecraft

    # Configuring a Server Network (BungeeCord, Waterfall, HexaCord, etc.)

    If you want to operate Minecraft proxy servers like BungeeCord, Waterfall, HexaCord, etc. securely, you can do so with pterodactyl alone as long as you stay on the same node. It differs from a traditional setup in a few ways and might require additonal firewall rules, which is what this guide is for.

    WARNING

    For the setup described below, it is necessary that all servers are on the same node.

    DANGER

    If you are a hosting provider, you should only allow a single proxy network per node, if you are selling them to customers.

    # Allocations in the Panel

    Create a regular allocation for the proxy server which uses the external IP of the node, so users can reach it.

    The actual game servers behind the proxy should use allocations with 127.0.0.1 as the address, so they are only reachable on the node, and not from the public.

    # Example

    10.1.70.62 is an example, replace it with your own public IP address.

    # proxy server settings

    As the proxy server, like all servers, is running in a docker container with network isolation, localhost/127.0.0.1 doesn't refer to the node, but to the container. The node can be reached from within the container using 172.18.0.1 (unless the pterodactyl network is configured differently) instead. You therefore need to use this IP in your proxy server configuration.

    # bungeecord/waterfall configuration

    This will be different for other proxy servers, please refer to their documentation.

    # paper/spigot/bukkit settings

    The servers itself require the regular config options required by server proxies, which usually comes down to disabling online mode. This will differ for other server software, please refer to their documentation.

    # server.properties

    set online-mode false

    # spigot.yml

    set bungeecord to true

    # Firewalls

    If you are using a firewall, additional rules might be required to allow servers to reach each other on the node. In this case the proxy server needs to reach all of the game servers behind it. Therefore we need to allow traffic from the pterodactyl network to the server ports on localhost.

    You can use the following commands as an example. 172.18.0.1 is the default address referring to the node within the pterodactyl network. Replace <LOCALHOST_PORT> with the allocated localhost ports of the game servers.

    WARNING

    The following commands will allow any server on the node to access the opened ports.

    # UFW (Ubuntu)

    Allow access to the pterodactyl pterodactyl0 network on a specific port.

    ufw allow in on pterodactyl0 to 172.18.0.1 port <LOCALHOST_PORT> proto tcp
    +             (opens new window)

    # Minecraft

    # Configuring a Server Network (BungeeCord, Waterfall, HexaCord, etc.)

    If you want to operate Minecraft proxy servers like BungeeCord, Waterfall, HexaCord, etc. securely, you can do so with pterodactyl alone as long as you stay on the same node. It differs from a traditional setup in a few ways and might require additonal firewall rules, which is what this guide is for.

    WARNING

    For the setup described below, it is necessary that all servers are on the same node.

    DANGER

    If you are a hosting provider, you should only allow a single proxy network per node, if you are selling them to customers.

    # Allocations in the Panel

    Create a regular allocation for the proxy server which uses the external IP of the node, so users can reach it.

    The actual game servers behind the proxy should use allocations with 127.0.0.1 as the address, so they are only reachable on the node, and not from the public.

    # Example

    10.1.70.62 is an example, replace it with your own public IP address.

    # proxy server settings

    As the proxy server, like all servers, is running in a docker container with network isolation, localhost/127.0.0.1 doesn't refer to the node, but to the container. The node can be reached from within the container using 172.18.0.1 (unless the pterodactyl network is configured differently) instead. You therefore need to use this IP in your proxy server configuration.

    # bungeecord/waterfall configuration

    This will be different for other proxy servers, please refer to their documentation.

    # paper/spigot/bukkit settings

    The servers itself require the regular config options required by server proxies, which usually comes down to disabling online mode. This will differ for other server software, please refer to their documentation.

    # server.properties

    set online-mode false

    # spigot.yml

    set bungeecord to true

    # Firewalls

    If you are using a firewall, additional rules might be required to allow servers to reach each other on the node. In this case the proxy server needs to reach all of the game servers behind it. Therefore we need to allow traffic from the pterodactyl network to the server ports on localhost.

    You can use the following commands as an example. 172.18.0.1 is the default address referring to the node within the pterodactyl network. Replace <LOCALHOST_PORT> with the allocated localhost ports of the game servers.

    WARNING

    The following commands will allow any server on the node to access the opened ports.

    # UFW (Ubuntu)

    Allow access to the pterodactyl pterodactyl0 network on a specific port.

    ufw allow in on pterodactyl0 to 172.18.0.1 port <LOCALHOST_PORT> proto tcp
     

    # Firewalld (CentOS)

    Allow access to pterodactyl0 from the pterodactyl0 network.

    WARNING

    This command will allow any server to access all other servers as well as all ports on the node.

    firewall-cmd --permanent --zone=public --add-source=172.18.0.1
     
    - + diff --git a/community/installation-guides/panel/centos7.html b/community/installation-guides/panel/centos7.html index ee3b3030..7a0259c0 100644 --- a/community/installation-guides/panel/centos7.html +++ b/community/installation-guides/panel/centos7.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # CentOS 7

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver + (opens new window)

    # CentOS 7

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for CentOS 7.

    # Install Requirements and Additional Utilities

    We will install all of Pterodactyl's required dependencies and a few aditional utilities.

    TIP

    If you run sestatus and it shows SELinux status: enabled you should install the following packages for later

    # SELinux tools

    yum install -y policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
     

    # MariaDB

    ## Install Repos
     cat <<EOF > /etc/yum.repos.d/mariadb.repo
    @@ -172,6 +172,6 @@ server {
             ←
             Community Guides and Tutorials
    - + diff --git a/community/installation-guides/panel/centos8.html b/community/installation-guides/panel/centos8.html index 9f09fc09..4c343631 100644 --- a/community/installation-guides/panel/centos8.html +++ b/community/installation-guides/panel/centos8.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # CentOS 8, Rocky Linux 8, AlmaLinux 8

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Enterprise Linux 8.

    # Install Requirements and Additional Utilities

    We will install all of Pterodactyl's required dependencies and a few aditional utilities.

    TIP

    If you run sestatus and it shows SELinux status: enabled you should install the following packages for later

    # SELinux tools

    dnf install -y policycoreutils selinux-policy selinux-policy-targeted setroubleshoot-server setools setools-console mcstrans
    +             (opens new window)

    # CentOS 8, Rocky Linux 8, AlmaLinux 8

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Enterprise Linux 8.

    # Install Requirements and Additional Utilities

    We will install all of Pterodactyl's required dependencies and a few aditional utilities.

    TIP

    If you run sestatus and it shows SELinux status: enabled you should install the following packages for later

    # SELinux tools

    dnf install -y policycoreutils selinux-policy selinux-policy-targeted setroubleshoot-server setools setools-console mcstrans
     

    # MariaDB

    dnf install -y mariadb mariadb-server
     
     ## Start maraidb
    @@ -152,8 +152,8 @@ server {
     }

    # Redis Setup

    The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into running another Redis instance (opens new window).

    # Installing the Panel

    Excellent, we now have all of the required dependencies installed and configured. From here, follow the official Panel installation documentation.

    - + diff --git a/community/installation-guides/panel/debian10.html b/community/installation-guides/panel/debian10.html index 7d951ea8..8f5a0c40 100644 --- a/community/installation-guides/panel/debian10.html +++ b/community/installation-guides/panel/debian10.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Debian 10

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 10.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    apt install -y software-properties-common curl apt-transport-https ca-certificates
    +             (opens new window)

    # Debian 10

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 10.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    apt install -y software-properties-common curl apt-transport-https ca-certificates
     
     ## Get apt updates
     apt update
    @@ -137,8 +137,8 @@ server {
     

    # Redis Setup

    The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into running another Redis instance (opens new window).

    # Installing the Panel

    Excellent, we now have all of the required dependencies installed and configured. From here, follow the official Panel installation documentation.

    - + diff --git a/community/installation-guides/panel/debian11.html b/community/installation-guides/panel/debian11.html new file mode 100644 index 00000000..53f00399 --- /dev/null +++ b/community/installation-guides/panel/debian11.html @@ -0,0 +1,76 @@ + + + + + + Debian 11 | Pterodactyl + + + + + + + + + + + + + + + +

    + Stand with Ukraine 🇺🇦  + Donate Today.

    # Debian 11

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 11.

    # Dependency Installation

    In this guide, we will install the required dependencies for the Pterodactyl panel. After that, you can follow the official installation documentation.

    # Update  package lists
    +apt update -y
    +
    +# Install necessary packages
    +apt -y install software-properties-common curl ca-certificates gnupg2 sudo lsb-release
    +
    +# Add repository for PHP
    +echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
    +
    +curl -fsSL  https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/sury-keyring.gpg
    +
    +# Add repository for Redis
    +curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
    +
    +echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
    +
    +# Update  package lists
    +apt update -y
    +
    +# Install PHP and required extensions
    +apt install -y php8.1 php8.1-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip}
    +
    +# MariaDB repo setup script
    +curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
    +
    +# Install the rest of dependencies
    +apt install -y mariadb-server nginx tar unzip git redis-server
    +
    +

    # Installing Composer

    Composer is a dependency manager for PHP that allows us to ship everything you'll need code wise to operate the Panel. You'll +need composer installed before continuing in this process.

    curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
    +

    # Download Files

    Great, now all of the dependencies have been dealt with. Continue the installation by following the official documentation Download Files section.

    + + + diff --git a/community/installation-guides/panel/debian9.html b/community/installation-guides/panel/debian9.html deleted file mode 100644 index 68b29b39..00000000 --- a/community/installation-guides/panel/debian9.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - Debian 9 | Pterodactyl - - - - - - - - - - - - - - - -

    - Stand with Ukraine 🇺🇦  - Donate Today.

    # Debian 9

    In this guide we will install Pterodactyl v1.x — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 9.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    ## Install the MariaDB repo for debian
    -apt install -y software-properties-common dirmngr
    -curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
    -
    -## Get apt updates
    -apt update
    -
    -## Install MariaDB
    -apt install -y mariadb-common mariadb-server mariadb-client
    -
    -## Start maraidb
    -systemctl start mariadb
    -systemctl enable mariadb
    -

    # PHP 7.4

    ## Install the PHP 7.4 repo for debian
    -apt install -y ca-certificates apt-transport-https
    -wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
    -echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
    -
    -## Get apt updates
    -apt update
    -
    -## Install PHP 7.4
    -apt install -y php7.4 php7.4-{cli,gd,mysql,pdo,mbstring,tokenizer,bcmath,xml,fpm,curl,zip}
    -

    # Nginx

    apt install -y nginx
    -

    # Redis

    apt install -y redis-server
    -
    -systemctl start redis-server
    -systemctl enable redis-server
    -

    # Additional Utilities

    # Certbot

    apt install -y certbot curl
    -

    # Composer

    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    -

    # Server Configuration

    This following section covers the configuration of parts of the server to run the panel.

    # Configuring MariaDB

    The fastest way to set up mariadb is to use the mysql_secure_installation command and follow prompts

    mysql_secure_installation
    -

    The following are safe defaults.

    Change to your own secure password
    Set root password? [Y/n] Y

    Get rid of users that could access the db by default
    Remove anonymous users? [Y/n] Y

    Keep root off the external interfaces
    Disallow root login remotely? [Y/n] Y

    Extra databases that aren't needed
    Remove test database and access to it? [Y/n] Y

    Clears and sets all the changes made
    Reload privilege tables now? [Y/n] Y

    All done! If you've completed all of the above steps, your MariaDB installation should now be secure.

    # Adding MariaDB user

    To add your first user to the database, see our tutorial on setting up MySQL.

    # Setup PHP

    The default php-fpm configuration is fine to use and can be started and then enabled on the system using the -commands below.

    systemctl enable php7.4-fpm
    -systemctl start php7.4-fpm
    -

    # Nginx

    Please check our tutorial on generating SSL certificates for more information.

    # SSL Configuration





     





     














     
     








































    server_tokens off;
    -
    -server {
    -    listen 80;
    -    server_name <domain>;
    -    return 301 https://$server_name$request_uri;
    -}
    -
    -server {
    -    listen 443 ssl http2;
    -    server_name <domain>;
    -
    -    root /var/www/pterodactyl/public;
    -    index index.php;
    -
    -    access_log /var/log/nginx/pterodactyl.app-access.log;
    -    error_log  /var/log/nginx/pterodactyl.app-error.log error;
    -
    -    # allow larger file uploads and longer script runtimes
    -    client_max_body_size 100m;
    -    client_body_timeout 120s;
    -
    -    sendfile off;
    -
    -    # SSL Configuration
    -    ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
    -    ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
    -    ssl_session_cache shared:SSL:10m;
    -    ssl_protocols TLSv1.2 TLSv1.3;
    -    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";
    -    ssl_prefer_server_ciphers on;
    -
    -    # See https://hstspreload.org/ before uncommenting the line below.
    -    # add_header Strict-Transport-Security "max-age=15768000; preload;";
    -    add_header X-Content-Type-Options nosniff;
    -    add_header X-XSS-Protection "1; mode=block";
    -    add_header X-Robots-Tag none;
    -    add_header Content-Security-Policy "frame-ancestors 'self'";
    -    add_header X-Frame-Options DENY;
    -    add_header Referrer-Policy same-origin;
    -
    -    location / {
    -        try_files $uri $uri/ /index.php?$query_string;
    -    }
    -
    -    location ~ \.php$ {
    -        fastcgi_split_path_info ^(.+\.php)(/.+)$;
    -        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    -        fastcgi_index index.php;
    -        include fastcgi_params;
    -        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
    -        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    -        fastcgi_param HTTP_PROXY "";
    -        fastcgi_intercept_errors off;
    -        fastcgi_buffer_size 16k;
    -        fastcgi_buffers 4 16k;
    -        fastcgi_connect_timeout 300;
    -        fastcgi_send_timeout 300;
    -        fastcgi_read_timeout 300;
    -        include /etc/nginx/fastcgi_params;
    -    }
    -
    -    location ~ /\.ht {
    -        deny all;
    -    }
    -}
    -

    # Redis Setup

    The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into -running another Redis instance (opens new window).

    # Installing the Panel

    Excellent, we now have all of the required dependencies installed and configured. From here, follow the official Panel installation documentation.

    - - - diff --git a/community/installation-guides/panel/ubuntu1804.html b/community/installation-guides/panel/ubuntu1804.html index a85ddce7..0c02edef 100644 --- a/community/installation-guides/panel/ubuntu1804.html +++ b/community/installation-guides/panel/ubuntu1804.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Ubuntu 18.04

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 18.04.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    ## Get apt updates
    +             (opens new window)

    # Ubuntu 18.04

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 18.04.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    ## Get apt updates
     apt update -y
     
     ## Install MariaDB
    @@ -130,6 +130,6 @@ server {
     }
     

    # Redis Setup

    The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into running another Redis instance (opens new window).

    # Installing the Panel

    Excellent, we now have all of the required dependencies installed and configured. From here, follow the official Panel installation documentation.

    - + diff --git a/community/installation-guides/panel/ubuntu2004.html b/community/installation-guides/panel/ubuntu2004.html index db4eb078..20b745d8 100644 --- a/community/installation-guides/panel/ubuntu2004.html +++ b/community/installation-guides/panel/ubuntu2004.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Ubuntu 20.04

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 20.04.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    ## Get apt updates
    +             (opens new window)

    # Ubuntu 20.04

    In this guide we will install Pterodactyl v1.X — including all of it's dependencies — and configure our webserver to serve it using SSL.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 20.04.

    # Install Requirements

    We will first begin by installing all of Pterodactyl's required dependencies.

    # MariaDB

    ## Get apt updates
     apt update -y
     
     ## Install MariaDB
    @@ -64,6 +64,6 @@ commands below.

    # Nginx Configuration 

    Follow this guide to setup Nginx for Pterodactyl, choose whether to use Nginx with or without SSL.

    # Redis Setup

    The default Redis install is perfectly fine for the panel. If you have Redis already in use you may want to look into running another Redis instance (opens new window).

    # Installing the Panel

    Excellent, we now have all of the required dependencies installed and configured. From here, follow the official Panel installation documentation.

    - + diff --git a/community/installation-guides/wings/centos7.html b/community/installation-guides/wings/centos7.html index a63c5063..6907b54e 100644 --- a/community/installation-guides/wings/centos7.html +++ b/community/installation-guides/wings/centos7.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # CentOS 7

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for CentOS 7.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## Install yum tools
    +             (opens new window)

    # CentOS 7

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for CentOS 7.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## Install yum tools
     yum install -y yum-utils device-mapper-persistent-data lvm2
     
     ## Add the docker repo
    @@ -56,8 +56,8 @@ firewall-cmd --zone=trusted --add-masquerade
     firewall-cmd --reload
     

    # Installing Wings

    Great, now all of the dependencies and firewall rules have been dealt with. From here follow the official Wings installation documentation.

    - + diff --git a/community/installation-guides/wings/centos8.html b/community/installation-guides/wings/centos8.html index 0376c7da..a7853d2b 100644 --- a/community/installation-guides/wings/centos8.html +++ b/community/installation-guides/wings/centos8.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # CentOS 8, Rocky Linux 8, AlmaLinux 8

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Enterprise Linux 8.

    # Install Requirements

    We will first begin by installing all of the Wings' required dependencies.

    # Docker

    ## Install yum tools
    +             (opens new window)

    # CentOS 8, Rocky Linux 8, AlmaLinux 8

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Enterprise Linux 8.

    # Install Requirements

    We will first begin by installing all of the Wings' required dependencies.

    # Docker

    ## Install yum tools
     dnf install -y dnf-utils device-mapper-persistent-data lvm2
     
     ## Add the docker repo
    @@ -56,8 +56,8 @@ firewall-cmd --zone=trusted --add-masquerade
     firewall-cmd --reload
     

    # Installing Wings

    Great, now all of the dependencies and firewall rules have been dealt with. From here follow the official Wings installation documentation.

    TIP

    If you have SELinux enforcement enabled and you are getting AVC denials from your containers, try relocating your Wings data directory from /var/lib/pterodactyl to /var/srv/containers/pterodactyl. That is where the targeted policy expects Docker to read and write data from.

    - + diff --git a/community/installation-guides/wings/debian10.html b/community/installation-guides/wings/debian10.html index 980f8d23..2ca7e54f 100644 --- a/community/installation-guides/wings/debian10.html +++ b/community/installation-guides/wings/debian10.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Debian 10

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 10.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## install apt tools
    +             (opens new window)

    # Debian 10

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 10.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## install apt tools
     apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
     
     ## Import the docker gpg key
    @@ -55,8 +55,8 @@ systemctl enable docker
     systemctl start docker
     

    # Installing Wings

    Great, now all of the dependencies have been dealt with. From here follow the official Wings installation documentation.

    - + diff --git a/community/installation-guides/wings/debian9.html b/community/installation-guides/wings/debian11.html similarity index 62% rename from community/installation-guides/wings/debian9.html rename to community/installation-guides/wings/debian11.html index 649ce835..551b0431 100644 --- a/community/installation-guides/wings/debian9.html +++ b/community/installation-guides/wings/debian11.html @@ -3,7 +3,7 @@ - Debian 9 | Pterodactyl + Debian 11 | Pterodactyl @@ -15,7 +15,7 @@ - + @@ -37,26 +37,10 @@ API (opens new window)

    # Debian 9

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Debian 9.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## install apt tools
    -apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
    -
    -## Import the docker gpg key
    -curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
    -
    -## Add the docker stable repo
    -add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
    -
    -## Install docker
    -apt update -y
    -apt install -y docker-ce
    -
    -## Enable docker service
    -systemctl enable docker
    -systemctl start docker
    -

    # Installing Wings

    Great, now all of the dependencies have been dealt with. From here follow the official Wings installation documentation.

    # Debian 11

    # Install

    There is no additional configuration required for Wings on Debian 11. You can follow the official Wings install documentation, which covers Docker installation for Debian.

    - + diff --git a/community/installation-guides/wings/ubuntu1804.html b/community/installation-guides/wings/ubuntu1804.html index a1179933..4b9a3075 100644 --- a/community/installation-guides/wings/ubuntu1804.html +++ b/community/installation-guides/wings/ubuntu1804.html @@ -15,7 +15,7 @@ - + @@ -37,13 +37,13 @@ API (opens new window)

    # Ubuntu 18.04

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 18.04.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## Install docker
    +             (opens new window)

    # Ubuntu 18.04

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 18.04.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## Install docker
     apt install -y docker.io
     
     ## Enable docker service
     systemctl enable docker
     systemctl start docker
     

    # Installing Wings

    Great, now all of the dependencies and firewall rules have been dealt with. From here follow the official Wings installation documentation.

    - + diff --git a/community/installation-guides/wings/ubuntu2004.html b/community/installation-guides/wings/ubuntu2004.html index 156a710a..437bb21d 100644 --- a/community/installation-guides/wings/ubuntu2004.html +++ b/community/installation-guides/wings/ubuntu2004.html @@ -15,7 +15,7 @@ - + @@ -37,13 +37,13 @@ API (opens new window)

    # Ubuntu 20.04

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 20.04.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## Install docker
    +             (opens new window)

    # Ubuntu 20.04

    In this guide we will install Pterodactyl's Wings v1.X — including all of it's dependencies — and configure it to use a SSL connection.

    TIP

    This guide is based off the official installation documentation but is tailored specifically for Ubuntu 20.04.

    # Install Requirements

    We will first begin by installing all of Wings' required dependencies.

    # Docker

    ## Install docker
     apt install -y docker.io
     
     ## Enable docker service
     systemctl enable docker
     systemctl start docker
     

    # Installing Wings

    Great, now all of the dependencies and firewall rules have been dealt with. From here follow the official Wings installation documentation.

    - + diff --git a/community/tutorials/artisan.html b/community/tutorials/artisan.html index ae3f4ff4..5625211b 100644 --- a/community/tutorials/artisan.html +++ b/community/tutorials/artisan.html @@ -15,7 +15,7 @@ - + @@ -37,7 +37,7 @@ API (opens new window)

    # Artisan CLI

    The Artisan CLI, command line interface, is part of the Laravel framework, which Pterodactyl is built on. The Artisan file is located in /var/www/pterodactyl if you followed the official guide. This guide goes over some more Pterodactyl specific/related Artisan commands, which are all prefixed with the letter p (e.g. p:user:make). If you'd like to view all commands, you can do so by running:

    php artisan list
    +             (opens new window)

    # Artisan CLI

    The Artisan CLI, command line interface, is part of the Laravel framework, which Pterodactyl is built on. The Artisan file is located in /var/www/pterodactyl if you followed the official guide. This guide goes over some more Pterodactyl specific/related Artisan commands, which are all prefixed with the letter p (e.g. p:user:make). If you'd like to view all commands, you can do so by running:

    php artisan list
     

    To get information regarding a specific command you can do so by running:

    php artisan help <command>
     

    TIP

    To simplify this documentation, in command usage you'll see things like the following:

    <hello-world> - Required argument

    [hello-world] - Optional argument

    {--hello-world} - Option

    # User Management

    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.

    # Create User

    php artisan p:user:make {--email=user@example.com}
                             {--username=myusername}
    @@ -64,6 +64,6 @@
             ←
             Creating a New Node
    - + diff --git a/daemon/0.6/configuration.html b/daemon/0.6/configuration.html index f1d1bf54..fc82fef5 100644 --- a/daemon/0.6/configuration.html +++ b/daemon/0.6/configuration.html @@ -15,7 +15,7 @@ - + @@ -99,6 +99,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 f0452a48..daad193e 100644 --- a/daemon/0.6/debian_8_docker.html +++ b/daemon/0.6/debian_8_docker.html @@ -15,7 +15,7 @@ - + @@ -71,6 +71,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 48a259a0..2e0194e7 100644 --- a/daemon/0.6/installing.html +++ b/daemon/0.6/installing.html @@ -15,7 +15,7 @@ - + @@ -106,6 +106,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 50ba3be5..90accbad 100644 --- a/daemon/0.6/kernel_modifications.html +++ b/daemon/0.6/kernel_modifications.html @@ -15,7 +15,7 @@ - + @@ -71,6 +71,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 81250453..f854ae57 100644 --- a/daemon/0.6/standalone_sftp.html +++ b/daemon/0.6/standalone_sftp.html @@ -15,7 +15,7 @@ - + @@ -86,6 +86,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 64db822a..56dca41c 100644 --- a/daemon/0.6/upgrade/0.4_to_0.5.html +++ b/daemon/0.6/upgrade/0.4_to_0.5.html @@ -15,7 +15,7 @@ - + @@ -77,6 +77,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 8a868d57..3968f0cd 100644 --- a/daemon/0.6/upgrade/0.5.html +++ b/daemon/0.6/upgrade/0.5.html @@ -15,7 +15,7 @@ - + @@ -54,6 +54,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 863504f1..bf706a03 100644 --- a/daemon/0.6/upgrade/0.5_to_0.6.html +++ b/daemon/0.6/upgrade/0.5_to_0.6.html @@ -15,7 +15,7 @@ - + @@ -64,6 +64,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 73cec4c4..a5eccd3d 100644 --- a/daemon/0.6/upgrade/0.6.html +++ b/daemon/0.6/upgrade/0.6.html @@ -15,7 +15,7 @@ - + @@ -56,6 +56,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 79a857ee..7b75cc86 100644 --- a/daemon/0.6/upgrading.html +++ b/daemon/0.6/upgrading.html @@ -15,7 +15,7 @@ - + @@ -48,6 +48,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 80b313f2..e2edb988 100644 --- a/guides/mounts.html +++ b/guides/mounts.html @@ -15,7 +15,7 @@ - + @@ -54,6 +54,6 @@ ← Creating SSL Certificates
    - + diff --git a/guides/php_upgrade.html b/guides/php_upgrade.html index aba843d3..6cea4fef 100644 --- a/guides/php_upgrade.html +++ b/guides/php_upgrade.html @@ -15,7 +15,7 @@ - + @@ -64,6 +64,6 @@ a2dismod php* a2enmod php8.1

    # Return to the 1.X.X Upgrade Guide

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

    - + diff --git a/ops/publish_release.html b/ops/publish_release.html index 7fe22d77..ff38197b 100644 --- a/ops/publish_release.html +++ b/ops/publish_release.html @@ -15,7 +15,7 @@ - + @@ -92,6 +92,6 @@ gpg --detach-sig --output panel.asc panel.tar.gz
    - + diff --git a/panel/0.7/configuration.html b/panel/0.7/configuration.html index 4586ae84..b5b48a7d 100644 --- a/panel/0.7/configuration.html +++ b/panel/0.7/configuration.html @@ -15,7 +15,7 @@ - + @@ -82,6 +82,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 4865c37d..5ded85b9 100644 --- a/panel/0.7/getting_started.html +++ b/panel/0.7/getting_started.html @@ -15,7 +15,7 @@ - + @@ -142,6 +142,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 e605bf64..5749db6c 100644 --- a/panel/0.7/troubleshooting.html +++ b/panel/0.7/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -96,6 +96,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 ac0033a6..6cd16656 100644 --- a/panel/0.7/upgrade/0.6_to_0.7.html +++ b/panel/0.7/upgrade/0.6_to_0.7.html @@ -15,7 +15,7 @@ - + @@ -83,6 +83,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 43a57a71..dba92287 100644 --- a/panel/0.7/upgrade/0.7.html +++ b/panel/0.7/upgrade/0.7.html @@ -15,7 +15,7 @@ - + @@ -73,6 +73,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 276abe13..ad79c34a 100644 --- a/panel/0.7/upgrading.html +++ b/panel/0.7/upgrading.html @@ -15,7 +15,7 @@ - + @@ -55,6 +55,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 edc2ba1e..7ea4bea8 100644 --- a/panel/0.7/webserver_configuration.html +++ b/panel/0.7/webserver_configuration.html @@ -15,7 +15,7 @@ - + @@ -212,6 +212,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 0c809c36..559e9d0f 100644 --- a/panel/1.0/additional_configuration.html +++ b/panel/1.0/additional_configuration.html @@ -15,7 +15,7 @@ - + @@ -80,6 +80,6 @@ Below is an example of how to set this.

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

    # Disable 2FA for a specific user

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

    php artisan p:user:disable2fa
     
    - + diff --git a/panel/1.0/getting_started.html b/panel/1.0/getting_started.html index adf0bf22..fcd6828d 100644 --- a/panel/1.0/getting_started.html +++ b/panel/1.0/getting_started.html @@ -15,7 +15,7 @@ - + @@ -50,7 +50,7 @@ software; take some time and read rather than copy and pasting and then complain not exist as a drag-and-drop service to run your servers. It is a highly complex system requiring multiple dependencies and administrators willing to spend some time learning how to use it. If you expect to be able to install this with no understanding of basic linux system administration you should stop and turn around now.

    Looking for something simple to setup?

    WISP (opens new window) is a Pterodactyl powered SaaS suitable for enterprise and personal use. Offering all the features without the setup hassle, and fully compatible with Pterodactyl eggs. Comparable to MultiCraft or TCAdmin while offering new and unique features. Click here to learn more (opens new window).

    # Picking a Server OS

    Pterodactyl runs on a wide range of operating systems, so pick whichever you are most comfortable using.

    WARNING

    Pterodactyl does not support most OpenVZ systems due to incompatibilities with Docker. If you are planning on running -this software on an OpenVZ based system you will — most likely — not be successful.

    Operating System Version Supported Notes
    Ubuntu 18.04 Documentation written assuming Ubuntu 18.04 as the base OS.
    20.04
    22.04 MariaDB can be installed without the repo setup script.
    CentOS 7 Extra repos are required.
    8 Note that CentOS 8 is EOL. Use Rocky or Alma Linux.
    Debian 9 Extra repos are required.
    10
    11

    # Dependencies

    • PHP 7.4, 8.0 or 8.1 (recommended) with the following extensions: cli, openssl, gd, mysql, PDO, mbstring, tokenizer, bcmath, xml or dom, curl, zip, and fpm if you are planning to use NGINX.
    • MySQL 5.7.22 and higher (MySQL 8 recommended) or MariaDB 10.2 and higher.
    • Redis (redis-server)
    • A webserver (Apache, NGINX, Caddy, etc.)
    • curl
    • tar
    • unzip
    • git
    • composer v2

    # Example Dependency Installation

    The commands below are simply an example of how you might install these dependencies. Please consult with your +this software on an OpenVZ based system you will — most likely — not be successful.

    Operating System Version Supported Notes
    Ubuntu 18.04 Documentation written assuming Ubuntu 18.04 as the base OS.
    20.04
    22.04
    22.04 MariaDB can be installed without the repo setup script.
    CentOS 7 Extra repos are required.
    8 Note that CentOS 8 is EOL. Use Rocky or Alma Linux.
    Debian 10
    11

    # Dependencies

    • PHP 7.4, 8.0 or 8.1 (recommended) with the following extensions: cli, openssl, gd, mysql, PDO, mbstring, tokenizer, bcmath, xml or dom, curl, zip, and fpm if you are planning to use NGINX.
    • MySQL 5.7.22 and higher (MySQL 8 recommended) or MariaDB 10.2 and higher.
    • Redis (redis-server)
    • A webserver (Apache, NGINX, Caddy, etc.)
    • curl
    • tar
    • unzip
    • git
    • composer v2

    # Example Dependency Installation

    The commands below are simply an example of how you might install these dependencies. Please consult with your operating system's package manager to determine the correct packages to install.

    # Add "add-apt-repository" command
     apt -y install software-properties-common curl apt-transport-https ca-certificates gnupg
     
    @@ -150,6 +150,6 @@ WantedBy=multi-user.target
     when the service starts.

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

    sudo systemctl enable --now redis-server
     

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

    sudo systemctl enable --now pteroq.service
     

    # Next Step: Webserver Configuration

    - + diff --git a/panel/1.0/legacy_upgrade.html b/panel/1.0/legacy_upgrade.html index bdd21fd2..570656dd 100644 --- a/panel/1.0/legacy_upgrade.html +++ b/panel/1.0/legacy_upgrade.html @@ -15,7 +15,7 @@ - + @@ -95,6 +95,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 65bad229..227fdd73 100644 --- a/panel/1.0/troubleshooting.html +++ b/panel/1.0/troubleshooting.html @@ -15,7 +15,7 @@ - + @@ -94,6 +94,6 @@ semodule -i http_port_t.pp

    # FirewallD issues

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

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

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

    - + diff --git a/panel/1.0/updating.html b/panel/1.0/updating.html index 388cfd9b..5d3d3064 100644 --- a/panel/1.0/updating.html +++ b/panel/1.0/updating.html @@ -15,7 +15,7 @@ - + @@ -92,6 +92,6 @@ is www-data but can vary from system to system — sometimes being

    # Exit Maintenance Mode

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

    php artisan up
     

    Final Step: Upgrade Wings

    - + diff --git a/panel/1.0/webserver_configuration.html b/panel/1.0/webserver_configuration.html index 60d518ef..6081a6ab 100644 --- a/panel/1.0/webserver_configuration.html +++ b/panel/1.0/webserver_configuration.html @@ -15,7 +15,7 @@ - + @@ -227,6 +227,6 @@ below! You only need to run systemctl restart httpd.

    sudo a2enmod rewrite sudo systemctl restart apache2

    # Next Step: Wings Installation

    - + diff --git a/project/about.html b/project/about.html index 28670bac..c8c49518 100644 --- a/project/about.html +++ b/project/about.html @@ -15,7 +15,7 @@ - + @@ -120,6 +120,6 @@ gkSI5o2kam0QGYUhqg== ← Introduction
    - + diff --git a/project/community.html b/project/community.html index b5089a85..eefd798a 100644 --- a/project/community.html +++ b/project/community.html @@ -15,7 +15,7 @@ - + @@ -71,6 +71,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 2e41e4f0..bc6ec204 100644 --- a/project/introduction.html +++ b/project/introduction.html @@ -15,7 +15,7 @@ - + @@ -55,6 +55,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 292b004f..4c44f6dd 100644 --- a/project/terms.html +++ b/project/terms.html @@ -15,7 +15,7 @@ - + @@ -53,6 +53,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 79333621..8964a1e4 100644 --- a/tutorials/creating_ssl_certificates.html +++ b/tutorials/creating_ssl_certificates.html @@ -15,7 +15,7 @@ - + @@ -86,6 +86,6 @@ This can be easily fixed by renewing the SSL certificate, although using the com ← Setting up MySQL
    - + diff --git a/tutorials/mysql_setup.html b/tutorials/mysql_setup.html index 0b578da3..7f3af398 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 781afb30..c1760520 100644 --- a/wings/1.0/configuration.html +++ b/wings/1.0/configuration.html @@ -15,7 +15,7 @@ - + @@ -73,6 +73,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 12574ba8..167ba5c7 100644 --- a/wings/1.0/installing.html +++ b/wings/1.0/installing.html @@ -15,7 +15,7 @@ - + @@ -51,7 +51,7 @@ for previous versions of Pterodactyl.

    Operating System Version Supported Notes
    Ubuntu 18.04 Documentation written assuming Ubuntu 18.04 as the base OS.
    20.04
    CentOS 7
    8 Note that CentOS 8 is EOL. Use Rocky or Alma Linux.
    Debian 9
    10
    11
    Windows All This software will not run in Windows environments.

    # System Requirements

    To run Wings, you will need a Linux system capable of running Docker containers. Most VPS and almost all +only the versions listed below.

    Operating System Version Supported Notes
    Ubuntu 18.04 Documentation written assuming Ubuntu 18.04 as the base OS.
    20.04
    22.04
    CentOS 7
    8 Note that CentOS 8 is EOL. Use Rocky or Alma Linux.
    Debian 10
    11
    Windows All This software will not run in Windows environments.

    # System Requirements

    To run Wings, you will need a Linux system capable of running Docker containers. Most VPS and almost all dedicated servers should be capable of running Docker, but there are edge cases.

    When your provider uses Virtuozzo, OpenVZ (or OVZ), or LXC virtualization, you will most likely be unable to run 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.

    The easiest way to check is to type systemd-detect-virt. If the result doesn't contain OpenVZ orLXC, it should be fine. The result of none will appear when running dedicated hardware without any virtualization.

    Should that not work for some reason, or you're still unsure, you can also run the command below.

    dane@pterodactyl:~$ sudo dmidecode -s system-manufacturer
    @@ -93,6 +93,6 @@ RestartSec=5s
     WantedBy=multi-user.target
     

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

    systemctl enable --now wings
     

    # Node Allocations

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

    example image of node allocations

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

    - + diff --git a/wings/1.0/migrating.html b/wings/1.0/migrating.html index 8b73f17d..21843f6e 100644 --- a/wings/1.0/migrating.html +++ b/wings/1.0/migrating.html @@ -15,7 +15,7 @@ - + @@ -95,6 +95,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 21d49c3f..9095abdc 100644 --- a/wings/1.0/upgrading.html +++ b/wings/1.0/upgrading.html @@ -15,7 +15,7 @@ - + @@ -54,6 +54,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
     
    - +