macにパスワード管理のpassboltをdockerを使って入れてみました

会社でのパスワード管理に、[passbolt](https://www.passbolt.com/)が使えるのでは、考えていました。
少し時間があったので、dockerのイメージを使って、Macに入れてみました。


Passbolt を chrome から http://localhost でアクセスできるようにします。

## DockerHub
- passbolt
https://hub.docker.com/r/passbolt/passbolt/

- mysql
https://hub.docker.com/r/library/mysql/

## 使用したバージョンなど
- docker: 18.03.1-ce-mac64
- passbolt: 2.0.4-debian
- mysql: 5.7.22
  - 8系を使用するとpassboltのAPI側でSQLエラーになり、表のjsonは "internal error occurred" になります
 

## dockerでのセットアップ

### mysqlとpassboltを同一ネットワークにおくためのネットワークを作ります

```bash
docker network create passbolt_network
# ネットワークが作られたのを確認します
docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
999999999999        bridge              bridge              local
999999999999        host                host                local
999999999999        none                null                local
999999999999        passbolt_network    bridge              local
```

### mysqlのコンテナを起動します
 
 ```bash
 docker run --name passbolt-mysql -d -p 3306:3306  --net passbolt_network  -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -e MYSQL_ROOT_PASSWORD=hogehoge -e MYSQL_DATABASE=passbolt  -e MYSQL_USER=passbolt  -e MYSQL_PASSWORD=passbolt mysql:5.7.22 --default-authentication-plugin=mysql_native_password
 ```

 - mysqlを自ホストの3306ポートにバイパスしてコンテナを作成します
 - その際、default-authentication-pluginをnative_passwordに変更しておきます
 - 変更しないと、接続時に "Error: Authentication plugin 'caching_sha2_password' cannot be loaded" となります
 - @see https://stackoverflow.com/questions/49945649/mysql-error-authentication-plugin-caching-sha2-password-cannot-be-loaded

----
 
 - docker ps でコンテナが起動しているか確認します
 
 ```bash
 docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
999999999999        mysql:5.7.22        "docker-entrypoint.s…"   7 seconds ago       Up 6 seconds        0.0.0.0:3306->3306/tcp   passbolt-mysql
```

 
 -  ホストのmysqlクライアントでdockerコンテナ上のmysqlに接続できることを確認します
 
 ```bash
 mysql -h 127.0.0.1 -uroot -phogehoge
 ```

## passboltのコンテナを起動します

```bash
docker run -d --name passbolt-app -p 80:80 -p 443:443 -p 9000:9000 --net passbolt_network  --link passbolt-mysql:mysql -e DATASOURCES_DEFAULT_HOST=passbolt-mysql  -e DATASOURCES_DEFAULT_PASSWORD=passbolt -e DATASOURCES_DEFAULT_USERNAME=passbolt  -e DATASOURCES_DEFAULT_DATABASE=passbolt -e APP_FULL_BASE_URL=https://localhost passbolt/passbolt:2.0.4-debian
```

- passbolt_networkを使ってpassboltをmysqlとリンクして起動します。
- 自ホストのhttp, https, 9000番ポートをバイパスします。

----

- コンテナの起動を確認します

```bash
 docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                              NAMES
999999999999        passbolt/passbolt:2.0.4-debian   "docker-php-entrypoi…"   34 seconds ago      Up 33 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:9000->9000/tcp   passbolt-app
999999999999        mysql:5.7.22                     "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp                                             passbolt-mysql
```
 
 - 管理者権限のユーザを作ります
 
 ```bash
docker exec passbolt-app su -m -c "/var/www/passbolt/bin/cake passbolt register_user -u yourname@yourdomain.com -f first_name -l last_name -r admin" -s /bin/sh www-data



# 以下のように表示されたら、URLをコピーして自分のブラウザに貼り付けます
     ____                  __          ____  
    / __ \____  _____ ____/ /_  ____  / / /_ 
   / /_/ / __ `/ ___/ ___/ __ \/ __ \/ / __/ 
  / ____/ /_/ (__  |__  ) /_/ / /_/ / / /    
 /_/    \__,_/____/____/_.___/\____/_/\__/   

 Open source password manager for teams
---------------------------------------------------------------
User saved successfully.
To start registration follow the link in provided in your mailbox or here: 
https://localhost/setup/install/999999999999999999999999999
```

![passbolt.png](https://qiita-image-store.s3.amazonaws.com/0/79673/11d03df3-bc35-d143-2621-3b4c2e629c99.png)

URLを貼り付けて、上の画面が出れば成功です。

chromeのextensionが、passboltのプラグインが既に他の名前で設定されています、と注意を表示していますが、特に気にしないでください。