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

# backlog-jenkins-nginx-dockerでWebサービスを構築
Jenkinsサーバーの構築

# 概要
- 今回はさくらのクラウドのcentos7でやる。

### ソース管理
- 今回はbacklogのGitでソースを管理し、PR⇒MERGEをトリガにする。
- githubでも、gitlabでも内容はほぼ同じ

### ビルドサーバー
- jenkins
- 本来であれば、テストやって、検証環境作ったり、カバレッジとったりいろいろしたいけど、いったんはデプロイサーバーにデプロイできればOK

### nginxとdocker
- nginx-proxyとdockerで一つのサーバーにいろいろなアプリを載せてサーバー代を切やる






# jenkins の環境を作成する

## サーバーセットアップ
[参考](https://qiita.com/kazupyong/items/c8acc8dc5a0921798be4)

- port 確認

```
firewall-cmd --list-all
```

- port 開放

```
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
```

- 必要なものをインストール

```
sudo yum install -y java
sudo yum install -y wget
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install -y jenkins
```

## 起動

```
sudo chkconfig jenkins on
sudo service jenkins start
```

- 初期 pwd を勝手に作ってくれるので表示しておく

```
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
```

## アクセス

http://jenkins.enjoy-dev-dep.com:8080/

- このタイミングで必要なものはインストールしておく
- 時間があるので deploy サーバーを作る

# nginx と letencrypt

## nginx インストール

```
sudo yum install -y nginx
```

## nginx の起動

```
sudo chkconfig nginx on
sudo service nginx start
```

## certbot のインストール

```
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
sudo mv certbot-auto /usr/local/bin/
cd /usr/local/bin/
sudo ./certbot-auto certonly --debug
```

## /etc/nginx/nginx.conf の編集

[参考](https://wiki.jenkins.io/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy)

jenkins のファイルを変更

```
vi /etc/sysconfig/jenkins
JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --prefix=/jenkins"
```

- nginx.conf を変更

```
vi /etc/nginx/nginx.conf
```

```
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    upstream jenkins {
        server 127.0.0.1:8080 fail_timeout=0;
    }

    server {
        listen 80;
        server_name ${ホスト名を記述ex)test.test.com};
        return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        server_name ${ホスト名を記述ex)test.test.com};

        ssl_certificate "/etc/letsencrypt/live/${ホスト名を記述ex)test.test.com}/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/${ホスト名を記述ex)test.test.com}/privkey.pem";
        client_max_body_size 30m;

        location / {
            proxy_set_header        Host $host:$server_port;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_redirect http:// https://;
            proxy_pass              http://jenkins;
            proxy_http_version 1.1;
            proxy_request_buffering off;
            proxy_buffering off; # Required for HTTP-based CLI to work over SSL
            add_header 'X-SSH-Endpoint' 'jenkins.domain.tld:50022' always;
          }
    }

 }
```

## nginx と jenkins の再起動

```
sudo service jenkins start
sudo nginx -s reload
sudo service nginx start
```

- 設定されたかをブラウザから確認


## certbot を自動更新

- 10 日おきの午前 1:00 に更新するようにする

```
　# crontab -e
0 1 */10 * * /usr/local/bin/certbot-auto --post-hook"service restart nginx"  > /dev/null
```



[next⇒](https://qiita.com/sugimotosyo/items/21d19723f4004c31075e)