4

我将在子域中运行 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 是JupyterHubJupyterLab的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 8000container port 8000
  • -d用于在后台运行容器。JupyterHub 只会写入日志,因此无需在终端中输出它们,除非您想解决服务器错误。
  • -- name jupyterhub命名你的容器 jupyterhub
  • jupyterhub图片
  • jupyterhub是用于启动 jupyterhub 服务器的最后一个命令

并且您的JupyterHubwithJupyterlab现在可以使用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.txtdomain-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 的新用户。第二个会要求你输入密码。

4

2 回答 2

1

使用 GitLab 12.0(2019 年 6 月)及其 与 JupyterHub 的 Git 集成,所有过程可能会更简单

通过 GitLab 的 Kubernetes 集成部署 JupyterHub 提供了一种开始使用 Jupyter 笔记本的简单方法,该笔记本可用于创建和共享包含实时代码、可视化甚至运行手册的文档。

从 GitLab 12.0 开始,在将 JupyterHub 安装到 Kubernetes 集群时,会自动预置和配置 JupyterLab 的 Git 扩展
这种集成可以实现对笔记本的完整版本控制以及在 Jupyter 中发出 Git 命令。Git 命令可以通过左侧面板上的 Git 选项卡或通过 Jupyter 的命令行提示符发出。

https://about.gitlab.com/images/12_0/jupyter-git.png

请参阅文档gitlab-ce 问题 47138

于 2019-06-25T21:27:35.310 回答
0
jupyterhub --generate-config

这是文档上的内容

它创建了一个 config.py 文件/srv/jupyterhub

于 2019-08-16T06:24:30.397 回答