2015/03/31更新

[サーバー] さくらVPSのセットアップ② 〜 nginxのインストール、Jenkinsのインストール、nginxとJenkinsの接続(リバースプロキシ)、nginxとPHP、パケットフィルタリング、など 〜

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
前回に引き続き、CentOSへのセットアップを行ったので、作業内容などを残しておきたいと思います。

画像

Special Thanks to https://flic.kr/p/7XUm8L




目次




nginxのインストール

Webサーバーとして今回はApacheではなくnginxに挑戦します。インストールは簡単でyum経由でインストールできます。
# CentOS6系の場合
# nginxのレポジトリをyumに追加
$ rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

# yum経由でインストール
$ yum install nginx

# 起動
$ service nginx start

# 起動確認
$ curl http://localhost

# OS起動時に自動起動するように設定する
$ chkconfig nginx on

# 再起動して確認してみる
$ reboot

参考資料:

nginxをyumでインストールする手順 (CentOS/RedHat)

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(起動・停止編)

3.3 Nginx の起動停止



Jenkinsのインストール

ビルド管理や定期実行ジョブの管理にはJenkinsさんが便利。今回もJenkinsのお世話になるべく色々とセットアップしました。


インストール、起動

まずはインストールと起動です。Jenkinsもyum経由でインストールできます。
# Javaのインストール
$ yum install java-1.7.0-openjdk

# Jenkinsのレポジトリをyumに追加
$ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

# インストール
$ yum install jenkins

# 起動
$ service jenkins start

# 起動確認
$ curl http://localhost:8080

# OS起動時に自動起動するように設定する
$ chconfig jenkins on

# 再起動して確認してみる
$ reboot

参考資料:

CentOS/RedHatにJenkinsをインストールする手順 (yum, RPM)


Jenkinsの認証周りの設定

デフォルト設定では誰でもなんでもできてしまいますので、認証周りの設定を行います。

参考資料:

JenkinsをCentOS6にインストールしてユーザー認証設定

ただ1点、手痛い失敗をしました。最初に作ったJenkins用のユーザーに権限を付け忘れて(read権限すら付け忘れて)、Jenkinsのログインを切ってしまったため、Jenkinsに入れなくなってしまいました。その場合に以下の手順でJenkinsの設定を初期化しました。
# 設定ファイルをなかったことにする
$ cd /var/lib/jenkins
$ sudo mv config.xml _config.xml
これでJenkinsを再起動したら無事に設定が初期化されました。よかったよかった。


JenkinsにGitを導入する

全てのプログラムはbitbucketというGithubのお友達のようなサービスで管理しているため、JenkinsでもGitが使えるように設定します。

参考資料:

開発者(個人)のためのJenkins - Git Plugin編


JenkinsでRubyが使えるようにする

今回作成したプログラムのうちいくつかはRubyで書きました。JenkinsでもRubyを扱えるように環境変数のパスを設定しておきます。

Jenkinsの管理 > システムの設定 > グローバルプロパティ > 環境変数に以下を設定した。
キー: PATH
値: /opt/rbenv/bin:/opt/rbenv/shims:${PATH}

JenkinsでSCPも使えるようにするために鍵を作る

Jenkinsで管理するタスクの中には、他のサーバーへSCPでデプロイするものもあります。Jenkinsユーザーでいい感じにSCPができるように鍵を設定しておきます。ちなみに、ここはかなりはまりました。Linux上でJenkinsユーザーにどうやったらなれるのか、あちこち調べ回りました。
$ sudo su jenkins -s /bin/bash
$ cd ~/.ssh
$ ssh-keygen
$ cat id_rsa.pub # => コピる

# リモートサーバーに接続
$ ssh user@xx.xx.xx.xx
$ cd .ssh
$ echo "## id_rsa.pubの内容 ##" >> authorized_keys
$ exit

# 接続テスト
$ scp sample.txt user@xx.xx.xx.xx:~


メール通知

あといくつかのビルドでは、ビルド成功時にもメール通知してほしかったので、以下のプラグインを使いました。
Email-ext plugin



nginxをリバースプロキシとして使いJenkinsに繋ぎこむ

今回のサーバーはリリース間もないサービスを色々と載せようと考えているため、先述のnginxにたくさんの役割をしてもらおうと考えています。その中の一つがリバースプロキシで、この機能を使うことでhttp://jenkins.example.comとしてアクセスしてきた場合にJenkinsサーバーへリクエストを流す設定をしました。
# Jenkins用の設定ファイルを作る
$ cd /etc/nginx
$ touch conf.d/jenkins.example.com.conf

以下を記述します。
# conf.d/jenkins.example.com.conf
server {
    server_name     jenkins.example.com;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}
設定のチェックをして再起動します。
# 設定チェック
$ /etc/init.d/nginx configtest
# 再起動
$ service nginx restart

参考資料:

Nginxでリバースプロキシを設定する



パケットフィルタリング

8080のJenkinsポートなど不要なポートはIn/Outで塞いでしまいます。
# 必要なポートを指定
$ iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# その他は閉じる
$ iptables -P INPUT DROP
$ iptables -P OUTPUT ACCEPT
# など、その他にも色々と設定しました。

参考資料:

Linuxで作るファイアウォール[パケットフィルタリング設定編] (1/2)

iptablesの設定方法|さくらインターネット公式サポートサイト

iptablesの設定 入門編 - Murayama blog.



nginxとPHP

サーバーサイドプログラムは今回、PHPで作成しました。nginxでPHPが動くように色々と設定を行いました。

参考資料:

CentOSにてnginxでPHPを動かす



その他

そのほか、以下の記事を参照しました、ありがとうございます!

参考資料:

sudo時にPATHを引き継ぐ方法



最後に

以上で必要最低限なモジュールはインストールすることができました。それにしてもはまるポイントがいろいろとあったw。ぜひ同じハマりをしないように、次に困った時にはこのブログを見直してヒントを得られるようにしたいと思う今日この頃です。

最後までご覧いただきましてありがとうございました!





こんな記事もいかがですか?

[NodeJS] nodeで例外処理を書いて、最低限落ちないサーバー実装を行うException Handler
[NodeJS] requestモジュールを使って、サーバーから画像ファイルをダウンロードする
[サーバー] さくらVPSのセットアップ① 〜 OSの確認、ユーザー作成、Git、Ruby導入 〜
[サーバー] さくらVPSのセットアップ② 〜 nginxのインストール、Jenkinsのインストール、nginxとJenkinsの接続(リバースプロキシ)、nginxとPHP、パケットフィルタリング、など 〜
[サーバー] AmazonLinuxにMySQL5.7をインストールする
[サーバー] MySQL5.7でrootのパスワードを忘れた場合のリセット方法(CentOSやAmazonLinuxの場合)
[Go] net/httpパッケージでWebサーバー(handlerの書き方、静的ファイル配信、Basic認証、など)
RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。