backlog-jenkins-nginx-dockerでWebサービスを構築_その1
backlog-jenkins-nginx-dockerでWebサービスを構築
Jenkinsサーバーの構築
概要
- 今回はさくらのクラウドのcentos7でやる。
ソース管理
- 今回は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