Metabaseが流行ってきてますね。記事もちらほら見かけるようになりました。
- OSSのデータ可視化ツール「Metabase」が超使いやすい - Qiita
- MetabaseがRedashの苦労を吹き飛ばすくらい熱い
- Metabase BIツールをAWS Elastic Beanstalkで構築してみた - Developers.IO
- Metabaseがすごく良い - itFun.jp
- MetabaseをAzure Web App for Containersで動かしてみた
ということでさくらのクラウド上にMetabaseを構築してみました。
===>【2018/1/30追記】HTTPS対応版について記事書きました。
続・さくらのクラウド上にMetabaseを構築する【HTTPS対応版】
ドメインをお持ちの方はこちらも是非お試しください。
<=== 追記ここまで
Metabase環境構築 on さくらのクラウド
今回はさくらのクラウドのリソースマネージャーを利用して環境構築してみました。
今回の環境
今回MetabaseはDockerで動かします。Docker用のホストはRancherOSを使用します。 Metabase用のデータベースとしてPostgreSQL(さくらのクラウド上のデータベースアプライアンス)を利用します。
構築手順は以下の通りです。
- 1) サーバへのSSH用公開鍵をコンパネから登録
- 2) リソースマネージャでテンプレート作成&反映
1) サーバへのSSH用公開鍵をコンパネから登録
サーバへのSSH接続時に利用する公開鍵をコンパネなどから登録しておきます。 登録時に指定した名前を控えておいてください。
2) リソースマネージャーでテンプレート作成&反映
続いてリソースマネージャーにてテンプレートを作成します。 以下のtfファイルをコピペで登録してください。 なおtfファイルの最初の方にパスワードや先ほど登録した公開鍵の名称を指定している部分があります。 忘れずに各自で置き換えてください。
### 概要 # データベースアプライアンス(PostgreSQL)とRancherOSでMetabase実行環境を構築するテンプレート # # このテンプレートはRancherOS上のDockerでMetabaseを実行する構成となっています。 # Metabaseのバックエンドとしてデータベースアプライアンス(PostgreSQL)を利用します。 # ### 変数定義 locals { #********************************************* # パスワード/公開鍵関連(!!!要変更!!!) #********************************************* # サーバ管理者のパスワード server_password = "<put-your-password-here>" # データベース接続ユーザーのパスワード database_password = "<put-your-password-here>" # さくらのクラウドに登録済みの公開鍵の名称 ssh_public_key_name = "<put-your-public-key-name>" #********************************************* # サーバ/ディスク #********************************************* # サーバ名 server_name = "metabase-server" # サーバホスト名 host_name = "${local.server_name}" # サーバ コア数 server_core = 2 # サーバ メモリサイズ(GB) server_memory = 4 # ディスクサイズ disk_size = 20 #********************************************* # ネットワーク(スイッチ/パケットフィルタ) #********************************************* # スイッチ名 switch_name = "metabase-internal" # パケットフィルタ名 packet_filter_name = "metabase-filter" #********************************************* # データベースアプライアンス #********************************************* # データベースアプライアンス名 database_name = "metabase-db" # プラン database_plan = "30g" # 10g/30g/90g/240g # 接続ユーザー名 database_user_name = "metabase" # バックアップ時刻 database_backup_time = "01:00" } ### サーバ/ディスク # パブリックアーカイブ(OS)のID参照用のデータソース(RancherOS) data sakuracloud_archive "rancheros" { os_type = "rancheros" } # 公開鍵のID参照用のデータソース data "sakuracloud_ssh_key" "ssh_public_key" { name_selectors = ["${local.ssh_public_key_name}"] } # ディスク resource "sakuracloud_disk" "disk" { name = "${local.server_name}" source_archive_id = "${data.sakuracloud_archive.rancheros.id}" hostname = "${local.host_name}" password = "${local.server_password}" note_ids = ["${sakuracloud_note.provisioning.id}"] ssh_key_ids = ["${data.sakuracloud_ssh_key.ssh_public_key.id}"] disable_pw_auth = true lifecycle { ignore_changes = ["source_archive_id"] } } # サーバ resource "sakuracloud_server" "server" { name = "${local.server_name}" disks = ["${sakuracloud_disk.disk.id}"] core = "${local.server_core}" memory = "${local.server_memory}" packet_filter_ids = ["${sakuracloud_packet_filter.filter.id}"] additional_nics = ["${sakuracloud_switch.sw.id}"] } # スタートアップスクリプト(IP設定、metabaseコンテナ起動) resource "sakuracloud_note" "provisioning" { name = "provisioning-metabase" class = "yaml_cloud_config" content = <<EOF #cloud-config rancher: console: default docker: engine: docker-17.09.1-ce network: interfaces: eth1: address: 192.168.100.10/28 dhcp: false services: metabase: image: metabase/metabase:latest ports: - "80:3000" environment: MB_DB_TYPE: postgres MB_DB_DBNAME: metabase MB_DB_PORT: 5432 MB_DB_USER: ${local.database_user_name} MB_DB_PASS: ${local.database_password} MB_DB_HOST: 192.168.100.2 restart: always EOF } ### データベースアプライアンス resource "sakuracloud_database" "db" { name = "${local.database_name}" database_type = "postgresql" plan = "${local.database_plan}" user_name = "${local.database_user_name}" user_password = "${local.database_password}" allow_networks = ["192.168.100.0/28"] port = 5432 backup_time = "${local.database_backup_time}" switch_id = "${sakuracloud_switch.sw.id}" ipaddress1 = "192.168.100.2" nw_mask_len = 28 default_route = "192.168.100.1" } ### ネットワーク(パケットフィルタ) resource "sakuracloud_packet_filter" "filter" { name = "${local.packet_filter_name}" expressions = { protocol = "tcp" dest_port = "22" description = "Allow external:SSH" } expressions = { protocol = "tcp" dest_port = "80" description = "Allow external:HTTP" } expressions = { protocol = "icmp" } expressions = { protocol = "fragment" } expressions = { protocol = "udp" source_port = "123" } expressions = { protocol = "tcp" dest_port = "32768-61000" description = "Allow from server" } expressions = { protocol = "udp" dest_port = "32768-61000" description = "Allow from server" } expressions = { protocol = "ip" allow = false description = "Deny ALL" } } ### ネットワーク(スイッチ) resource sakuracloud_switch "sw" { name = "${local.switch_name}" }
tfファイル編集画面で「タブ分割/統合」ボタンを押すと以下のようにtfファイルをタブで分割してわかりやすく表示してくれます。 変更すべき内容は「変数定義」タブにまとめていますので目を通しておくのがオススメです。
登録後はリソースマネージャーのコマンドから計画/反映
を実行するだけです。
なお、手元の環境では2分ほどで構築完了しました。
動作確認
構築が完了したらhttp://<サーバのグローバルIP>
にアクセスするとmetabaseの画面が開くはずです。
後は画面に従って初期ユーザーの作成などを行うだけです。
終わりに
Metabaseいいですね! 以上です。