このブログを検索

2013-10-19

お名前.comレンタルサーバーにRedmine2.3を入れる

最初、さくらレンタルに入れようとしていたRedmine。
root権限がある環境でやった方が確実で速い、そしてそうじゃないとまともに動かないということに気づいたので
お名前.comレンタルサーバー VPS(KVM)に入れてみました。
注意点はrubyを入れる際にrbenvだと普通はroot権限用になってしまうことくらいでしょうか。
環境による不都合はほぼありませんでした。

Redmine/Mercurial/SSL証明書を入れていきます。
[コントロールパネル操作]
■OSインストール
VPSコントロールパネルに繋ぐ
OS再インストール CentOS6.2を選択
SSH Private Keyと公式ヘルプを用い、SSH接続で接続できるようにする


[SSH]
■OSセットアップ
・yum高速化
# yum -y install yum-fastestmirror
# yum update

・vim入れる
# yum -y install vim

・locate入れる
# yum -y install mlocate
# updatedb

・firewall設定
※詳しくないので参考までに
# vim /etc/sysconfig/iptables
--------------------------------------------------------------------------------------
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

#既にconnectionが張られている通信を許可,TCPの接続開始と応答、FTPデータなどを許可
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#icmp(ping) 許可
-A INPUT -p icmp -j ACCEPT
#ローカルホストの入力許可
-A INPUT -i lo -j ACCEPT

# FRAGMENT DROP ###
-A INPUT -f -j LOG --log-level debug --log-prefix 'FRAGMENT-DROP:'
-A INPUT -f -j DROP
#### PING OF DEATH ###
-N PINGOFDEATH
-A PINGOFDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A PINGOFDEATH -j LOG --log-level debug --log-prefix 'PINGDEATH-DROP:'
-A PINGOFDEATH -j DROP
-A INPUT -p icmp --icmp-type echo-request -j PINGOFDEATH
#### BROAD MULTI DROP ###
-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -d 224.0.0.1 -j DROP
#### 113IDENT ###
-A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
#### SYNFLOOD ###
-N drop_synflood
-A drop_synflood -m limit --limit 10/s --limit-burst 20 -j RETURN
-A drop_synflood -j LOG --log-prefix "SYNFLOOD: " -m limit --limit 1/s --limit-burst 10
-A drop_synflood -j DROP
-A INPUT -p tcp --syn -j drop_synflood

#SSH許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

#Web許可
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 3000 -j ACCEPT
#FTP許可
#-A INPUT -p tcp --dport 20 -j ACCEPT
#-A INPUT -p tcp --dport 21 -j ACCEPT
#-A INPUT -p tcp --dport 4000:4029 -j ACCEPT
#MAIL許可
#-A INPUT -p tcp --dport 25 -j ACCEPT
#-A INPUT -p tcp --dport 465 -j ACCEPT
#-A INPUT -p tcp --dport 110 -j ACCEPT
#-A INPUT -p tcp --dport 995 -j ACCEPT
#-A INPUT -p tcp --dport 143 -j ACCEPT
#-A INPUT -p tcp --dport 993 -j ACCEPT

#先に許可したポート以外全て不許可にする
#デフォルトであったけどDROPに変えたいのでコメントアウト
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#LOGGING
-A INPUT -m limit --limit 1/s -j LOG --log-level debug --log-prefix 'INPUT-DROP:'
-A INPUT -j DROP
-A FORWARD -m limit --limit 1/s -j LOG --log-level debug --log-prefix 'FORWARD-DROP:'
-A FORWARD -j DROP

COMMIT
--------------------------------------------------------------------------------------
# /etc/init.d/iptables restart

・ログ出力設定
# vim /etc/rsyslog.conf
コメントされているkern.*の下あたりにでも追記
--------------------------------------------------------------------------------------
kern.debug /var/log/iptables.log
--------------------------------------------------------------------------------------
※iptables専用ではないけどkern.debugには他のログがこないからこれでいいらしい

・ファイル作成
# touch /var/log/iptables.log
# chmod 600 /var/log/iptables.log

