Redmine3.0.xがリリースされたので早速環境構築してみます。基本的には『Redmine 3.0をCentOS 7.0にインストールする手順』を参考に、Ubuntu用に手順を改良させてもらいました。
目的
- Redmine3.0.xをインストール
- gitと連携させる
- コミット時のメール送信はgmailを利用
- ウェブサーバはApache + passenger module
- 手順の使いまわしの為に、スクリプトベースの手順書にする
前提条件
- Ubuntu15.04のインストール直後を想定
- sshでのログインが可能なこと
参考サイト
- Redmine 3.0のCHANGELOG
- Redmine 3.0をCentOS 7.0にインストールする手順
- Redmine2.4 + Gmail連携の設定 (BitNami/CentOS) ・・ gmailの送信回りで参考にさせてもらいました
redmine.jpの内容はいつも参考にさせてもらっています。この場を借りてお礼申し上げます。
事前準備
Ubuntu15.04をインストールした直後を想定しているので、下記を実施します。インターフェースは1つだけである想定で、interfacesファイルをバックアップした上で上書きしてしいるので、環境にあっていない場合には、適宜手動で編集してください。
- IPアドレスの固定化(ウェブサーバが動的IPだと困るので)
- パッケージの最新化
- IPv6の無効化
- sshdのDNSの逆引きを無効にする
sudo apt-get update sudo apt-get upgrade export MY_IP=172.20.1.252 export MY_NETWORK=`echo $MY_IP | sed -e "s/[0-9]*$/0/g"` export MY_GATEWAY=`echo $MY_IP | sed -e "s/[0-9]*$/1/g"` export MY_BROADCAST=`echo $MY_IP | sed -e "s/[0-9]*$/255/g"` export MY_NETMASK=255.255.255.0 export MY_NAMESERVERS=172.20.1.1 # interfacesの設定 sudo cp /etc/network/interfaces /etc/network/interfaces.bak # ヒアドキュメント使っているので、次の_EOF_まで、まとめてコピペ実行すること sudo tee /etc/network/interfaces <<_EOF_ > /dev/null auto lo iface lo inet loopback auto eth0 iface eth0 inet static address $MY_IP netmask $MY_NETMASK network $MY_NETWORK broadcast $MY_BROADCAST gateway $MY_GATEWAY dns-nameservers $MY_NAMESERVERS _EOF_ sudo su - echo "UseDNS no" >> /etc/ssh/sshd_config echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf reboot
必要なパッケージを事前にまとめてインストールする
postfixのインストール時にはインターネットサイトを選択し、Mysqlのインストール時にrootのパスワードを求められたらお好きなパスワードを設定してください。
sudo apt-get install ruby ruby-dev build-essential libssl-dev \ zlib1g-dev subversion git mysql-server mysql-client \ libmysqlclient-dev postfix imagemagick libmagickcore-dev \ libmagickwand-dev ruby-rmagick libcurl4-openssl-dev \ apache2-mpm-worker apache2-threaded-dev libapr1-dev \ libaprutil1-dev
MySQLのロケールを変更してredmine用のDBを作る
Ubuntu15.04のMySQLは、それ以前のものと設定ファイルが異なっています。具体的には、今までは/etc/mysql/my.cnfを設定していましたが、/etc/mysql/my.cnfはただのインクルードのみになり、その中身は/etc/mysql/mysql.conf.d/mysqld.cnfに移っています。
ここで、特に記憶しておく必要もないREDMINE_DBPASSはopensslコマンドでランダムな値で設定しています。この設定値は、Redmineインストール時に使いますので、その手順までOS再起動やログアウトしないで進めてください。心配だったらecho $REDMINE_DBPASSとでもして、パスワードを何処かにコピーしておいてください。
# 下記のMYSQL_ROOT_PASSはMySQLインストール時に # 設定したパスワードに置き換えてください。 export MYSQL_ROOT_PASS="mysqldbpass" export REDMINE_DBPASS=`openssl rand -hex 10` export REDMINE_INSTALL_TO='/var/www/redmine' sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak sudo sed -i "s/\[client\]/[client]\ndefault-character-set=utf8/g" \ /etc/mysql/mysql.conf.d/mysqld.cnf sudo sed -i "s/\[mysqld\]/[mysqld]\ncharacter-set-server=utf8/g" \ /etc/mysql/mysql.conf.d/mysqld.cnf sudo service mysql restart # utf8になっている事を確認する。 mysql -uroot -p$MYSQL_ROOT_PASS \ -e "show variables like 'character_set%';" # +--------------------------+----------------------------+ # | 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/ | # +--------------------------+----------------------------+ # データベース作成 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;" # 下記の警告が出るが、DB自体の作成は出来ているので、無視して。 # Warning: Using a password on the command line interface can be insecure. # MySQLのセキュリティ設定を行う。 # 具体的には、rootのパスワード設定とゲストアカウントの無効化、 # それと、リモートからのrootログインの無効化。 # 最初は、mysqlをインストールした時と同じパスワードを回答し、 # それ以降はEnterキーを4回押すのみ。 sudo mysql_secure_installation
Redmineのインストールと設定
redmineのインストール中にgmailによるメール送信を設定していますが、その設定でメール送信する場合には、gmailの設定で『安全性の低いアプリのアクセス』をONにしておく必要があり、https://www.google.com/settings/security/lesssecureappsから変更可能です(google のアナウンスはこちら)。gmail以外のメールサーバを持っている場合には、セキュリティ設定を変更せずに、gmail以外を使っても良いと思います。
sudo gem install bundler --no-rdoc --no-ri sudo svn co https://svn.redmine.org/redmine/branches/3.0-stable $REDMINE_INSTALL_TO # DBへの接続設定 sudo tee $REDMINE_INSTALL_TO/config/database.yml <<_EOF_ > /dev/null production: adapter: mysql2 database: redmine host: localhost username: redmine password: $REDMINE_DBPASS encoding: utf8 _EOF_ # メール送信設定。gmail利用例 # GMAIL,GMAIL_PASSWORDはご自身のアカウント情報を入れてください。 export GMAIL="your_email@gmail.com" export GMAIL_PASSWORD="yourpassword" sudo tee $REDMINE_INSTALL_TO/config/configuration.yml <<_EOF_ > /dev/null production: email_delivery: delivery_method: :smtp smtp_settings: #tls: true enable_starttls_auto: true address: "smtp.gmail.com" port: '587' domain: "smtp.gmail.com" authentication: :plain user_name: "$GMAIL" password: "$GMAIL_PASSWORD" _EOF_ # 初期データ登録とセキュリティトークン生成 cd $REDMINE_INSTALL_TO sudo bundle install --without development test --path vendor/bundle sudo bundle exec rake generate_secret_token RAILS_ENV=production bundle exec rake db:migrate RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data # passengerインストール sudo gem install passenger --no-rdoc --no-ri # apache2用passengerインストーラを実行します。 # 実行してから、数分待たされることになりますが、 # 実行の一番最後に、設定ファイルに含めるべき内容が出力されます。 sudo passenger-install-apache2-module
Apacheの設定変更
上記のpassenger-install-apache2-modukeを実行した最後の方の出力結果を載せておきます。上から3行目のLoadModuleから始まる箇所が大事なので、これを実際のコンソール画面からコピーして次のスクリプトに放り込んでください。
Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /var/lib/gems/2.1.0/gems/passenger-5.0.7/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /var/lib/gems/2.1.0/gems/passenger-5.0.7 PassengerDefaultRuby /usr/bin/ruby2.1 </IfModule> After you restart Apache, you are ready to deploy any number of web applications on Apache, with a minimum amount of configuration! Press ENTER when you are done editing.
実際に実行するスクリプト
# 下記のLoadModuleから下5行を、上記でコピーした文字列に置き換えてから実行する。 sudo tee /etc/apache2/mods-available/passenger.conf <<_EOF_ > /dev/null LoadModule passenger_module /var/lib/gems/2.1.0/gems/passenger-5.0.7/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /var/lib/gems/2.1.0/gems/passenger-5.0.7 PassengerDefaultRuby /usr/bin/ruby2.1 </IfModule> _EOF_ sudo ln -s /etc/apache2/mods-available/passenger.conf /etc/apache2/mods-enabled/passenger.conf # ここで、VirtualHostに設定するホスト名(FQDN)を組み立てています。 # 面倒だったら、export MY_FQDN="my.redmine.local"のように、 # ダイレクトに指定してしまってください。 export MY_HOSTNAME=`hostname` export MY_FQDN="redmine.$MY_HOSTNAME.local" # redmine用のバーチャルホストを追加する。 # sites-availableに設定を入れて、sites-enableに有効にする設定へのシンボリックリンクを張る sudo tee /etc/apache2/sites-available/$MY_FQDN.conf <<_EOF_ > /dev/null <VirtualHost *:80> ServerName $MY_FQDN DocumentRoot $REDMINE_INSTALL_TO/public/ <Directory $REDMINE_INSTALL_TO/public/> AllowOverride all Options -MultiViews Require all granted </Directory> </VirtualHost> _EOF_ sudo ln -s /etc/apache2/sites-available/$MY_FQDN.conf /etc/apache2/sites-enabled/$MY_FQDN.conf sudo chown www-data:www-data -R $REDMINE_INSTALL_TO # Apache再起動 sudo service apache2 restart echo "下記のURLにブラウザでアクセスする" echo "http://$MY_FQDN/"
上記スクリプト中でecho出力したURLにアクセスしてください。ローカル環境でセットアップしていた場合には、バーチャルホストにアクセスする為に、hostsファイルを書き換えてから。windowsの場合には、C:\Windows\System32\drivers\etc\hostsですね。
Redmineの初期ユーザーとパスワードはadmin/adminです。
gitのリポジトリを作成する
リモートからgitサーバーにコミットする事を前提としているので、gitユーザーとgitグループを作っておきます。(groupの方は、ユーザー作成時に一緒に作られる)
sudo adduser git # ユーザー `git' を追加しています... # 新しいグループ `git' (1001) を追加しています... # 新しいユーザー `git' (1001) をグループ `git' に追加しています... # ホームディレクトリ `/home/git' を作成しています... # `/etc/skel' からファイルをコピーしています... # 新しい UNIX パスワードを入力してください: # 新しい UNIX パスワードを再入力してください: # passwd: password updated successfully # Changing the user information for git # Enter the new value, or press ENTER for the default # Full Name []: # Room Number []: # Work Phone []: # Home Phone []: # Other []: # 以上で正しいですか? [Y/n] # gitユーザーになる sudo su - git # リポジトリ作成 mkdir -p repo/chef cd repo/chef/ git --bare init
Redmineにchefプロジェクトを作ってgitリポジトリと関連付ける
chefリポジトリにしたのは、単純に私がそうしたかっただけです。以降は図解で説明します。
管理から、プロジェクトを選択する。
プロジェクトが1つもない状態なので、新しいプロジェクトを選択します。
プロジェクト名や識別子には好きな内容を入れて、作成を押してください。
プロジェクトが作成出来たら、上記のような画面になります。赤色を付け忘れていますが、上記画面(設定>リポジトリタブ)の下にある、『新しいリポジトリ』をクリックしてください。
新しいリポジトリの中身は上記のように指定します。リポジトリのパスは、先ほどgitユーザーで作成したリポジトリのパスです。
作成出来たらこんな感じになります。
軽くgitのコミットテストをしておく
ローカルからですが、簡単にファイルを作成してコミットテストしておきます。
# gitユーザーのまま実行しています。 cd ~/ mkdir test cd test # 空のリポジトリの中身をcloneする git clone file:///home/git/repo/chef/ cd chef/ # 適当なテストファイルを作成してコミットする。 echo "test" > test git commit -a -m 'test' origin master # サーバ側(と言ってもローカルだけど)に反映する git push origin master # 追記のテスト echo "testddd" >> test git commit -a -m 'test 日本語' git push
テストしてコミットした後は、下記のような感じになりました。
Redmineへの追加設定が必要であれば、マニュアル参考に追加設定してください。
最後に
今までは、nginxとredmineの連携ばかりやっていたのですが、今回は、『準本番サーバを作ろう!!』と言う目的でOSのインストールから新規に始めたので、Apacheを使っています。その心は、外部公開していないサーバ上に、Redmineとリポジトリを作り、そのウェブサーバ上に更にログ分析用のソフトウェアを載せる必要があった事から、汎用性の高いApacheを利用しています。