3
6

More than 3 years have passed since last update.

jupyter notebookをリモートサーバ(CentOS)に構築

Last updated at Posted at 2020-06-10

jupyter notebookをリモートサーバ(CentOS)に構築

やりたいこと

  • 会社のあれやこれやをPythonでやりたい
    • GitLabを操作(issue集計したり投稿したり)
  • 利用する人はエンジニアの他、開発環境ない人も使用する(マネージャーとか管理系の人)
  • 今回はAnacondaというライブラリ集を使用する

OS Version

[root@XXX ~]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)

Anacondaのインストール

AnacodaのInstallerダウンロード

[root@XXX tmp]# cd /tmp
[root@XXX tmp]# curl https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh -O

Install

[root@XXX tmp]# bash ./Anaconda3-5.3.1-Linux-x86_64.sh 
-- 対話形式 以下抜粋

Please, press ENTER to continue
>>> *Enterおす

Do you approve the license terms? [yes|no]
>>>yes 

Anaconda3 will now be installed into this location:
/root/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/root/anaconda3] >>> *Enterおす

Do you wish the installer to initialize Anaconda3
in your /root/.bashrc ? [yes|no]
[no] >>> yes

bashrc読み込み

[root@XXX tmp]# source ~/.bashrc

AnacondaのVersion確認

[root@XXX tmp]# anaconda -V
anaconda Command line client (version 1.7.2)

jupyterのインストール

  • Anaconda入れた時点で既にjupyterに入っている
  • ローカルだけで使用する場合は、Pathまで確認したらいきなり起動確認してOK

jupyterのVesion確認

[root@XXX tmp]# jupyter --version
4.4.0

Path確認

[root@XXX tmp]# jupyter --path
config:
    /root/.jupyter
    /root/anaconda3/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /root/.local/share/jupyter
    /root/anaconda3/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /run/user/0/jupyter

ローカル以外のPCからのアクセスを許可(任意)

  • 不安な場合は特定のipだけ許容する設定にしましょう
    • 後述のConfigファイル作成時に設定可能です

ipythonでpasswd設定

  • ブラウザからアクセスしたときにパスワード聞いてくれるようになる

  • passwordを対話形式でハッシュ化してくれるPytnonのライブラリ

[root@XXX ~]# ipython
Python 3.7.0 (default, Jun 28 2018, 13:15:42) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:8e9f3XXXXXXXXXXXXXXXXXXXXXXXX'

In [3]: exit

configファイル作成

  • cmdで作るけど中身はコメントアウトされており、何も設定していなければデフォルトで動く(はず)
  • 中身多いので簡潔な設定ファイルにしたいなら、下記のパス・ファイルをtouchで作って設定手書きしてもいい
[root@XXX tmp]# jupyter notebook --generate-config
Writing default config to: /root/.jupyter/jupyter_notebook_config.py

configファイル設定

  • /root/.jupyter/jupyter_notebook_config.pyに以下を記載
c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888 #Defalt
c.NotebookApp.password = u'sha1:8e9f3XXXXXXXXXXXXXXXXXXXXXXXX'
c.NotebookApp.notebook_dir = '/root/jupyter_files/'

ポート開放

  • これとjupyter_notebook_config.pyに書いた内容
[root@XXX ~]# firewall-cmd --add-port=8888/tcp --zone=public --permanent
success
[root@XXX ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@XXX ~]# firewall-cmd --reload
success
[root@XXX ~]# firewall-cmd --list-ports --zone=public
8888/tcp

起動確認

  • jupyter notebookと唱えれば完了
[root@XXX ~]# jupyter notebook 
# rootでログインしている場合は↓のオプション必要です
[root@XXX ~]# jupyter notebook --allow-root
[I 10:17:31.193 NotebookApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.7/site-packages/jupyterlab
[I 10:17:31.194 NotebookApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[I 10:17:31.196 NotebookApp] Serving notebooks from local directory: /root/jupyter_files
[I 10:17:31.197 NotebookApp] The Jupyter Notebook is running at:
[I 10:17:31.197 NotebookApp] http://${hostname} or 127.0.0.1):8888/
  • 他のホストからの接続が許容されていない場合はlocalhostと表示されるのでTypoとか疑う(戒め)
    • 「jupyter_notebook_config.py」内のc.NotebookApp.ip = '*'c.NoebookApp.ip = '*'になっていたりするかもしれない
[I 10:17:31.197 NotebookApp] The Jupyter Notebook is running at:
[I 10:17:31.197 NotebookApp] http://localhost:8888/

サービス登録

  • このままだとコンソール閉じたりCtrl+Cしたらjupyterも終了するのでサービスとして実行するようにする

Unit定義ファイル作成

[root@XXX ~]# touch /etc/systemd/system/notebook.service

Unit定義ファイル編集

[root@XXX ~]# vi /etc/systemd/system/notebook.service
  • ExecStartのコマンドは、rootの場合はオプション必要
    • 詳細は上述の起動確認部を参照
[Unit]
Description = Jupyter Notebook

[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/root/anaconda3/bin/jupyter notebook    # `$ which jupyter` で確認
WorkingDirectory=/root   #Anacondaを導入したユーザーのホームディレクトリ(ログイン直後に `$pwd`) 
User=root   #Anacondaを導入したユーザー名  `$ id`
Group=root  #Anacondaを導入したユーザーの所属するグループ名
Restart=always

[Install]
WantedBy = multi-user.target

Unitが登録されているか確認

[root@XXX ~]# $ systemctl list-unit-files --type=service

サービスとして起動

# 起動
[root@XXX ~]# systemctl start notebook 
# 起動確認 
[root@XXX ~]# systemctl status notebook
# 起動時に自動開始するよう設定
[root@XXX ~]# systemctl enable notebook

参考

外から接続できないときの参考

先人たち

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6