[Redmine]同一PCで二つRedmineを動かす
同一マシンでRedmineを二つ動かした。
しかし、単純にpassenger.confに二つ目のRedmineへのパスを通すだけだと、複数のRedmineに同時にログインできない。
以下の通り書き換える。
参考:http://qiita.com/yteraoka/items/72b111e69511f254f97e
・redmine/config/application.rb
修正前:config.session_store :cookie_store, :key => '_redmine_session'
修正後:config.session_store :cookie_store, :key => '_redmine_session', :path => config.relative_url_root
・redmine/config/configuration.yml
修正前:autologin_cookie_path:
修正後:autologin_cookie_path: Redmine::Utils.relative_url_root
それ以外の既存の手順
[Linux]さくらVPSのCentOSにRedmineをインストール - daybreaksnow's diaryのものと同じ。
・DBの用意
create database db_redmine_2 default character set utf8;
grant all on db_redmine_2.* to user_redmine_2 identified by 'パスワード';
flush privileges;
・Redmineのインストール
tarballを解凍して、一つ目とはredmineとは別のディレクトリ名にして、/var/libに配置
・DB、メール設定を適当に設定する
/var/lib/redmine_2/config/database.yml
/var/lib/redmine_2/config/configuration.yml
・必要ライブラリのインストール
bundle install
・秘密鍵作成
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
・権限付与
chown -R apache:apache /var/lib/redmine_2
・アクセス可能に
ln -s /var/lib/redmine_2/public /var/www/html/redmine_2
・/etc/httpd/conf.d/passenger.confに以下を追記
RackBaseURI /redmine_2
[Redmine]タグ付けを可能にするプラグインを入れる
Redmineのバージョン:2.4.3 (2014-02-08)
Ruby:2.0.0
Rails:3.2.16
プラグインURL:friflaj/redmine_tagging · GitHub
プラグインのインストール
HPの手順だと以下の通りだが、これは古い。(rails3だと、redmine/script/pluginは存在しない)
script/plugin install git://github.com/friflaj/redmine_tagging.git bundle install
代わりに、redmineのインストールディレクトリで、以下を実行する。
./script/rails plugin install git://github.com/friflaj/redmine_tagging.git
ここで、以下のようなDB接続エラーが出た。
/usr/local/lib/ruby/gems/2.0.0/gems/mysql2-0.3.15/lib/mysql2/client.rb:67:in `connect': Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)
どうやら、database.ymlのdevelopmentモードの設定を使っているので、MySQLに接続できないようだ。
開発モード用にDBをコピーし、database.ymlをdevelopment時はそちらに接続するように書き換える。
create database db_redmine_dev default character set utf8; grant all on db_redmine_dev.* to user_redmine; flush privileges; mysqldump -u root -p db_redmine | mysql -u root -p db_redmine_dev
再度rails pluginを実行、正常終了。
Initialized empty Git repository in /var/lib/redmine-comp/vendor/plugins/redmine_tagging/.git/ remote: Counting objects: 74, done. remote: Compressing objects: 100% (64/64), done. remote: Total 74 (delta 4), reused 53 (delta 3) Unpacking objects: 100% (74/74), done. From git://github.com/friflaj/redmine_tagging * branch HEAD -> FETCH_HEAD
上記をよく見ると、プラグインがredmine/pluginsではなく、redmine/vendor/pluginsに展開されてしまっている。
これではプラグインとして認識されないので、redmine/pluginsに移動する
その後、redmineのインストールディレクトリで、bundle installを実行。
ここでもエラーが出た。
Updating git://github.com/Undev/rails_sql_views.git Fetching gem metadata from https://rubygems.org/....... Fetching additional metadata from https://rubygems.org/.. Resolving dependencies... Bundler could not find compatible versions for gem "rake": In snapshot (Gemfile.lock): rake (10.2.2) In Gemfile: rails_sql_views (>= 0) ruby depends on rake (~> 0.9.2) ruby Running `bundle update` will rebuild your snapshot from scratch, using only the gems in your Gemfile, which may resolve the conflict.
よく分からんがbundle updateしろと言われているので、その通りにする。
タグ利用のmigrationファイルの生成
HPの手順
rails generate acts_as_taggable_on:migration
正常終了した。
create db/migrate/20140408024608_acts_as_taggable_on_migration.rb
DBのマイグレーション
HPの手順。
rake db:migrate RAILS_ENV=production rake db:migrate_plugins RAILS_ENV=production
rakeだと共通ライブラリを使ってしまうので、bundle exec rakeを使う。
一行目。
# bundle exec rake db:migrate RAILS_ENV=production == ActsAsTaggableOnMigration: migrating ====================================== -- create_table(:tags) -> 0.0106s -- create_table(:taggings) -> 0.0038s -- add_index(:taggings, :tag_id) -> 0.0098s -- add_index(:taggings, [:taggable_id, :taggable_type, :context]) -> 0.0212s == ActsAsTaggableOnMigration: migrated (0.0458s) =============================
二行目。
Migrating redmine_tagging (Redmine Tagging plugin)... == CreateViews: migrating ==================================================== -- create_view(:issue_tags, "select taggings.id, tags.name as tag, taggings.taggable_id as issue_id from taggings join tags on taggings.tag_id = tags.id where taggable_type = 'Issue'") -> 0.0149s -- create_view(:wiki_page_tags, "select taggings.id, tags.name as tag, taggings.taggable_id as wiki_page_id from taggings join tags on taggings.tag_id = tags.id where taggable_type = 'WikiPage'") -> 0.0035s == CreateViews: migrated (0.0187s) =========================================== == ScrubBody: migrating ====================================================== == ScrubBody: migrated (0.0049s) ============================================= == RecreateViews: migrating ================================================== -- drop_view(:issue_tags) -> 0.0010s -- drop_view(:wiki_page_tags) -> 0.0004s -- create_view(:issue_tags, "select taggings.id as id, tags.name as tag, taggings.taggable_id as issue_id from taggings join tags on taggings.tag_id = tags.id where taggable_type = 'Issue'") -> 0.0021s -- create_view(:wiki_page_tags, "select taggings.id as id, tags.name as tag, taggings.taggable_id as wiki_page_id from taggings join tags on taggings.tag_id = tags.id where taggable_type = 'WikiPage'") -> 0.0016s == RecreateViews: migrated (0.0054s) ========================================= == FixTaggingContexts: migrating ============================================= == FixTaggingContexts: migrated (0.0053s) ==================================== == FixBrokenIssueAndWikiContexts: migrating ================================== == FixBrokenIssueAndWikiContexts: migrated (0.0022s) ========================= == FixTagsWithBackslash: migrating =========================================== == FixTagsWithBackslash: migrated (0.0016s) ================================== Note: The rake task db:migrate_plugins has been deprecated, please use the replacement version redmine:plugins:migrate
redmineの起動
手順が終わったので、httpdを再起動し、redmineにアクセス。
ここで、エラーが出てページが表示できなかった。
It looks like Bundler could not find a gem. Maybe you didn't install all the gems that this application needs. To install your gems, please run: bundle install If that didn't work, then the problem is probably caused by your application being run under a different environment than it's supposed to. Please check the following: Is this app supposed to be run as the apache user? Is this app being run on the correct Ruby interpreter? Below you will see which Ruby interpreter Phusion Passenger attempted to use. -------- The exception is as follows: ------- git://github.com/Undev/rails_sql_views.git (at master) is not yet checked out. Run `bundle install` first. (Bundler::GitError) /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.5.3/lib/bundler/source/git.rb:179:in `rescue in load_spec_files'
エラーメッセージでググったところ、bundle installをrootでやっていると、redmineを起動しているユーザ(apache)で使えないようだ。
参考:http://stackoverflow.com/questions/6648870/is-not-checked-out-bundle-install-does-not-fix-help
以下のように、deploymentを付けて、再度bundle installを実行する。
bundle install --deployment
httpdを再起動して、アクセスすると、正常に表示され、タグの追加も可能となった。
[Redmine]チケットの変更履歴を非表示にするプラグインのインストール
※2016/12/10 追記
Redmine3.2.4に下記プラグインを入れたところ、Redmineの言語が英語になってしまった
Redmineのバージョン:2.4.3 (2014-02-08)
Ruby:2.0.0
Rails:3.2.16
1.以下のサイトからDownloadZipでzipを落とす
プラグインURL:GitHub - vividtone/redmine_comment_only: This is a plugin for redmine. Only comments are displayed at issue's history.
2.転送、解凍
3.redmineのインストールディレクトリのplugin以下に置く。
/var/lib/radmine/plugin/redmine_comment_only/appのような階層になる。
プラグインのディレクトリ名は、init.rb内のPlugin.registerの名前に合わせる。
4.apacheの再起動をして反映。
・履歴非表示時
・履歴表示時
[Linux]RedmineのDBのバックアップを取る
添付ファイル以外のデータはすべてDBに入っている。
添付ファイルはRedmineインストールディレクトリのfiles以下にある。
(今回は/var/lib/redmine/files)
添付ファイルバックアップスクリプト(attach_file_backup.sh)
#!/bin/sh SRC=/var/lib/redmine BACKUP_DIR=/home/hoge/backup/redmine/daily_backup BACKUP_FILE=files cp -ar ${SRC}/${BACKUP_FILE} ${BACKUP_DIR} tar cvzf ${BACKUP_DIR}/${BACKUP_FILE}.tar.gz -C $BACKUP_DIR $BACKUP_FILE rm -r ${BACKUP_DIR}/${BACKUP_FILE}
DBバックアップスクリプト(db_backup.sh)
#!/bin/sh DAILY_BACKUP_DIR=/home/hoge/backup/redmine/daily_backup DUMP_FILE=db_redmine.dump DB_USER_NAME=hoge DB_PASSWORD=piyo mysqldump -u ${DB_USER_NAME} -p{DB_PASSWORD} db_redmine > ${DAILY_BACKUP_DIR}/${DUMP_FILE}
日次バックアップスクリプト(daily_backup.sh)
#!/bin/sh #このシェルのパスを取得 DIR=$(cd $(dirname $0); pwd) #echo $DIR #DBのバックアップ取得 ${DIR}/db_backup.sh #添付ファイルのバックアップ取得 ${DIR}/attach_file_backup.sh
月次バックアップスクリプト(monthly_backup.sh)
#!/bin/sh DAILY_BACKUP_DIR=/home/hoge/backup/redmine/daily_backup MONTHLY_BACKUP_DIR_BASE=/home/hoge/backup/redmine/monthly_backup MONTHLY_BACKUP_DIR=${MONTHLY_BACKUP_DIR_BASE}`date +\%y\%m\%d` #echo ${MONTHLY_BACKUP_DIR} mkdir ${MONTHLY_BACKUP_DIR} cp -ar ${DAILY_BACKUP_DIR} ${MONTHLY_BACKUP_DIR}
cronの設定
MAILTO='' #redmineのバックアップ(毎日午前3時) 0 3 * * * /home/hoge/backup/redmine/sh/daily_backup.sh #redmineのバックアップのコピー(毎月1日午前5時) 0 5 1 * * /home/hoge/backup/redmine/sh/monthly_backup.sh
DBのリストア
db_redmine_restoreに復元する例
drop database db_redmine_restore; create database db_redmine_restore default character set utf8; grant all on db_redmine_restore.* to user_redmine;
・シェル
#!/bin/sh #このシェルのパスを取得 DIR=$(cd $(dirname $0); pwd) DAILY_BACKUP_DIR=/home/hoge/backup/redmine/daily_backup DUMP_FILE=db_redmine.dump DB_ROOT_USER=root DB_ROOT_PASSWORD=fuga DB_USER=user_redmine DB_PASSWORD=piyo RESTORE_DB=db_redmine_restore mysql -u ${DB_ROOT_USER} -p${DB_ROOT_PASSWORD} < ${DIR}/create_db_restore.sql mysql -u ${DB_USER} -p${DB_PASSWORD} ${RESTORE_DB} < ${DAILY_BACKUP_DIR}/${DUMP_FILE}
リストア
添付ファイルの復旧後は、filesのオーナーをapacheに戻す。
sudo chown -R apache:apahce files
操作ユーザになっていると、ファイルアップロード時にpermission deniedが発生し、Internal Server Errorが表示される。
[Linux]tarで圧縮元に絶対パスを指定する時、指定のディレクトリのみを圧縮する
以下のようにtarの第二引数に絶対パスを指定すると、以下のメッセージが表示される。
tar cvzf /home/hoge/files.tar.gz /home/hoge/files tar: メンバ名から先頭の `/' を取り除きます
上記のfile.tar.gzを展開すると、home/hoge/filesというディレクトリ構造まで復元されてしまう。
files以下のみが展開されるようにするには、以下のように-Cを使う。
tar cvzf /home/hoge/files.tar.gz -C /home/hoge files
- Cオプションをつけることにより、そのパスからの相対指定ができる。これにより、filesディレクトリのみを圧縮できる。
[Linux]さくらVPSのCentOSにRedmineをインストール
前回の続き
[Linux]さくらVPSのCentOSにApacheをインストール - daybreaksnow's diary
Redmineの公式サイトを参考にした。
Redmine 2.4をCentOS 6.4にインストールする手順 | Redmine.JP Blog
SELinuxを無効にする
セキュリティ管理用のモジュールらしい。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280414/
無効にしないでもインストールできるらしい(http://h2np.net/docs/redmine-selinux.html)が、さくらのデフォルトでdisabledになっていたので修正なし
EPELパッケージのインストール
以下から最新のパッケージのパスを確認
http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/epel-release.html
最新のパッケージのパス
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
インストール
#rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
さくらのデフォルトではインストール済みだった。
開発ツール(Cコンパイラ等)のインストール
yum groupinstall "Development Tools"
以下のメッセージが出た。メッセージを見る限り引数が不正なようだが、このまま進んでも問題なかった。
Warning: Group development does not have any packages. No packages in any requested group available to install or update
※2014/8/29追記
日本語化している(/etc/sysconfig/i18nでLANG=ja_JP.UTF-8としている)場合、「開発ツール」としなければならない。
RubyとPassengerのビルドに必要なヘッダファイルなどをインストール
yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
Is this ok?と聞かれるので、y。
再度にComplete!と出て完了。
ImageMagickとヘッダファイル・日本語フォントのインストール
これは任意だが、ImageMagickは添付ファイルのサムネイル表示に使うということなので、入れておく。
yum install ImageMagick ImageMagick-devel yum install ipa-pgothic-fonts
ipa-pgothic-fontsはデフォルトで入っているようだ。
Package ipa-pgothic-fonts-003.02-4.1.el6.noarch already installed and latest version Nothing to do
Rubyのインストール
最新のtarballを落とす
http://www.ruby-lang.org/ja/downloads/
前世代の安定版: Ruby 2.0.0-p353 を落とした。
http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz
MySQLの設定
MySQLを起動、自動起動ON
service mysqld start chkconfig mysqld on
ここでmsqldの起動でエラーとなった。
ログを見てみる
- コマンド
less /var/log/mysqld.log
- 中身
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
上記エラーメッセージでググってみると、mysql_install_dbコマンドを実行すればよいらしい。
root権限で実行、再度mysqldをstartすると、今度は起動に成功した。
rootにパスワード設定
このままだとmysql -u rootでパスワードなしでログインできてしまう。
rootにパスワードを設定する。
sudo mysqladmin -u root password [パスワード]
エンコード確認
mysqlにログイン後、以下のコマンドを実行
show variables like 'character_set%';
以下のように全てUTF-8になっていればOK。
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
不要なユーザを除去
- ユーザ確認SQL
use mysql; select user from user;
- 実行結果
以下のように名前なしユーザが二人いた。
mysql> select user from user; +------+ | user | +------+ | root | | | | root | | | | root | +------+ 5 rows in set (0.00 sec)
匿名のユーザを削除する。
delete from user where user = '';
Redmine用データベースとユーザーの作成
create database db_redmine default character set utf8; grant all on db_redmine.* to user_redmine identified by 'パスワード'; flush privileges;
Redmineのインストール
以下からRedmineのtarballをダウンロード
http://www.redmine.org/projects/redmine/wiki/Download
解凍したらRedmineの配置先に移動する。
mv redmine-2.4.3 /var/lib/redmine
データベースへの接続設定
/var/lib/redmine/config/database.ymlを作成。
database.yml.sampleをコピーして、以下を修正した。
production: database: db_redmine username: user_redmine password: パスワード (Redmine用データベースとユーザーの作成で設定したもの)
configuration.ymlの設定
/var/lib/redmine/config/configuration.ymlを作成。
configuration.yml.sampleをコピーして、以下を修正した。
production: smtp_settings: address: "localhost" domain: 'サーバのIPアドレス' rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf
ここで:の後の半角スペースがないと、後でrake db:migrateの実行時にエラーとなるので注意。
サーバのIPアドレスと書いたところは、サーバのFQDNとなっているが、ドメインを取っていないのでIPアドレスにした。これでいいかは不明。
SMTPの設定なので、メール通知を使わないなら適当でもOK?
Gemパッケージのインストール
redmineが必要とするライブラリを入れる。
redmineのインストールディレクトリ(/var/lib/redmine)で以下を実行
# bundle install --without development test
実行後、以下のメッセージが出た
rubyのバージョンは2.0.0のため、nothing to doに当てはまり、追加のインストールは必要ない。
Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay!
Redmineの初期設定とデータベースのテーブル作成
セッションデータ改竄防止用鍵の生成とテーブル作成
Redmineのインストールディレクトリで以下のコマンドを実行
bundle exec rake generate_secret_token RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=productionは単に環境変数にproductionを入れるだけ。
rubyではこの環境変数でdevelopment、test、productionなどのモードを切り替えるとのこと。
db:migrateはその名前の通りDBのマイグレーションを行う。あらかじめ定義したDDLを実行する感じか?
bundle execと、直接rakeを呼ぶのでは、以下のような違いがある。
rake:Railsの共通のライブラリ保存場所から読みだす bundle exec:プロジェクトのライブラリ保存場所から読み出す
参考:http://ka-zoo.net/2013/07/difference-of-rake-xxx-and-bundle-exec-rake-xxx/
Passengerのインストール
Passengerとは:apacheでrubyアプリを動かすためのapacheモジュール
gem install passenger --no-rdoc --no-ri passenger-install-apache2-module
rdocとはJavaDoc的なものか。
文字化けが出たがそのままエンターで進んだ。
- 出力結果
LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37 PassengerDefaultRuby /usr/local/bin/ruby </IfModule>
Passengerの設定
- 作成ファイル
/etc/httpd/conf.d/passenger.conf
- 記述内容
# Passengerの基本設定。 # passenger-install-apache2-module --snippet を実行して表示される設定を使用。 # LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.37 PassengerDefaultRuby /usr/local/bin/ruby </IfModule> # 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のチューニング。 # TODO Phusion Passenger users guide(http://www.modrails.com/documentation/Users%20guide%20Apache.html)を参照。 PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 3600 PassengerHighPerformance on PassengerStatThrottleRate 10 PassengerSpawnMethod smart RailsAppSpawnerIdleTime 86400 RailsFrameworkSpawnerIdleTime 0
Redmineを公開する(サブディレクトリでRedmineを実行)
redmineのインストールディレクトリへのシンボリックリンクを作成
ln -s /var/lib/redmine/public /var/www/html/redmine
/etc/httpd/conf.d/passenger.confに以下を追記。
RackBaseURI /redmine
apacheを再起動。
service httpd graceful
restartはhttpd プロセスを完全に停止してから再起動する。
gracefulは httpd プロセスの通信が終わるのを待って、順次新しい設定を反映した httpd を起動させる。