フリーNASのOpenMediaVaultにPaperless-NGXを構築する

## Ⅰ．　Paperless-NGX
１.　Paperless-NGXはオープンソースの文書管理システム
２.　Paperless-NGXは文書を簡単にデジタル化し整理できる
３.　各ドキュメントはドキュメントタイプと任意の個数のタグを設定できる
４.　OCRでスキャンした文書からテキストを抽出し、検索ワードに自動で切り分ける

<br><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/6af8035d-9ccb-44a8-6eca-1f5ca4e41931.jpeg"><br>


## Ⅱ．　OpenMediaVault(OMV)
OpenMediaVault(OMV)はDebian LinuxをベースとしたフリーのNASシステムで、Webブラウザから簡単に設定や管理ができる

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/7e339c5e-0fe1-518a-40b9-4d291373f7c9.jpeg"><br>


## Ⅲ．インストール方法
### １. Openmediavault　

https://docs.openmediavault.org/en/latest/installation/index.html

### ２. OMV-Extrasプラグイン

https://forum.openmediavault.org/index.php?thread/5549-omv-extras-org-plugin/

OMV-Extrasはsshでコマンドラインからインストールする
##### (1) ターミナルの起動
Macであればターミナル、WindowsであればPowerShellを起動
##### (2) サーバに接続
~~~
ssh [NASのIPアドレス] -l root
~~~
##### (3) 以下のプロンプトでyesを入力
~~~
>Are you sure you want to continue connecting (yes/no/[fingerprint])?
~~~
##### (4) rootのパスワードを入力しEnter
##### (5) SSHでサーバに接続、コマンドプロンプトが表示
##### (6) SSHで作業を行わない場合、直接コンソールから
##### (7) コマンドを入力しOMV-Extrasをインストール
~~~
>wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash
~~~
##### (8) 以下のメッセージでインストール完了
~~~
>Press ctrl-shift-R in the browser after signing in to the OMV web interface.
~~~
##### (9) openmediavaultを再起動
Web画面の右上にある電源アイコンより再起動を選択
### ３.  docker_compose

https://wiki.omv-extras.org/doku.php?id=omv6:omv6_plugins:docker_compose

サイドメニューの「Plugins」からdocker_composeをインストール
##### (1)  dockerをインストールする共有フォルダを作成
a.　ストレージ - 共有フォルダを選択し、「＋」アイコンをクリック共有フォルダを作成
b.　名前は「docker」など適当な名前で作成
c.　ファイルシステムは共有ファイルシステムを選択
d.　保存ボタンをクリックし、構成変更のチェックアイコンをクリックし保存
~~~
        /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx　<- ディスク
        |--docker　　　　　　　　　　　　　　　　　　　　　　　　　　　　<- フォルダー
~~~

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/2aad14a0-d074-7395-f2c3-812682571b8f.jpeg"><br>

##### (2) composeのインストール
a.　システム - プラグインから「openmediavault-compose」を選択
b.　画面上部にある、「↓」アイコンをクリックしインストール

##### (3）composeの設定画面を表示
サービス -> compose から 設定 をクリック

##### (4） composeの設定を行う。
a.　SharedFolderの項目で、(1)で作成した共有フォルダを選択
b.　保存ボタンをクリックし、保留中の構成変更の画面にて保存
c.　下部にある「Reinstall Docker」をクリック
d.　Dockerのステータスが「Install and Running」になる
<br><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/27f74759-6984-99e1-3cd4-4ed3bda3095d.jpeg"><br>

### ４. Portainer

https://gigazine.net/news/20210211-portainer/


PortainerはdockerをGUIで管理するWebアプリ
##### (1) Portainerファイルの作成
サービス -> Compose -> Files - Add from Example（白十字のアイコン）から、portainerを選ぶ
##### (2) Fileのvolumeの編集
サービス -> Compose -> Files -> portainer 編集（鉛筆のアイコン）で、Fileのvolumeを書き換える　
~~~
    volumes:
      - /path/to/docker/docker-data/portainer-data:/data
~~~
を共有フォルダー「/portainer/data」に割り当てるように書き換える。共有フォルダーのフルパスは3-(1)でクリップボードにコピーすると簡単、ログインして確認してもよい
~~~
    volumes:
      - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/portainer/data:/data

        /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx
        |--portainer
        |  |--data
~~~
##### (3) Portainerの起動
サービス -> Compose -> Files から、PortainerのコンテナをUp（上矢印アイコン）する

##### (4) Portainerへのアクセス
~~~
http://(OpenmediavaultのIPアドレス):9000/
~~~
最初にadminのパスワードを設定すると、以下のHomeが表示される

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/76a9503b-efb7-187e-74e6-b4fa0a68ca4d.jpeg">

