我将在子域中运行 JupyterHub。这是 Dockerfile、jupyterhub_config.py、.gitlab-ci.yml。我的第一个问题是如何配置 jupyter_config.py。如何在容器中的构建上加载 jupyterhub_config.py?
如何在 .gitlab-ci.yml 中启动 Jupyterhub 进行测试,以及如何在子域中复制应用程序?我写了一个 README.md。我需要 JupyterHub 的一点帮助。如果一切正常,我将在本地计算机和提供商的子域中编写完整的 HOWTO 安装 JupyterHub。
FROM continuumio/miniconda3
# Updating packages
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends \
git \
nano \
unzip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install conda and Jupyter
RUN conda update -y conda
RUN conda install -c conda-forge jupyter_nbextensions_configurator \
jupyterhub \
jupyterlab \
matplotlib \
pandas \
scipy
# Setup application
EXPOSE 8000
CMD ["jupyterhub", "--ip='*'", "--port=8000", "--no-browser", "--allow-root"]
.gitlab-ci.yml
image: docker:latest
variables:
CONTAINER_IMAGE: registry.gitlab.com/joklein
DOCKER_IMAGE: jupyterhub
TAG: 0.1.0
services:
- docker:dind
stages:
- build
- test
- release
- deploy
before_script:
- echo "$GITLAB_PASSWORD" | docker login registry.gitlab.com --username $GITLAB_USER --password-stdin
build:
stage: build
script:
- docker build -t $CONTAINER_IMAGE/$DOCKER_IMAGE .
- docker push $CONTAINER_IMAGE/$DOCKER_IMAGE
test:
stage: test
script:
- docker pull $CONTAINER_IMAGE/$DOCKER_IMAGE
# - docker run $CONTAINER_IMAGE/$DOCKER_IMAGE -dt -p 8000:8000 --name $DOCKER_IMAGE
release:
stage: release
script:
- docker pull $CONTAINER_IMAGE/$DOCKER_IMAGE
- docker tag $CONTAINER_IMAGE/$DOCKER_IMAGE:latest $CONTAINER_IMAGE/$DOCKER_IMAGE:$TAG
- docker push $CONTAINER_IMAGE/$DOCKER_IMAGE:$TAG
only:
- master
deploy:
stage: deploy
image: alpine:latest
before_script:
- apk update && apk add git openssh-client rsync
script:
- mkdir .public
- cp -r * .public
- mv .public public
- mkdir "${HOME}/.ssh"
- echo "${SSH_HOST_KEY}" > "${HOME}/.ssh/known_hosts"
- echo "${SSH_PRIVATE_KEY}" > "${HOME}/.ssh/id_rsa"
- chmod 700 "${HOME}/.ssh/id_rsa"
- rsync -hrvz --delete --exclude=_ public/ user@example.com:www/jupyter/
only:
- master
jupyterhub_config.py
c = get_config()
# Letsencrypt (https://letsencrypt.org/) to obtain a free, trusted SSL
# certificate.
c.JupyterHub.ssl_key = '/etc/letsencrypt/live/example.com/privkey.pem'
c.JupyterHub.ssl_cert = '/etc/letsencrypt/live/example.com/fullchain.pem'
c.JupyterHub.port = 443
#
# Change from JupyterHub to JupyterLab
c.Spawner.default_url = '/lab'
c.Spawner.debug = True
#
# # Specify users and admin
c.Authenticator.whitelist = {"systemuser"}
c.Authenticator.admin_users = {"systemuser"}
JupyterHub 和 JupyterLab 的 Docker 基础镜像
JupyterHub 是 Jupyter 笔记本的多用户服务器。JupyterLab 是 Jupyter 项目的下一代基于 Web 的用户界面。此 JupyterHub 是JupyterHub和JupyterLab的Docker基础映像 ,可作为独立应用程序和(子)域工作。
从此映像派生的映像既可以作为独立服务器运行,也可以作为服务器的卷映像运行。您还可以在 CI/CD 系统(例如 GitLab CI)中使用它们来构建您的内容,然后再将其捆绑到独立的服务器容器中。
构建你的 JupyterHub 镜像
基于此结构,您可以轻松构建满足您需求的映像。使用您生成的图像有两个选项:
- 作为一个独立的图像
- 作为网络服务器的卷图像
构建自己的镜像最简单的方法是使用 Dockerfile。这只是一个例子。如果您需要更多软件包,可以使用此 Dockerfile 和 conda 安装它们。
构建容器
docker build -t juypterhub .
在此构建期间会自动生成带有 JupyterLab 的 JupyterHub。
运行容器
docker run -p 8000:8000 -d --name jupyterhub jupyterhub jupyterhub
-p
用于将您映射local port 8000
到container port 8000
-d
用于在后台运行容器。JupyterHub 只会写入日志,因此无需在终端中输出它们,除非您想解决服务器错误。-- name jupyterhub
命名你的容器 jupyterhubjupyterhub
图片jupyterhub
是用于启动 jupyterhub 服务器的最后一个命令
并且您的JupyterHub
withJupyterlab
现在可以使用http://localhost:8000
.
启动/停止 JupyterHub
docker start / stop juyterhub
配置 JupyterHub
让我们为 JupyterHub 加密证书
要在您的网站上启用 HTTPS,您需要从证书颁发机构 (CA) 获取证书(一种文件)。Let's Encrypt 是一个 CA。为了从 Let's Encrypt 获得您网站域的证书,您必须证明对域的控制。使用 Let's Encrypt,您可以使用使用 ACME 协议的软件来执行此操作,该协议通常在您的网络主机上运行。
更改为zerossl.com并为您的域生成证书。结果你得到四个文件,domain-key.txt,domain-crt.txt, domain-csr.txt , account-key.txt。此文件使用 base 64,它可以 ASCII 格式读取,而不是二进制格式。证书已经是 PEM 格式。只需将扩展名更改为 *.pem。
对于 JupyterHub,仅需要 domain-key.txt 和 domain-crt 文件。
cp domain-crt.txt fullchain.pem
cp domain-key.txt privkey.pem
在容器中添加系统用户
默认情况下,JupyterHub 在服务器上搜索用户。为了能够登录到我们的新 JupyterHub 服务器,我们需要连接到 JupyterHub docker 容器并使用密码创建一个新的系统用户。
docker exec -it jupyterhub bash
useradd --create-home systemuser
passwd systemuser
exit
该命令docker exec -it jupyterhub bash
将在您的 docker 容器中生成一个 root shell。您可以使用 root shell 在容器中创建系统用户。这些帐户将用于 JupyterHub 的默认配置中的身份验证。
第一个命令 useradd 创建一个名为 systemuser 的新用户。第二个会要求你输入密码。