どこからでも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
から、自分だけアクセスできるようなポリシーを作成・選択
※Accessの説明は分量が多くなってしまうので割愛(適宜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.0
- PYTHON_VERSION=3.12
- WOLFRAM_ID=${WOLFRAM_ID}
- WOLFRAM_PASSWORD=${WOLFRAM_PASSWORD}
volumes:
- ./:/home/docker/work
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 --token ${TUNNEL_TOKEN}
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ヶ月ちょっと先の日付が表示されたので、更新するためには永続化しておく必要があるかもしれない。現在調査中。 ↩︎