> ## Documentation Index
> Fetch the complete documentation index at: https://anaconda.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# System requirements and preparation

## System requirements

The installer is a self-extracting binary that contains all of the necessary components to run JupyterHub services. Before you install JupyterHub onto your Linux server, make sure that it meets all the following requirements:

### System setup requirements

The following prerequisites must be in place before installation:

* Linux variant with `systemd` version 245 or later
* SELinux must be disabled or in `permissive` mode
* Kernel with `memory cgroups` and `CFS scheduling` enabled
* Root access for JupyterHub (for `systemd-run`)
* FQDN, DNS record, and TLS/SSL certificate

<Warning>
  Amazon Linux does not include `libxcrypt-compat`, which causes nginx services to error when starting.\
  If you receive a `libcrypt.so.1` error post installation, install the `libxcrypt-compat` package:

  ```sh theme={null}
  sudo yum install libxcrypt-compat
  ```
</Warning>

### Hardware requirements

Because all users share the same pool of resources on the server, hardware requirements for running JupyterHub vary depending on the number of users accessing the server at any one time. Use the following formulas to determine your hardware requirements:

* Recommended RAM = (maximum active users x maximum memory per user) + 1GB
* Recommended CPUs = (maximum active users x maximum CPU usage per user) + 20%
* Recommended disk storage = (total users x maximum disk usage per user) + 2 GB

Check available resources with:

```sh theme={null}
cat /proc/cpuinfo
cat /proc/meminfo
df -h
```

### Networking requirements

#### TLS/SSL

The JupyterHub integration requires TLS/SSL certificates to secure traffic. The installer includes a `DIY-SSL-CA` package to generate self-signed certificates if needed.

<Warning>
  If you are using third-party CA certificates, verify your SSL chain via `openssl`. The command must return `0` for user authentication to succeed.

  ```sh theme={null}
  # Replace <jupyterHostName> with your JupyterHub server domain
  # Replace <CA_CERT> with the path to your CA certificate
  openssl s_client -connect <jupyterHostName>:443 -CAfile <CA_CERT> -verify_return_error
  ```
</Warning>

#### DNS

DNS must be configured prior to installation to support HTTPS.

<Note>
  Add your JupyterHub server domain to `/etc/hosts` so the server is accessible via HTTPS:

  ```sh theme={null}
  # Replace <HOSTNAME> with your JupyterHub server domain
  echo "127.0.0.1 ${HOSTNAME}" >> /etc/hosts
  ```
</Note>

#### Firewall

Restrict inbound access to only required ports:

* `:443` nginx for HTTPS
* `:22` ssh (optional) for remote access

## System validation check

To validate that your system is ready for installation, run the validation check and compare the results against the above requirements:

```sh theme={null}
echo "=== System Information ==="
echo "Kernel Release and Processor Type:"
uname -a

echo "OS Release:"
cat /etc/os-release

echo "systemd Version:"
systemctl --version

echo "Memory Cgroups and CFS Scheduling:"
grep cgroup /proc/filesystems

echo "User ID:"
id -u

echo "Hostname (FQDN):"
hostname -f

echo "=== Hardware Requirements ==="
echo "CPU Info:"
cat /proc/cpuinfo

echo "Memory Info:"
cat /proc/meminfo

echo "Disk Space:"
df -h
```

After verifying all requirements have been met, proceed with [Installing JupyterHub](/psm-on-prem/6.8.0/admin/integrations/jupyterhub/install).
