SSHで接続できるリモートサーバーでpythonを使う機会があり、Jupyter Labを使えるように設定したので、そのときの手順をメモとして残しておきます
pyenv を使ってpythonをインストール
pyenvをclone
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
gitが使えることが前提ですが、githubからpyenvのソースコードをもってきます。
pyenvの環境設定
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
シェルがbashの場合は.bash_profile
、zshの場合は.zshrc
に書き換えます。シェルがわからない場合は$ echo $SHELL
と打てばわかります
- 1行目: 環境変数$PYENV_ROOTを追加
- 2行目: pyenvのコマンドをPATHに追加(どこからでもコマンドを実行できるように設定)
- 3行目: シェルの起動時に
pyenv init
が実行されるように設定
.bash_profileを反映させる
$ source ~/.bash_profile
Anacondaのインストール
インストール可能なanacondaのversionを表示
$ pyenv install -l |grep anaconda
anacondaをインストール
ここではanaconda3-5.3.0をインストールします
$ pyenv install anaconda3-5.3.0
localに仮想環境を設定
現在のディレクトリで自動でanaconda-3-5.3.1に切り替わるように設定します。
ここでは、anaconda3-5.3.1を仮想環境として扱っています。
余談ですが、pythonはバージョンの依存関係が強いので絶対にプロジェクト毎に仮想環境を作ってください
$ pyenv local anaconda3-5.3.1
ここまででpythonを使う準備ができました
リモートのJupyter Labをローカルで使えるように設定
こちらを参考にさせていただきました
このままだとまだJupyter Labを起動してもブラウザはローカルにしかないのでJupyter Labが使えないので使えるように設定します
jupyter config を生成
jupyter labの詳細な設定をするためのconfigrationを生成します。ここではconfig.pyが生成されるはずです
$ jupyter lab --generate-config
ipythonを実行し、パスワードを設定
$ ipython
in [1]: from IPython.lib import passwd
in [2]: passwd()
ここでパスワードを聞かれるので、パスワードを入力します。すると以下のような’shal:xxxxxxxxxxxx’という文字列が生成されるので、あと入力できるようにしておきましょう
out [2]: 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
in [3]: exit
config.pyを編集
~/.jupyter/jupyter_notebook_config.py
に以下の7行を追記します。
最後の行は先ほど出力された’sha1:XXXXX’に書き換えてください。またportの番号は変えても大丈夫です
vimなどのエディタを使って編集します(vimの場合は$ vi ~/.jupyter/jupyter_note_book_confi.py
ですね)
c = get_config()
c.IPKernelApp.pylab = 'inline'
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:xxxx'
ローカルフォワーディングでSSH接続
一度sshからlogoutし、ローカルフォワーディングでlocalhostから接続できるようにした上で接続しなおします。
$ ssh user@example.com -L 8888:localhost:9999
ここではリモート(example.com)の9999ポートとlocalhost(手元のマシン)の8888ポートが繋がるようにローカルフォワーディングをしています。
jupyter labを起動
$ jupyter lab
準備が整ったので、jupyter labを起動します。これで手元のマシンでhttp://localhost:8888にアクセスすればjupyter labが使えます。
パスワードは上記で自分が設定したパスワードを入力してください。
SSH config設定
sshconfigに以下のように記述することでsshコマンドを省略できます(.ssh/config
を作って以下の例のように記述すれば、ssh host1
だけで接続できます )
Host host1
HostName example.com
User username
Port 22
IdentityFile ~/.ssh/id_rsa_xxx
LocalForward 9999 localhost:9999
おすすめ記事