NSCodingでIntをdecodeする際にdecodeObjectじゃなくてdecodeIntegerを使う
// MARK: Properties var hoge: String var piyo: Int // MARK: Types struct PropertyKey { static let hogeKey = "hoge" static let piyoKey = "piyo" } // MARK: Initialization init?(hoge: String, piyo: Int) { self.hoge = hoge self.piyo = piyo super.init() if hoge.isEmpty || piyo < 0 { return nil } } // MARK: NSCoding func encode(with aCoder: NSCoder) { aCoder.encode(hoge, forKey: PropertyKey.hogeKey) aCoder.encode(piyo, forKey: PropertyKey.piyoKey) } required convenience init?(coder aDecoder: NSCoder) { let hoge = aDecoder.decodeObject(forKey: PropertyKey.hogeKey) as! String let piyo = aDecoder.decodeObject(forKey: PropertyKey.piyoKey) as! Int self.init(hoge: hoge, piyo: piyo) }
とか書いてたら、Intのdecodeのところでthread 1 exc_bad_instruction(code=exc_i386_invop subcode=0x0)
が出て落ちた。なにやらnilが返ってきてたぽくて、上記エラーになったみたい?
as! Int
をas? Int ?? 0
とかすると0が返ってきてしまう。入れるところまでは値あるので、なんでかなと思っていじってたら、decodeObject
をdecodeInteger
に変えたら正しい値が返ってきた。Intの扱いで普通にdecodeObject
でもできた部分もあったのでなんでだろ。備忘録。
elasticsearchで、marvel, shield, licenseをremoveする
入れていたmarvel, shieldなどの有料プラグインを外す。(有料プラン1node辺りめちゃ高かったw)
$ /usr/share/elasticsearch/bin/plugin remove shiled $ /usr/share/elasticsearch/bin/plugin remove marvel $ /usr/share/elasticsearch/bin/plugin remove license
shield関連で入れていた設定を解除する。
// ssl周りの設定を解除 $ vim /opt/kibana/config/kibana.yml
まぁ、httpsだけに制限しててもいいっちゃあいいかも。
$ service elasticesearch restart $ service kibana restart
アクセスをオフィスのwifiに限定して、外からはVPNでアクセスできるようにする
オフィスのwifiに接続した状態で、
// 今接続してるグローバルIPを確認 $ curl httpbin.org/ip
サーバーのiptablesの設定を変更して、オフィスwifiのアクセスだけアクセスを許可する。適当にIP=123.456.789.12とする。
// iptablesの設定を編集する $ vim /etc/sysconfig/iptables :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [34:3064] -A INPUT -s 123.456.789.12 -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s 123.456.789.12 -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -s 123.456.789.12 -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state NEW -j REJECT --reject-with tcp-reset COMMIT $ service iptables restart
な感じでINPUT ACCEPT
しつつ、制限したポートのところを-s 123.456.789.12
IP指定してACCEPTする。iptablesの設定は上から見られて、一度読まれると同じ意味のものはそれでFixされてしまうので、後ろに書いても上書きはされない感じ。
Anyways, これで、オフィス以外からはアクセスできなくなる。
VPNアカウントはもう作ってる状況とする。
Macで、VPN使って入れるようにする。以下参考にすればOK。(余談だけど、Macのツールバーの上のところにいつでもVPNに接続できるようにアイコンおけるの便利)
- Mac OS X からの接続方法 - SoftEther VPN プロジェクト
- 特定の接続のみ VPN 経由させる方法。「すべてのトラフィックを VPN 経由で接続」にチェックは不要。 | 雑記 BOOOKs
Elasticsearch、KibanaにShieldプラグインを入れる
ES、Kibanaを本番で使うために、認証を入れられるようにShieldプラグインを入れる。
Shield: Enterprise Security for Elasticsearch | Elastic
環境
- CentOS 6.8
- Elasticsearch 2.4.1
- Kibana 4.6.1
- Shield 2.4
ESとKibanaは入ってるものとする。
Shield入れる
基本この辺そのまま。
Getting Started with Shield | Shield [2.4] | Elastic
// ライセンスインストール(30日無料で、それ以上は有料プラン入らなあかん) $ /usr/share/elasticsearch/bin/plugin install license // ESのshieldプラグイン入れる $ /usr/share/elasticsearch/bin/plugin install shield // Kibanaのshieldプラグイン入れる $ /opt/kibana/bin/kibana plugin --install kibana/shield/latest
設定
kibanaからESにアクセスできるように、kibana4-server-man
というユーザーを作成する。shield/roles.yml
にkibana4_server
というこの役割をするroleがデフォルトで書かれてるので、このroleをこのユーザーに付与する。
$ /usr/share/elasticsearch/bin/shield/esusers useradd kibana4-server-man -r kibana4_server // role書かれてるの確認 $ less /etc/elasticsearch/shield/roles.yml
ログインユーザーを設定する。name: hoge, password: hogehogeで作る。roleはadminにしとく。
$ /usr/share/elasticsearch/bin/esusers useradd hoge -r admin // ユーザー確認 $ /usr/share/elasticsearch/bin/esusers list
SSLの設定
KibanaでShield使う場合はssl化必要。
ここでは使用ドメインに対してSSL化対応は完了してるとする。(まだならここ見る
サイトをSSL化する(VPS, CentOS6 + Apache) - mazeltov7のweb断片)
kibana.ymlにSSL情報書く
$ vim /opt/kibana/config/kibana.yml server.ssl.cert: /path/to/cert/hoge.crt server.ssl.key: /path/to/key/hoge.key (略) shield.encryptionKey: "something_secret" // 再起動 $ service kibana restart
で、アクセスして、ログインできたら、OK。
あ、firewall使ってたら、kibanaでアクセスする、5601を開けておく。
参考:
centosにjava入れる
環境
入れる
参考: JDK 8 and JRE 8 Installation Start Here
確認
// 何も出ない $ java -version $ echo $JAVA_HOME // yumパッケージ確認 $ yum list installed | grep java $ yum list | grep java $ yum list | grep jdk // この辺でjava-1.8.0-openjdkのパッケージが出るので、これを入れる // 入れる $ yum install java-1.8.0 // 確認 $ java -version
サイトをSSL化する(VPS, CentOS6 + Apache)
ssl化の必要できたので、さっとやってみた。大体以下な流れ
1. SSL用の鍵作成とCSRの作成
2. 証明書を申し込みと支払い
3. 証明書等をセット
4. OK
環境:
まず、どこで証明書を買うかを決める
- AWSならこれだと無料でいけるみたい
[AWS Certificate Manager]東京でも無料でSSL証明書が使用可能になりました! | Developers.IO - あとは、個人利用なら
lets encrypt
も可。無料。
が、結局、
ラピッド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