redmineをubuntuにインストールする事が良くあるので、常にこの内容を最新化するようにします。現状の投稿内容はクリーンインストールしたUbuntu14.04 LTS上にredmine + gitの環境をセットアップしています。
なお、動作確認としては、redmineとgitを連携させた後に、開発用ユーザーにrbenvを使って最新版のruby2.1.2をインストールした上で、インフラの構成管理(Infrastructure as Code)で有名なchefのコードをgitにコミットし、redmine上でプロジェクト管理できるようにしてみます。
初版作成:2014/6/28
- ubuntu14.04
- nginx
- redmine2.5
- git
- unicorn
Ubuntuインストール後の初期設定。IPv6の無効化とSSHのUseDNSの無効化
sudo apt-get update sudo apt-get upgrade sudo apt-get ssh echo "net.ipv6.conf.all.disable_ipv6 = 1" sudo tee -a /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6 = 1" sudo tee -a /etc/sysctl.conf echo "UseDNS no" sudo tee -a /etc/ssh/sshd_config sudo vi /etc/network/interfaces
IPは固定にしておく。/etc/network/interfacesは必要に応じて修正して下さい。
auto eth0 iface eth0 inet static address 172.20.1.240 netmask 255.255.255.0 network 172.20.1.0 broadcast 172.20.1.255 gateway 172.20.1.1 dns-nameservers 172.20.1.230
上記までで一旦再起動
sudo reboot
インストール中に使う環境変数のセット。セットアップ途中で再起動やログアウトした場合にはその都度セットしてください。
export MYSQL_ROOT_PASS="mysql_root_pass" export REDMINE_DBPASS="redmine_db_pass" export REDMINE_INSTALL_TO='/var/www/redmine'
必要なパッケージをまとめて導入。
- MySQLのROOTパスワードは上記でセットしていたMYSQL_ROOT_PASSを指定する事
- postfixはインターネットサイトを選択
sudo apt-get install ruby2.0 ruby2.0-dev build-essential libssl-dev \ zlib1g-dev subversion git rails3 nginx unicorn \ mysql-server mysql-client libmysqlclient-dev postfix \ imagemagick libmagickcore-dev libmagickwand-dev ruby-rmagick
MySQLのロケールを変更してredmine用のDBを作る
sudo sed -i "s/\[client\]/[client]\ndefault-character-set=utf8/g" \ /etc/mysql/my.cnf sudo sed -i "s/\[mysqld\]/[mysqld]\ncharacter-set-server=utf8/g" \ /etc/mysql/my.cnf sudo service mysql restart mysql -uroot -p$MYSQL_ROOT_PASS -e \ "drop database if exists redmine;" mysql -uroot -p$MYSQL_ROOT_PASS -e \ "CREATE DATABASE redmine character set utf8;" mysql -uroot -p$MYSQL_ROOT_PASS -e \ "grant all privileges on redmine.* to 'redmine'@'localhost' identified by '$REDMINE_DBPASS';" mysql -uroot -p$MYSQL_ROOT_PASS \ -e "flush privileges;"
redmineをインストールする。途中で、下記のエラーが出たので、本投稿中で対策をしています。
# これはただの参考情報。こんなエラーが出たので対策しましたと言う事で。 rake aborted! Gem::LoadError: You have already activated rake 10.3.2, but your Gemfile requires rake 10.1.1. Using bundle exec may solve this. /var/www/redmine/config/boot.rb:6:in `<top (required)>' /var/www/redmine/config/application.rb:1:in `<top (required)>' /var/www/redmine/Rakefile:5:in `<top (required)>' (See full trace by running task with --trace)
上記エラーに対策する形で、redmineのセットアップを行う。
sudo mkdir -m $REDMINE_INSTALL_TO # 一時的にセットアップ中のユーザーでアクセスできるようにしてセットアップしている。 sudo chown `id -u -n` $REDMINE_INSTALL_TO cd $REDMINE_INSTALL_TO svn checkout http://svn.redmine.org/redmine/branches/2.5-stable ./ # rake 10.1.1のままだとエラーが出たので、10.3.2にした。 sed -i 's/gem "rake", "~> 10.1.1"/gem "rake", "~> 10.3.2"/g' Gemfile # unicornをGemfileに追記 echo "gem 'unicorn'" >> Gemfile # unicorn.conf.rbから、unicorn.rbへ変更 sed -i 's/unicorn.conf.rb/unicorn.rb/g' Gemfile mv config/database.yml.example config/database.yml vi config/database.yml
config/database.ymlは下記のような感じに。testやdevelopmentは全部コメントアウトしてしまっても問題ない。
production: adapter: mysql2 database: redmine host: localhost username: redmine password: "redmine_db_pass" encoding: utf8
/var/www/redmine/config/unicorn.rbを作成して、下記のように編集。
worker_processes 2 working_directory("/var/www/redmine") listen File.expand_path("tmp/unicorn.sock", ENV['RAILS_ROOT']) pid File.expand_path("tmp/unicorn.pid", ENV['RAILS_ROOT']) preload_app true stdout_path "/var/www/redmine/log/unicorn.stdout.log" stderr_path "/var/www/redmine/log/unicorn.stderr.log" GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end sleep 1 end after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end
/etc/default/unicornの設定
sudo cp /etc/default/unicorn /etc/default/unicorn.bak sudo sed -i "s/^CONFIGURED=no/CONFIGURED=yes/g" /etc/default/unicorn # APP_ROOTは環境変数ではなくべた書きなので注意。 # /var/www/redmine以外にインストールする場合には、修正してください。 sudo sed -i "s/^APP_ROOT.*/APP_ROOT=\/var\/www\/redmine/g" /etc/default/unicorn sudo sed -i "s/\$CONFIG_RB/\$CONFIG_RB -E production/g" /etc/default/unicorn diff /etc/default/unicorn /etc/default/unicorn.bak
sedがミスっていたら面倒なので、/etc/default/unicornの内容を貼り付けておく。
# Change paramentres below to appropriate values and set CONFIGURED to yes. CONFIGURED=yes # Default timeout until child process is killed during server upgrade, # it has *no* relation to option "timeout" in server's config.rb. TIMEOUT=60 # Path to your web application, sh'ld be also set in server's config.rb, # option "working_directory". Rack's config.ru is located here. APP_ROOT=/var/www/redmine # Server's config.rb, it's not a rack's config.ru CONFIG_RB="$APP_ROOT/config/unicorn.rb" # Where to store PID, sh'ld be also set in server's config.rb, option "pid". PID=/run/unicorn.pid # Additional arguments passed to unicorn, see man (1) unicorn. UNICORN_OPTS="-E production -c /var/www/redmine/config/unicorn.rb -D"
redmineの初期設定を行う
cd $REDMINE_INSTALL_TO bundle install rake generate_secret_token RAILS_ENV=production rake db:migrate # 基本データの投入。途中の質問はjaを選択。 RAILS_ENV=production rake redmine:load_default_data
nginxの初期設定を行う
sudo vi /etc/nginx/sites-available/default
/etc/nginx/sites-available/defaultには、下記を追加。server_nameをredmineにしているので、クライアント側で、hostsファイルにredmineの名前とIPアドレスの対応を書いてアクセスすればOK。今回はローカル環境だったので、最低限動く環境としてセットアップしています。
upstream redmine { server unix:/var/www/redmine/tmp/unicorn.sock; } server { server_name redmine; root /var/www/redmine; location / { proxy_pass http://redmine; } }
unicornとnginxの起動。unicornの起動に失敗する場合には、sudo unicorn等として、エラーメッセージを表示させ、問題の対策を行う。エラーメッセージからは推測しにくいが、パスがずれていたり、パーミッションが合っていない問題で起動できない事が多いので、起動失敗する場合にはその辺を見直す。
sudo service unicorn start sudo service nginx start
redmineと連携する共有リポジトリを用意する。今回は外部公開ではないので、redmine上のディレクトリにリポジトリを置きましたが、パーミッションさえ適切であれば/var/git等、好きな場所に置けます。
sudo mkdir -p $REDMINE_INSTALL_TO/git-repo/chef.git cd $REDMINE_INSTALL_TO/git-repo/chef.git sudo git init --bare sudo chown -R www-data:www-data $REDMINE_INSTALL_TO sudo chmod 774 -R $REDMINE_INSTALL_TO # 作業しているユーザーをwww-dataグループに加えて、 # gitリポジトリにコミットできるようにしておく sudo gpasswd -a `id -u -n` www-data
chefのプロジェクトを作成する。
sudo mkdir -p $REDMINE_INSTALL_TO/git-repo/chef.git cd $REDMINE_INSTALL_TO/git-repo/chef.git sudo git init --bare sudo chown -R www-data:www-data $REDMINE_INSTALL_TO sudo chmod 774 -R $REDMINE_INSTALL_TO # 作業しているユーザーをwww-dataグループに加えて、 # gitリポジトリにコミットできるようにしておく sudo usermod `id -u -n` -G www-data
上記まででredmineの環境構築は終了です。ここから先は冒頭で明言したとおり、chefによるインフラ管理のプロジェクトを作成し、そのコードをredmine+gitで管理するようにします。ユーザーは、普段使いの一般ユーザーでOKです。
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bash_profile # インストール可能なrubyのバージョンを調べて、最新版を入れる。 rbenv install -l rbenv install 2.1.2 rbenv global 2.1.2 # バージョンやインストール先を確認しておく。 ruby -v which ruby which gem gem install chef gem install knife-solo
gitの基本設定。
git config --global user.email "you@example.com" git config --global user.name "Your Name" git config --global push.default simple
chefプロジェクトの作成。好きな所でプロジェクトを作成してください。ここでは、ホームディレクトリ直下に作成しています。
cd ~ knife solo init chef-repo cd chef-repo git init git add . git commit -m 'first commit' vi .git/config
.git/configを編集する。下記のような感じで。
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = file:///var/www/redmine/git-repo/chef.git/ fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
pushして、redmineと連携しているリモート(と言っても今回は同一サーバ内ですが)サーバにテストpushしてみる。
# 取りあえず、適当なファイルを作成してcommit、pushして動作確認する。 touch test.txt git add test.txt git commit -a -m 'commit test.txt' git push
最後に、redmine上から、chefのリポジトリを指定して終わりです。hostsファイルで、redmineと、redmineをインストールしたサーバのIPを記載した上で、ウェブブラウザでhttp://redmineにアクセスしてredmineの設定を進めます。
プロジェクト>新しいプロジェクトを選択。
名称にchefと入れる。識別子は勝手にchefと指定されるはず。それで作成ボタンを押下。
作成したchefプロジェクトの設定画面で、新しいリポジトリを選択して、上記のように指定。
リポジトリのパスはgit pushされる場所を指定する事。
上記まで終わったら、chefプロジェクトのリポジトリをクリックしてみます。コミットされていますね。