どこからでもWolfram Engine + JupyterLabにアクセスできる環境を構築する
無料で使えるWolfram EngineをJupyterLabと組み合わせることでMathematicaっぽいノートブック環境を構築できる。
ただ、既存のやり方では環境構築に結構手間がかかるほか、起動時に毎回トークンをブラウザにコピペする必要があった。
そこで認証機能はCloudflare Accessに任せることで起動時のトークン入力を省略し、 またCloudflare Tunnelと組み合わせることでどこからでもアクセスできるようにしつつ、 docker composeを使ってコンテナに格納してしまうことで可搬性を高めた環境を構築してみた。
事前準備
以下のものは事前に準備しておく。
- dockerをインストールしたUbuntu 24.04マシン
- Wolfram Cloudのアカウント
- Cloudflareのアカウントとドメイン
Cloudflare Tunnelの設定
- Cloudflareのダッシュボードにログインし、
Zero Trust,Network,Tunnelsと進んで、+ Create a tunnelからトンネルを作成。
Cloudflaredを選択
- トンネル名は適当に入力し、トンネルのトークン文字列(下図の
--token以降の文字列)をコピーしておく。
Public Hostnameから+ Add a public hostnameをクリック。
Subdomainにはお好みのホスト名を入力し、Domainはドメインを選択ServiceにはTypeでHTTP、URLにはjupyter:8888と入力
あとは適当に進めて保存。
Cloudflare Accessの設定
JupyterLab側では認証を行わず、Cloudflare側で認証したいので、Cloudflare Accessを設定する。
Zero Trust,Access,Applicationsと進んで+ Add an applicationをクリック。
Self-Hostedを選択。
Application Nameはお好みの名前を入力Public hostnameには先程トンネルを作成したときにPublic Hostnameに指定したサブドメインとドメインを指定Access PoliciesからSelect exisiting policiesまたは+ Create new policyから、自分だけアクセスできるようなポリシーを作成・選択
※ここでは例として自分のメールアドレスだけをincludeに設定したSelf Useというポリシーを設定(適宜Access policies · Cloudflare Zero Trust docsなどを参照願いたい)
\
docker compose
Wolfram Engineを有効にしたJupyterLabの入ったDockerイメージのDockerfileを公開してくれている人がいるので、それを利用させていただく。
ディレクトリとファイルの構造は以下の通りとする。
wolfram-jupyterlab/
├─ jupyter/
│ └─ Dockerfile
├─ .env
└─ docker-compose.yaml
jupyter/Dockerfile
matthewfeickert/wolfram-jupyterのDockerfileファイルをコピーして配置。
docker-compose.yaml
以下の内容を入力して保存。
services:
jupyter:
build:
context: ./jupyter/
dockerfile: Dockerfile
args:
- BASE_IMAGE=wolframresearch/wolframengine:14.2.1
- PYTHON_VERSION=3.12
- WOLFRAM_ID=${WOLFRAM_ID}
- WOLFRAM_PASSWORD=${WOLFRAM_PASSWORD}
hostname: jupyter
volumes:
- ./:/home/docker/work
- wolfram-license:/home/docker/.WolframEngine/Licensing
restart: unless-stopped
command:
- "-c"
- "jupyter lab --no-browser --ip 0.0.0.0 --port 8888 --allow-root --IdentityProvider.token=''"
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
command:
- tunnel
- --no-autoupdate
- run
environment:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
volumes:
wolfram-license:
volumesのところはホストの好きなディレクトリに変更しても良い。1
またWolfram EngineやPythonのバージョンを変えたい場合は当該箇所を変更する。
また、commandの引数はDocker を使って JupyterLab を利用するときにトークンなしでアクセスできるようにしたいを参考にさせていただいた。
.env
機密性の高い情報は.envファイルに保存しておくこととし、以下の内容のテキストファイルを作成する。
WOLFRAM_ID=(Wolfram ID)
WOLFRAM_PASSWORD=(Wolfram IDのパスワード)
TUNNEL_TOKEN=(上記で取得したCloudflare Tunnelのトークン文字列)
コンテナのビルド
ターミナルから以下を実行する。
$ cd wolfram-jupyterlab
$ docker compose build
かなり時間がかかるので待つ。
Wolfram IDのパスワードを間違えてしまっている場合はここをやり直す。
実行
コンテナのビルドが終わったら以下のコマンドでJupyterLabを起動する。
$ docker compose up -d
ログを見る場合はdocker compose logs -fを実行し、起動していそうならブラウザからCloudflare TunnelでPublic Hostnameに指定したアドレスを入力するとJupyterLabにアクセスできるはず。
うまく行けばカーネルとしてWolfram Languageが選択でき、ノートブックを作成できる。
-
Wolfram Engineのライセンス情報は
$PasswordFile(/home/docker/.WolframEngine/Licensing/mathpass)に書き込まれている。 ライセンスの期限を$LicenseExpirationDateで確認すると1ヶ月ちょっと先の日付が表示されたので、このファイルは定期的に更新されるのかもしれない。その場合は永続化しておく必要があると思われるので現在調査中。2 ↩︎ -
Jul. 14 2025追記: ライセンスが切れると
mathpassにホスト名と次の期限までの情報が追記されることが判明したので、docker-compose.yamlにhostnameを追加してホスト名を固定しつつ、mathpassファイルを永続化するための設定を追加した。 ↩︎