くりにっき

フルスタックキュアエンジニアです

さくらVPSにnginx + Tomcat7の構成でJenkinsを入れてみる

さくらVPSにJenkinsを入れた時のメモ。
さくらVPSを使うかAmazon EC2を使うか迷ってたのですが、その辺の経緯はまた別の機会に書きます。

1. さくらVPSに登録する

http://vps.sakura.ad.jp/
お好みのプランを選択。僕は2Gを選びました

ログイン情報がメールで来るまで少しラグがあるため、その間にインスタンスを立ち上げます

さくらインターネットVPSコントロールパネル

f:id:sue445:20130115000657p:plain

2. ログインしてユーザを作る

メールがきたらログインできます

ssh root@【さくらVPSのホスト名】 

でログイン

Are you sure you want to continue connecting (yes/no)?

って聞かれるのでyesを入力。あとはメールに書いてあったパスワードを入れる

下記を参考にユーザ追加とsshの公開鍵登録までやる

「さくらのVPS」借りてみた(作業ユーザー作成,SSH設定) - rubellum's blog


rootのパスワードを変えるのも忘れずに

passwd


毎回ホスト名やパスワードを入れるのは大変なのでローカルPCの ~/.ssh/config に

Host my-vps
  HostName 【ホスト名】
  Port 22
  IdentityFile  ~/.ssh/id_rsa
  User          【yourname】

みたいに書いておくと、次からは

ssh my-vps

でログインできるので便利

3. Tomcat7をインストールする

yumでjenkinsを入れるのが一番手っ取り早いのですが、JENKINS_HOMEが /var/lib/jenkins/ から変えられない(?) のが気になったのでtomcatから入れることにしました。*1

バイナリから入れるのは面倒くさいのでパッケージ管理ツールを使います

tomcat7はデフォルトのリポジトリにはないので追加する

sudo yum -y install yum-plugin-priorities
sudo rpm -Uvh http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm

tomcat7をインストール

sudo yum install tomcat7-webapps

設定ファイルを編集する

sudo cp -a /usr/share/tomcat7/conf/tomcat7.conf{,.YYYYMMDD}
sudo vi /usr/share/tomcat7/conf/tomcat7.conf

メモリやJENKINS_HOMEの値はお好みで設定する

JAVA_OPTS="-Xminf0.1 -Xmaxf0.3 -Duser.timezone=Asia/Tokyo -Xms64m -Xmx256m"
LANG="ja_JP.UTF-8"
JENKINS_HOME="/data/jenkins"

忘れないようにJENKINS_HOMEを作る

sudo mkdir -p /data/jenkins
sudo chown tomcat /data/jenkins/
sudo chgrp tomcat /data/jenkins/

tomxatの設定をいじる

sudo cp -a /usr/share/tomcat7/conf/server.xml{,.YYYYMMDD}
sudo vi /usr/share/tomcat7/conf/server.xml

8080で検索して

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />

のように、「URIEncoding="UTF-8"」 を付け加える。

tomcatの起動は

sudo /etc/init.d/tomcat7 start

起動確認

wget http://localhost:8080

ここでステータスコード200が返ってきてればOK

4. nginxのインストール

同じくyumを利用。apacheを使うかnginxを使うかは好みでいいと思います。
自分の場合仕事でnginxを使うことが多いのでnginxをフロントに立てています。*2

sudo yum install nginx
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

設定ファイルの編集

sudo cp -a /etc/nginx/nginx.conf{,.YYYYMMDD}
sudo vi /etc/nginx/nginx.conf

下記の場所に「include sites-enabled/*;」を追加する

http {
    (中略)

    include /etc/nginx/sites-enabled/*;
}

sites-enabledに設定ファイルを追加

sudo vi /etc/nginx/sites-available/tomcat
upstream tomcat {
  server 127.0.0.1:8080;
}

server {
  listen 80;
  server_name some.yourdomain.com;

  access_log /var/log/nginx/tomcat_access.log;
  error_log  /var/log/nginx/tomcat_error.log;

  root /var/www/tomcat;

  # for Jenkins plugin upload
  client_max_body_size 20M;

  location / {
    if (-f $request_filename) {
      access_log off;
      expires 1h;
      break;
    }

    if (!-f $request_filename) {
      proxy_pass http://tomcat;
      break;
    }
  }
}

document rootを作る

sudo mkdir -p /var/www/tomcat

sites-enabledにシンボリックリンクを作る

sudo ln -s /etc/nginx/sites-available/tomcat /etc/nginx/sites-enabled/tomcat


設定ファイルが正しいかどうかチェック

sudo /etc/init.d/nginx configtest

nginx起動

sudo /etc/init.d/nginx start

5. Jenkinsインストール

mkdir /tmp/
cd /tmp/
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

最新版のwarを取得してwebappsに配置する

sudo -u tomcat cp /tmp/jenkins.war /usr/share/tomcat7/webapps/

ちゃんとデプロイされてるかどうかログを見る

tail -f /usr/share/tomcat7/logs/catalina.out

アップデートする前には念のためwarはどっかにbackupした方がいいです

6. Github/Bitbucket連携

Tomcattomcatユーザで実行されるため、tomcatユーザで秘密鍵と公開鍵を作る

基本的にはgithubに書いてあることをtomcatユーザで行えばいいです
https://help.github.com/articles/generating-ssh-keys

tomcatユーザのホームディレクトリを調べる

grep tomcat /etc/passwd
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat7:/bin/sh

上記だと /usr/share/tomcat7 がホームディレクトリ

sudo chown tomcat /usr/share/tomcat7
sudo chgrp tomcat /usr/share/tomcat7
sudo mkdir -m 700 /usr/share/tomcat7/.ssh
sudo chown tomcat /usr/share/tomcat7/.ssh
sudo chgrp tomcat /usr/share/tomcat7/.ssh
sudo -u tomcat ssh-keygen -t rsa -C "your_email@youremail.com"
sudo -u tomcat chmod 600 /usr/share/tomcat7/.ssh/id_rsa
sudo -u tomcat cat /usr/share/tomcat7/.ssh/id_rsa.pub

出てきた公開鍵をGithubやBitbucketに登録する

最初に手動1回接続してknown_hostsに登録しておかないとJenkinsでcloneできない。

sudo -u tomcat ssh -T git@github.com
sudo -u tomcat ssh -T git@bitbucket.org

これもtomcatユーザで実行するのがポイント


これでURLにアクセスすればJenkinsが使えるようになってると思います。

*1:ファイルサイズが大きくなりそうな時は /data/ に入れた方がいいってばっちゃが言ってた

*2:apacheも高互換性コンピューター言語「XML」を使っているのでいいと思います