環境構築201903

# はじめに
環境構築時のメモです。
* Amazon Linux AMI release 2018.03
* nvm 0.34.0 (201903)
* node v10.5.3 (201903)　
* redis v2.4.10(201712)
* hubot-slack v4.4 (201712)
* nginx v1.10.3 (201708)
* pyton v3.6.0 (201712)

## 初期設定
```lang:command
$ cat /etc/system-release1
$ sudo yum update -y
$ sudo yum install -y git
```
#### タイムゾーンをJSTに変更する。
```lang:command
$ sudo ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo vi /etc/sysconfig/clock
---
ZONE="Asiz/Tokyo"
UTC=false
---
```
### vim編集
```lang:command
$ vi .vimrc
---
scriptencoding utf-8
set t_vb=
set visualbell
set noerrorbells
---
```

### OSユーザ(例:hoge)作成
```lang:command
$ useradd hoge
$ sudo su - hoge
$ cd /home/hoge
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
$ cat id_rsa ※内容を接続元PCに保存 hoge.pem
※puttyの場合
・Run PuTTYgenを起動
・Load an existing private file を読み込む(load)
・Save public key hoge.ppk
・上記ファイルを"Private key file for authentication"に設定する。
・wheelユーザに追加およびパスワードなしでsudoを利用できるようにする。
$ vi /etc/group
----
wheel:x:10:ec2-user,hoge
----
$ sudo visudo
---
# %wheel        ALL=(ALL)       NOPASSWD: ALL
%hoge      ALL=(ALL)       NOPASSWD: ALL
---
```
## Nginxインストール
```console

$ sudo useradd www
$ sudo groupadd www
$ sudo yum install nginx
$ sudo cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
$ sudo vi /etc/nginx/nginx.conf
---
server{
   listen    80;
   server_name localhost;
   root ***設置場所***;
   charset utf-8;
   index index.html index.htm index.php;
   access_log /var/log/host.access.log main;
}
---
$ sudo service nginx start
$ sudo chkconfig nginx on
```
## redisインストール
```
$ sudo yum --enablerepo=epel install redis
$ sudo service redis start
$ sudo chkconfig --level 35 redis on
$ sudo chkconfig --list | grep redis
```
## nodeインストール
```
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ vi .bashrc
---
if [ -f ~/.nvm/nvm.sh ];then
        source ~/.nvm/nvm.sh > /dev/null 2>&1
fi
---
$ source ~/.bashrc
$ nvm ls-remote nodeバージョン一覧表示
$ nvm install v10.15.3
$ nvm alias default v10.15.3  #恒久的な切り替え
$ nvm ls-remote
$ node -v

nvm自身のバージョンアップ
$ cd ~/.nvm
$ git pull origin master
$ source ~/.bashrc
```
## vue環境構築
```console
$ cd ~/.nvm/versions/node/(バージョン)/lib/node_modules
$ npm install vue-cli
$ cd ~
$ vue create hello-vue
```
ここで、yorkieパッケージをインストール( ./yorkie/bin/install.sh) 処理中にエラーが発生します。
![err.png](https://qiita-image-store.s3.amazonaws.com/0/13507/6751cfa3-d988-35e9-a9a4-10cad8249631.png)
セットアップ中の cd ./hello-vue/node_modules に移動して、直接 $npm install yorkie で正常にインストールできたので、もう一度、vue create を実施したところvue環境を構築することができました。パッケージの整合性か、手順の間違いなのか原因は不明です。

```console
$ cd hello-vue
$ npm install yorkie
$ cd ~
$ vue create hello-vue ※この際に、セットアップ方法を上書きではなく、mergeを選択してください。
$ cd hello-vue
$ npm run serve
```
ブラウザーから、http://IPアドレス:8080 にアクセス
![vue.png](https://qiita-image-store.s3.amazonaws.com/0/13507/d10a011d-e01b-8448-cd97-af2903dae3c4.png)

または、下記の方法でもつくれるが動作がおかしくなることが多い。

```console
[myurioka@ip-172-31-2-14 ~]$ vue ui --host ***.***.***.***(default:0.0.0.0)
🚀  Starting GUI...
🌠  Ready on http://***.***.***.***:8000
```
ブラウザーから、http://IPアドレス:8080 にアクセス
![vue.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13507/8bedd3e4-e853-3493-82de-ede4263718de.png)
## Python3インストール
```terminal
$ yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ vi ~/.bashrc
---
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi
---
$ sudo yum install patch
$ pyenv install 3.6.0
$ pyenv global 3.6.0
$ pip install --upgrade pip
$ pip install bigquery-python
$ pip install beautifulsoup4
$ pip install jupyter
$ jupyter notebook --generate-config
$ python -c "from notebook.auth import passwd;print(passwd())" ※設定
$ vi ~/.jupyter/ 内に jupyter_notebook_config.py
---
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.password = 'sha1:*******' ※
---
```
## Slackbot構築

### Slackにhubotアプリを追加

[Add apps| Slack](https://engineeral.slack.com/apps)

![hubot01png.png](https://qiita-image-store.s3.amazonaws.com/0/13507/c44c56b2-08e4-735c-2cc7-a5b7ad5fadf0.png)

![hubot2.png](https://qiita-image-store.s3.amazonaws.com/0/13507/b2ce95ec-2a6b-033c-5b3d-c35815d601d1.png)

### Hubotインストール
```
$ cd ~/.nvm/versions/node/(バージョン)/lib/node_modules
$ npm install hubot yo generator-hubot coffee-script hubot-slack
$ cd ~
$ mkdir hello-hubot
$ cd hello-hubot
$ yo hubot
$ vi external-scripts.json
---
heroku packageを削除
---
動作確認
$ vi ./scripts/examples.coffee
---
module.exports = (robot) ->
#(コメントアウトを外す) robot.hear /badger/i, (res) ->
#(コメントアウトを外す) res.send "Badgers? BADGERS? WE DON'T NEED NO STINKIN BADGERS"
---
$ export HUBOT_SLACK_TOKEN=<API Token>
$ ./bin/hubot -a slack 
```
Slackでbadgerを入力しリプライを確認
![hubot3.png](https://qiita-image-store.s3.amazonaws.com/0/13507/b8960827-b768-0ab5-24a0-77145eeaabaa.png)

### SlackBot設置
slack からgoogle検索ができるか試す。
下記のアンプルコードを scriptsディレクトリに保存し、hubotを起動する。
```
./bin/hubot -a slack
```

[サンプルコード|SlackBot](https://github.com/myurioka/sample)

slackから作成したアプリに「search is ***」を送信するとreplyが届く。

![hubot5.png](https://qiita-image-store.s3.amazonaws.com/0/13507/fef94c54-d42e-224b-566b-740bb3ce0623.png)