見出し画像

Tableau ServerをWindowsマシン上のDockerで動かすまで

色々な試行錯誤の末、弊社のTableau ServerはさくらのVPS上で稼働しています。

おかげさまで良い感じに稼働していたのですが、ある時を堺にメモリ不足に陥りました。VPSのupgradeすれば良いだろうと思っていたのですが、なんとプランは最大のメモリ32G。もう選択肢は残っていませんでした。

時を同じくして、弊社のオフィスでは映像アーカイブのエンコード作業のために、割と強めのWindowsマシンを設置したばかりでした。こいつ、エンコード時は活躍するのですが、通常時は大した稼働をしておらずもったいないですね。ということで、ここでTableau Server動かせないだろうかと検討開始したというのが今回のお話。

コンテナ版のTableau Serverについて

さすがクラメソさんということで、貴重な情報を得ることが出来ました。Docker初心者の僕としては何が何やら分からないので、調べながらすすめて行きます。

WindowsでDockerを動かすには

ここに書かれているように、仮想化を有効化する必要があります。WinのBiosなんて久しぶりに開きました。

BIOSを起動して「Security」タブではなく「Advanced」タブを開くと
「Intel (R) Virtualization Technology」というのがあるので「Enabled」に変更する。
後は再起動。

ということで設定していきましょう。

これをやったあとに、Hyper-vの有効化も必要です。

ここまでくればDocker DesktopをWindowsにインストール出来ます。早速起動してください。

Tableau Server on Linuxからイメージを作る

まずはVPSの方にDockerをインストールしていきます。手順はこちら参照。

既存のものがあれば、それをremoveして再度入れ直すという手順になってます。

イメージをビルドする

こちらはクラメソさんの手順のとおりです。

イメージをsaveしてWindows端末に転送する

ここは書かれていません。

画像1

ビルドしたイメージがこんな感じだった場合、使うコマンドは

docker save

です。saveしたらファイルができるので、そいつをWindows端末に転送しましょう。

Windowsからサーバに接続してファイルを落としてくる

弊社環境は公開鍵認証なので、鍵を作らねばなりません。

PowerShellを使って、キーを作りましょう。詳細はこちら

出来たファイルを開いて公開鍵をコピーして、VPSのauthorized_keysに書き加えます。これで接続の準備はOK。

ファイルはscpコマンドかなんかで落としてきましょう。

ファイルをロードしていきます。

https://rohhie.net/move-a-system-that-built-with-docker-to-another-environment/#RelocationSaveLoad

$ sudo docker load -i apache-test.tar

書かれているように、docker load コマンドでロードしていきます。

ロードしたあとに、Docker Desktopを開くと、imagesの中にリストされていますので、IMAGE IDを控えておきましょう。次のステップで使います。

ロードが完了したらrunしましょう。

docker run \
-e LICENSE_KEY=<Tableau Serverのライセンスキー> \
-e TABLEAU_USERNAME=<初期ログインに使用するユーザーの名前> \
-e TABLEAU_PASSWORD=<初期ログインに使用するユーザーのパスワード> \
-p 8080:8080 -d <イメージのIDかタグ>

こんな形でやります。パスワードに特殊文字がはいってるとエラーになったりします。元環境のデータをリストアする場合は、ユーザーとパスは何でも構いません。どうせ上書きされますので。
注意点ですが、Windows環境だと \ で改行いれるとうまく動きませんでしたので、 \は削除して1行で実行してください。

すると、環境が立ち上がります。

ブラウザから起動を確認する

アクセス先は

localhost:8080

です。とりあえずこれで開いてログインしておきましょう。

元サーバからデータを移管する

元のサーバにログインして、バックアップファイルを作りましょう。

tsm maintenance backup -f 20210924 -d

こんな感じでファイルを作ります。作ったら、そのファイルをDocker側から取得しなくてはいけません。

Dockerにrootログインする

PowerShellから

docker exec -it --user root コンテナID bash

という形でログインするとrootユーザでログインできます。コンテナIDは

docker ps

コマンドを使って取得しましょう。ロードした時のIDとは違うので注意。

諸々インストールとキーを作成

yum -y install openssh-clients
ssh-keygen -t rsa -b 4096

これでキーファイルを作って、VPS側のauthorized_keysに書き込みます。

接続準備が出来たらscpコマンドで先程作ったファイルをダウンロードしてきましょう。

作ったファイルは

mv /var/opt/tableau/tableau_server/data/tabsvc/files/backups/

に動かしてから、

chown tableau:tableau xxxxx.tsbak

とやって、所有者をtableauに変更します。

tableauユーザでDockerログインしてリストア

docker exec -it イメージID bash

という形でDockerにログインしていきます。これで入ると tableau ユーザーでログインすることになります。先ほどと同じようにディレクトリを移動してから

mv /var/opt/tableau/tableau_server/data/tabsvc/files/backups/

一旦TSMを停止します。

tsm stop

次にこちらのコマンドでリストアしましょう。

tsm maintenance restore --file xxxxxx.tsbak

時間はかかりますが、復元されると思います。

復元が終わったら

tsm start

で、Tableau Serverを起動して、

http://localhost:8080

にアクセスしましょう。元のTableau Serverへのログインに使っていたユーザーとパスでログインすることができるはずです。

Tableau DesktopからTableau Serverへのログインをどうするか

いわゆるローカルPCにアクセスすることになります。

localhost:8080とインターネットを接続しなくてはいけません。ここで役に立つのはSlackBotの開発にもよく使っているngrokです。

Windowsにngrokをインストールしてください。手順はログイン後の画面にでているものをそのままやればOK。

./ngrok http 8080

としてngrokを起動することで、8080番ポートに接続するURLをngrokが吐き出してくれます。

Tableau DesktopからTableau Serverにログインする際は、ngrokのURLを使ってログインすればよいのです。


noteにはこれまでの経験を綴っていこうかと思います。サポートによって思い出すモチベーションが上がるかもしれない。いや、上がるはずです。