backlog-jenkins-nginx-dockerでWebサービスを構築②

# デプロイサーバーを作成
[前回](https://qiita.com/sugimotosyo/items/01a93cf9e0bdc8a8920c)の続き。
今回はデプロイ用のサーバーを作る。

# docker

## install

```
#version確認
uname -r
3.10.0-327.el7.x86_64

# 古いDockerを削除
sudo yum remove docker \
                  docker-common \
                  container-selinux \
                  docker-selinux \
                  docker-engine

# 入れなおす
sudo yum install -y yum-utils

sudo yum-config-manager \
  --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

sudo yum makecache fast
yum list docker-ce.x86_64  --showduplicates |sort -r

#出てきたものから選ぶ
sudo yum install -y docker-ce.x86_64

# 起動と自動設定
sudo systemctl enable docker
sudo systemctl start docker
```

# DockerCompose

## install

```
curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > docker-compose

sudo mv docker-compose /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

# バージョン確認
docker-compose --version
>>>docker-compose version 1.12.0, build b31ff33

# グループ作成
# dockerグループがなかった場合
#sudo groupadd docker

sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit
# ログインし直す
```

# Docker レジストリ

## compose 作成

```
mkdir /home/docker
mkdir /home/docker/registry
cd /home/docker/registry
vi docker-compose.yml
```

- docker-compose.yml

```
version: '3'
services:
  registry:
    image: registry:2
    tty: true
    container_name: registry
    restart: always
    ports:
      - "5000:5000"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
```

## レジストリの起動

```
docker-compose up -d
```

# リバースプロキシ

## リバースプロキシの設定

[参考](https://tech.quartetcom.co.jp/2017/04/11/multiple-ssl-apps-on-one-docker-host/#3-%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%92%E6%A7%8B%E7%AF%89)

```
mkdir -p ~/nginx-proxy/certs
vi ~/nginx-proxy/docker-compose.yml
```

- ~/nginx-proxy/docker-compose.yml

```
version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./certs:/etc/nginx/certs:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always
  letsencrypt-nginx-proxy-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-letsencrypt
    volumes:
      - ./certs:/etc/nginx/certs
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    restart: always
```

- 起動

```
cd ~/nginx-proxy
docker-compose up -d
```

# Git

## 最新バージョン

[ここの tar.gz の最新](https://mirrors.edge.kernel.org/pub/software/scm/git/)

https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.2.3.tar.gz

# install

```
####必要なものをインストール
sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

####取得して街道
cd /usr/local/src/
sudo yum install -y wget
sudo wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.2.3.tar.gz
sudo tar xzvf git-1.8.2.3.tar.gz

###入れておく
sudo yum -y install perl-ExtUtils-MakeMaker

####install
cd git-1.8.2.3
sudo make prefix=/usr/local all
sudo make prefix=/usr/local install

###確認
git --version

###tar は削除
cd ../
rm -rf git-1.8.2.3.tar.gz
```

# 鍵をつくる
- デプロイサーバーでgit からpullしなければ不要
[参考](http://hibitomo.hatenablog.com/entry/2015/01/29/211503)

## jenkins サーバー
```
[root@jenkins ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
....

```

- コピペして deploy サーバーへ

```
cat /root/.ssh/{key}.pub
```

## デプロイサーバー

```
# 移動。なければつくる
cd /root/.ssh
vi id_rsa.pub
```

- 登録

```
cat id_rsa.pub >> ~/.ssh/authorized_keys
```

# 動くか確認

```
mkdir /home/repo
cd /home/repo
```

### 鍵をつくる

- deploy サーバー

```
cd /root/.ssh/
ssh-keygen -t rsa
cat id_rsa.pub
```

- backlog から個人設定＞ SSH 公開鍵から公開鍵の登録後、クローンする

```
cd /home/repo
git clone {リポジトリ SSH }
```

### コンテナを立ち上げる

```
cd /home/repo/{リポジトリ名}

docker build -f /home/repo/{リポジトリ名}/Dockerfile-{ブランチ名} -t localhost:5000/ci-{リポジトリ名}-{ブランチ名} .
docker push localhost:5000/ci-{リポジトリ名}-{ブランチ名}
cmd=`docker ps -q --filter name=ci-{リポジトリ名}-{ブランチ名}`
name=`echo $cmd`
if [ "$name" != "" ]; then
docker rm -f ci-{リポジトリ名}-{ブランチ名}
fi
docker run -i -d --rm --net=nginxproxy_default --name ci-{リポジトリ名}-{ブランチ名} localhost:5000/ci-{リポジトリ名}-{ブランチ名}
```

# 必要なパッケージを入れておく

- deploy サーバー

```
yum install -y expect
```


[next⇒](https://qiita.com/sugimotosyo/items/5d60de3c96a7fb1d6079)