【Docker】RancherOSで本格的な自宅サーバーを構築しよう(2) ~ rancher-serverをインストール ~

# rancher-serverをインストールしよう

![rancher-docker.png](https://qiita-image-store.s3.amazonaws.com/0/62822/8c5b23af-8d32-19ff-2922-ac75b50ce7e8.png)


## 関連記事
+ [RancherOSで本格的な自宅サーバーを構築しよう](http://qiita.com/okasho1010/items/da52b4dc12221feca55c)
+ **[RancherOSでrancher-serverをインストールしよう](http://qiita.com/okasho1010/items/305e0af4545901d44a94) ←　今ここ**

+ [RancherOSでrancher-agentを構築しよう](http://qiita.com/okasho1010/items/500c3705d2f4610cebe0)

+ [RancherOSでGlusterFSを使ってデータを永続化しよう](http://qiita.com/okasho1010/items/2620da1b2e93437e8a74)

+ [RancherOSでprivate registory でdocker imageを管理しよう](http://qiita.com/okasho1010/items/cf0a9569638d00a9e451)


+ [RancherのCATALOGのライブラリー一覧](http://qiita.com/okasho1010/items/f6875d5bce2ac6752758) 

##rancherOSインストール
![Rancher-Logo-Final-1.png](https://qiita-image-store.s3.amazonaws.com/0/62822/8a734e4d-b41d-7427-d09d-e033c8fd53f2.png)

### isoの場合

- https://releases.rancher.com/os/latest/rancheros.iso をCDに焼く
- CD起動　(ID:rancher,Pass:rancher)
- touch cloud-donfig.yml
- cloud-config.yml の編集

	```
		#cloud-config
		ssh_authorized_keys:
		  - ssh-rsa AAA...ZZZ example1@rancher
		  - ssh-rsa BBB...ZZZ example2@rancher
	```

	```
		メモ
		基本的な設定はauthorized_keysを書くだけで良い。
		tlsの設定をしようとして、公式docにあるようなsystem-dockerに変数をわたすやつをするとfileシステムが壊れてしまった(バグ？)ので注意
		その時は、サーバーに１度centosを入れ直してパーティションを削除してからまた、rancherOSのインストールをしないと治らない現象がおきた
	```

	```
		rancher:
		  	docker:
			    tls_args: [--tlsverify, --tlscacert=ca.pem, --tlscert=server-cert.pem, --tlskey=server-key.pem,
			      '-H=0.0.0.0:2376']
			    args: [daemon, --log-opt, max-size=25m, --log-opt, max-file=2, -s, overlay, -G, docker, -H, 'unix:///var/run/docker.sock', --userland-proxy=false, (--insecue-registry docker.oooo.com:5000) これを書こうとして壊れた、なくてもこわれた。]
	```

- sshの設定

	```
		基本的には何もさわってない
		RancherOSをインストールすればデフォルトの設定でpassログインが禁止されるから、上の鍵登録は絶対せんといかんばい。
	```

- インストール
	
	```
		$ mkfs.ext4 -L RANCHER_STATE /dev/sda
		$ sudo ros install -c cloud-config.yml -d /dev/sda
	```


### awsの場合
![2000px-AWS_Simple_Icons_AWS_Cloud.svg.png](https://qiita-image-store.s3.amazonaws.com/0/62822/422aa7b8-8111-6ff2-7be0-e34f05532e03.png)

- ES2/ECSで作成
	* VPCを作成してその中で新しいインスタンスを立てる
	* rancheros-v0.4.3-0-amazon-ecs-optimized
	* セキュリティグループ

```
			80 - 80
			22 - 22
			8080 - 8080
			5000 - 5000(private registry用)
```

- ECSで作成
		ECSで作成してもいいが、private registryのときに少しハマったが、
		ECS環境では、ECSクラスタに参加するためインスタンスの起動時にamazon/amazon-ecs-agentコンテナが実行されるので、その後でdockerサービスのみを再起動することが難しい場合があります。インスタンスの再起動も検討しましょう。
		って、(http://dev.classmethod.jp/cloud/docker-registry-recipes/)
		正直ec2のほうが作りやすかった。rancherにするならなおさら。

### vagrantの場合
![963dd071-cdbb-35d7-666b-489ac950fbd3.png](https://qiita-image-store.s3.amazonaws.com/0/62822/a7ceb332-b747-02cb-9fb1-ebaab99b42bf.png)


- https://github.com/rancher/os-vagrant.git をclone
- Vagrantfileを編集
	
```
	-- 8行目$number_of_nodes = 1
	++ 8行目$number_of_nodes = 3
	# ノードの数に合わせて変えればよろし

	#vm間で通信できるようにする
        #ここは環境に合わせてブリッジにするならpublicで
	-- web.vm.network :private_network, ip: ip
	++ web.vm.network :public_network, ip: ip, virtualbox__intnet: "intnet"

```

```

	$ vagrant up

```


```
メモ
	upしたらvagrantのエラーで1個しか立ち上がらんけんノードの回数
	vagrant upせんといかんっぽい

```

```
	$ vagrant ssh {rancher-01<ここはvagrantfileで定義されてる名前01..03>}
```



## 管理画面を走らせる
+ docker run
	- runには1GBの空き容量が必要らしい

		```
		$ docker run -d --restart=always -p 8080:8080 rancher/server
		```

		```
			メモ
				--restart=alwaysをつけて起動すると、
				dockerデーモンの再起動
				マシンの再起動
				どちらでも、コンテナが自動再起動してくれる
		```
		[--restart=alwaysについての考察](http://qiita.com/manabuishiirb/items/f7edf11572f9256018b2)

	- 数分後rancher-serverの8080にアクセスすると管理画面が現れる
	
<img width="1680" alt="Screen Shot 2016-06-07 at 00.02.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/7695661e-1fdf-4cb6-996c-9547a69eb1cb.png">


## HAProxy
- [RancherOSで本格的な自宅サーバーを構築しよう](http://qiita.com/okasho1010/items/da52b4dc12221feca55c)で定義した構成にするためにproxyを設置

```
		rancher-serverにしか80と443ポートを開けてないので
		agent01とagent02にリクエストを振り分ける必要がある。

		さらに、httpをhttpsでリダイレクトをかけるようにしている。

		なお、ロードバランシング方法はroundrobinを採用
```

+ 作業フォルダをつくる


	```
	$ cd
	$ mkdir haproxy
	$ cd haproxy
	$ touch Dockerfile
	$ touch proxy.cfg
	```

- haproxy.cfg

	```

	global
		maxconn     4192

	defaults
	    mode                    http
	    log                     global
	    option                  httplog
	    option                  dontlognull
	    option                  http-server-close
	    option                  forwardfor
	    option                  redispatch
	    retries                 3
	    timeout http-request    10s
	    timeout queue           1m
	    timeout connect         10s
	    timeout client          1m
	    timeout server          1m
	    timeout http-keep-alive 10s
	    timeout check           10s
	    maxconn                 3000

	frontend  http *:80
	    ＃redirect scheme https code 301 if !{ ssl_fc }
	    # ssl を使うならリダイレクトをかける

	    default_backend agent

	#オレオレ証明書などで代用もしくは書かない
	#frontend  https
	#    bind *:443 ssl crt ~/ssl/okamu.ro.pem
	#    default_backend agent

	frontend registry *:5000
	    default_backend registry

	backend agent
	    balance     roundrobin
	    server      agent01 192.168.3.101:80
	    server      agent02 192.168.3.102:80

	backend registry
	    balance roundrobin
	    server 	agent01 192.168.3.101:5000
	    server 	agent02 192.168.3.102:5000

	```

- Dockerfile

	```
	FROM haproxy:1.5
	ADD haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
	#証明書があればコメントアウトを外す
	#RUN mkdir -p ~/ssl
	#ADD ssl/okamu.ro.pem ~/ssl/okamu.ro.pem
	EXPOSE 80
	#EXPOSE 443
	EXPOSE 5000

	```
- proxy run

	```
	docker build -t proxy .
	docker run -d --restart=always -p 80:80 -p 443:443 -p 5000:5000 proxy
	```

##rancherOS(サーバー)のアップデートや管理
### rancher/serverのアップデート
0. rancher/serverの停止

	```
	$ docker stop <container_id_of_original_server>
	```
0. 一時的にvolumeに退避

	```
	$ docker create --volumes-from <container_name_of_original_server> --name rancher-data rancher/server:<tag_of_previous_rancher_server>
	```
0. 新しいバージョンのrancher/serverをpull

	```
	$ docker pull rancher/server:latest
	```
0. 退避しておいたvolumeからrancher/serverをrunする

	```
	$ docker run -d --volumes-from rancher-data --restart=always -p 8080:8080 rancher/server:latest
	```

##その他
###rancherサーバーが落ちてしまったら
- rancherOSのアップデートの手順を踏めばよろし