mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

サイトをSSL化する(VPS, CentOS6 + Apache)

ssl化の必要できたので、さっとやってみた。大体以下な流れ
1. SSL用の鍵作成とCSRの作成
2. 証明書を申し込みと支払い
3. 証明書等をセット
4. OK

環境:

  • CentOS6
  • Apache: Apache/2.2.15 (CentOS6の標準そのまま)

まず、どこで証明書を買うかを決める

が、結局、
ラピッドSSL | さくらのSSL
こちらに決定。

mod_ssl入れる

入ってない場合は入れる。

$ yum install mod_ssl

SSL用の鍵作成とCSRの作成

*鍵をどこに置くかだけど、今回は/etc/httpd/conf/以下にフォルダ作って置いた。他にも/etc/pki/tls/certs以下に置いてたりがデフォっぽい。(ssl.confの設定では、これ以下にあったし、この以下にはダミーも置いてたので、こちらのがええかも…)

$ cd /etc/httpd/conf
$ mkdir ssl.key // 秘密鍵用
$ mkdir ssl.csr // CSR用
$ mkdir ssl.crt // 証明書用

// 秘密鍵作成 (2048bitで作ります)
// パスワード求められます。このパスワード忘れないように
$ openssl genrsa -des3 -out ./ssl.key/hogehoge.com.2016.key 2048

// CSR作成 (さっきのkeyを使って作成する)
// で、ここで国とか組織名とか色々聞かれる
$ openssl req -new -key ./ssl.key/hogehoge.com.2016.key -out ./ssl.csr/hogehoge.com.2016.csr

申し込みと支払いする

ここは各プラットフォームの流れにそってやる。上で作ったCSRの中見を$ cat hogehoge.com.2016.csrしてコピペするシーンもあり。

セットする

審査中・審査後、メールでOOセットしてくれ、とか言われるので、その通りにする。
終わったらこんな感じになってる。

/etc
  |
  |-httpd
    |
    |-conf
      |
      |-ssl.key
      |  |
      |  |-hogehoge.com.2016.key
      |
      |-ssl.csr
      |  |
      |  |-hogehoge.com.2016.csr
      |
      |-ssl.crt
      |  |
      |  |-hogehoge.com.2016.crt
      |  |-intermediate_sha256.cer

で、あとはssl.confに反映させるのと、firewallでsslのポートを通す

$ vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile  SSLサーバ証明書ファイルを指定します。
SSLCertificateKeyFile   SSLサーバ証明書とペアになる秘密鍵を指定します。
SSLCertificateChainFile CSPSSLの中間証明書ファイルを指定します。

$ vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT // これを追加したりする

$ service iptables restart
$ service httpd restart

で、https://hogehoge.comでアクセスして表示されたらOK!

参考:

あと、key, crt, csr !?!?!!?とかの詳しい説明についてはここがわかりやすい。
RSA鍵、証明書のファイルフォーマットについて - Qiita

ざっくり、 keyが秘密鍵
csrが証明申込書(Requestリクエスト)
crt(Certificationなので)証明書
って感じ。(ざっくり…)

CentOSにElasticsearch, kibana, sense, embulkを入れる

バージョン

  • CentOS: 6.8
  • ES: 2.4
  • Kibana: 4.6

Elasticserachを入れる

ここに書いてる感じのことをやる。
Installation | Elasticsearch Reference [2.4] | Elastic

java入ってることを確認

$ java -version

yumでインストール

$ yum install elasticsearch
-> No package elasticsearch available.

こちらにyumで入れる場合が書いてある。
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html

$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
$ vim /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

$ yum install elasticsearch
// chkconfigでよろしくやるように登録
$ chkconfig --add elasticsearch
// もしくは随時起動は
$ service elasticsearch start
// 確認
$ curl 'localhost:9200/_cat/health?v'
// 設定ファイル
$ less /etc/elasticsearch/elasticsearch.yml

