{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/blog/20211002/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Juicy Blog 🍋"}},"markdownRemark":{"id":"e4392015-4df1-5682-bdf4-8b8b4722a63f","excerpt":"TL;DR を指定してください Amazon S3互換のMinIOはセルフホスティングできるS3として、開発用としても自宅の運用にも便利です。\nこれまで何回かActiveStorageのネタで投稿していますが、今まで手っ取り早くストレージの保存先はRailsのディレクトリでした。\nDocker…","html":"<p><strong>TL;DR</strong> <code class=\"language-text\">force_path_style: true</code>を指定してください</p>\n<p>Amazon S3互換の<a href=\"https://min.io/\">MinIO</a>はセルフホスティングできるS3として、開発用としても自宅の運用にも便利です。\nこれまで何回かActiveStorageのネタで投稿していますが、今まで手っ取り早くストレージの保存先はRailsの<code class=\"language-text\">storage</code>ディレクトリでした。\nDockerでコンテナイメージを作成するので特に自分で運用する場合はRailsでも良い気がしますが、前回のNginxと組み合わせるのにActiveStorageだけだと少々取り回しにくいなと思いました。</p>\n<p>新しいRailsの作成は<a href=\"https://github.com/nzwsch/rails-prompt\">rails-prompt</a>などを使ってもらうとして、<code class=\"language-text\">storage.yml</code>の記述は以下のようにしました。</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">amazon</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">service</span><span class=\"token punctuation\">:</span> S3\n  <span class=\"token key atrule\">access_key_id</span><span class=\"token punctuation\">:</span> &lt;%= Rails.application.credentials.dig(<span class=\"token punctuation\">:</span>aws<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">:</span>access_key_id) %<span class=\"token punctuation\">></span>\n  <span class=\"token key atrule\">secret_access_key</span><span class=\"token punctuation\">:</span> &lt;%= Rails.application.credentials.dig(<span class=\"token punctuation\">:</span>aws<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">:</span>secret_access_key) %<span class=\"token punctuation\">></span>\n  <span class=\"token key atrule\">region</span><span class=\"token punctuation\">:</span> us<span class=\"token punctuation\">-</span>east<span class=\"token punctuation\">-</span><span class=\"token number\">1</span>\n  <span class=\"token key atrule\">bucket</span><span class=\"token punctuation\">:</span> myapp\n  <span class=\"token key atrule\">endpoint</span><span class=\"token punctuation\">:</span> http<span class=\"token punctuation\">:</span>//localhost<span class=\"token punctuation\">:</span><span class=\"token number\">9000</span>\n  <span class=\"token key atrule\">force_path_style</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span></code></pre></div>\n<p>ここでのポイントは正しく<code class=\"language-text\">region</code>を指定すること、<code class=\"language-text\">bucket</code>を指定すること、<code class=\"language-text\">endpoint</code>を指定することです。\n<a href=\"https://docs.min.io/docs/minio-docker-quickstart-guide.html\">MinIO Docker Quickstart Guide</a>をもとにDocker経由で作成したので<code class=\"language-text\">endpoint</code>は<code class=\"language-text\">http://localhost:9000</code>です。\nWebのUIは<code class=\"language-text\">http://localhost:9001</code>でしたので注意。</p>\n<p>続いてWebに<code class=\"language-text\">MINIO_ROOT_USER</code>と<code class=\"language-text\">MINIO_ROOT_PASSWORD</code>を入力してログインしたら<code class=\"language-text\">http://localhost:9001/buckets</code>で上で指定した<code class=\"language-text\">bucket</code>を作成しておきます。\nDockerのVolumeを初期化したりするとログインして作成しないといけないのでややこしいですが、今回は割愛します。\n続いて<code class=\"language-text\">http://localhost:9001/settings</code>の<code class=\"language-text\">Edit Region Configuration</code>で<code class=\"language-text\">us-east-1</code>などに指定しておきました。</p>\n<p>さて実際にRails側でこの設定でファイルをアップロードしてみると以下のエラーが表示されました。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Aws::S3::Errors::MalformedXML (The XML you provided was not well-formed or did not validate against our published schema.):</code></pre></div>\n<p>これはどうして起こるのかというと、エンドポイントのURLが<code class=\"language-text\">http://myapp.localhost:9000</code>を指定しているみたいでした。\nそこで冒頭の<code class=\"language-text\">force_path_style: true</code>を加えてあげることで<code class=\"language-text\">http://localhost:9000/myapp</code>の形式に戻るというわけ。\n相変わらずRails Guidesの方には記載がありませんが、今回は<a href=\"https://kevinjalbert.com/rails-activestorage-configuration-for-minio/\">Rails ActiveStorage Configuration for Minio</a>というページを参考に解決しました。</p>\n<p>またつい最近<a href=\"https://www.cloudflare.com/press-releases/2021/cloudflare-announces-r2-storage/\">Cloudflare R2</a>というサービスが追加されたので試してみたいところですね。</p>","frontmatter":{"title":"ActiveStorageでMinIOにアップロードする方法","date":"October 02, 2021","description":"タイトルの通りActiveStorageの小ネタです"}},"previous":{"fields":{"slug":"/blog/20210919/"},"frontmatter":{"title":"NginxでMP4のモジュールを有効にする"}},"next":{"fields":{"slug":"/blog/20211017/"},"frontmatter":{"title":"Expo AVで動画を再生する"}}},"pageContext":{"id":"e4392015-4df1-5682-bdf4-8b8b4722a63f","previousPostId":"9716444d-fd49-5da5-b9bd-a5eabc251ef9","nextPostId":"0a716a63-9ffe-5aae-ba1e-b041729e27b4"}},
    "staticQueryHashes": ["2785349746","2841359383"]}