Crowiでファイルアップロードしてみた(AWS)

どうも、ハートで汗かいてるざわです。

久しぶりのCrowiネタです。

事前準備

  • AWS S3バケットの用意
  • S3にアクセスできる APIキーとシークレットキーの用意

リージョンの確認

今回は「crowi-upload-test」というバケット名で進めます

$ aws s3api get-bucket-location --bucket crowi-upload-test
{
    "LocationConstraint": "us-west-2"
}

s3 lsもできるか確認

$ aws s3 ls s3://crowi-upload-test

ポリシー

ちなみにIAMユーザを作成し、グループのポリシーに以下を設定しました。
GetBucketLocation ないとAccess Deniedになりました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::crowi-upload-test"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": "arn:aws:s3:::crowi-upload-test/*"
        }
    ]
}

設定

ヘッダーから「admin」を選択します

アプリ設定

AWS設定の項目を設定して更新します

動作確認

FILE_UPLOAD=aws 指定して起動します

FILE_UPLOAD=aws PASSWORD_SEED=1234567 MONGO_URI=mongodb://localhost:27017 npm start

編集画面で画像をドラッグ&ドロップすると表示されました!

おしまい

これに伴いプロフィール画像も変更できるようになりました〜

おまけ

リバースプロキシなどで、異なるポートでラップしてる場合、、、
画像のURLとかシェアリンクのポートが抜けて正しく表示されない場合がある?(当たり前ですが)

その場合、この辺のファイル見ると解決できるかもメモ

  • lib/crowi/express-init.js

とりあえずこんな感じにすると解決できる(もっといい方法発見できたら嬉しい)
例) ポート8080の例

config.crowi['app:url'] = baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + '://' + req.get('host')

config.crowi['app:url'] = baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + '://' + req.get('host') + ':8080'
サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする