Embedded Cluster Installation

This guide walks through deploying JuliaHub as a self-managed installation on a single Linux machine using the Replicated Embedded Cluster installer. The installer provisions a Kubernetes cluster automatically — no existing cluster or Kubernetes expertise is required.

Package Server Only

The Embedded Cluster installation currently provides the JuliaHub package server functionality only. It does not yet include compute (batch jobs, applications, etc.). Compute support is planned for a future release.

Prerequisites

Before starting, ensure you have the following:

Hostname

Decide on a hostname for your JuliaHub installation (e.g. juliahub.example.com). You will need to create DNS records after the installation is complete, so the hostname does not need to resolve yet, but it must be decided now as it is baked into the TLS certificate and configuration.

TLS Certificate

Obtain a TLS certificate and private key in PEM format. The certificate must cover the following domains:

  • <hostname> — the main platform URL
  • docs.<hostname> — generated Julia package documentation

You will upload this certificate through the Admin Console during configuration.

Replicated License

JuliaHub self-managed installations are distributed through Replicated. Contact your JuliaHub sales representative to obtain:

  • A license file (license.yaml)
  • A license ID

Initial User Credentials

JuliaHub will provide initial admin credentials for your installation.

Host Machine

A Linux machine (physical or virtual) with:

RequirementMinimum
CPU8 cores
RAM32 GB
Disk200 GB
OSModern Linux (Amazon Linux 2023, Ubuntu 22.04+, RHEL 9+)
NetworkOutbound internet access (see Air-Gapped Installation if restricted)

The machine must have ports 80, 443, and 30000 available. Port 30000 is used by the Replicated Admin Console.

Installation

1. Download the Installer

On the host machine (or a workstation with access to it), download the installer using the license ID provided by JuliaHub:

curl -f "https://replicated.app/embedded/juliahub/production" \
  -H "Authorization: <license-id>" \
  -o juliahub.tgz

2. Run the Installer

On the host machine, extract and run the installer:

tar zxvf juliahub.tgz
sudo ./juliahub install --license license.yaml
Note

If the host machine accesses the internet through an HTTP proxy, you must set the proxy environment variables before running the installer. See the HTTP Proxy section for details.

The installer will prompt you to set a password for the Admin Console, then provision a Kubernetes cluster and deploy the base infrastructure. This takes approximately 10–15 minutes.

3. Configure via the Admin Console

Once the installer completes, it prints a URL for the Admin Console:

http://<host-ip>:30000

Open this URL in your browser and log in with the password you set during installation. The Admin Console walks you through configuring JuliaHub:

  1. Hostname — enter your chosen hostname
  2. TLS Certificates — upload your fullchain.pem and privkey.pem
  3. Storage — the embedded installation uses host-path storage by default, which is appropriate for single-machine deployments
  4. Database — the embedded PostgreSQL database is pre-configured
  5. Preflight Checks — the console runs automated checks to verify the host meets all requirements

After completing the configuration, the Admin Console deploys JuliaHub. This takes approximately 15–20 minutes as container images are pulled and services start up.

See the Replicated Embedded Cluster documentation for full details on the Admin Console.

DNS Configuration

Get the IP address of the host machine, then create the following DNS records:

RecordTypeValue
<hostname>A<host-ip>
docs.<hostname>A<host-ip>
Warning

DNS propagation may take time depending on your DNS provider. JuliaHub will not be accessible until these records resolve.

Verify the Installation

Open https://<hostname> in your browser. You should see the JuliaHub login page.

Air-Gapped Installation

For machines without internet access, the installation can be performed fully offline. You will need an internet-connected workstation to download the installer bundle.

1. Download the Air-Gap Bundle

On your internet-connected workstation, download the air-gap bundle using the license ID provided by JuliaHub:

curl -f "https://replicated.app/embedded/juliahub/production?airgap=true" \
  -H "Authorization: <license-id>" \
  -o juliahub.tgz

The air-gap bundle includes both the installer and all required container images.

2. Transfer Files to the Host

Transfer the bundle and license file to the air-gapped machine:

scp juliahub.tgz license.yaml user@<host>:/tmp/

3. Run the Installer

On the air-gapped machine:

cd /tmp
tar zxvf juliahub.tgz
sudo ./juliahub install --license license.yaml

After the installer completes, configure JuliaHub through the Admin Console as described in Step 3 above.

HTTP Proxy

If the host machine accesses the internet through an HTTP proxy, you must configure proxy settings in two places.

Installer

The ./juliahub install command needs the standard proxy environment variables set so it can download container images and reach external services. Pass them through sudo with the --preserve-env flag:

sudo --preserve-env=http_proxy,https_proxy,no_proxy \
  ./juliahub install --license license.yaml

Admin Console

The Admin Console configuration includes fields for proxy settings:

  • HTTP Proxy — proxy URL (e.g. http://proxy-host:3128)
  • HTTPS Proxy — proxy URL for HTTPS traffic
  • No Proxy — comma-separated list of domains to bypass the proxy

If the proxy performs TLS interception, you must also provide the proxy's CA certificate. The Admin Console has a field for uploading additional trusted CA certificates.

Upgrading

Upgrades are managed through the Admin Console at http://<host-ip>:30000. The Admin Console checks for new versions automatically and allows one-click upgrades that update both the application and the underlying Kubernetes cluster.

Next Steps

  • Configure authentication providers (OIDC, SAML, LDAP) in the JuliaHub admin settings
  • Set up package synchronization to pull packages from the General registry