### ５. Paperless-NGX
##### (1) Palerless-NGXのFileの入手
サービス -> Compose -> Files 
Add from Example（白十字のアイコン）から、paperless-ngxを選ぶ
##### (2) Fileのvolumeの編集
サービス -> Compose -> Files -> Paperless-NGX 
編集（鉛筆のアイコン）で、Fileのvolumeを書き換え
~~~
   broker:
    volumes:
    #  -  CHANGE_TO_COMPOSE_DATA_PATH/paperless:/data  <- コメントアウト
       - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/docker/paperlessngx/redis:/data

        /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx
        |--docker
        |  |--paperlessngx
        |  |  |--redis
~~~

~~~
   db:
    volumes:
    # - CHANGE_TO_COMPOSE_DATA_PATH/paperless:/var/lib/postgresql/data  <- コメントアウト
      - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/docker/paperlessngx/db:/var/lib/postgres/data

        /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx
        |--docker
        |  |--paperlessngx
        |  |  |--db
~~~

~~~
   webserver:
    volumes:
    #  - /volume1/docker/paperlessngx/data:/usr/src/paperless/data       <- コメントアウト
    #  - /volume1/docker/paperlessngx/media:/usr/src/paperless/media     <- コメントアウト
    #  - /volume1/docker/paperlessngx/export:/usr/src/paperless/export   <- コメントアウト
    #  - /volume1/docker/paperlessngx/consume:/usr/src/paperless/consume <- コメントアウト

     - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/docker/paperlessngx/data:/usr/src/paperless/data
     - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/docker/paperlessngx/media:/usr/src/paperless/media
     - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/docker/paperlessngx/export:/usr/src/paperless/export
     - /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx/docker/paperlessngx/consume:/usr/src/paperless/consume  

      /srv/dev-disk-by-uuid-xxxxxxxx-yyyy-zzzz-wwww-xxxxxxxxxxxx
      |--docker
      |  |--paperlessngx
      |  |  |--consume
      |  |  |--data
      |  |  |--export
      |  |  |--media
~~~
##### (3)  Enviromentでタイムゾーンを変更
~~~
Environment:
  TZ=asia/Tokyo
~~~
##### (4) Paperless-NGXの起動
サービス -> Compose -> Files から、Paperless-NGXのコンテナをUp（上矢印アイコン）

##### (5) Paperless-NGXへのアクセス
~~~
http://(OpenmediavaultのIPアドレス):8010/
~~~
### ６. ユーザーIDとパスワードの登録
##### (1)  ユーザーの登録方法
Paperless-NGXが起動すると、ユーザーIDとパスワードを求められる
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/697c142f-0529-c35b-11f1-8ccd38d27571.jpeg">

Fileに次の設定があるが、これとは別にユーザー登録の必要がある　
 ~~~
    environment:
      PAPERLESS_ADMIN_USER: paperless
      PAPERLESS_ADMIN_PASSWORD: paperless
~~~

Fileのヘッダーに注意喚起があり、ユーザーの登録方法が記載されている
~~~
#                READ THIS CAREFULLY
#
# To install and update paperless with this file, do the following:
#
# - Open portainer Stacks list and click 'Add stack'
# - Paste the contents of this file and assign a name, e.g. 'Paperless'
# - Click 'Deploy the stack' and wait for it to be deployed
# - Open the list of containers, select paperless_webserver_1
# - Click 'Console' and then 'Connect' to open the command line inside the container
# - Run 'python3 manage.py createsuperuser' to create a user
# - Exit the console
~~~

##### (2)  PortainerからStacks listを表示
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/0b2c02b0-4105-81c1-43bc-be5c942fa92e.jpeg"><br>

##### (3)  Container console からユーザー登録

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/745702/c65eab1a-5857-8b4d-11c9-e61c5da513a4.jpeg">

a)   paperless-ngxをクリックし、Stack detailsからContainersを表示
b)   paperless_webserver_1 のQuick Actionsから、「 >_ 」をクリック
c)   Container console からConnectをクリック
d)   コンソールに「 python3 manage.py createsuperuser 」と入力し、Username , Email Address , Password を設定する
e)   exit で閉じる
~~~
root@5d22a1fd8ac2:/usr/src/paperless/src# python3 manage.py createsuperuser
Username (leave blank to use 'root'): 
Email address: 
Password: 
root@5d22a1fd8ac2:/usr/src/paperless/src# exit
~~~

### ７. 今後の課題
(1) OCRによる文書スキャン
(2) Officeドキュメント(Word、Excel、Powerpoint、LibreOffice)のサポート

### ８. 環境および前提条件
(1)System Information
OMV Version:    6.9.16-1 (Shaitan)
Processor: Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz
Kernel:     Linux 6.1.0-0.deb11.21-amd64
Memory:     8GB

(2)File Systems
/dev/sda1　  1.79 TiB　 ファイル保管用　メイン　
/dev/sdb1　218.06 GiB　 OS起動ディスク
/dev/sdc1　457.38 GiB　 Docker運用 および Backupファイル保管
/dev/sdd1　  1.79 TiB　 ミラーリング用　サブ