Redmineで小規模ながらチケット駆動でやっていると、もう一つRedmineが欲しくなった。
自宅サーバでRedmineが走っているのだが、WAN公開はセキュリティ対策に自信が持てないのでしていない。
しかし、無料のホスティングサービスやレンタルサーバで簡単に動かす方法がない…………
いや、ありました。
Ruby on RailならHeroku、HerokuにRedmineをインストールするのです、我々は賢いので。
手順はこのようになります。
- Redmineを一旦ローカルに保存して設定ファイルを変更する。
- Heroku側でアプリケーションURLを用意。
- 設定をmasterブランチへ取り込んで、Herokuへプッシュ。
- HerokuでRuby on Railsのコマンドを実行してセットアップ。
作業するローカルPCにRuby実行環境が必要ですが、Railsの実行環境・インストールは一切必要ありません。Herokuのアカウント取得、Heroku CLIのインストール・使用方法は省略します。
また、2017年4月現在のHerokuのRuby,Rails環境設定については確認してません。
制限もあります。
- リポジトリがHeroku側に置けないのでチケットとコードの関係性を表示できない。
- 画像をアップロードできない。
- 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でホスティングしてしまったのは私です。
最終的にブランチはこうなります。
まず、.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関係のビルド設定のようです。
config.assets.initialize_on_precompile = false
設定が済んだら、現在作業しているブランチをmasterに名前だけ変えてしまいます。
というのも、Herokuサーバがmasterというブランチ名でないとデプロイを受け付けてくれないためです。Redmineの開発を行っているリポジトリへプッシュするものではありません、Herokuへアップロードするためのmasterとします。
この状態から
この状態にブランチを変更します。私は単に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でアプリケーションを作成した時点で、ローカル・リポジトリのリモートにfrozen-plateau-25566 のgitリポジトリが追加されていますので、そこへプッシュ。
$ git push heroku
アップが完了すると、HerokuでRuby on RailsとRedmineのビルドが始まります。
ダメならHeroku側で綺麗に消えます!
Errorとかで止まった場合でも設定を書き直してコミット・プッシュすれば、再度まっさらの環境でデプロイが始まります。
Herokuは仮想化のコンテナ技術を使ってるらしいですね。
デプロイが終わったら、Ruby on Railsで初期設定をします。
Herokuへrake
コマンドを発行。
$ heroku run rake db:migrate
$ heroku run rake redmine:load_default_data
二つ目のrake
でデフォルトデータを入れる際に、使用言語の選択があります。
ja
と打てば日本語を選べます。
Redmineへアクセス
$ heroku open
デフォルトのブラウザで、デプロイしたRedmineのアドレスが開きます。
ユーザー:admin パスワード:adminでログインします。
パスワードを再設定したら、使えるようになります。
参考
HerokuにRedmineをデプロイする方法 ― Qiita
HowTo Install Redmine (> 2.5.x) on Heroku – Redmine公式
余録
HerokuにGemfile.lockがないとコンパイルできないので、含めて下さいと言われる。
だが、Gemfile.lockを含めていても…
Windowsで生成したGemfile.lockだと警告されて削除、Heroku側でパッケージをインストールし直している、諸行無常。