JenkinsをApache+Tomcatで動かすために頑張った

GitBucket入れるために開発用VPSをもう一台借りたけど、それだけじゃもったいないので開発ツールを色々試してみる。
まずは同じサーブレットで動くので簡単そうなJenkinsを導入してみた。
今回は他のサーブレットと同居したからTomcat(サーブレットコンテナ)に入れたけど、他の例だとRPMで入れてることが多いね。どっちがいいんだろう…
環境は以下のとおり

CentOS 6.5
Apache 2.2.15 → 2.2.27
tomcat 7
Jenkins 1.565

Tomcat7の導入についてはGitBucket導入の記事で説明したので割愛
最初はGitBucket入れた時と同じようにJenkins.warをwebappsディレクトリに突っ込んだら終わりだろうと思っていたけどいくつか問題が発生したので対処した。

まずはJenkinsの導入から
これは単純にwebappsディレクトリに移動してwget

cd /var/lib/tomcat7/webapps/
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

これで8080ポートを閉じてなかったらアクセスできるけど、僕はGitBucketの時Apacheを通すように設定を変えたのでApacheの方に設定する。

vi /etc/httpd/conf.d/jenkins.conf

で新しくJenkins用のコンフィグファイルを作って下記の内容を記述する。

<Location /jenkins>
    ProxyPass ajp://localhost:8009/jenkins
    ProxyPassReverse http://【ドメイン名】/jenkins
</Location>

設定を保存してApacheを再起動するとアクセスが出来るようなってるはずなので「http://【IPアドレス or ドメイン名】/jenkins/」にアクセスする。
Jenkinsのトップページが出てきたら一応導入はできている。
左側メニューの「Jenkinsの管理」ボタンを押して遷移するとエラーが出てたので対処
ここからが少し大変だった。

エラー・警告は3つ(画像ではユーザ設定までやったので2つ + Jenkinsのアプデ)
jenkins
そのうちひとつはログイン無しでページが見れちゃうよーということなので、ログインユーザ作って入れないようにすれば消えます。
ということで残りの二つについて書いていく。

まずは文字エンコードのエラー
これは単純にTomcatエンコード設定を設定してあげると治る。
/etc/tomcat7/server.xmlの設定でAJPのポート(8009)の設定をしているところがあるので下記のように変更する。(URIEncodingの属性を追加)

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

これでTomcatを再起動するとエンコードのエラーは消える。

次に「リバースプロキシーの設定がおかしいようです。」という謎のエラーが出てくる。
詳細ボタンがあるので見てみても英語ページでよくわかんないしググってもなかなか情報が出てこなかった。
そんな中Twitterのつぶやきで対処法を書いてくれている方が!?(ありがたや、ありがたや)


(Twitterページに飛ぶと上記ツイートの返信として詳細が載ってます)
Apacheの設定を変更しなきゃいけないんだけど、新しいバージョンじゃないと設定できない。
CentOSのApacheは古い!
ということでリポジトリを追加してyumアップデートや!
最新のApacheをインスコするためにはCentALTリポジトリ利用
かつこれにはEPELリポジトリも必要なので追加
参考サイト(http://www.javable.jp/blog/225.html)を見ながら導入

rpm -ihv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
vi /etc/yum.repos.d/centos.alt.ru.repo

repo編集

[CentALT]
name=CentALT Packages for Enterprise Linux 6 - $basearch
baseurl=http://centos.alt.ru/repository/centos/6/$basearch/
enabled=0
gpgcheck=0

よし、これでイケると思ってyum updateしてみた。

yum update --enablerepo=CentALT httpd

エラーが出て止まった……
どうやらCentALTのサーバが403で死んでるっぽいのでcentos.alt.ru.repoを書き換えてミラーサイトを利用(参考:http://nullpopopo.blogcube.info/2014/06/centalt403.html)

[CentALT]
name=CentALT Packages for Enterprise Linux 6 - $basearch
#baseurl=http://centos.alt.ru/repository/centos/6/$basearch/
baseurl=http://mirror.sysadminguide.net/centalt/repository/centos/6/$basearch/
enabled=0
gpgcheck=0

これでイケた。改めてyum update

yum update --enablerepo=CentALT -y httpd

正常にアップデートが完了したら、Apacheの設定ファイルを変更する。
まず、バージョンアップしたから/etc/httpd/conf/httpd.confを変更しなければいけない。
同じ階層にhttpd.conf.rpmnewというファイルができていると思う。これが本来新しいバージョンに付属しているコンフィグファイルなのだが既存設定の保護のため有効になっていない。もしhttpd.conf自体何もいじっていないのだったらhttpd.confを削除して.rpmnewのファイルをリネームして使って問題ない。
もし、なにか変更している場合同じように変更して(自分はSERVERNAMEを変更していたのでそこだけ追記)設定を置き換える。
Apacheを再起動したらバージョンが変わっているはず

そして、本来の目的のエラーを消すためのJenkins設定
/etc/httpd/conf.d/jenkins.confを次のように書き換える。

AllowEncodedSlashes NoDecode
<Location /jenkins>
    ProxyPass ajp://localhost:8009/jenkins nocanon
    ProxyPassReverse http://【IPアドレス or ドメイン名】/jenkins
</Location>

一行目は参考サイトに書いていた設定変更
ただこれだけじゃうまく行かずProxyPassの設定の最後にnocanonをつけてあげないといけないみたい。
これでApacheを再起動して再びJenkinsのページを見たらプロクシのエラーは消えているはず

これでめでたくエラーが全部消えて気持ちよく使える状態になった。
長かったけどこんなかんじです。多分NginX+GlassFish使ったりしてたらはまらないエラーなんだろうな~とか思いつつどうしても慣れているApache+Tomcat使ってしまうレガシーエンジニアでした。

コメント

  1. t.ebinuma より:

    プロキシーのエラー回避方法が参考になりました
    ありがとうございます

タイトルとURLをコピーしました