Heroku

HerokuにRedmineを立てる

Redmineで小規模ながらチケット駆動でやっていると、もう一つRedmineが欲しくなった。
自宅サーバでRedmineが走っているのだが、WAN公開はセキュリティ対策に自信が持てないのでしていない。
しかし、無料のホスティングサービスやレンタルサーバで簡単に動かす方法がない…………
いや、ありました。
Ruby on RailならHerokuHerokuRedmineをインストールするのです、我々は賢いので。
手順はこのようになります。

  1. Redmineを一旦ローカルに保存して設定ファイルを変更する。
  2. Heroku側でアプリケーションURLを用意。
  3. 設定をmasterブランチへ取り込んで、Herokuへプッシュ。
  4. HerokuでRuby on Railsのコマンドを実行してセットアップ。

作業するローカルPCにRuby実行環境が必要ですが、Railsの実行環境・インストールは一切必要ありません。Herokuのアカウント取得、Heroku CLIのインストール・使用方法は省略します。
また、2017年4月現在のHerokuのRuby,Rails環境設定については確認してません。
制限もあります。

  1. リポジトリがHeroku側に置けないのでチケットとコードの関係性を表示できない。
  2. 画像をアップロードできない。
  3. 30分ぐらいアクセスがないと、サーバー側はRuby環境の立ち上げからやり直すので重い。

ただ、かなり簡単にプロジェクト管理が立ち上げられるので、便利かも知れません。

Redmineをローカルで設定

HerokuにはGitHubのリポジトリから直接デプロイできる機能があります。
CrowiというWikiエンジンを、同じくHerokuで使ってます。こちらはGitHubから一発デプロイ可能です。
しかしながら、RedmineはGitHub->Herokuの一発デプロイに対応してません。
そこで、一旦ローカルにクローンを取得して、設定ファイルを編集します。

$ git clone https://github.com/redmine/redmine.git
$ cd redmine
$ git checkout -b for-heroku refs/tags/3.3.2

Cloneしたそのままで作業すると、開発版をHerokuへ上げてしまうことになるので、安定版のタグを指定しfor-herokuブランチとしてチェックアウトします。
はい、うっかりしていてDevelopをHerokuでホスティングしてしまったのは私です。
最終的にブランチはこうなります。
Herokuへプッシュするブランチ構成
まず、.gitignoreを書き換えます。
git pushでHerokuへアップロードする関係で、追跡するファイルが増えます。
.gitignore から削除してgitで追跡するファイル

/config/configuration.yml
/config/database.yml
/config/email.yml
/config/secrets.yml
/config/initializers/session_store.rb
/config/initializers/secret_token.rb
/Gemfile.lock
/Gemfile.local

編集したら、Redmineで必要なパッケージをインストールします。
gemfilesはデフォルトのままでいいかと思います。

$ bundle install

ただ、相変わらずrmagickのインストールに失敗します。私だけ?何故かCentOSでも転けました。

# Optional gem for exporting the gantt to a PNG file, not supported with jruby
group :rmagick do
gem "rmagick", ">= 2.14.0"
end

オプション機能なので、なくても構わないでしょう。Redmineのガントチャートを画像ファイルとしてダウンロードするためのGemです。
コメントアウトするか削除してbundle installを通してしまいます。
続けて、Herokuで動かすための設定をymlファイルに書いていきます。
config/database.yml
データベース関係の設定ですね。

production:
adapter: postgresql
database: redmine
host: 127.0.0.1

config/secrets.yml
シークレットトークンを格納するために作成。RedmineがDBに接続する際に使う設定です。
環境変数を使うように設定を記述します。

production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

confug/application.rb
また、Herokuでのビルド時にエラーで止まるため、application.rbに下記設定を追記します。
Rails3.2関係のビルド設定のようです。

Heroku and Rails 3.2 asset:precompile error

config.assets.initialize_on_precompile = false

設定が済んだら、現在作業しているブランチをmasterに名前だけ変えてしまいます。
というのも、Herokuサーバがmasterというブランチ名でないとデプロイを受け付けてくれないためです。Redmineの開発を行っているリポジトリへプッシュするものではありません、Herokuへアップロードするためのmasterとします。
設定を書いた作業ブランチ ツリー表示
この状態から
Herokuへプッシュするブランチ構成
この状態にブランチを変更します。私は単にmasterブランチを削除して、for-herokuブランチからmasterブランチを作成してチェックアウトしました。
以上で、ローカルでのRedmineの準備は完了です。

Heroku側の準備

Heroku CLIでHerokuのアプリケーション設定をします。
新規のアプリケーションを作成

$ heroku create

createすると自動でRedmine用のURLも生成してくれます。
今回は、frozen-plateau-25566 というURLを生成してくれました。
「凍った高原」だそうです。URLは後からHerokuのダッシュボードで変更できます。
(今回の説明用に立てたアプリなので、このURLは既にありません)
次に、HerokuアプリケーションにPostgresqlデータベースを用意します。

$ heroku addons:create heroku-postgresql

heroku create スクリーンショット

Herokuへプッシュ

createでアプリケーションを作成した時点で、ローカル・リポジトリのリモートにfrozen-plateau-25566 のgitリポジトリが追加されていますので、そこへプッシュ。

$ git push heroku

アップが完了すると、HerokuでRuby on RailsとRedmineのビルドが始まります。
Herokuでのデプロイ スクリーンショット
ダメならHeroku側で綺麗に消えます!
Errorとかで止まった場合でも設定を書き直してコミット・プッシュすれば、再度まっさらの環境でデプロイが始まります。
Herokuは仮想化のコンテナ技術を使ってるらしいですね。
デプロイが終わったら、Ruby on Railsで初期設定をします。
Herokuへrakeコマンドを発行。

$ heroku run rake db:migrate
$ heroku run rake redmine:load_default_data

二つ目のrakeでデフォルトデータを入れる際に、使用言語の選択があります。
jaと打てば日本語を選べます。
heroku run rake スクリーンショット

Redmineへアクセス

$ heroku open

デフォルトのブラウザで、デプロイしたRedmineのアドレスが開きます。
ユーザー:admin パスワード:adminでログインします。
パスワードを再設定したら、使えるようになります。
Redmineスタート画面
参考

HerokuにRedmineをデプロイする方法 ― Qiita
HowTo Install Redmine (> 2.5.x) on Heroku – Redmine公式

余録

HerokuにGemfile.lockがないとコンパイルできないので、含めて下さいと言われる。
Heroku require gemfile.locl スクリーンショット
だが、Gemfile.lockを含めていても…
remove gemfile.lock スクリーンショット
Windowsで生成したGemfile.lockだと警告されて削除、Heroku側でパッケージをインストールし直している、諸行無常。