ログなどはデフォルトで以下。

path.home=/usr/share/elasticsearch
default.path.logs=/var/log/elasticsearch
default.path.data=/var/lib/elasticsearch
default.path.conf=/etc/elasticsearch

Kibanaを入れる

これもyumで入れる。
https://www.elastic.co/guide/en/kibana/current/setup-repositories.html

// これはさっき入れたのでやらなくてOK
$ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
// ファイル作る
$vim /etc/yum.repos.d/kibana.repo
[kibana-4.6]
name=Kibana repository for 4.6.x packages
baseurl=https://packages.elastic.co/kibana/4.6/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
// インストール
$ yum install kibana
// 自動起動追加
$ chkconfig --add kibana

senseプラグインを入れる

Installing Sense | Sense Documentation | Elastic
senseはkibanaのプラグイン。kibanaのディレクトリで$ ./bin/kibana plugin --install elastic/senseな感じでやると入る。そいえば、kibanaどこいるかなと思って、起動service kibana startして、ps aux | grep kibanaで確認すると/opt/kibanaにあった。
てことで、

$ /opt/kibana/bin/kibana plugin --install elastic/sense

embulkを入れる

GitHub - embulk/embulk: Embulk: Pluggable Bulk Data Loader. http://www.embulk.org

$ curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ embulk --version

あと、elasticsearchにデータ入れたり、mysqlからデータ取得したりの場合、gemをインストールする必要がある。

$ embulk gem install embulk-input-mysql
$ embulk gem install embulk-output-elasticsearch

適宜必要なgemをインストールする。

kibanaのドメインセットアップ

// kibana.ymlに使うipアドレスを記載する
$ vim /opt/kibana/config/kibana.yml
# The host to bind the server to.
 server.host: "123.456.789.123"
$ service kibana restart
// firewallでkibanaのポート5601からのアクセスを許可する
$ vim /etc/sysconfig/iptables
-A INPUT -i eth0 -p tcp -m tcp --dport 5601 -j ACCEPT
$ service iptables restart

http://ドメイン:5601アクセスしてみてkibana画面出たらOK

Autoingestionを使って、Appストアの月次・日時データを取得する。

プログラムでAppストアの月次・日時のインストールデータとかを取りたい場合、Appleが用意したAutoingestionというツールを使うと便利。ドキュメントは以下のあたり。
https://www.apple.com/itunesnews/docs/AppStoreReportingInstructions.pdf
http://www.apple.com/itunesnews/docs/PianoInstructions.pdf
(ドキュメントのバージョンとか、対応するドキュメントがすごいわかりにくい。どこかにまとめててくれ…)
基本的には、ここに書いてるのに沿ってやればOK
iTunesConnectからアプリダウンロード数レポートを自動取得する方法 | zaru blog

Autoingestionなどをインストール

http://www.apple.com/itunesnews/docs/Autoingestion.class.zip
ここからインストールする。中にAutoingestion.classautoingestion.propertiesが入ってる。autoingestion.propertiesのところにログインに使用するAppleIDとパスワードを記載する。

userID = hogehoge@gmail.com
password = hogepiyo  

で、準備完了なので、コマンドを実行

$ java Autoingestion <autoingestion.properties> <vendorid> <report_type> <date_type> <report_subtype> <date_yyyymmdd>

// 2016/10/11の日時レポート取る場合
$ java Autoingestion autoingestion.properties 12345678 Sales Daily Summary 20161011

// 2016/09の月次レポート取る場合
$ java Autoingestion autoingestion.properties 12345678 Sales Monthly Summary 201609

PlayストアとAppストアのインストールデータのタイムゾーン

Playストア

アプリのパフォーマンスの統計情報を表示する - Android - Google Play デベロッパー ヘルプ
google developer consoleでは、表示した端末のタイムゾーン(ローカルタイム)になるけど、csvに落とした時のDateのデータはPSTになってる、ってことなのかな。
インストール・アンインストール・評価はPST、収益はUTC

