From f97a720073430d325d830a43014b6a2163ba2384 Mon Sep 17 00:00:00 2001 From: DaneEveritt Date: Sat, 2 Jul 2022 14:21:52 +0000 Subject: [PATCH] deploy: 4522c6cc0468395f2ae54f96e3ec11f8204dc696 --- 404.html | 4 +- assets/js/75.13da2e1d.js | 1 - assets/js/75.6a4a5e94.js | 1 + .../js/{app.210b429d.js => app.2c0947b5.js} | 6 +-- community/about.html | 4 +- .../config/eggs/creating_a_custom_egg.html | 4 +- .../config/eggs/creating_a_custom_image.html | 4 +- community/config/nodes/add_node.html | 4 +- community/customization/panel.html | 4 +- community/customization/wings.html | 4 +- community/games/minecraft.html | 4 +- .../installation-guides/panel/centos7.html | 4 +- .../installation-guides/panel/centos8.html | 4 +- .../installation-guides/panel/debian10.html | 4 +- .../installation-guides/panel/debian9.html | 4 +- .../installation-guides/panel/ubuntu1804.html | 4 +- .../installation-guides/panel/ubuntu2004.html | 4 +- .../installation-guides/wings/centos7.html | 4 +- .../installation-guides/wings/centos8.html | 4 +- .../installation-guides/wings/debian10.html | 4 +- .../installation-guides/wings/debian9.html | 4 +- .../installation-guides/wings/ubuntu1804.html | 4 +- .../installation-guides/wings/ubuntu2004.html | 4 +- community/tutorials/artisan.html | 4 +- daemon/0.6/configuration.html | 4 +- daemon/0.6/debian_8_docker.html | 4 +- daemon/0.6/installing.html | 4 +- daemon/0.6/kernel_modifications.html | 4 +- daemon/0.6/standalone_sftp.html | 4 +- daemon/0.6/upgrade/0.4_to_0.5.html | 4 +- daemon/0.6/upgrade/0.5.html | 4 +- daemon/0.6/upgrade/0.5_to_0.6.html | 4 +- daemon/0.6/upgrade/0.6.html | 4 +- daemon/0.6/upgrading.html | 4 +- guides/mounts.html | 4 +- guides/php_upgrade.html | 4 +- index.html | 4 +- ops/publish_release.html | 4 +- panel/0.7/configuration.html | 4 +- panel/0.7/getting_started.html | 4 +- panel/0.7/troubleshooting.html | 4 +- panel/0.7/upgrade/0.6_to_0.7.html | 4 +- panel/0.7/upgrade/0.7.html | 4 +- panel/0.7/upgrading.html | 4 +- panel/0.7/webserver_configuration.html | 4 +- panel/1.0/additional_configuration.html | 4 +- panel/1.0/getting_started.html | 4 +- panel/1.0/legacy_upgrade.html | 4 +- panel/1.0/troubleshooting.html | 4 +- panel/1.0/updating.html | 4 +- panel/1.0/webserver_configuration.html | 4 +- project/about.html | 4 +- project/community.html | 4 +- project/introduction.html | 4 +- project/terms.html | 4 +- tutorials/creating_ssl_certificates.html | 41 ++++++++++--------- tutorials/mysql_setup.html | 4 +- wings/1.0/configuration.html | 4 +- wings/1.0/installing.html | 4 +- wings/1.0/migrating.html | 4 +- wings/1.0/upgrading.html | 4 +- 61 files changed, 139 insertions(+), 138 deletions(-) delete mode 100644 assets/js/75.13da2e1d.js create mode 100644 assets/js/75.6a4a5e94.js rename assets/js/{app.210b429d.js => app.2c0947b5.js} (92%) diff --git a/404.html b/404.html index 1dcb77c3..af0b803c 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - + @@ -46,6 +46,6 @@ current

  • - + diff --git a/assets/js/75.13da2e1d.js b/assets/js/75.13da2e1d.js deleted file mode 100644 index 1087959e..00000000 --- a/assets/js/75.13da2e1d.js +++ /dev/null @@ -1 +0,0 @@ -(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 daemon.")]),e._v(" "),a("tabs",[a("tab",{attrs:{name:"Method 1: Certbot"}},[a("p",[e._v("To begin, we will be installing certbot, a simple script that will automatically renew our certificates and allow much\ncleaner 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("h3",{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 certbot, we need to then generate a certificate. There are a couple ways to do that, but the easiest\nis to use the webserver-specific certbot plugin you just installed.")]),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. If 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("Since we 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).")]),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:"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 automatic renewal by adding the command below to a cronjob that runs daily.\nYou can add the command below to that crontab. 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 (see below), 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("certbot renew\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 related error when trying to access your panel, it is likely that the SSL certificate has expired.\nThis can be easily fixed by renewing the SSL certificate, although using the command "),a("code",[e._v("certbot renew")]),e._v(" won't do the job. As it'll give a error like: "),a("code",[e._v("Error: Attempting to renew cert (domain) from /etc/letsencrypt/renew/domain.conf produced an unexpected error")]),e._v(".\nThis will happen especially if you're running NGINX instead of Apache. The solution for this is to stop NGINX, then renew the certificate, finally restart NGINX.")]),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")])])])]),e._v(" "),a("tab",{attrs:{name:"Method 2: acme.sh (Cloudflare)"}},[a("p",[e._v("This is for advanced users, of which their 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 certbot 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")])])]),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(" "),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/75.6a4a5e94.js b/assets/js/75.6a4a5e94.js new file mode 100644 index 00000000..df99a707 --- /dev/null +++ b/assets/js/75.6a4a5e94.js @@ -0,0 +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")])])])]),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(" "),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/app.210b429d.js b/assets/js/app.2c0947b5.js similarity index 92% rename from assets/js/app.210b429d.js rename to assets/js/app.2c0947b5.js index 0f338c45..148103cb 100644 --- a/assets/js/app.210b429d.js +++ b/assets/js/app.2c0947b5.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(H)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=!H&&!W&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),q},it=H&&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=H&&!Q,Vr="transition",Hr="transitionend",Wr="animation",Gr="animationend";qr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Vr="WebkitTransition",Hr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Wr="WebkitAnimation",Gr="webkitAnimationEnd"));var Kr=H?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?Hr: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[Vr+"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(Ve(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__=H?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&&H?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},H&&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 089d0a48..bba9e14f 100644 --- a/community/config/eggs/creating_a_custom_egg.html +++ b/community/config/eggs/creating_a_custom_egg.html @@ -15,7 +15,7 @@ - + @@ -117,6 +117,6 @@ regex as any letters or numbers (\w\d) including underscore (Debian 10
    - + diff --git a/community/config/eggs/creating_a_custom_image.html b/community/config/eggs/creating_a_custom_image.html index 5f3c2290..55bb76cf 100644 --- a/community/config/eggs/creating_a_custom_image.html +++ b/community/config/eggs/creating_a_custom_image.html @@ -15,7 +15,7 @@ - + @@ -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 22448904..755d9acf 100644 --- a/community/config/nodes/add_node.html +++ b/community/config/nodes/add_node.html @@ -15,7 +15,7 @@ - + @@ -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 2f1f9468..2c8144b8 100644 --- a/community/customization/panel.html +++ b/community/customization/panel.html @@ -15,7 +15,7 @@ - + @@ -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 548cab99..c4a86f69 100644 --- a/community/customization/wings.html +++ b/community/customization/wings.html @@ -15,7 +15,7 @@ - + @@ -49,6 +49,6 @@ systemctl start wings
    - + diff --git a/community/games/minecraft.html b/community/games/minecraft.html index 3eec1251..80e6e46c 100644 --- a/community/games/minecraft.html +++ b/community/games/minecraft.html @@ -15,7 +15,7 @@ - + @@ -43,6 +43,6 @@ ← Creating a Custom Docker Image
    - + diff --git a/community/installation-guides/panel/centos7.html b/community/installation-guides/panel/centos7.html index c8a7d37e..c81116be 100644 --- a/community/installation-guides/panel/centos7.html +++ b/community/installation-guides/panel/centos7.html @@ -15,7 +15,7 @@ - + @@ -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 fe62debd..686f6c85 100644 --- a/community/installation-guides/panel/centos8.html +++ b/community/installation-guides/panel/centos8.html @@ -15,7 +15,7 @@ - + @@ -154,6 +154,6 @@ server { ← CentOS 7
    - + diff --git a/community/installation-guides/panel/debian10.html b/community/installation-guides/panel/debian10.html index c1e38c4e..9b5aa97b 100644 --- a/community/installation-guides/panel/debian10.html +++ b/community/installation-guides/panel/debian10.html @@ -15,7 +15,7 @@ - + @@ -139,6 +139,6 @@ server { ← Debian 9
    - + diff --git a/community/installation-guides/panel/debian9.html b/community/installation-guides/panel/debian9.html index 37ef6eea..8ed0b236 100644 --- a/community/installation-guides/panel/debian9.html +++ b/community/installation-guides/panel/debian9.html @@ -15,7 +15,7 @@ - + @@ -142,6 +142,6 @@ server { ← CentOS 8, Rocky Linux 8, AlmaLinux 8
    - + diff --git a/community/installation-guides/panel/ubuntu1804.html b/community/installation-guides/panel/ubuntu1804.html index 9e49d169..42ee2953 100644 --- a/community/installation-guides/panel/ubuntu1804.html +++ b/community/installation-guides/panel/ubuntu1804.html @@ -15,7 +15,7 @@ - + @@ -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 493748cf..c204ee21 100644 --- a/community/installation-guides/panel/ubuntu2004.html +++ b/community/installation-guides/panel/ubuntu2004.html @@ -15,7 +15,7 @@ - + @@ -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 3d1ade86..f7a2c241 100644 --- a/community/installation-guides/wings/centos7.html +++ b/community/installation-guides/wings/centos7.html @@ -15,7 +15,7 @@ - + @@ -58,6 +58,6 @@ firewall-cmd --reload ← Debian 10
    - + diff --git a/community/installation-guides/wings/centos8.html b/community/installation-guides/wings/centos8.html index 18321583..8b565cd5 100644 --- a/community/installation-guides/wings/centos8.html +++ b/community/installation-guides/wings/centos8.html @@ -15,7 +15,7 @@ - + @@ -58,6 +58,6 @@ firewall-cmd --reload ← CentOS 7
    - + diff --git a/community/installation-guides/wings/debian10.html b/community/installation-guides/wings/debian10.html index 7a7a34f4..5a26f964 100644 --- a/community/installation-guides/wings/debian10.html +++ b/community/installation-guides/wings/debian10.html @@ -15,7 +15,7 @@ - + @@ -57,6 +57,6 @@ systemctl start docker ← Debian 9
    - + diff --git a/community/installation-guides/wings/debian9.html b/community/installation-guides/wings/debian9.html index 4e43ed9b..c6158ad8 100644 --- a/community/installation-guides/wings/debian9.html +++ b/community/installation-guides/wings/debian9.html @@ -15,7 +15,7 @@ - + @@ -57,6 +57,6 @@ systemctl start docker ← CentOS 8, Rocky Linux 8, AlmaLinux 8
    - + diff --git a/community/installation-guides/wings/ubuntu1804.html b/community/installation-guides/wings/ubuntu1804.html index 31dfaea1..9a77a28e 100644 --- a/community/installation-guides/wings/ubuntu1804.html +++ b/community/installation-guides/wings/ubuntu1804.html @@ -15,7 +15,7 @@ - + @@ -44,6 +44,6 @@ 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 a1664279..7a677d65 100644 --- a/community/installation-guides/wings/ubuntu2004.html +++ b/community/installation-guides/wings/ubuntu2004.html @@ -15,7 +15,7 @@ - + @@ -44,6 +44,6 @@ 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 6eb1a2de..74e3848d 100644 --- a/community/tutorials/artisan.html +++ b/community/tutorials/artisan.html @@ -15,7 +15,7 @@ - + @@ -64,6 +64,6 @@ ← Creating a New Node
    - + diff --git a/daemon/0.6/configuration.html b/daemon/0.6/configuration.html index 2a9322ed..ae4d98f6 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 470fe1ec..a2b66ef9 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 42775506..8c576d38 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 496af8e2..37b33c61 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 6fdfd7f2..ff60bac2 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 53c98f89..691fd3a2 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 38217a27..1eb9fc95 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 73d1c734..74bda787 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 51afe621..83e58cd2 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 ad3eefa7..7178bd9d 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 b31989f1..f32d9784 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 78a56961..8afa1079 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 ffd90d53..8eedd21d 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 4f50cff5..46a87488 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 611849f0..e2cdd915 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 d046fc6c..fa0eb662 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 c8de6279..8c5a8f00 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 5ef854f6..659ca656 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 42bff350..7355037b 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 5e443e40..b669d40a 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 01d07ffb..577e7bbb 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 364098b7..2c3e8a16 100644 --- a/panel/1.0/additional_configuration.html +++ b/panel/1.0/additional_configuration.html @@ -15,7 +15,7 @@ - + @@ -78,6 +78,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 cd0cc4ba..fa22b081 100644 --- a/panel/1.0/getting_started.html +++ b/panel/1.0/getting_started.html @@ -15,7 +15,7 @@ - + @@ -147,6 +147,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 db3cdafb..b8c1aca5 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 bc27900d..1d15c47d 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 2e12ca2d..fc0b1b26 100644 --- a/panel/1.0/updating.html +++ b/panel/1.0/updating.html @@ -15,7 +15,7 @@ - + @@ -95,6 +95,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 1c94cb85..f56ba091 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 90e900b3..783aab30 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 5e29206f..f96fa752 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 c3feda54..cf4d95d9 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 bcf54b13..5092ebeb 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 704aea3c..c3f35661 100644 --- a/tutorials/creating_ssl_certificates.html +++ b/tutorials/creating_ssl_certificates.html @@ -15,7 +15,7 @@ - + @@ -45,45 +45,46 @@ 1.6 current

  • # Creating SSL Certificates

    This tutorial briefly covers creating new SSL certificates for your panel and daemon.

    • # Creating SSL Certificates

      This tutorial briefly covers creating new SSL certificates for your panel and wings.

        - + diff --git a/tutorials/mysql_setup.html b/tutorials/mysql_setup.html index 9f05a5ec..c3cb5c25 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 783265a3..ac53944b 100644 --- a/wings/1.0/configuration.html +++ b/wings/1.0/configuration.html @@ -15,7 +15,7 @@ - + @@ -67,6 +67,6 @@ you misconfigure something. Proceed only if you know what each configuration val memory: 1024 cpu: 100

        # Other values

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

        Setting Key Default Value Notes
        debug false Force Wings to run in debug mode
        tmpfs_size 100 The size of the /tmp directory in MB when mounted into a container
        websocket_log_count 150 The number of lines to display in the console
        detect_clean_exit_as_crash true Mark server as crashed if it's stopped without user interaction, e.g., not pressing stop button
        (crash detection) timeout 60 Timeout between server crashes that will not cause the server to be automatically restarted
        app_name "Pterodactyl" Changes the name of the daemon, shown in the panel's game console
        check_permissions_on_boot true Check all file permissions on each boot. Disable this when you have a very large amount of files and the server startup is hanging on checking permissions
        - + diff --git a/wings/1.0/installing.html b/wings/1.0/installing.html index 475f0bb1..e9e1ed49 100644 --- a/wings/1.0/installing.html +++ b/wings/1.0/installing.html @@ -15,7 +15,7 @@ - + @@ -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 4b7397d6..752783f8 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 beb5b617..ad39ff11 100644 --- a/wings/1.0/upgrading.html +++ b/wings/1.0/upgrading.html @@ -15,7 +15,7 @@ - + @@ -52,6 +52,6 @@ most cases your base Wings version should match that of your Panel.

        <

        # Restart Process

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

        systemctl restart wings
         
        - +