備忘録：Xserver上のPython, Jupyter notebookをローカル(Mac)から使う

# はじめに

ブログで導入したXserverをもっと有効活用出来ないか？　
→　ローカルでの解析をサーバーで出来ればもっと重たい処理も出来て便利なのでは、と考えました。

そこで、MacからXserver上のJupyter notebookが使えるようになるまでの環境構築について調べた備忘録です。

同様なことを記事にしている優秀な参考サイトはたくさんありましたので、実際自分が環境構築した際につまずいたところを記録として残します。何かの参考になれば幸いです。


# MacのターミナルからXserverにssh接続

下記の記事を参考に無事接続出来ました。ありがとうございます。

[エックスサーバーにssh接続する方法（ターミナル利用）](https://qiita.com/ryo2132/items/38b5a93b3df476dd2b44)



# Linuxbrewインストール

下記記事が大変参考になりました。

[【Xserver】Linuxbrewインストール＆アップデート](https://flat-kids.net/2020/01/25/%e3%80%90xserver%e3%80%91linuxbrew%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/)

下記コマンドよりインストールを始めましたが、LinuxbrewはHomebrewに統合されたようでした。

```Console
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

```Console
Warning: Linuxbrew has been merged into Homebrew.
Please migrate to the following command:
  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```

途中、下記メッセージが出てましたが、Returnすると続けてインストールを開始しました。

```Console
残念ですが、ユーザー XXXXXX は sv**** 上で sudo を実行できません。
```

約1時間くらいかかりましたが、無事インストールされました。

インストール完了時のメッセージとして、PATHの設定などがありましたので、メッセージに従い設定しています。

brew doctorで確認してみると、下記エラーが表示されました。

```Console
[XXXXXX@sv**** ~]$ brew doctor
Error: Please update your system cURL.
Minimum required version: 7.41.0
Your cURL version: 7.29.0
Your cURL executable: /usr/bin/curl
```
検索したところ、同じ事例がありましたので、その解決策で無事にエラーは出なくなりました。素晴らしい。

[Xserver上のHomebrew（Linuxbrew）実行時にサーバー側の（古いバージョンの）cURLを参照しないようにしたい](https://teratail.com/questions/312084)

解決策：　.bash_profile に下記を追加。

```Console
export HOMEBREW_FORCE_BREWED_CURL="1"
```

2021年1月23日インストール時点では下記Versionがインストールされています。

```
[XXXXXX@sv**** ~]$ brew --version
Homebrew 2.7.5
Homebrew/linuxbrew-core (git revision cd05cb; last commit 2021-01-23)
```

# pyenv, Anacondaのインストール

同じサイトが大変分かりやすく参考になりました。インストール時に特に違いはありませんでした。

[【Xserver】Anacondaをインストール](https://flat-kids.net/2020/01/27/%e3%80%90xserver%e3%80%91anaconda%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/)

Anaconda3-2020.11をインストールしました。Pythonは3.8.5でした。

```
[XXXXXX@sv**** ~]$ pyenv install anaconda3-2020.11
[XXXXXX@sv**** ~]$ pyenv versions
* system (set by /home/XXXXXX/.pyenv/version)
  anaconda3-2020.11
[XXXXXX@sv**** ~]$ pyenv global anaconda3-2020.11
[XXXXXX@sv**** ~]$ python -V
Python 3.8.5
```

# 仮想環境構築

折角？Anacondaをインストールしたので、仮想環境を構築します。
ただ、仮想環境を構築して必要なライブラリを追加するなら、別にAnacondaを入れなくていい気がして今ひとつしっくりきません(condaが使えるのはメリットですが)。どうなんでしょう？

```python
conda create -n envname python=3.8 numpy pandas matplotlib 
```

```python
conda activate envname
```

しかし構築した仮想環境をactivateしたところ、下記メッセージが出て切り替えが出来ませんでした。

```console
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.
```

conda initを調べてみると、下記記事がありましたので参考にしました。

[IMPORTANT: You may need to close and restart your shell after running 'conda init'.](https://qiita.com/marusta/items/b692fa6945ef5ea93cd3)

```python
[XXXXXX@sv**** ~]$ conda init bash
[XXXXXX@sv**** ~]$ source .bashrc
```

これによりコマンドライン先頭に(base)が付くようになりました。

```console
(base) [XXXXXX@sv**** ~]$ 
```

再度、仮想環境をactivateすると無事切り替わりました。

```python
(base) [XXXXXX@sv**** ~]$ conda activate envname
(envname) [XXXXXX@sv**** ~]$ conda info -e
# conda environments:
#
base                     /home/XXXXXX/.pyenv/versions/anaconda3-2020.11
envname                  *  /home/XXXXXX/.pyenv/versions/anaconda3-2020.11/envs/envname
```

# サーバーで Jupyter notebook を使いたい

設定の仕方は下記を参考にしました。ありがとうございます。

・[SSH先のサーバ上のjupyter notebookをローカルPCで操作する](https://sishida21.github.io/2019/12/12/remote-jupyter-notebook/)

・[SSH接続先でpython、Jupyter Labを使う](https://meriek.com/programing/python/jupyter-ssh/)

基本的な設定方法は参考サイト通りです。最終的な設定を残します。

【サーバーの設定】
サーバーの仮想環境にjupyterを追加。（まだ入れてなければ）

```python
conda install jupyter
```

.jupyter/jupyter_notebook_config.py　に下記を追加。パスワードは別途設定しています。ポート番号は任意です。

```
c = get_config()
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.port = 9999
c.NotebookApp.allow_remote_access = True
c.NotebookApp.password = 'sha1:0000...'
```

【ローカルの設定】
.ssh/config に LocalForward 9000 localhost:9999 を追加。

```console
Host xsrv
  Hostname XXXXXX.xsrv.jp
  Port 10022
  User XXXXXX
  IdentityFile ~/.ssh/id_xserver_rsa
  LocalForward 9000 localhost:9999
  ServerAliveInterval 60
```

設定は以上。再度下記でログイン後、jupyter notebookを起動。

```console
ssh xsrv
```

ローカルのブラウザに下記を打ち込み、設定したパスワード入力して無事ローカルでjupyter notebookが使えるようになりました。

```
http://localhost:9000
```
今後、色々試していこうと思います。