blob: 92c21251917e40110cdfe7a7f1f823bd4b4a8ae9 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Traffic Ops - Installing &mdash; Traffic Control 2.2-dev documentation </title>
<link rel="shortcut icon" href="../../_static/favicon.ico"/>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/theme_overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../genindex.html"/>
<link rel="search" title="Search" href="../../search.html"/>
<link rel="top" title="Traffic Control 2.2-dev documentation" href="../../index.html"/>
<link rel="up" title="Administrator’s Guide" href="../index.html"/>
<link rel="next" title="Traffic Ops - Default Profiles" href="default_profiles.html"/>
<link rel="prev" title="Administrator’s Guide" href="../index.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="/" class="icon icon-home"> Traffic Control
<img src="../../_static/tc_logo_c_only.png" class="logo" />
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../basics/index.html">CDN Basics</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../basics/content_delivery_networks.html">Content Delivery Networks</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../basics/http_11.html">HTTP 1.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../basics/caching_proxies.html">Caching Proxies</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../basics/cache_revalidation.html">Cache Control Headers and Revalidation</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../overview/index.html">Traffic Control Overview</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../overview/introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../overview/traffic_ops.html">Traffic Ops</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../overview/traffic_portal.html">Traffic Portal</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../overview/traffic_router.html">Traffic Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../overview/traffic_monitor.html">Traffic Monitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../overview/traffic_stats.html">Traffic Stats</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../overview/traffic_vault.html">Traffic Vault</a></li>
</ul>
</li>
</ul>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Administrator’s Guide</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">Traffic Ops - Installing</a></li>
<li class="toctree-l2"><a class="reference internal" href="default_profiles.html">Traffic Ops - Default Profiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="migration_from_10_to_20.html">Traffic Ops - Migrating from 1.x to 2.x</a></li>
<li class="toctree-l2"><a class="reference internal" href="migration_from_20_to_22.html">Traffic Ops - Migrating from 2.0 to 2.2</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration.html">Traffic Ops - Configuring</a></li>
<li class="toctree-l2"><a class="reference internal" href="using.html">Traffic Ops - Using</a></li>
<li class="toctree-l2"><a class="reference internal" href="extensions.html">Managing Traffic Ops Extensions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_portal/installation.html">Traffic Portal Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_portal/usingtrafficportal.html">Traffic Portal - Using</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_monitor.html">Traffic Monitor Administration (Legacy)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_monitor_golang.html">Traffic Monitor Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_router.html">Traffic Router Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_stats.html">Traffic Stats Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_server.html">Traffic Server Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../traffic_vault.html">Traffic Vault Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../quick_howto/index.html">Quick How To Guides</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../development/index.html">Developer’s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../development/building.html">Building Traffic Control</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../development/traffic_ops.html">Traffic Ops</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../development/traffic_portal.html">Traffic Portal</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../development/traffic_router.html">Traffic Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../development/traffic_monitor.html">Traffic Monitor Golang</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../development/traffic_stats.html">Traffic Stats</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../api/index.html">APIs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../api/traffic_ops_api.html">API Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../api/routes.html">API Routes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../api/v11/index.html">API 1.1 Reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../api/v12/index.html">API 1.2 Reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../api/v13/index.html">API 1.3 Reference</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../faq/general.html">General</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq/development.html">Development</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq/administration.html">Running a Traffic Control CDN</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">Traffic Control</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html">Traffic Control 2.2-dev</a> &raquo;</li>
<li><a href="../index.html">Administrator’s Guide</a> &raquo;</li>
<li>Traffic Ops - Installing</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/admin/traffic_ops/installation.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="default_profiles.html" class="btn btn-neutral float-right" title="Traffic Ops - Default Profiles">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="../index.html" class="btn btn-neutral" title="Administrator’s Guide"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<div role="main" class="document">
<div class="section" id="traffic-ops-installing">
<span id="rl-to-install"></span><span id="index-0"></span><h1>Traffic Ops - Installing<a class="headerlink" href="#traffic-ops-installing" title="Permalink to this headline"></a></h1>
<div class="section" id="system-requirements">
<h2>System Requirements<a class="headerlink" href="#system-requirements" title="Permalink to this headline"></a></h2>
<p>The user must have the following for a successful minimal install:</p>
<ul class="simple">
<li>CentOS 7</li>
<li>2 VMs with at least 2 vCPUs, 4GB RAM, 20 GB disk space each</li>
<li>Access to Centos Base and epel repositories</li>
<li>Access to <a class="reference external" href="http://www.cpan.org/">The Comprehensive Perl Archive Network (CPAN)</a></li>
</ul>
<p>As of version 2.0 only Postgres is supported as the database. This documentation assumes CentOS 7.2 and Postgresql 9.6.3 for a production install.</p>
</div>
<div class="section" id="navigating-the-install">
<h2>Navigating the Install<a class="headerlink" href="#navigating-the-install" title="Permalink to this headline"></a></h2>
<p>To begin the install:</p>
<ol class="arabic simple">
<li>Install Postgres</li>
</ol>
<blockquote>
<div><p>For a production install it is best to install postgres on it’s own server/VM. To install postgres, on the postgres host (pg)</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pg-$ sudo su -
pg-# yum -y update
pg-# yum -y install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
pg-# yum -y install postgresql96-server
pg-$ su - postgres
pg-$ /usr/pgsql-9.6/bin/initdb -A md5 -W #-W forces the user to provide a superuser (postgres) password
</pre></div>
</div>
<p>Edit <code class="docutils literal notranslate"><span class="pre">/var/lib/pgsql/9.6/data/pg_hba.conf</span></code> to allow your traffic ops app server access. For example if you are going to install traffic ops on <code class="docutils literal notranslate"><span class="pre">99.33.99.1</span></code> add:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>host all all 99.33.99.1/32 md5
</pre></div>
</div>
<p>to the appropriate section of this file. Edit the <code class="docutils literal notranslate"><span class="pre">/var/lib/pgsql/9.6/data/postgresql.conf</span></code> file to add the approriate listen_addresses or <code class="docutils literal notranslate"><span class="pre">listen_addresses</span> <span class="pre">=</span> <span class="pre">'*'</span></code>, set <code class="docutils literal notranslate"><span class="pre">timezone</span> <span class="pre">=</span> <span class="pre">'UTC'</span></code>, and start the database:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pg-$ exit
pg-# systemctl enable postgresql-9.6
pg-# systemctl start postgresql-9.6
pg-# systemctl status postgresql-9.6
</pre></div>
</div>
</div></blockquote>
<ol class="arabic" start="2">
<li><p class="first">Build Traffic Ops</p>
<p>Build a Traffic Ops rpm using the instructions under the <a class="reference internal" href="../../development/building.html#dev-building"><span class="std std-ref">Building Traffic Control</span></a> page.</p>
</li>
<li><p class="first">Install Postgresql</p>
</li>
</ol>
<blockquote>
<div><p>Install the postgresql 9.6 yum repository access.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>to-$ sudo su -
to-# yum -y install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
</pre></div>
</div>
</div></blockquote>
<ol class="arabic" start="4">
<li><p class="first">Install the rpm built in step 2.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>to-# yum -y install ./dist/traffic_ops-2.0.0-xxxx.yyyyyyy.el7.x86_64.rpm
</pre></div>
</div>
</li>
</ol>
<blockquote>
<div><p>Install some additional packages that it depends on that were not installed as dependecies in the previous step (these are for the 2.0.0 install, this may change, but the pre-installs won’t hurt):</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>to-# yum -y install git
to-# wget -q https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
to-# tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
to-# PATH=$PATH:/usr/local/go/bin # go bins are needed in the path for postinstall
to-# go get bitbucket.org/liamstask/goose/cmd/goose
</pre></div>
</div>
<p>At this point you should be able to login to the database from the <code class="docutils literal notranslate"><span class="pre">to</span></code> host to the <code class="docutils literal notranslate"><span class="pre">pg</span></code> host like:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>to-# psql -h 99.33.99.1 -U postgres
Password for user postgres:
psql (9.6.3)
Type &quot;help&quot; for help.
postgres=#
</pre></div>
</div>
<p>Use this connectivity to create the user and database. In this example, we use user: <code class="docutils literal notranslate"><span class="pre">traffic_ops</span></code>, password: <code class="docutils literal notranslate"><span class="pre">tcr0cks</span></code>, database: <code class="docutils literal notranslate"><span class="pre">traffic_ops</span></code>:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>to-# psql -U postgres -h 99.33.99.1 -c &quot;CREATE USER traffic_ops WITH ENCRYPTED PASSWORD &#39;tcr0cks&#39;;&quot;
Password for user postgres:
CREATE ROLE
to-# createdb traffic_ops --owner traffic_ops -U postgres -h 99.33.99.1
Password:
to-#
</pre></div>
</div>
<p>Now, run the following command as root: <code class="docutils literal notranslate"><span class="pre">/opt/traffic_ops/install/bin/postinstall</span></code></p>
<p>The postinstall will first get all packages needed from CPAN. This may take a while, expect up to 30 minutes on the first install.
If there are any prompts in this phase, please just answer with the defaults (some CPAN installs can prompt for install questions).</p>
<p>When this phase is complete, you will see:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Complete! Modules were installed into /opt/traffic_ops/app/local
</pre></div>
</div>
<p>Some additional files will be installed, and then it will proceed with the next phase of the install, where it will ask you about the local environment for your CDN. Please make sure you remember all your answers and the database answers match the database information previously used to create the database.</p>
<p>Example output:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>===========/opt/traffic_ops/app/conf/production/database.conf===========
Database type [Pg]:
Database type: Pg
Database name [traffic_ops]:
Database name: traffic_ops
Database server hostname IP or FQDN [localhost]: 99.33.99.1
Database server hostname IP or FQDN: 99.33.99.1
Database port number [5432]:
Database port number: 5432
Traffic Ops database user [traffic_ops]:
Traffic Ops database user: traffic_ops
Password for Traffic Ops database user:
Re-Enter Password for Traffic Ops database user:
Writing json to /opt/traffic_ops/app/conf/production/database.conf
Database configuration has been saved
===========/opt/traffic_ops/app/db/dbconf.yml===========
Database server root (admin) user [postgres]:
Database server root (admin) user: postgres
Password for database server admin:
Re-Enter Password for database server admin:
Download Maxmind Database? [yes]:
Download Maxmind Database?: yes
===========/opt/traffic_ops/app/conf/cdn.conf===========
Generate a new secret? [yes]:
Generate a new secret?: yes
Number of secrets to keep? [10]:
Number of secrets to keep?: 10
Not setting up ldap
===========/opt/traffic_ops/install/data/json/users.json===========
Administration username for Traffic Ops [admin]:
Administration username for Traffic Ops: admin
Password for the admin user:
Re-Enter Password for the admin user:
Writing json to /opt/traffic_ops/install/data/json/users.json
===========/opt/traffic_ops/install/data/json/openssl_configuration.json===========
Do you want to generate a certificate? [yes]:
Country Name (2 letter code): US
State or Province Name (full name): CO
Locality Name (eg, city): Denver
Organization Name (eg, company): Super CDN, Inc
Organizational Unit Name (eg, section):
Common Name (eg, your name or your server&#39;s hostname):
RSA Passphrase:
Re-Enter RSA Passphrase:
===========/opt/traffic_ops/install/data/json/profiles.json===========
Traffic Ops url [https://localhost]:
Traffic Ops url: https://localhost
Human-readable CDN Name. (No whitespace, please) [kabletown_cdn]: blue_cdn
Human-readable CDN Name. (No whitespace, please): blue_cdn
DNS sub-domain for which your CDN is authoritative [cdn1.kabletown.net]: blue-cdn.supercdn.net
DNS sub-domain for which your CDN is authoritative: blue-cdn.supercdn.net
Writing json to /opt/traffic_ops/install/data/json/profiles.json
Downloading Maxmind data
--2017-06-11 15:32:41-- http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
Resolving geolite.maxmind.com (geolite.maxmind.com)... 2400:cb00:2048:1::6810:262f, 2400:cb00:2048:1::6810:252f, 104.16.38.47, ...
Connecting to geolite.maxmind.com (geolite.maxmind.com)|2400:cb00:2048:1::6810:262f|:80... connected.
... much SQL output skipped
Starting Traffic Ops
Restarting traffic_ops (via systemctl): [ OK ]
Waiting for Traffic Ops to restart
Success! Postinstall complete.
to-# ifconfig
</pre></div>
</div>
<p>Explanation of the information that needs to be provided:</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="36%" />
<col width="64%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Field</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>Database type</td>
<td>Pg</td>
</tr>
<tr class="row-odd"><td>Database name</td>
<td>The name of the database Traffic Ops uses to store the configuration information</td>
</tr>
<tr class="row-even"><td>Database server hostname IP or FQDN</td>
<td>The hostname of the database server</td>
</tr>
<tr class="row-odd"><td>Database port number</td>
<td>The database port number</td>
</tr>
<tr class="row-even"><td>Traffic Ops database user</td>
<td>The username Traffic Ops will use to read/write from the database</td>
</tr>
<tr class="row-odd"><td>Password for traffic ops</td>
<td>The password for the above database user</td>
</tr>
<tr class="row-even"><td>Database server root (admin) user name</td>
<td>Privileged database user that has permission to create the database and user for Traffic Ops</td>
</tr>
<tr class="row-odd"><td>Database server root (admin) user password</td>
<td>The password for the above privileged database user</td>
</tr>
<tr class="row-even"><td>Traffic Ops url</td>
<td>The URL to connect to this instance of Traffic Ops, usually <a class="reference external" href="https:/">https:/</a>/&lt;traffic ops host FQDN&gt;/</td>
</tr>
<tr class="row-odd"><td>Human-readable CDN Name</td>
<td>The name of the first CDN traffic Ops will be managing</td>
</tr>
<tr class="row-even"><td>DNS sub-domain for which your CDN is authoritative</td>
<td>The DNS domain that will be delegated to this Traffic Control CDN</td>
</tr>
<tr class="row-odd"><td>Administration username for Traffic Ops</td>
<td>The Administration (highest privilege) Traffic Ops user to create;
use this user to login for the first time and create other users</td>
</tr>
<tr class="row-even"><td>Password for the admin user</td>
<td>The password for the above user</td>
</tr>
</tbody>
</table>
</div></blockquote>
</div></blockquote>
<p>Traffic Ops is now installed!</p>
<p><strong>To complete the Traffic Ops Setup See:</strong> <a class="reference internal" href="default_profiles.html#rl-to-default-profiles"><span class="std std-ref">Traffic Ops - Default Profiles</span></a></p>
<div class="section" id="upgrading-traffic-ops">
<h3>Upgrading Traffic Ops<a class="headerlink" href="#upgrading-traffic-ops" title="Permalink to this headline"></a></h3>
<p>To upgrade:</p>
<ol class="arabic simple">
<li>Enter the following command:<code class="docutils literal notranslate"><span class="pre">service</span> <span class="pre">traffic_ops</span> <span class="pre">stop</span></code></li>
<li>Enter the following command:<code class="docutils literal notranslate"><span class="pre">yum</span> <span class="pre">upgrade</span> <span class="pre">traffic_ops</span></code></li>
<li>Enter the following command from the /opt/traffic_ops/app directory:
<code class="docutils literal notranslate"><span class="pre">PERL5LIB=/opt/traffic_ops/app/lib:/opt/traffic_ops/app/local/lib/perl5</span> <span class="pre">./db/admin.pl</span> <span class="pre">--env</span> <span class="pre">production</span> <span class="pre">upgrade</span></code></li>
<li>See <a class="reference internal" href="#rl-to-install"><span class="std std-ref">Traffic Ops - Installing</span></a> to run postinstall.</li>
<li>Enter the following command:<code class="docutils literal notranslate"><span class="pre">service</span> <span class="pre">traffic_ops</span> <span class="pre">start</span></code></li>
</ol>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="default_profiles.html" class="btn btn-neutral float-right" title="Traffic Ops - Default Profiles">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="../index.html" class="btn btn-neutral" title="Administrator’s Guide"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book">Apache Traffic Control (Incubating)</span>
v:
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Versions</dt>
<dd><a href="/docs/master/">latest</a></dd>
<dd><a href="/docs/2.0/">2.0</a></dd>
<dd><a href="/docs/1.8.1/">1.8</a></dd>
<dd><a href="/docs/1.7.0/">1.7</a></dd>
</dl>
<hr/>
Free document hosting provided by <a href="http://www.readthedocs.org">Read the Docs</a>.
</div>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../',
VERSION:'2.2-dev',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>