情報銀行のプラットフォームとして利用できるかもしれないPersonium（PDS） を検証してみる ２ ＜Personiumに触れてみるには＞

#「Personium」を使って何ができるのかを検証するには、まずは触れてみたい。


せっかちな私はいつもそう思います。
そりゃそうです。百聞は一見にしかず… しかも「Personium」はOSSなんだから当然すぐに触れられると思っていました。そんな私は求めすぎでしょうか？？

そしてここから深い深い迷宮に迷い込みます…

##１．まずはググるべさ…

以下の様なワードでググってみます。

『 personium  インストール 』　　　　『 personium  動かす 』　　　　　『 Personium  デモ環境 』
![image.png](https://qiita-image-store.s3.amazonaws.com/0/352554/4472b85a-3414-cf80-b075-6f7fb36431e5.png)

#####残念ながら、上記のワードではスムーズにPersoniumに触れる方法を素早く見つけるという願いは叶いません。


##２．おまじない はユニット構築

###おまじないは＂ユニット構築＂だったようです。
#####　参照ドキュメント：https://personium.io/docs/ja/server-operator/

［Top］>［Document］>［User Guide］>［for Server Softwere Operator］
![image.png](https://qiita-image-store.s3.amazonaws.com/0/352554/f5229365-b311-f1b0-e727-237e3c44dda1.png)

『 personium  ユニット構築 』でググり、以下の様に辿ると、この章での目的である＂触れる＂ことができそうな気がしてきました… 
私はたぶん、ここに辿り着きそして何度もこのページを開けるようになるまでに、少なくとも1日は費やしたかと思いますが、しかし挫折する前にここに辿り着けたことはラッキーでした。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/352554/c02924f2-2229-98f2-e69a-07b4e95efe9a.png)


##３．ユニット構築に向けて
「ちょっとPersoniumに触れてみたい」を実現するために＂構築＂するには以下の2つの方法があるようです。そしてここでわかりました。更に良い**おまじない**は『 personium  セットアップ 』だったのでした…

- [OpenStack Heat](https://github.com/personium/openstack-heat)
- [Ansible](https://personium.io/docs/ja/server-operator/setup.html)


そして私は導かれるかのように、リンク先が日本語で記載されている「Ansible」を迷わず選択することになるのです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/352554/8bfa4cf5-66a8-bb0b-9504-2aefe9b2d384.png)


##4．現実的な「personium」に触れるための方法の整理
その後Personiumチームとコミュニケーションをとったり、Slack内でのやり取りを私が確認できる範囲でみると… 以下の4つの方法があると思われます。
※ 以下の整理が正しいかチームに確認し、間違っている部分があれば修正する。

|セットアップ手法|説明|備考|
|:--|:--|:--|
|[OpenStack Heat](https://github.com/personium/openstack-heat)|CentOS上に3台構成のユニットを構築するための<br>サーバー自動構築ツール|Personiumを構築するわけではなく<br>3台構成用のサーバー作成を自動化<br>することが可能<br>＂触る＂レベルで自動化は不要|
|[Ansible](https://personium.io/docs/ja/server-operator/setup.html)|CentOS上に1台構成もしくは3台構成のユニット<br>を構築しオープンなユニット運営者になれる|1台にも3台構成にも対応しており、<br>日本語のドキュメントもあり<br>これの選択が適切と思われる|
|[Vagrant](https://github.com/personium/setup-vagrant)|VirtualBoxやVMware上に1台構成のユニットを<br>構築しクローズドなユニット運営者になれる|公開されたVM上にセットアップ<br>することもできるのかもしれ<br>ないが、一般的にはローカルPCに<br>適用している場合が多く、さらに<br>ローカルな環境でプロキシーなど<br>を通している場合厄介なことが<br>多いようである|
|デモ環境|チームが管理している構築済みのユニット<br>からセルと呼ばれるアプリを配置したり<br>データを保管することができるデモ用の環境を<br>払い出してもらう仕組み<br>|これは＂外の人＂にも提供されて<br>いるのかは私には不明で、この<br>環境について謳われている<br>ドキュメントにも辿り着けない。<br>そのうえこのセルを払い出して<br>もらう場合は、コミュニティ内<br>で＂セルをちょうだい＂と要求する<br>勇気が必要となる|

※ Vagrant 以外に Docker に落とし込む作業もされている様ではあるのですが、まだ公にリリースはされていないと思います。ただどちらもシンプルに建てるだけなら短時間でセットアップはできるかと思います。
しかしPersoniumは内部で証明書を抱えている必要があるため、少し応用しようと思うとこの証明書を環境に正しく合わせておく必要となる場合があり、この重要性を理解せず＂触る＂ことを始めると、思った通りに動かない理由がなかなか理解できな事態に陥ることが容易に想像できますので、注意が必要です。


##５．Ansibleの実行でつまずいたポイント
導かれるかのように「Ansible」を選択し、ほどなく＂触る＂ことが実現できるとワクワクしながら、[Github：personium/ansible](https://github.com/personium/ansible/tree/master/1-server_unit) を元に構築作業に進むのだが、その期待は簡単に裏切られることとなるのでした。

#####しかしここで何度もコミュニティに質問することとなり、質問することに対しするハードルが低くなり、的確にわかりやすく質問をすることにより、適切な回答を素早く返してもらえる関係が築けたのだと思います。
この頃から私の質問攻勢が激しくなり、コミュニティ内の殆どの質問が私の質問のような状況になったりもしましたが、チームの皆さんが真摯に対応していただいたことにより、私の理解が深まったことは確かですし、何よりも今ではユニットを新しく１つ建てるのは全く苦にならない手順を確立できたのでした。
めでたしめでたし…

###つまずいたポイント
- Ansibleを実行するためのキモとなるホルダーのCopyとRenameが必要であったのだが、[ドキュメント](https://github.com/personium/ansible/blob/master/1-server_unit/README.md)への記載漏れで前に進めず。（[ドキュメント](https://github.com/personium/ansible/blob/master/1-server_unit/README.md)は修正済み）
- セットアップに必要なJDKが毎日13:00ころになるとダウンロードできなくなる事象があり、15:00以降に再DLを試みる必要がある。（別の対応方法を発見しているので、それは別途記載する）
- 証明書のCSR作成時に[ドキュメント](https://github.com/personium/ansible/blob/master/1-server_unit/README.md)に＂optional＂との記載があり、値を登録しなかったが実際には必須だった。（現在は[ドキュメント](https://github.com/personium/ansible/blob/master/1-server_unit/README.md)は修正済み）
- static_inventory/hosts の＂base_url＂の設定値に、ドキュメントでは不要な表記であったが＂ https:// ＂が必要だった。（Ansibleで対応済み。https://が有っても無くてもうまく調整してくれる様修正済み）
- その当時の最新バージョンの personium_core はAzureとは相性が良くなかったらしく、旧Verをセットアップすることで回避。（Version:1.16.15で発生した事象で、現在のVersion:1.17.2などでは解消済み）

※ まぁ、つまずいたポイントも分かってしまえば＂たったの＂これだけなのですがね…
＂触る＂レベルのステージのユーザが、それぞれのポイント1つを解決するために 「現象の発見」 「問題点の整理」 「コミニュティへの質問」 「回答を待つ」 「対策の実施」 という工程を経ると、まる1日くらいはすぐに過ぎ去り、それが5つもあると1weekは簡単に失われてしまいます。
立て続けに3つもぶち当たれば心は簡単に折れますよ…


##６．Ansibleでのセットアップの工程（証明書は Let's Encrypt で取得）
セットアップの工程は以下の程度です。2〜3時間程度で実施できます。

とはいえ「社内の検証作業を命じられているけど＂セキュリティや予算の問題＂で自由に使えるサーバーが無い」ような場合、1〜3の工程が1番の難関なのかもしれませんね…

1. セットアップ対象のサーバー（インスタンス）を建てる（静的な Global IP も取得すべき）
2. セキュリティグループなどで、ssh・http・httpsのポートを必要な範囲で解放する
3. 取得した Global IP を DNS に登録し FQDN でアクセスが可能なことを確認する
4. Gitに公開されている、Personium用の [Ansible](https://github.com/personium/ansible.git) をCloneし対象のサーバーに配置する
5. [Ansible setup instruction](https://github.com/personium/ansible/blob/master/1-server_unit/Ansible_Settings_Instruction.md)を参考に、Ansibleの設定ファイルを環境に合わせて修正する
6. サーバー間での通信に利用したりする、ユニット証明としてのサーバ証明書を生成する（openssl）
7. nginx にセットする、サーバ証明書を Let's Encrypt で取得する
8. 公開鍵の生成
9. Ansible の実行
10. personium-plugins が Ansible には含まれていないので、それをインストールする
11. ユニットマネージャでの確認


##７．Ansibleでの構築のまとめ
ここまでで説明した様に、つまずくポイントを事前に排除できていれば、セットアップの工程は大きく10工程程度であり、慣れてくると結構素早く＂触る＂状態にすることができるのですが…
挫折しそうになっている人が、このエントリーを見つけて、スムーズに触ることができるようになり、さらに本質的な内容での疑問点などを見つけ、コミュニティに質問してもらえるようになると嬉しいですね。

####実際にスムーズに構築ができるためのAnsibleの手順は、この後のエントリーで細かく記載します
#####[＜Ansibleでインストールする＞](https://qiita.com/takky0330/items/19449b05e8b2775382d5)


また、コミュニティ内の動きを見ていると、みなさんは Vagrant でローカルにユニットを建てる方法を選択されていますね。っというか自身のCloudのインスタンスにAnsibleでユニットを建てている希少はアホは、もしかしたら私だけかもしれません…
なのでまずは Vagrant でトライして、物足りなくなったらサーバを建てるような順序の方がいいのかもしれませんね。

実際、Ansibleでつまづいたポイントでコミュニティに質問した場合も、自身でユニットを建てていることをびっくりされている様に感じた時もあります。なので私の Ansible を選択した判断が正しいのかはわかりませんが、これを体験しておいて損はないと思いますし、いろいろ応用できる視点を持てたと思います。


---

####メニュー
- [x] [１＜はじめに＞](https://qiita.com/takky0330/items/5352a820e5e59747218c)
- [x] [２＜Personiumに触れてみるには＞](https://qiita.com/takky0330/items/6e7e5686c8ab2a25f7e8)
- [x] [３＜Ansibleでインストールする＞](https://qiita.com/takky0330/items/19449b05e8b2775382d5)
- [x] [４＜ざっくりとPersoniumとは＞](https://qiita.com/takky0330/items/7781d0cb4ac879b65ab5)
- [x] [５＜APIでアクセスしてみる＞](https://qiita.com/takky0330/items/270a5c5386fd80d5d3c1)
- [x] [６＜VirtualBoxイメージでサクッと触る＞](https://qiita.com/takky0330/items/788ff75f675c9207ad6e)
- [x] [７＜APIでWebDavを触ってみる＞](https://qiita.com/takky0330/items/42febbf90de2986bb452)
- [x] [８＜APIでODataを触ってみる＞](https://qiita.com/takky0330/items/c1809ad5f3f7f85430ad)
- [x] [９＜APIでExtRoleを触ってみる＞](https://qiita.com/takky0330/items/74285b516e06fc00edad)
- [ ] １０＜セルとボックスについて理解する＞
- [ ] １１＜ホームアプリを触ってみる＞
- [ ] １２＜ユニットマネージャって便利じゃん＞
- [ ] １３＜テンプレートアプリってなんぞや＞
- [ ] １４＜自分のアプリケーション＞


- [x] [＜成功した手順＞ 新しいバージョン（1.7.9）の Personium を Ansibleでインストールする](https://qiita.com/takky0330/items/9598498f8dbb9681fc9b)
- [x] [＜失敗した手順＞ 新しいバージョン（1.7.9）の Personium を Ansibleでインストールする](https://qiita.com/takky0330/items/1706be1e23122ec2ac86)