> For the complete documentation index, see [llms.txt](https://docs-jupyter.davidjachochavez.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-jupyter.davidjachochavez.org/anaconda/jupyterhub-installation-and-configuration.md).

# 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 %}
