概要
ubuntu Server 13.10 にJenkinsとNginxをインストールしました。
インターネット上に公開するのでBasic認証もかけました。
手順
各種インストール
$ sudo apt-get install jenkins
$ sudo apt-get install nginx
$ nginx -v
$ nginx version: nginx/1.4.1 (Ubuntu)
Nginxのconfigを編集
$ sudo vi /etc/nginx/sites-enabled/default
serverディレクティブの末尾に以下を追加する。
server {
# ...省略...
location /jenkins {
proxy_pass http://localhost:8080;
}
}
Nginxを起動しようとすると怒られる
$ sudo service nginx start
sudo: unable to resolve host <hostname>
のIPアドレスが解決できないのでhostsを修正する。
$ sudo vi /etc/hosts
#127.0.0.1 localhost # コメントアウト
127.0.0.1 <hostname>.localhost <hostname>
Jenkinsの設定
$ sudo vi /etc/default/jenkins
末尾に --prefix=/jenkins
を追加する。
JENKINS_ARGS="$JENKINS_ARGS --preferredClassLoader=java.net.URLClassLoader --prefix=/jenkins"
$ sudo service jenkins restart
トラブルシューティング
接続できない場合、ポートの状態をnmapで確認する。
$ sudo apt-get install nmap
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2014-04-11 00:24 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).
rDNS record for 127.0.0.1: CI01.localhost
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
8080/tcp open http-proxy
$ nmap xxx.xxx.xxx.xxx
Starting Nmap 6.40 ( http://nmap.org ) at 2014-04-11 00:25 JST
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.00036s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
localhostのみ8080がopenされ、外部(xxx.xxx.xxx.xxx)には80のみopenされていることがわかります。
私の場合は、Nginxの設定ファイル/etc/nginx/site-enable/defaultがあるのに、別の設定ファイル/etc/nginx/conf.d/default.confを作って、そっちにproxy設定を書いていたのでserverディレクティブ全体が上書きされてしまっていたと思われます。
Basic認証をかける
パスワードファイルを作成する。
$ sudo apt-get install apache2-utils
$ cd /etc/nginx
$ sudo htpasswd -c htpasswd <username>
$ sudo vi /etc/nginx/sites-enabled/default
locationディレクティブに以下を追加する。
server {
# ...省略...
location /jenkins {
proxy_pass http://localhost:8080; # 追加
auth_basic "Restricted"; # 追加
auth_basic_user_file htpasswd;
}
}
$ sudo service jenkins restart