Skip to content
This repository was archived by the owner on May 15, 2025. It is now read-only.

Commit 13b60da

Browse files
committed
Add support for subdomain in jupyterlab module
1 parent 8a0ac34 commit 13b60da

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

jupyterlab/main.tf

+23-4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ terraform {
99
}
1010
}
1111

12+
data "coder_workspace" "me" {}
13+
data "coder_workspace_owner" "me" {}
14+
1215
# Add required variables for your modules and remove any unneeded variables
1316
variable "agent_id" {
1417
type = string
@@ -36,6 +39,12 @@ variable "share" {
3639
}
3740
}
3841

42+
variable "subdomain" {
43+
type = bool
44+
description = "Determines whether JupyterLab will be accessed via it's own subdomain or whether it will be accessed via a path on Coder."
45+
default = true
46+
}
47+
3948
variable "order" {
4049
type = number
4150
description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
@@ -49,17 +58,27 @@ resource "coder_script" "jupyterlab" {
4958
script = templatefile("${path.module}/run.sh", {
5059
LOG_PATH : var.log_path,
5160
PORT : var.port
61+
BASE_URL : var.subdomain ? "http://localhost:${var.port}/@${data.coder_workspace_owner.me.name}/${data.coder_workspace.me.name}/apps/jupyterlab" : ""
5262
})
5363
run_on_start = true
5464
}
5565

5666
resource "coder_app" "jupyterlab" {
5767
agent_id = var.agent_id
58-
slug = "jupyterlab"
68+
slug = "jupyterlab" # sync with with end of subdomain URL
5969
display_name = "JupyterLab"
60-
url = "http://localhost:${var.port}"
70+
url = var.subdomain ? "http://localhost:${var.port}/@${data.coder_workspace_owner.me.name}/${data.coder_workspace.me.name}/apps/jupyterlab" : "http://localhost:${var.port}"
6171
icon = "/icon/jupyter.svg"
62-
subdomain = true
72+
subdomain = var.subdomain
6373
share = var.share
6474
order = var.order
65-
}
75+
76+
dynamic "healthcheck" {
77+
for_each = var.subdomain ? toset([true]) : toset([])
78+
content {
79+
url = "http://localhost:${var.port}/@${data.coder_workspace_owner.me.name}/${data.coder_workspace.me.name}/apps/jupyterlab"
80+
interval = 6
81+
threshold = 10
82+
}
83+
}
84+
}

jupyterlab/run.sh

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#!/usr/bin/env sh
22

3+
if [ -n "$BASE_URL" ]
4+
then
5+
BASE_URL="--ServerApp.base_url=${BASE_URL}"
6+
fi
7+
38
BOLD='\033[0;1m'
49

510
printf "$${BOLD}Installing jupyterlab!\n"
@@ -15,11 +20,17 @@ if ! command -v jupyterlab > /dev/null 2>&1; then
1520
fi
1621
# install jupyterlab
1722
pipx install -q jupyterlab
18-
echo "🥳 jupyterlab has been installed\n\n"
23+
printf "%s\n\n" "🥳 jupyterlab has been installed"
1924
else
20-
echo "🥳 jupyterlab is already installed\n\n"
25+
printf "%s\n\n" "🥳 jupyterlab is already installed"
2126
fi
2227

2328
echo "👷 Starting jupyterlab in background..."
2429
echo "check logs at ${LOG_PATH}"
25-
$HOME/.local/bin/jupyter-lab --ServerApp.ip='0.0.0.0' --ServerApp.port=${PORT} --no-browser --ServerApp.token='' --ServerApp.password='' > ${LOG_PATH} 2>&1 &
30+
$HOME/.local/bin/jupyter-lab --no-browser \
31+
"$BASE_URL" \
32+
--ServerApp.ip='*' \
33+
--ServerApp.port="${PORT}" \
34+
--ServerApp.token='' \
35+
--ServerApp.password='' \
36+
> "${LOG_PATH}" 2>&1 &

0 commit comments

Comments
 (0)