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
アクセス
- このタイミングで必要なものはインストールしておく
- 時間があるので 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