Я буду запускать 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. Вторая воля
попросить у вас пароль.