=========================
Installation Instructions
=========================

Anaconda Enterprise Notebook (AEN) is a Python data analysis environment
from Continuum Analytics. Accessed through a browser, Anaconda
Enterprise Notebooks is a ready-to-use, powerful, fully-configured
Python analytics environment. We believe that programmers, scientists,
and analysts should spend their time analyzing data, not working to set
up a system. Data should be shareable, and analysis should be
repeatable. Reproducibility should extend beyond just code to include
the runtime environment, configuration, and input data.

This installation guide walks through the steps needed to install a
basic Anaconda Enterprise Notebook system comprised of the front-end
server, gateway and compute machines.

If you have any questions about the instructions, please contact your sales 
representative or Priority Support team, if applicable, for additional 
assistance.

System overview
===============

Anaconda Enterprise Notebooks is designed to run on a single box or as a
distributed system with multiple boxes. There are three primary
components that need to be deployed and configured:

-  Server: the entry point to Anaconda Enterprise Notebooks, managing
   users and projects
-  Gateway: a proxy service to handle URL and port mapping to ancillary
   services.
-  Compute Node: each compute node in the Anaconda Enterprise Notebooks system requires a
   *Compute Launcher* service to mediate access to the *Server* and
   *Gateway*

|image1|

Since Anaconda Enterprise Notebooks is web-based, it uses the standard
HTTP port 80 or HTTPS port 443.

Organizationally, each Anaconda Enterprise Notebooks installation has
exactly one *Server* instance. One or more *Data Centers* can be
associated with the *Server*. One or more *Compute Nodes* can be
associated with each *Data Center*.

The Anaconda Enterprise Notebooks (AEN) platform consists of three main
service groups: *AEN Server*, *AEN Gateway*, and *AEN Compute*, below
referred to simply as *Server*, *Gateway*, and *Compute* nodes
respectively. Each Anaconda Enterprise Notebooks deployment will have
only one *Server*, but possibly multiple *Gateways*, and then every host
that can run Anaconda Enterprise Notebooks processes will require the
*Compute Launcher* service to be running on it.

For example, a Anaconda Enterprise Notebooks deployment with 2
*Gateways*, where one *Gateway* had a cluster of 20 physical computers,
and the second *Gateway* had 30 virtual machines would have the
following complement of services installed and running:

::

    1  AEN Server instance
    2  AEN Gateway instances
    50 AEN Compute instances (20 + 30)

Anaconda Enterprise Notebooks users interact with the system
predominantly through *Projects*. Projects are associated with a set of
*Compute Nodes* (and therefore with one particular *Gateway*), and have
a *Team* of users who can access the *Project*, including one *Owner*,
which is the user that created the *Project*. A *Project* also includes
a set of *conda environments* and *Apps* that are available to all the
members of the *Team*.

Installers
==========

The Anaconda Enterprise Notebooks installers are available only to paid
customers. If you are interested in a demonstration of Anaconda
Enterprise Notebooks, please `contact
us <https://www.continuum.io/contact-us>`__.

Components
==========

Server
------

The *Server* component is responsible for login, accounts, admin,
project creation and management and interfacing with the database.
*Server* is the main entry point for all users. It handles setting up
projects and ensuring users are sent to the correct *Gateway* for a
given *Project*.

Anaconda Enterprise Notebooks uses *MongoDB* for its internal data
persistency. This is typically run on the same host as the *Server* but
can also be deployed on a separate host.

The *Server* uses *nginx* for handling the user-facing web interface.
*nginx* acts as a request proxy. The actual *Server* web-process runs on
a high numbered port listening only on ``localhost``, and *nginx*
forwards requests there. The *nginx* server is also responsible for
static content.

Gateway
-------

The *Gateway* provides a single access point to a set of *Compute
Nodes*, and acts as a *proxy service* to manage authorization and
mapping of URLs and ports to services that are running on *Compute
Nodes*, thus providing a consistent uniform interface for the user.

Compute node
------------

*Compute Nodes* are where *Apps* (such as Jupyter Notebook
and Workbench) actually run. These are also the hosts that a user would
see in a *terminal session* or if they used *SSH* to access the node. It
is where all user-visible programs run. Each *Project* is associated
with one or more *Compute Nodes*, and these in turn are part of a single
*Gateway*.

Distributed install
===================

In a distributed install the *Server* and *Gateway* run on separate
hosts.

Single-box install
==================

Both the *Server* and the *Gateway* need separate external ports since
they are independent services that are running on the same host in the
*single-box* installation.

**Both port 80 and port 8089 must be open on the firewall for a
single-box install**

The *Compute* service receives connections only from the *Gateway* and
the *Server*, and typically runs on port 80 or port 443.

.. toctree::
   :maxdepth: 2

   installation
   customization
   uninstall
   installation_update
   ldap
   ssl
   sso
   release


.. |image1| image:: img/aen-install-network-diagram.png
