documentation/panel/0.7/upgrade/0.6_to_0.7.html
2023-01-06 16:29:42 +00:00

89 lines
22 KiB
HTML

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Upgrading 0.6 to 0.7 | Pterodactyl</title>
<meta name="generator" content="VuePress 1.8.2">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
<link rel="mask-icon" href="/favicons/safari-pinned-tab.svg" color="#0e4688">
<link rel="manifest" href="/favicons/site.webmanifest">
<link rel="shortcut icon" href="/favicons/favicon.ico">
<meta name="description" content="Pterodactyl is an open-source game server management panel built with PHP, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers while exposing a beautiful and intuitive UI to end users.">
<meta name="msapplication-config" content="/favicons/browserconfig.xml">
<meta name="theme-color" content="#0e4688">
<link rel="preload" href="/assets/css/0.styles.b3d0dfa6.css" as="style"><link rel="preload" href="/assets/js/app.5a6d9118.js" as="script"><link rel="preload" href="/assets/js/4.17b22ac2.js" as="script"><link rel="preload" href="/assets/js/1.19e16341.js" as="script"><link rel="preload" href="/assets/js/61.ad708944.js" as="script"><link rel="prefetch" href="/assets/js/10.cdd4a61d.js"><link rel="prefetch" href="/assets/js/11.edf57bce.js"><link rel="prefetch" href="/assets/js/12.29206997.js"><link rel="prefetch" href="/assets/js/13.bd04c4ec.js"><link rel="prefetch" href="/assets/js/14.d448db4e.js"><link rel="prefetch" href="/assets/js/15.e88515bc.js"><link rel="prefetch" href="/assets/js/16.24317aa9.js"><link rel="prefetch" href="/assets/js/17.99a727ea.js"><link rel="prefetch" href="/assets/js/18.fcb158a9.js"><link rel="prefetch" href="/assets/js/19.a335f151.js"><link rel="prefetch" href="/assets/js/2.21e1a937.js"><link rel="prefetch" href="/assets/js/20.0d86a0bd.js"><link rel="prefetch" href="/assets/js/21.40b46144.js"><link rel="prefetch" href="/assets/js/22.f9353e9f.js"><link rel="prefetch" href="/assets/js/23.09b11a78.js"><link rel="prefetch" href="/assets/js/24.3db401dc.js"><link rel="prefetch" href="/assets/js/25.0d90b696.js"><link rel="prefetch" href="/assets/js/26.199e42e5.js"><link rel="prefetch" href="/assets/js/27.53b2955f.js"><link rel="prefetch" href="/assets/js/28.b1cca863.js"><link rel="prefetch" href="/assets/js/29.34880c0e.js"><link rel="prefetch" href="/assets/js/30.6cc47499.js"><link rel="prefetch" href="/assets/js/31.d561e4f4.js"><link rel="prefetch" href="/assets/js/32.5ec9cc12.js"><link rel="prefetch" href="/assets/js/33.8072b522.js"><link rel="prefetch" href="/assets/js/34.08d0de59.js"><link rel="prefetch" href="/assets/js/35.226da989.js"><link rel="prefetch" href="/assets/js/36.b9c41633.js"><link rel="prefetch" href="/assets/js/37.8e7964de.js"><link rel="prefetch" href="/assets/js/38.ea3ffaf8.js"><link rel="prefetch" href="/assets/js/39.5d85947d.js"><link rel="prefetch" href="/assets/js/40.a78ec0ad.js"><link rel="prefetch" href="/assets/js/41.738df04c.js"><link rel="prefetch" href="/assets/js/42.a8778d05.js"><link rel="prefetch" href="/assets/js/43.25886c53.js"><link rel="prefetch" href="/assets/js/44.1b22667c.js"><link rel="prefetch" href="/assets/js/45.14943dc6.js"><link rel="prefetch" href="/assets/js/46.0fcb43fb.js"><link rel="prefetch" href="/assets/js/47.3af19f15.js"><link rel="prefetch" href="/assets/js/48.b52bf3e1.js"><link rel="prefetch" href="/assets/js/49.8d6a6c8f.js"><link rel="prefetch" href="/assets/js/5.2366f5e0.js"><link rel="prefetch" href="/assets/js/50.e5e4cbbf.js"><link rel="prefetch" href="/assets/js/51.1e3a5853.js"><link rel="prefetch" href="/assets/js/52.5e2e1e53.js"><link rel="prefetch" href="/assets/js/53.aaf29ed5.js"><link rel="prefetch" href="/assets/js/54.5fc704a0.js"><link rel="prefetch" href="/assets/js/55.393a224a.js"><link rel="prefetch" href="/assets/js/56.3a4538a1.js"><link rel="prefetch" href="/assets/js/57.06958522.js"><link rel="prefetch" href="/assets/js/58.ed936067.js"><link rel="prefetch" href="/assets/js/59.7697fd60.js"><link rel="prefetch" href="/assets/js/6.92501184.js"><link rel="prefetch" href="/assets/js/60.401f2243.js"><link rel="prefetch" href="/assets/js/62.037b9f1e.js"><link rel="prefetch" href="/assets/js/63.bbf85631.js"><link rel="prefetch" href="/assets/js/64.58530ff1.js"><link rel="prefetch" href="/assets/js/65.95e6b666.js"><link rel="prefetch" href="/assets/js/66.38ba9f8f.js"><link rel="prefetch" href="/assets/js/67.d3caf7e1.js"><link rel="prefetch" href="/assets/js/68.6351c8cd.js"><link rel="prefetch" href="/assets/js/69.332eb050.js"><link rel="prefetch" href="/assets/js/7.c41300e2.js"><link rel="prefetch" href="/assets/js/70.5cc2ec6f.js"><link rel="prefetch" href="/assets/js/71.69398c3c.js"><link rel="prefetch" href="/assets/js/72.aeb7ce36.js"><link rel="prefetch" href="/assets/js/73.757eb6a0.js"><link rel="prefetch" href="/assets/js/74.7dd50107.js"><link rel="prefetch" href="/assets/js/75.a9fdb850.js"><link rel="prefetch" href="/assets/js/76.14e250e1.js"><link rel="prefetch" href="/assets/js/77.8717480c.js"><link rel="prefetch" href="/assets/js/8.c87d5fba.js"><link rel="prefetch" href="/assets/js/9.28a16f41.js">
<link rel="stylesheet" href="/assets/css/0.styles.b3d0dfa6.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div><div class="fixed h-12 w-full z-50 top-0"><div class="h-12 w-full bg-black flex items-center justify-center px-4"><p class="text-grey-lightest font-semibold">
Stand with Ukraine 🇺🇦 
<a href="https://www.savethechildren.org/us/where-we-work/ukraine" target="_blank" rel="noindex nofollow noopener" class="text-blue-lighter">Donate</a> <a href="https://razomforukraine.org/" target="_blank" rel="noindex nofollow noopener" class="text-blue-lighter">Today.</a></p></div></div> <div class="theme-container mt-12"><header class="nav"><div class="sidebar-button block md:hidden flex-no-shrink"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <div class="logo-container"><a href="/" class="home-link router-link-active"><img src="/logos/pterry.svg" class="logo"> <span class="site-name hidden md:inline can-hide">Pterodactyl</span></a></div> <div class="w-full"><div class="flex"><div class="search-box"><input aria-label="Search" placeholder="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links flex-no-shrink hidden md:flex"><div class="nav-item"><a href="/project/introduction.html" class="nav-link">Documentation
</a></div><div class="nav-item"><a href="/community/about.html" class="nav-link">Community Guides
</a></div><div class="nav-item"><a href="https://discord.gg/pterodactyl" target="_blank" rel="noopener noreferrer" class="nav-link external">
Get Help
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://dashflo.net/docs/api/pterodactyl/v1/" target="_blank" rel="noopener noreferrer" class="nav-link external">
API
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <div class="nav-item"><a href="https://github.com/pterodactyl/panel" target="_blank" rel="noopener noreferrer" class="nav-link">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div></nav></div></div></header> <div class="sidebar-mask"></div> <div class="sidebar"><nav class="nav-links flex-no-shrink block md:hidden"><div class="nav-item"><a href="/project/introduction.html" class="nav-link">Documentation
</a></div><div class="nav-item"><a href="/community/about.html" class="nav-link">Community Guides
</a></div><div class="nav-item"><a href="https://discord.gg/pterodactyl" target="_blank" rel="noopener noreferrer" class="nav-link external">
Get Help
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://dashflo.net/docs/api/pterodactyl/v1/" target="_blank" rel="noopener noreferrer" class="nav-link external">
API
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <div class="nav-item"><a href="https://github.com/pterodactyl/panel" target="_blank" rel="noopener noreferrer" class="nav-link">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div></nav> <ul class="sidebar-links"><li><div class="sidebar-group first"><p class="sidebar-heading open"><span>Project Information</span> <!----> <!----></p> <ul class="sidebar-group-items"><li><a href="/project/introduction.html" class="sidebar-link">Introduction</a></li><li><a href="/project/about.html" class="sidebar-link">About</a></li><li><a href="/project/terms.html" class="sidebar-link">Terminology</a></li><li><a href="/project/community.html" class="sidebar-link">Community Standards</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Panel</span> <!----> <div tabindex="0" class="version-select custom-select float-right"><div class="selected"><div class="inline-block">
1.11
<span class="rounded-full ml-2 text-green-dark">current</span></div> <span class="arrow"></span></div> <div class="items hidden"><div class="item"><div class="inline-block">
1.11
<span class="rounded-full ml-2 text-green-dark">current</span></div></div></div></div></p> <ul class="sidebar-group-items"><li><a href="/panel/1.0/getting_started.html" class="sidebar-link">Getting Started</a></li><li><a href="/panel/1.0/webserver_configuration.html" class="sidebar-link">Webserver Configuration</a></li><li><a href="/panel/1.0/additional_configuration.html" class="sidebar-link">Additional Configuration</a></li><li><a href="/panel/1.0/updating.html" class="sidebar-link">Updating the Panel</a></li><li><a href="/panel/1.0/troubleshooting.html" class="sidebar-link">Troubleshooting</a></li><li><a href="/panel/1.0/legacy_upgrade.html" class="sidebar-link">Legacy Upgrades</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Wings</span> <!----> <div tabindex="0" class="version-select custom-select float-right"><div class="selected"><div class="inline-block">
1.11
<span class="rounded-full ml-2 text-green-dark">current</span></div> <span class="arrow"></span></div> <div class="items hidden"><div class="item"><div class="inline-block">
1.11
<span class="rounded-full ml-2 text-green-dark">current</span></div></div></div></div></p> <ul class="sidebar-group-items"><li><a href="/wings/1.0/installing.html" class="sidebar-link">Installing Wings</a></li><li><a href="/wings/1.0/upgrading.html" class="sidebar-link">Upgrading Wings</a></li><li><a href="/wings/1.0/migrating.html" class="sidebar-link">Migrating to Wings</a></li><li><a href="/wings/1.0/configuration.html" class="sidebar-link">Additional Configuration</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Tutorials</span> <!----> <!----></p> <ul class="sidebar-group-items"><li><a href="/tutorials/mysql_setup.html" class="sidebar-link">Setting up MySQL</a></li><li><a href="/tutorials/creating_ssl_certificates.html" class="sidebar-link">Creating SSL Certificates</a></li></ul></div></li><li><div class="sidebar-group"><p class="sidebar-heading"><span>Guides</span> <!----> <!----></p> <ul class="sidebar-group-items"><li><a href="/guides/mounts.html" class="sidebar-link">Using Mounts</a></li></ul></div></li></ul> </div> <div class="page"> <div class="content content__default"><h1 id="upgrading-0-6-to-0-7"><a href="#upgrading-0-6-to-0-7" class="header-anchor">#</a> Upgrading 0.6 to 0.7</h1> <div class="custom-block danger"><p class="custom-block-title">This Version is End-of-Life</p> <p>This documentation is for <strong>end-of-life software</strong> which does not recieve any security updates or support
from the community. This documentation has been left accessible for historial reasons.</p> <p>You should be installing and using <a href="/panel/1.0/getting_started.html">Pterodactyl Panel 1.0</a> in production environments.</p></div> <h2 id="fetch-updated-files"><a href="#fetch-updated-files" class="header-anchor">#</a> Fetch Updated Files</h2> <p>The first step in the update process is to download the new panel files from GitHub. The command below will download
the release archive for the most recent version of Pterodactyl and save it in the current directory. Now is a good time
to ensure that you're in the <code>/var/www/pterodactyl</code> directory as the command below will automatically unpack in whatever
directory you are currently in.</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token function">curl</span> -L https://github.com/pterodactyl/panel/releases/download/v0.7.19/panel.tar.gz <span class="token operator">|</span> <span class="token function">tar</span> --strip-components<span class="token operator">=</span><span class="token number">1</span> -xzv
</code></pre></div><p>Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid
any webserver related errors.</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token function">chmod</span> -R <span class="token number">755</span> storage/* bootstrap/cache
</code></pre></div><h2 id="clear-compiled-assets"><a href="#clear-compiled-assets" class="header-anchor">#</a> Clear Compiled Assets</h2> <p>Previous versions of Pterodactyl attempted to cache your configuration file for speed and performance enhancements. This
ended up just causing more headaches with minimal improvements in performance, so we decided to stop doing that. Running
the command below will clear the cached files for you so we can continue with upgrading.</p> <div class="custom-block tip"><p class="custom-block-title">TIP</p> <p>You probably only need to run this command once when upgrading from <code>0.6.X</code>. Once you're upgraded we don't cache the configuration
file so there is no reason to remove anything.</p></div> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token function">rm</span> -rf bootstrap/cache/*
</code></pre></div><p>Once the configuration cache is removed, you'll need to clear the template cache to ensure users get the most recent
templates.</p> <div class="language-bash extra-class"><pre class="language-bash"><code>php artisan view:clear
</code></pre></div><h2 id="update-dependencies"><a href="#update-dependencies" class="header-anchor">#</a> Update Dependencies</h2> <p>After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,
simply run the commands below and follow any prompts.</p> <div class="language-bash extra-class"><pre class="language-bash"><code>composer <span class="token function">install</span> --no-dev --optimize-autoloader
</code></pre></div><h2 id="update-environment"><a href="#update-environment" class="header-anchor">#</a> Update Environment</h2> <p>These scripts will display your current values in brackets. To keep the current values simply press enter and it will
continue without making any modifications.</p> <div class="custom-block tip"><p class="custom-block-title">TIP</p> <p>We've changed our recommended cache driver to be Redis, rather than Memcached. If you're using Memcached you can
continue doing so with no problems, however moving forward our installation documentation will only mention Redis.</p></div> <div class="language-bash extra-class"><pre class="language-bash"><code>php artisan p:environment:setup
php artisan p:environment:mail
php artisan p:environment:database
</code></pre></div><h2 id="database-updates"><a href="#database-updates" class="header-anchor">#</a> Database Updates</h2> <div class="custom-block warning"><p class="custom-block-title">Backup your databases</p> <p>The upgrade from <code>0.6</code> to <code>v0.7</code> includes some rather significant database changes. While the migration utility is
able to handle everything for you, we still suggest taking a backup of your database before proceeding — just incase.</p></div> <div class="custom-block warning"><p class="custom-block-title">WARNING</p> <p>Running <code>db:seed</code> below will overwrite any changes you made to core Pterodactyl Nests, Eggs, or Egg Variables! This is
unavoidable, and this seeder must be run. To avoid this in the future, please create custom nests, or create custom
eggs for game variations.</p></div> <div class="language-bash extra-class"><pre class="language-bash"><code>php artisan migrate --force
php artisan db:seed --force
</code></pre></div><h2 id="cleanup-api-keys"><a href="#cleanup-api-keys" class="header-anchor">#</a> Cleanup API Keys</h2> <p>A significant change is introduced in 0.7.0 that changes how API keys are used, stored, and validated. Due to this
change, all previously created keys will no longer function. In order to keep things cleaned up you'll want to remove
these orphaned keys. To do so, run the command below.</p> <div class="language-bash extra-class"><pre class="language-bash"><code>php artisan p:migration:clean-orphaned-keys
</code></pre></div><p>Don't forget to create new keys for yourself, as well as let all of your users know they'll need to do so as well.</p> <h2 id="set-permissions"><a href="#set-permissions" class="header-anchor">#</a> Set Permissions</h2> <p>The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this
is <code>www-data</code> but can vary from system to system — sometimes being <code>nginx</code>, <code>apache</code>, or even <code>nobody</code>.</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token comment"># If using NGINX or Apache (not on CentOS):</span>
<span class="token function">chown</span> -R www-data:www-data *
<span class="token comment"># If using NGINX on CentOS:</span>
<span class="token function">chown</span> -R nginx:nginx *
<span class="token comment"># If using Apache on CentOS</span>
<span class="token function">chown</span> -R apache:apache *
</code></pre></div></div> <div class="page-edit"><div class="edit-link"><a href="https://github.com/pterodactyl/documentation/edit/master/panel/0.7/upgrade/0.6_to_0.7.md" target="_blank" rel="noopener noreferrer">Help us improve this page.</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----></div> <!----> </div></div></div><div class="global-ui"></div></div>
<script src="/assets/js/app.5a6d9118.js" defer></script><script src="/assets/js/4.17b22ac2.js" defer></script><script src="/assets/js/1.19e16341.js" defer></script><script src="/assets/js/61.ad708944.js" defer></script>
</body>
</html>