【问题标题】:How to install JupyterHub with Docker on a local machine and in a sub domain如何在本地机器和子域中使用 Docker 安装 JupyterHub
【发布时间】: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 的基本映像,用于 JupyterHubJupyterLab 作为独立应用程序和(子)域工作。

从此图像派生的图像既可以作为独立服务器运行,也可以作为 充当服务器的卷映像。您还可以在 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 服务器的最后一个命令

您的JupyterHubJupyterlab 现在可以使用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 docker 的新 JupyterHub 服务器 容器并使用密码创建一个新的系统用户。

docker exec -it jupyterhub bash
useradd --create-home systemuser
passwd systemuser
exit

docker exec -it jupyterhub bash 命令将在你的 码头集装箱。 您可以使用 root shell 在 容器。这些帐户将用于 JupyterHub 中的身份验证 默认配置。

第一个命令 useradd 创建一个名为 systemuser 的新用户。第二个将 问你密码。

【问题讨论】:

    标签: jupyter-notebook jupyter-lab jupyterhub jupyter-console


    【解决方案1】:

    使用 GitLab 12.0(2019 年 6 月)和它的所有过程可能会更简单 Git integration for JupyterHub

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

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

    参见documentationgitlab-ce issue 47138

    【讨论】:

      【解决方案2】:
      jupyterhub --generate-config
      

      这是documentation上的内容

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

      【讨论】:

      • 如何应用该配置?
      猜你喜欢
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2011-01-11
      • 1970-01-01
      • 2012-02-10
      • 2022-11-19
      • 2016-10-21
      相关资源
      最近更新 更多