【发布时间】:2018-11-08 19:41:39
【问题描述】:
我将在子域中运行 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 是 Docker 的基本映像,用于 JupyterHub 和 JupyterLab 作为独立应用程序和(子)域工作。
从此图像派生的图像既可以作为独立服务器运行,也可以作为 充当服务器的卷映像。您还可以在 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将您的容器命名为 jupyterhub -
jupyterhub图片 -
jupyterhub是用于启动 jupyterhub 服务器的最后一个命令
您的JupyterHub 和Jupyterlab 现在可以使用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.pemcp domain-key.txt privkey.pem
在容器中添加系统用户
默认情况下,JupyterHub 在服务器上搜索用户。为了能够 登录到我们需要连接到 JupyterHub docker 的新 JupyterHub 服务器 容器并使用密码创建一个新的系统用户。
docker exec -it jupyterhub bashuseradd --create-home systemuserpasswd systemuserexit
docker exec -it jupyterhub bash 命令将在你的
码头集装箱。 您可以使用 root shell 在
容器。这些帐户将用于 JupyterHub 中的身份验证
默认配置。
第一个命令 useradd 创建一个名为 systemuser 的新用户。第二个将 问你密码。
【问题讨论】:
标签: jupyter-notebook jupyter-lab jupyterhub jupyter-console