Как установить JupyterHub с Docker на локальный компьютер и в поддомен - PullRequest
0 голосов
/ 08 ноября 2018

Я буду запускать JupyterHub в поддомене. Вот файл Docker, jupyterhub_config.py, .gitlab-ci.yml. Мой первый вопрос - как настроить jupyter_config.py. Как я могу загрузить jupyterhub_config.py в сборку в контейнере?

Как запустить Jupyterhub в .gitlab-ci.yml для тестов и как скопировать приложение в поддомен? Я написал README.md. Мне нужна небольшая помощь для JupyterHub. Если все работает нормально, я напишу полный HOWTO Install 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

JupyterHub - многопользовательский сервер для ноутбуков Jupyter. JupyterLab является веб-интерфейс следующего поколения для проекта Jupyter. это JupyterHub - это базовый образ Docker для JupyterHub и JupyterLab который работает как отдельное приложение и (под) домен.

Изображения, полученные из этого изображения, могут работать как автономный сервер, или функция как объемное изображение для вашего сервера. Вы также можете использовать их в CI / CD система, такая как GitLab CI, для создания вашего контента до объединения его в контейнер автономного сервера.

Создание вашего образа JupyterHub

Основываясь на этой структуре, вы можете легко создать изображение для ваших нужд. Существует два варианта использования созданного вами изображения:

  • как отдельное изображение
  • в качестве объемного изображения для вашего веб-сервера

Самый простой способ создать свой собственный образ - это использовать Dockerfile. Это только пример. Если вам нужно больше пакетов программного обеспечения, вы можете установить их с этим Dockerfile и conda.

Сборка контейнера

docker build -t juypterhub .

Ваш JupyterHub с JupyterLab генерируется автоматически во время этой сборки.

Запустить контейнер

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). Давайте зашифруем это CA. Чтобы получить сертификат для домена вашего сайта от Let's Encrypt, вам необходимо продемонстрировать контроль над доменом. С Let's Encrypt вы делаете это с помощью программное обеспечение, использующее протокол ACME, который обычно работает на вашем веб-хосте.

Измените на zerossl.com и создайте сертификат для своего домена. Как В результате вы получите четыре файла: domain-key.txt , domain-crt.txt , domain-csr.txt, account-key.txt. Этот файл использует базу 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 exec -it jupyterhub bash
useradd --create-home systemuser
passwd systemuser
exit

Команда docker exec -it jupyterhub bash вызовет корневую оболочку в вашем Докер контейнер. Вы можете использовать корневую оболочку для создания системных пользователей в containeг . Эти учетные записи будут использоваться для аутентификации в JupyterHub's конфигурация по умолчанию.

Первая команда useradd создает нового пользователя с именем systemuser. Вторая воля попросить у вас пароль.

1 Ответ

0 голосов
/ 26 июня 2019

Весь процесс может быть проще с GitLab 12.0 (июнь 2019 г.) и его Интеграция с Git для JupyterHub

Развертывание JupyterHub с помощью интеграции GitLab Kubernetes предоставляет простой способ начать работу с записными книжками Jupyter, которые можно использовать для создания и обмена документами, содержащими живой код, визуализации и даже книги заданий.

Начиная с GitLab 12.0, Расширение Git JupyterLab автоматически настраивается и настраивается при установке JupyterHub на кластер Kubernetes .
Эта интеграция обеспечивает полный контроль версий ваших ноутбуков, а также выдачу команд Git в Jupyter. Команды Git можно вводить на вкладке Git на левой панели или в командной строке Jupyter.

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

См. документацию и gitlab-ce выпуск 47138 .

...