Redmine の添付ファイルを Amazon S3 に格納する
チケットベースのプロジェクト管理システムの Redmine は便利ですが、長年使っていると添付ファイルが増えていきますよね。ファイルが増えすぎたのでサーバの移転をして Redmine 本体のセットアップからやり直すのは面倒です。そこで S3 plugin for Redmine を使って Redmine 本体は移動せず、添付ファイルのフォルダだけを Amazon S3 に移せるようなので試してみました。
Redmine S3 プラグインの導入
まず S3 プラグインを github から導入します。
1 2 3 |
cd /var/lib/redmine git clone git://github.com/ka8725/redmine_s3.git plugins/redmine_s3 cp plugins/redmine_s3/config/s3.yml.example config/s3.yml |
s3.yml はいまはコピーだけしておいて、中身は AWS の作業後に設定します。
S3 バケットの作成と IAM の設定
次に AWS のS3コンソールから s3 のバケットを作成します。バケットの下には files というディレクトリを作っておきます。
S3 へのアクセスに認証をかけるために、IAM でアクセスキー(アクセスキーIDとシークレットアクセスキー)を取得します。awsのs3を操作する為のaccess keyとsecret keyを取得する(IAM)という記事が参考になりますので詳細はそちらで。
つぎにここで作成した IAM ユーザが S3 バケットにアクセスできるように権限を持たせます。IAM のユーザー画面からポリシーをアタッチします。
添付ファイルデータの S3 への転送
さて、S3 プラグインを使うと過去のチケットの添付ファイルも S3 を参照するようになります。そのため、これまでのファイルも先だって S3 バケットに転送しておく必要があります。
今回は s3cmd を使うことにしました。ダウンロード・インストールします。
1 2 3 |
tar xzvf s3cmd-1.6.0.tar.gz cd s3cmd-1.6.0/ python setup.py install |
s3cmd の設定をします。your_bucket_name は自分のバケット名に読み替えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
s3cmd --configure Access Key: (IAM のアクセスキーIDを入力) Secret Key: (IAM のシークレットアクセスキーを入力) Default Region [US]: JP Use HTTPS protocol [Yes]: Test access with supplied credentials? [Y/n] Please wait, attempting to list all buckets... Success. Your access key and secret key worked fine :-) Save settings? [y/N] y Configuration saved to '/root/.s3cfg' |
s3cmd で転送を実行します。少し時間がかかります。
1 |
s3cmd put --recursive /var/lib/redmine/files/* s3://your_bucket_name/files/ |
s3.yml の設定
プラグインの設定に戻ります。s3.yml にさきほど作成した IAM のアクセスキーIDとシークレットアクセスキーを転記します。
1 2 3 4 5 6 7 8 9 10 11 |
production: access_key_id: ABCDEFGHIJKLMNOP secret_access_key: abcd1234GHIJKlmn7890WXYZ bucket: your_bucket_name folder: files endpoint: s3.amazonaws.com secure: true private: true expires: proxy: false thumb_folder: |
bundle install を実行して必要な gem をインストールします。
1 2 3 4 |
bundle install --without development test Installing aws-sdk-v1 1.66.0 Installing aws-sdk 1.66.0 |
Rails を再起動します。Passenger を利用している場合は以下のコマンドですが環境により異なります。
1 |
passenger-config restart-app |
これで、Redmine の添付ファイルのアップロード・ダウンロードができるようになります。
その他
Redmine 本体は EC2 上にある必要はありません。現在のサーバが VPS であってもそのままで問題ありません。
今回の記事の方法だけだと、添付画像の自動サムネイル表示に問題があることがわかりましたので、対処方法は別の記事で解説します。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。