LUCK!

こんにちは、初めまして。エンジニアの杉本翔平です。

backlog-jenkins-nginx-dockerでWebサービスを構築_その1

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

Jenkinsサーバーの構築

概要

ソース管理

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

ビルドサーバー

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

nginxとdocker

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

jenkins の環境を作成する

サーバーセットアップ

参考

  • 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 の編集

参考

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