CentOS7にSupersetを構築する方法



## 構築要件

* Supersetは、VirtualEnvを使用して/var/superset配下に構築する。
* Supersetで通常使用されるデータベースはsqliteだが、MySQLに変更する。
	> [MySQL5.7](http://qiita.com/LowSE01/items/9ecad36ffef4a5a2029c)をインストール&初期設定済みであるものとする。
	
* 使用するポートはデフォルトのままの8088。


## インストール

### 関連ライブラリなど

* ライブラリ群をインストール

	```bash:terminal
	yum -y install git gcc gcc-c++ libffi-devel sqlite-devel openssl-devel cyrus-sasl-devel openldap-devel readline-devel
	```

### PyEnv & VirtualEnvインストール

* python環境はpyenv/virtualenvを通して構築する。

	```bash:terminal
	git clone https://github.com/yyuu/pyenv.git             /usr/local/src/pyenv
	git clone https://github.com/yyuu/pyenv-virtualenv.git  /usr/local/src/pyenv/plugins/pyenv-virtualenv	
	
	cat << \EOS > /etc/profile.d/pyenv.sh
	export PYENV_ROOT=/usr/local/src/pyenv
	export PATH=${PYENV_ROOT}/bin:${PATH}
	eval "$(pyenv init -)"
	eval "$(pyenv virtualenv-init -)"
	EOS
		
	source /etc/profile.d/pyenv.sh
	```
	
### pythonインストール

* PyEnvを通して、Version 2.x.x/3.x.x(最新版はpyenv install --listで確認)をインストール。デフォルトは3.x.xにする。

	```bash:terminal
	source /etc/psourofile.d/pyenv.sh
	pyenv install --list
	pyenv install 2.7.13
	pyenv install 3.5.2
	pyenv install 3.6.0
	pyenv rehash
	pyenv global 3.6.0
	```

* 確認

	```bash:terminal
	python --version
	
	Python 3.6.0
	```

### VirtualEnv環境構築
* /var/superset配下にVirtualEnv環境を構築

	```bash:terminal
	mkdir -p /var/superset
	cd /var/superset
	pyenv virtualenv 3.5.2 superset
	pyenv local superset
	```

### 依存パッケージのインストール

* 必要なパッケージをインストール & 更新

	```bash:terminal
	cd /var/superset
	pip install --upgrade pip setuptools
	```

### supersetインストール

* pipからインストール
	
	```bash:terminal
	cd /var/superset
	pip install superset
	```
	
## 初期設定

### (スキップ可) 使用するDBをMariaDBに切り替える

> 以降の[...]は任意の値に置き換えること。

* MySQL develインストール
 
	```bash:terminal
	yum -y install mysql-community-devel --enablerepo=mysql57-community
	```

* ドライバインストール

	```bash:terminal
	cd /var/superset
	pip install mysqlclient
	```

* データベース作成

	```bash:terminal
	mysql -u root -p -e "DROP DATABASE IF EXISTS [database];CREATE DATABASE [database] DEFAULT CHARACTER SET utf8mb4;"
	```
	
* ユーザー作成
	
	```
	mysql -u root -p -e "GRANT ALL PRIVILEGES ON [database].* TO '[username]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;"
	```
	
* 確認
	
	```bash:terminal
	mysql -u root -p -e "SHOW DATABASES;USE mysql;SELECT User,Host,Password FROM user";
	```

* superset設定変更

	```bash:terminal
	cat << \EOS > /usr/local/src/pyenv/versions/3.5.2/envs/superset/bin/superset_config.py
	SQLALCHEMY_DATABASE_URI = 'mysql://[username]:[password]@[hostname]/[database]'
	EOS
	```
		
### adminユーザー作成

* 管理者ユーザーを作成する

	```bash:terminal
	cd /var/superset
	fabmanager create-admin --app superset --username admin --firstname admin --lastname user --email admin@fab.org --password admin
	```
	
### データベースの初期化

* データベース初期化コマンドを実行

	```bash:terminal
	cd /var/superset
	superset db upgrade
	```

### (スキップ可) サンプルデータインポート

* サンプルデータ取込

	``` bash:terminal
	cd /var/superset
	superset load_examples
	```
	
### ロール/パーミッション作成

* コマンド実行

	```bash:terminal
	cd /var/superset
	superset init
	```

	
## 動作確認

### 起動

* 下記コマンドで実行する

	```bash:terminal
	cd /var/superset
	superset runserver -p 8088
	```
	
### 確認

* ブラウザで http://[hostname]:8088 へアクセスし、下記画面が表示されればOK。

	![Kobito.ZnXito.png](https://qiita-image-store.s3.amazonaws.com/0/102123/48579eff-5efc-f392-ecc8-d444511c540e.png "Kobito.ZnXito.png")


## サービス化

* systemdで制御するよう設定する。

### systemd設定

* Unit定義ファイルを作成

	```
	cat << \EOS > /etc/systemd/system/superset.service
	[Unit]
	Description=superset
	After=network.target
	
	[Service]
	Type=simple
	EnvironmentFile=/etc/sysconfig/superset.conf
	WorkingDirectory=/var/superset
	ExecStart=/usr/local/src/pyenv/shims/superset runserver -p $PORT -w $WORKERS
	ExecReload=/bin/kill -HUP $MAINPID
	Restart=on-failure
	
	KillSignal=SIGINT
	
	[Install]
	WantedBy=multi-user.target
	EOS
	```


* 設定ファイルを作成
	
	```bash:terminal
	cat << \EOS > /etc/sysconfig/superset.conf
	PORT=8088
	WORKERS=2
	EOS
	```

* 確認

	```bash:terminal
	systemctl list-unit-files --type=service | grep superset
	
	superset.service                            disabled
	```

* 自動起動設定
	
	```bash:terminal
	systemctl enable superset
	
	Created symlink from /etc/systemd/system/multi-user.target.wants/superset.service to /etc/systemd/system/superset.service.
	```

## サービス起動

### 起動

* systemctlで起動する

	```bash:terminal
	systemctl start superset
	```

### 確認

* ブラウザで http://[hostname]:8088 へアクセスし、下記画面が表示されればOK。

	![Kobito.ZnXito.png](https://qiita-image-store.s3.amazonaws.com/0/102123/48579eff-5efc-f392-ecc8-d444511c540e.png "Kobito.ZnXito.png")