Appストア

AppアナリティクスはUTCとローカルタイムが選べる。インストールツールのAutoingestion使った場合のcsvのBegin Dateとかはローカルタイムっぽい。日本だとJST

How is a day defined for these reports?
A day starts at 12:00:00 a.m. and ends at 11:59:59 p.m. in the territory’s time zone 

How is a week defined for these reports?
A week starts on Monday at 12:00:00 a.m. and ends on Sunday at 11:59:59 p.m.

What time zone is the report date based on?
When are these reports available?
Reports are available by 6 a.m. in each territory’s respective time zone.

https://www.apple.com/itunesnews/docs/AppStoreReportingInstructions.pdf

dateコマンドでdate: illegal time formatエラー

OSXで、

$ date +"%Y-%m-%d" -d '1 day ago'
> usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

とか出てしまったりorz waaaaatと思ってたら完全にこれだった。。
OSXとGNU系コマンドを揃える - Qiita

OSX

$ echo `date -d '1 day ago' +"%Y-%m-%d"`
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

$ echo `date -v-1d +"%Y-%m-%d"`
2014-10-23

Linux

$ echo `date -d '1 day ago' +"%Y-%m-%d"`
2014-10-23
$ echo `date -v-1d +"%Y-%m-%d"`
date: invalid option -- 'v'
Try 'date --help' for more information.

うむ

gsutilを使ってplayストアのデータを取得する

クリーンインストールしたからか、ローカルにgsutilコマンド無くなってたので、入れ直してみた。
前回はgsutilだけをインストールして使ってたけど、ドキュメントによるとGoogle Cloud SDK入れてその中のgsutilコンポーネント使ってね、って感じに変わってた。
https://cloud.google.com/storage/docs/gsutil_install
Google Cloud SDK Documentation  |  Cloud SDK  |  Google Cloud Platform

普通にインストールしてunzipした後、

$ ./google-cloud-sdk/install.sh // いい感じにパス通してくれたりする(zshもOK)
$ ./google-cloud-sdk/bin/gcloud init // authentificationとかも含めてloginとかする(前回authentificationどうだったけな・・ここやってないとgsutilでのcpでauth失敗する)

できたら、あとは普通に使えるようになる。

$ gsutil cp gs://pubsite_prod_rev_123456hogehgoe.csv ~/Downloads // インストール数とかダウンロード

AndroidストアのデータをElasticsearchに入れてkibanaで表示

データ入れる

ストア管理画面から、アプリデータのcsvファイルを取得して、./app_data/csv/に入れる。 簡単なconfigurationをseed.ymlに書く。

in:
  type: file
  path_prefix: ./app_data/csv/
out:
  type: elasticsearch
  index: app_data
  index_type: android
  nodes:
    - host: localhost

で、

$ embulk guess ./app_data/csv/ -o config.yml

とすると、いい感じにconfig.ymlを作ってくれる!sugoi! タイムゾーン変えたい場合は以下加える。

parser:
  default_timezone: 'Asia/Tokyo'

で、

$ embulk run config.yml -c diff.yml

にて、データ入る。素晴らしい!

ref: Scheduled bulk data loading to Elasticsearch + Kibana 4 from CSV files — Embulk 0.8 documentation

kibanaで表示

例として、アプリのマンスリーレポートのcountryレポートのcsvデータを読み込んだとする。
主要国のcurrent device installとかを出してみる。
Visualizeでフィルターに"Country": "US"として、X-AxisDate-Histogramで、Y-AxisにAggregationでSum(current device installにすでに集計されたデータ入ってるのでそれを表示するために仕方なく。別にmaxでもminでも同じ表示になる。)を設定、FieldCurrent Device Installをセット。これで反映すると日別のUSのアプリインストールされてるデバイス数推移が出る。

んー、なんかもっとスマートにやりたいな。もっといじっていく。