JupyterHub（Python, PHP）のセットアップ（Ubuntu20.04サーバ上）

ubuntu 20.04 サーバを (ConoHa や AWSなどで）セットアップしておいてください。

最初に、update, upgrade しておきます：

```
sudo apt -y update; sudo apt -y upgrade; 
```

php をインストール：

```
sudo apt -y install php7.4 php7.4-cli composer php-zmq
```

apache などがもし動いていれば停止しておく：

```
sudo systemctl disable apache2.service 
sudo systemctl stop apache2.service 
```

サーバのホスト名が無い場合は、サーバ名を DNS 登録して、ホスト名でアクセスできるようにしておいてください。
（以下では、そのホスト名が your.host.name であるとしています。）

その後、letsencrypt で SSL証明書を取得：
（your.host.name は自分のホスト名に, your@mail.address は実際のメールアドレスに差し替えてください）

```
sudo snap install --classic certbot
sudo certbot certonly -n --standalone -d your.host.name -m your@mail.address --agree-tos
```

https://www.anaconda.com/products/individual#Downloads へ行き、Linux用の
64-Bit (x86) Installer の最新版のURLを確認して、サーバ上で wget を用いてダウンロードしてAnaconda をインストール：

```
wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
sudo chmod +x Anaconda3-2021.11-Linux-x86_64.sh
sudo ./Anaconda3-2021.11-Linux-x86_64.sh -b -p /opt/anaconda3
```

Anaconda のコマンドへの path を通すため、以下のように /etc/profile.d/anaconda.sh を作る：

```
sudo echo 'export PATH="$PATH:/opt/anaconda3/bin"' | sudo tee /etc/profile.d/anaconda.sh
```

一旦、再起動。

```
sudo reboot
```

その後、jupyterhub をインストール：

```
sudo /opt/anaconda3/bin/conda install -c conda-forge jupyterhub
```

（Proceed ([y]/n)? と聞かれたら ENTERキーを押す）

日本語化パッケージをインストール：

```
sudo /opt/anaconda3/bin/pip install jupyterlab-language-pack-ja-JP
```

設定ファイル用のディレクトリを作っておく：

```
sudo mkdir -p /etc/jupyterhub/ /srv/jupyterhub/
```

設定ファイルを作る：
（以下の your.host.name の部分は、自分のサーバのホスト名に置き換えてください。
user00, user01, ... などのユーザ名の箇所も適宜、変えてください。）

```python:/etc/jupyterhub/jupyterhub_config.py
c = get_config()

# Allows multiple single-server per user
c.JupyterHub.allow_named_servers = True

c.JupyterHub.port = 443
c.JupyterHub.ssl_key =  '/etc/letsencrypt/live/your.host.name/privkey.pem'
c.JupyterHub.ssl_cert = '/etc/letsencrypt/live/your.host.name/fullchain.pem'

c.JupyterHub.cookie_secret_file = '/srv/jupyterhub/jupyterhub_cookie_secret';
# c.JupyterHub.db_url = '/srv/jupyterhub/jupyterhub.sqlite';

# create system users that don't exist yet
c.LocalAuthenticator.create_system_users = True

# specify users and admin
c.Authenticator.allowed_users = {'user00', 'user01', 'user02', 'user03'}
c.Authenticator.admin_users = {'user00'}
```

OS起動時に自動起動させるための設定ファイルを作る：

```/etc/systemd/system/jupyterhub.service
[Unit]
Description=Jupyterhub
After=syslog.target network.target

[Service]
User=root
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/anaconda3/bin"
ExecStart=/opt/anaconda3/bin/jupyterhub -f /etc/jupyterhub/jupyterhub_config.py
WorkingDirectory=/etc/jupyterhub

[Install]
WantedBy=multi-user.target
```

JupyterHubを自動起動するように設定し、起動する：

```
sudo systemctl enable jupyterhub.service 
sudo systemctl start  jupyterhub.service 
```

起動すると JupyterHubによって、user00, user01,.. などのユーザが作成される。

user00 などのパスワードを設定：

```
sudo passwd user00
...
```


JupyterLab 上で Python だけでなく PHP も使いたい場合は、以下のように psysh と Jupyter-PHP をインストール：

```
wget https://psysh.org/psysh
sudo chmod +x psysh
sudo mv psysh /usr/local/bin/
```

```
wget https://litipk.github.io/Jupyter-PHP-Installer/dist/jupyter-php-installer.phar
sudo php jupyter-php-installer.phar install
```


これで、 https://your.host.name/ で user00, user01, などでログインできるはずです。
（表示を日本語化するには、ログイン後のメニューの Settings - Language で Japanese を選ぶ）


参考にさせていただいたリソース：

https://fioxy.net/archives/28

https://serverarekore.blogspot.com/2020/07/debian-10busterubuntu-2004jupyter-lab.html

https://qiita.com/cvusk/items/afa46c35d8d5f0d930ed

https://sepicles.net/jupyterlab-japanese/

https://litipk.github.io/Jupyter-PHP-Installer/

https://github.com/jupyterhub/jupyterhub/wiki/Run-jupyterhub-as-a-system-service