# JupyterHub Installation and Configuration

Obtain administrative rights by requesting root access:

```
sudo -i
```

Install the package for [JupyterHub](https://jupyterhub.readthedocs.io/en/stable/quickstart.html)

```
conda install -c conda-forge jupyterhub
```

Generate a JupyterHub configuration file in `/etc` by:

```
mkdir /etc/jupyterhub/
cd /etc/jupyterhub/
jupyterhub --generate-config
```

Use nano to edit the newly created configuration file:

```
nano /etc/jupyterhub/jupyterhub_config.py
```

Copy and paste the following into the configuration file:

```
# Allow Jupyter Lab as the default interface
c.Spawner.default_url = '/lab'

# Allow admin to access other users' accounts
c.JupyterHub.admin_access = True

# Specify JupyterHub administrators & user login
c.Authenticator.admin_users = {'admin1'}
c.Authenticator.allow_all = True

# Shutdown user servers on logout
c.JupyterHub.shutdown_on_logout = True

# Prevent the user-owned configuration files from being loaded
c.Spawner.disable_user_config = True
```

Use CTRL+O then enter to overwrite the document and CTRL+X to exit.

💡 For having access to the JupyterHub admin interface, at least *one* administrator has to be specified in the configuration file, e.g. `admin1`. Additional administrators can be assigned/removed from the JupyterHub admin interface by existing administrator.

Make JupyterHub a system service, so that JupyterHub will run at system startup and continue to run after the system administrator logs out. To do so, create a service file:

```
nano /etc/jupyterhub/jupyterhub.service
```

Copy and paste the following into the document as depicted below:

```
[Unit]
Description=JupyterHub
After=syslog.target network.target

[Service]
User=root
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/anaconda3/bin"
ExecStart=/usr/anaconda3/bin/jupyterhub --no-ssl -f /etc/jupyterhub/jupyterhub_config.py

[Install]
WantedBy=multi-user.target
```

![](/files/-MDGjje9NfyrFjW8ergk)

Use CTRL+O then enter to overwrite the document and CTRL+X to exit.

Link the newly created service file to the `/etc/systemd/system` directory:

```
ln -s /etc/jupyterhub/jupyterhub.service /etc/systemd/system/jupyterhub.service
```

Reload the system daemon and run JupyterHub as a system service:

```
systemctl daemon-reload
systemctl enable jupyterhub.service
systemctl start jupyterhub.service
```

Check JupyterHub status (optional):

```
systemctl status jupyterhub.service
```

💡 **Your JupyterHub server should be up and running at `http://<your instance IP address>:8000`.** Make sure that `:8000` is included in your address. See [Add a Custom Domain](/optional-add-a-custom-domain/adding-a-subdomain.md) to attach your JupyterHub to a registered domain name instead.

{% hint style="info" %}
You are running an unsecured instance of JupyterHub. For network security, see [below](/optional-github-authentication/add-github-authentication.md).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-jupyter.davidjachochavez.org/anaconda/jupyterhub-installation-and-configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
