virtualboxでネットワーク設定でつまずいたのでメモ
macOSでvirtualboxを作成して windows環境にそのイメージをインポートした際にネットワーク設定ではまった際のメモ
- ovaファイルのイメージをインポート
- ネットワーク設定が正しくならない場合があるので、電源を入れる前にネットワーク設定画面を開いてセーブさせる
ホストオンリーネットワークの追加
[ファイル]→[環境設定]→[ネットワーク]→[ホストオンリーネットワーク]
- 新規にネットワークアダプタを追加する
[アダプター] IPv4アドレス:192.168.33.1 IPv4ネットマスク:255.255.255.0 [DHCPサーバー] サーバーを有効化にチェック サーバーアドレス:192.168.33.100 サーバーマスク:255.255.255.0 アドレス下限:192.168.33.101 アドレス上限:192.168.33.254
elasticsearch+kibanaをCentOS7にインストールしてみた
macOSでVM環境を構築して、elasticsearch(6.x)+kibana(6.x)をインストールした際のメモ
各種ソフトウェアのダウンロード
- virtualboxのダウンロード
- vagrantのダウンロード
vagrantbox.es
- 標準のテンプレートは以下サイトから取得できる
box追加
- centos7.2をインストール
$ vagrant box add centos7.2 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
vagrantFile
Vagrant.configure("2") do |config| config.vm.box = "bento/centos-7.0" config.vm.hostname = "192.168.33.10" config.ssh.insert_key = false config.vm.network "private_network", ip: "192.168.33.10" config.vm.provider "virtualbox" do |vb| vb.name = config.vm.hostname vb.memory = "2048" vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] vb.customize ["setextradata", :id, "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0] vb.customize ["modifyvm", :id, "--cableconnected1", "on"] end config.vm.provision "shell", inline: <<-SHELL sudo systemctl restart network.service yum update -y yum install -y zsh vim tree telnet dstat git tig SHELL end
vagrant up エラーする場合
- 以下のサイトを参考に対処する
- virtualboxを再インストールするとうまくいった
Elasticsearch+kibanaのセットアップ
Elasticsearch requires at least Java 8. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_73.
$ yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel $ java -version openjdk version "1.8.0_151" OpenJDK Runtime Environment (build 1.8.0_151-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
- 参考URL
Elasticsearch6.1.1インストール
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- Installing from the RPM repository
$ sudo vi /etc/yum.repos.d/elasticsearch.repo [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- yumでelasticsearchインストール
$ sudo yum -y install elasticsearch
- 起動設定
$ sudo vi /etc/elasticsearch/elasticsearch.yml ## ElasticSearchをインストールしたIPを設定 network.host: 192.168.33.10 http.port: 9200
- elasticsearchを再起動
$ sudo service elasticsearch restart
- elasticsearchの自動起動設定
$ sudo /bin/systemctl daemon-reload $ sudo /bin/systemctl enable elasticsearch.service
kibana6.1.1インストール
$ sudo vi /etc/yum.repos.d/kibana.repo [kibana-6.x] name=Kibana repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
- yumでkibanaインストール
$ sudo yum -y install kibana
- kinaba.ymlの設定
$ sudo vi /etc/kibana/kibana.yml server.port: 5601 server.host: "192.168.33.10" elasticsearch.url: "http://192.168.33.10:9200"
- kibanaを再起動
$ sudo service kibana restart
- kibanaの自動起動設定
$ sudo /bin/systemctl daemon-reload $ sudo /bin/systemctl enable kibana.service
firewalld設定
- kibanaの5601ポート
- elasticsearch9200ポート
$ sudo vi /etc/firewalld/zones/piblic.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="dhcpv6-client"/> <service name="ssh"/> <port protocol="tcp" port="5601"/> <!-- kibanaポート追加 --> <port protocol="tcp" port="9200"/> <!-- elasticsearchポート追加 --> </zone>
- firewalldの設定反映
$ sudo systemctl restart firewalld
- kinabaへアクセス
elasticsearchのインストールディレクトリ
- /usr/share/elasticsearch
Plugin
- kuromoji
- Kibana上で日本語を正しく解析する際に必要となるプラグイン
cd /usr/share/elasticsearch
sudo bin/elasticsearch-plugin install analysis-kuromoji
Elasticsearch6を利用する前に読んでおいたほうがいいもの
Content-Typeを指定しないとエラーになるので注意
curl -H "Content-Type: application/json" -XPOST http://192.168.33.10:9200/blog/article/2 -d ' { "title": "My Name Is Kitagawa", "content": "I love cat", "tags": ["red", "green", "blue", "orange"] }
- jsonで一括登録する方法
$ cat requests { "index" : { "_index" : "ropeway", "_type" : "event" } } { "test" : "fukuda" } curl -X POST -H "Content-Type: application/x-ndjson" http://192.168.33.10:9200/_bulk?pretty --data-binary "@requests"
ElasticsearchとRDBとの比較
- インデックス:データベース
- マッピングタイプ:テーブル
- カラム:フィールド
- レコード:ドキュメント
パッケージ構成
パッケージ構成は、大まかに分けて3種類...
One Package
- Repository自体を単一のパッケージとみなす
- Coverageが取りやすい
- Libraryなど、簡素な構成で済むものに向いている
. ├── ctx.go ├── debug.go ├── error.go ├── handler.go ├── handler_func.go ├── jsonrpc.go ├── method.go └── parse.go
Flat Package
- 各パッケージの責務を明確にし、分割を行う
- 機能ごとに分割しているイメージ
- Go言語の標準パッケージの構成に親しい考え方
- 階層を掘ったとしても、2階層ぐらいで落ち着く
- パッケージの責務を明確にし、お互いに疎結合を心がける
- Micro Serviceや、Middlewareなどに向いている
. ├── ctx │ └── ctx.go ├── debug │ └── debug.go ├── error │ └── error.go ├── handler │ ├── handler.go │ └── handler_func.go ├── jsonrpc.go ├── method │ └── method.go └── parse └── parse.go
Multiple Packages
. ├── controller │ ├── debug │ │ └── debug.go │ └── handler.go ├── jsonrpc.go ├── model │ ├── ctx │ │ └── ctx.go │ ├── error │ │ └── error.go │ ├── marshal │ │ └── unmarshal.go │ └── method │ └── method.go └── view └── index.html.tpl
DDD(ドメイン駆動設計) Domain-Driven Design
- 顧客と開発者が業務を戦略的に理解し、共通の言葉を使いながらシステムを発展させる手法
- DDDでは大規模な1つのシステムとデータベースで構築するのではなく、業務にとって適切な独立したシステムに分割する
レイヤードアーキテクチャ
- ドメインロジックと、それ以外(DBやViewなど)を切り離すのが目的
Lightweight DDD
src/ └── myapp ├── application ├── domain ├── infrastructure ├── interfaces └── library
4つのLayerで構成
- Application
- Domain
- Infrastructure
- Interface(s)
Application Layer
- Domain layerの処理をまとめInterface Layerに提供
- Flat Packagesの思想でパッケージ分割
- interパッケージに活用し、共通ロジックを隠蔽
- Domain Layer
- Domain Layerは、他Layerには依存しない
- Entityや、Enum,Interfaceを提供
- Infrastructure Layer
- GAEのライブラリをWrap
- 基礎的な処理を保持
- Logging
- Validation Rule
- World Filtering
- Value Get/Set in Context
- Persistence
- Interface Layer
- JSON-RPCのHandler群
- Search.FindProducなど
- Original Error定義
- 32044:Not Foundなど
- Interceptor群
- Contextに色々詰める
- Action Loggerなど
- その他
- Startup処理、状態取得
- JSON-RPCのHandler群
最適なパッケージ構成
相互参照せずに快適に開発を進められるパッケージ構成を見つけるのは難しい
第1ケース
プロジェクトルートに展開する
. ├── db.go ├── errors.go ├── handler.go ├── main.go └── model.go
概要
- ほぼ全てのファイルをプロジェクトルートに展開するやり方、mainパッケージに集約する
- utlity的な共通処理も、構造体もinterfaceもその実装も、全て同じ階層にあれば、パッケージを切る必要がない
特徴
- CLIツールや小さめのサーバー、あるいは小さめのパッケージなどには適している
デメリット
- 中規模以上のAPIサーバーを用意するとなると厳しい
- 20個以上とかファイルが乱立すると分かりにくくなる
第二ケース
MVC
. ├── main.go ├── clients ├── config ├── controllers ├── models └── views
. ├── main.go ├── clients ├── config ├── controllers ├── models ├── article └── user └── views
- リソースごとにパッケージを区切りたくなるが、これでは大体相互参照の問題にぶつかる
article.goとuser.goなど、構造体やそれに付随する実装を全てmodelsディレクトリ直下に展開するという流れがある
小さめのAPIなら許容できなくいが、主要APIとして利用されるサーバーコードを書くときはリソースが多くなり、goのソースコードのファイルが多くなる
参考URL
PyCharmでpythonを動作させてみた
- python2.系とpython3.系をwindows環境にインストール
- virtualenvで切り替えが可能なのでいいかも...
C:\Users\xxxx>python Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> ^Z C:\Users\xxxx>py -2 Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AM D64)] on win32 Type "help", "copyright", "credits" or "license" for more information.
python2.系とpython3系のダウンロードは以下から
goのglideを使用してみた
GOPATHは以下に設定 /User/xxxx/go/
glideを使うときはGOPTAHに注意!
GOPATH/src配下にプロジェクトがないと動かない!!
パッケージ構成は以下のようにした
myproject ├── glide.lock ├── glide.yaml ├── main.go └── vendor └── github.com └── go-easylog └── el ├── README.md ├── logger.go ├── logger_test.go ├── rotator.go └── rotator_test.go
- glide initで初期化
$ glide init
- glide getでパッケージの追加
$ glide get github.com/go-easylog/el $ cat glide.yaml package: myproject import: - package: github.com/go-easylog/el $ cat glide.lock hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx updated: 2017-11-30T17:38:28.956562+09:00 imports: - name: github.com/go-easylog/el version: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy testImports:
- vendor配下が作成していない場合は以下のコマンドでインストール
glide install
- 詳細は以下を参考