・ローテート設定
# vim /etc/logrotate.d/syslog
{ の上あたりに追記
--------------------------------------------------------------------------------------
/var/log/iptables.log
--------------------------------------------------------------------------------------

参考:
http://www.rapidsite.jp/support/manual/rv_custom/e_4210.html
http://kazmax.zpp.jp/cmd/i/iptables.8.html
http://arisonsvr.org/web/maincontents/serverset/iptables/iptable.html
http://www3.big.or.jp/~sian/linux/tips/iptables.html
http://kensuke.jp/~kensuke/pukiwiki/index.php?debian%2Fns%2Fiptables
http://vok.paburica.com/index.php?iptables%2FSYN%20Flood%E5%AF%BE%E7%AD%96%E3%82%92%E3%81%97%E3%81%9F%E3%81%84


・作業ディレクトリ作る
# mkdir ~/tmp

・必要なパッケージを導入
基本的なもの
# yum install -y make gcc wget gettext-devel
rubyやredmineに必要っぽいもの
# yum install -y zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel mysql-devel ncurses-devel gdbm-devel readline-devel sqlite-devel
gitに必要っぽいもの
# yum install -y expat-devel perl-ExtUtils-MakeMaker.x86_64

・gitインストール
# cd ~/tmp
# wget --no-check-certificate https://git-core.googlecode.com/files/git-1.8.4.1.tar.gz
# tar zxvf git-1.8.4.1.tar.gz
# cd git-1.8.4.1
# ./configure
# make && make install
# git version


■rubyインストール
ポイントはrootユーザだけでなくPassengerユーザ(apacheやredmineユーザ)が使うので
システム共有な場所にインストールする必要がある
また、Passengerは祖先に渡って全てのディレクトリに読込と実行権限が必要
よって/usr/local内にインストールする

・rbenv+ruby-buildのインストール
# echo 'export RBENV_ROOT="/usr/local/rbenv"' >> ~/.bashrc
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> ~/.bashrc
# source ~/.bashrc
# git clone https://github.com/sstephenson/rbenv.git ${RBENV_ROOT}
# mkdir ${RBENV_ROOT}/plugins
# git clone https://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build
# echo 'eval "$(rbenv init -)"' >> ~/.bashrc
# source ~/.bashrc
# rbenv --version
--------------------------------------------------------------------------------------
rbenv 0.4.0-67-g3300587
--------------------------------------------------------------------------------------
※この設定だと他ユーザがデフォルトでは使えないはずなので留意

・ruby2.0.0のインストール
使えるrubyバージョン確認
# rbenv install -l
rubyをインストール
# rbenv install 2.0.0-p247
パスを通す
# rbenv rehash
インストールしたバージョンを有効にする
# rbenv global 2.0.0-p247
# ruby -v
--------------------------------------------------------------------------------------
ruby 2.0.0p247
--------------------------------------------------------------------------------------

・rubygemsインストール
# rbenv exec gem install rubygems-update
# rbenv rehash
# update_rubygems
参考:
http://docs.rubygems.org/read/chapter/3#page83

・bundlerインストール
# rbenv exec gem install bundler --no-ri --no-rdoc
# rbenv rehash


■mysqlインストール
[SSH]
・サーバーインストール
# yum -y install mysql-server
# chkconfig mysqld on
# vim /etc/my.cnf
追記:
--------------------------------------------------------------------------------------
[mysqld]
character-set-server = utf8
[mysql]
default-character-set = utf8
--------------------------------------------------------------------------------------
# service mysqld restart

# mysqladmin -u root password DBパスワード
# /usr/bin/mysql_secure_installation
--------------------------------------------------------------------------------------
Change the root password? : n
Remove anonymous users? : Y
Disallow root login remotely? : Y
Remove test database and access to it? : n
Reload privilege tables now? : Y
--------------------------------------------------------------------------------------

・redmine用DB作成
# mysql -u root -p
--------------------------------------------------------------------------------------
> create database redmine character set utf8;
> create user 'redmine'@'localhost' identified by 'DBパスワード';
> grant all privileges on redmine.* to 'redmine'@'localhost';
> \q
--------------------------------------------------------------------------------------

■redmineインストール
ここもPassengerが全てのディレクトリに権限がある場所に入れる必要がある
今回は/var/www配下におく
# cd ~/tmp
# wget http://rubyforge.org/frs/download.php/77138/redmine-2.3.3.tar.gz
# tar zxvf redmine-2.3.3.tar.gz
# mv redmine-2.3.3 /var/www/redmine
# cd /var/www/redmine
# mkdir -p tmp tmp/pdf public/plugin_assets
# chmod -R 755 files log tmp public/plugin_assets
# cd /var/www/redmine/config
# cp -p database.yml.example database.yml
# vim database.yml
Change it to look like:
--------------------------------------------------------------------------------------
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "DBパスワード"
encoding: utf8
--------------------------------------------------------------------------------------

# cd /var/www/redmine

・Gemfileにpassengerを追加
# vim Gemfile
sourceの下に追記:
--------------------------------------------------------------------------------------
gem "passenger"
--------------------------------------------------------------------------------------

・gemをインストールする(ディレクトリ配下に)
# yum -y install gcc-c++ ImageMagick-devel libxml2-devel libxslt-devel
# bundle install --path vendor/bundle

・rails動作確認
# bundle exec rails -v
--------------------------------------------------------------------------------------
Rails 3.2.13
--------------------------------------------------------------------------------------

# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate
# RAILS_ENV=production bundle exec rake redmine:load_default_data
--------------------------------------------------------------------------------------
Select Language: ja
--------------------------------------------------------------------------------------

・動作確認(WEBrick)
# bundle exec rails server -e production
>> http://IPアドレス:3000/
Redmineの初期アカウントはadmin:admin

・設定ファイルを用意
# cd /var/www/rails/redmine/config
# cp -p configuration.yml.example configuration.yml

・実行モードをproduction固定
# vim /var/www/rails/redmine/config/boot.rb
末尾に追記:
--------------------------------------------------------------------------------------
ENV['RAILS_ENV'] ||= 'production'
--------------------------------------------------------------------------------------

・再確認
# cd /var/www/redmine
# bundle exec rails server
>> http://IPアドレス:3000/

参考:
http://www.redmine.org/projects/redmine/wiki/RedmineInstall
http://www.redmine.org/projects/redmine/wiki/Redmine_on_CentOS_installation_HOWTO
http://www.sdmemo.com/wiki/Redmine%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86


■apache+passengerセットアップ
passengerはroot権限では動作しない
実行ユーザはredmine/config.ru(場合によってはconfig/environment.rb)のオーナーとなる
今回はredmineユーザーで動作させる
# adduser redmine
# passwd redmine
ユーザパスワード
# chown -R redmine:redmine /var/www/redmine

・passengerモジュールのインストール
# bundle exec passenger-install-apache2-module
# bundle exec passenger-install-apache2-module --snippet
apacheの設定に使う文字列が表示されるのでコピーする:
--------------------------------------------------------------------------------------
LoadModule passenger_module /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so
PassengerRoot /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20
PassengerDefaultRuby /usr/local/rbenv/versions/2.0.0-p247/bin/ruby
--------------------------------------------------------------------------------------

・passenger設定ファイルを作成
# vim /etc/httpd/conf.d/passenger.conf
以下の内容で新規作成する
基本設定のところはsnippetで得られた文字列で置き換える:
--------------------------------------------------------------------------------------
# Passengerの基本設定
LoadModule passenger_module /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so
PassengerRoot /var/www/redmine/vendor/bundle/ruby/2.0.0/gems/passenger-4.0.20
PassengerDefaultRuby /usr/local/rbenv/versions/2.0.0-p247/bin/ruby

# Passengerが追加するHTTPヘッダを削除するための設定
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加
PassengerMaxPoolSize 6
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 0
PassengerMaxPreloaderIdleTime 0
--------------------------------------------------------------------------------------

・文法チェック
# apachectl configtest
--------------------------------------------------------------------------------------
Syntax OK
--------------------------------------------------------------------------------------

・とりあえずredmine関係なくapacheの動作確認
# /etc/init.d/httpd restart
>> http://IPアドレス/

参考:
http://morizyun.github.io/blog/passenger-install-apache-ruby-rails/

メモ:
祖先にわたってすべてのディレクトリにapacheユーザの読み込みと実行権限が必要
http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_to_a_virtual_host_8217_s_root
all parent folders. That is, /webapps/mycook and /webapps must also be readable and executable by Apache.
メモ:
passengerは仮想ホストかシンボリックリンクを使うべきで、
仮想ディレクトリだとうまく動かない模様

・redmineをSUB-URIで実行する(シンボリックリンクを用いる)
※但し今回の設定だとpassengerはSUB-URIで動作するがWEBrickはルートディレクトリで動作する
 どちらも同じSUB-URIにする方法はわからなかった
# ln -s /var/www/redmine/public /var/www/html/redmine
# vim /etc/httpd/conf/httpd.conf
DocumentRoot(/var/www/html)の下あたりに追記
--------------------------------------------------------------------------------------
#Redmine
RackBaseURI /redmine
<Directory /var/www/redmine/public>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
--------------------------------------------------------------------------------------

# cd /var/www/redmine
# vim config/boot.rb
末尾に追記
--------------------------------------------------------------------------------------
ENV['RAILS_RELATIVE_URL_ROOT'] = '/redmine'
--------------------------------------------------------------------------------------
WEBrickで実行する際はconfig.ruにmapを追記する必要あるが、それだとpassengerが誤動作する
この状態でWEBrickで実行するとSUB-URIではない状態で実行される

動作確認
# /etc/init.d/httpd restart
>> http://IPアドレス/redmine

・redmineセットアップ
[redmine]
adminでログイン パスワードadmin
個人設定からパスワードを変更する
管理->情報からすべてにチェックマークがついていることを確認する


[SSH]
■Mercurialインストール
# cd ~/tmp
Mercurial用ユーザを作成(今回は使わないけどMercurialをWEBで動作させる際には必要のはず)
# useradd -m mercurial
# passwd mercurial
ユーザパスワード

・Mercurialをeasy_install経由でインストール
# yum -y install python-devel make gcc
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
# easy_install -U mercurial
# hg --version

ユーザ情報を設定する
# vim ~/.hgrc
--------------------------------------------------------------------------------------
[ui]
username = admin <redmine@mail.com>
--------------------------------------------------------------------------------------

動作確認
# cd ~/tmp
# mkdir hgtest
# hg init hgtest

Redmine用リポジトリを作る
# cd /var/www
# mkdir hg
# cd hg
# mkdir project01
# hg init project01

・この状態でredmineのプロジェクト設定からリポジトリを連携する
例(リポジトリパス):/home/アカウント名/hg/project01
識別子: 任意
パスのエンコーディング: 空欄


■Mercurialクライアントをインストール
[ローカル]
・TortoiseHgをダウンロードしてインストール
http://mercurial.selenic.com/
・デスクトップ等で右クリック->TortoiseHg->Global Settings
・Commit->Usernameをセット
名前 <メールアドレス>
・Edit File
・[ui]にsshをセット(圧縮オプション等をセット)
--------------------------------------------------------------------------------------
ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe" -agent -ssh -2 -batch -C
--------------------------------------------------------------------------------------
・Save->OK

・TortoiseHgを公開暗号方式に対応させる
・puttygen(ASE対応)をダウンロードする
※ごった煮版等はASE対応してない
http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe
・実行してLoadからSSH Private Key ファイルを読み込み
・Save privete keyで●●●.ppkとして保存 -> c:\ssh_keys\ に保存したとする
・キー管理ツールのPageant.exeのショートカットを作成する
--------------------------------------------------------------------------------------
"C:\Program Files\TortoiseHg\Pageant.exe" "c:\ssh_keys\●●●.ppk"
--------------------------------------------------------------------------------------

動作確認
・ショートカットを実行する
・デスクトップ等で右クリック->TortoiseHg->Clone
source
--------------------------------------------------------------------------------------
ssh://root@IPアドレス//ssh://var/www/hg/project01
--------------------------------------------------------------------------------------
※必要に応じてユーザアカウントを作る方がよい


■SSL対応(自己証明)
[SSH]
# yum -y install openssl openssl-devel mod_ssl
# cd /etc/pki/tls/certs

・RSA秘密鍵生成
# openssl genrsa -des3 -out private.key 2048
--------------------------------------------------------------------------------------
Enter pass phrase for private.key: パスワード
--------------------------------------------------------------------------------------
・内容確認
# openssl rsa -in private.key -text -noout

・証明書要求(CSR)生成
# openssl req -new -key private.key -out server.csr
--------------------------------------------------------------------------------------
Enter pass phrase for private.key: パスワード
Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []: Tokyo
Locality Name (eg, city) [Default City]: Minato-ku
Organization Name (eg, company) [Default Company Ltd]: TEST Co., Ltd.
Organizational Unit Name (eg, section) []: TEST
Common Name (eg, your name or your server's hostname) []: IPアドレス
以降、省略(入力不要)
--------------------------------------------------------------------------------------
・内容確認
# openssl req -in server.csr -text -noout

・証明書発行
# openssl x509 -in server.csr -out server.crt -req -signkey private.key -days 365

・権限変更
# chmod 400 private.key server.crt server.csr
・RSA秘密鍵をしかるべき場所へ
# mv /etc/pki/tls/certs/private.key /etc/pki/tls/private/private.key

・apacheにセット
# vim /etc/httpd/conf.d/ssl.conf
コメント解除
--------------------------------------------------------------------------------------
DocumentRoot "/var/www/html"
--------------------------------------------------------------------------------------
変更する
--------------------------------------------------------------------------------------
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/private.key
--------------------------------------------------------------------------------------
</VirtualHost>の上あたりに追記する
--------------------------------------------------------------------------------------
# SSLでも画像やJavaScriptファイルがキャッシュされるように指定
Header onsuccess append Cache-Control publicExpiresActive On
ExpiresByType text/css "access plus 3 days"
ExpiresByType application/x-javascript "access plus 3 days"
ExpiresByType image/jpeg "access plus 3 days"
ExpiresByType image/png "access plus 3 days"
ExpiresByType image/gif "access plus 3 days"
--------------------------------------------------------------------------------------

# /etc/init.d/httpd restart
>> https://IPアドレス/redmine

・動作が確認できたらhttpを閉じる
# vim /etc/httpd/conf/httpd.conf
コメントアウト
--------------------------------------------------------------------------------------
#Listen 80
--------------------------------------------------------------------------------------

・今だとhttpd再起動毎にパスワード聞かれるので省略する
# vim /etc/httpd/conf.d/ssl.conf
変更
--------------------------------------------------------------------------------------
SSLPassPhraseDialog exec:/etc/httpd/certs/pass_phrase.sh
--------------------------------------------------------------------------------------

# mkdir /etc/httpd/certs
# vim /etc/httpd/certs/pass_phrase.sh
--------------------------------------------------------------------------------------
#!/bin/sh
echo "パスワード"
--------------------------------------------------------------------------------------

# chown root:root /etc/httpd/certs/pass_phrase.sh
# chmod 500 /etc/httpd/certs/pass_phrase.sh
・動作確認
# ./pass_phrase.sh
・動作確認
# /etc/init.d/httpd restart

・httpdをサービス化
# chkconfig httpd on

参考:
https://www.verisign.co.jp/ssl/help/csr/capache_new.html
http://d.hatena.ne.jp/mrgoofy33/20110209/1297262978
http://linux.kororo.jp/cont/server/openssl_command.php
http://centossrv.com/apache-ssl.shtml
http://takuya-1st.hatenablog.jp/entry/20110208/1297157015


おまけ
ruby1.8の場合、redmineのdatabase.ymlに記述する adapter: mysql2 は、mysqlになる。

ruby1.8の場合、redmineのGemfileに記述をしないとバージョンエラーになる。
# vim Gemfile
--------------------------------------------------------------------------------------
gem 'nokogiri', '~> 1.5.10' --------------------------------------------------------------------------------------

redmine2.3+ruby1.8の場合に、WEBrick実行時に変な警告が出る。
それを消す方法
# vim /var/www/redmine/lib/redmine/syntax_highlighting.rb
コメントアウト
--------------------------------------------------------------------------------------
#require 'coderay/helpers/file_type' --------------------------------------------------------------------------------------
参考:
http://www.redmine.org/issues/13692



0 件のコメント:

コメントを投稿