feat: migrate AWS configuration to MinIO

- Update SitemapsController to use MinIO credentials
- Modify RefreshSitemapWorker to adapt to MinIO settings
- Change AWS configuration in initializers and storage files
- Add MinIO credentials to credentials.yml.enc

This commit transitions the application from using AWS S3 to MinIO for
storage. It updates all relevant configurations and ensures that the
application can now interact with MinIO seamlessly, including
support for both production and development environments.
This commit is contained in:
songtianlun 2025-02-19 11:31:57 +08:00
parent 468a665354
commit 789e9f8d23
6 changed files with 41 additions and 35 deletions

View File

@ -3,8 +3,8 @@ class SitemapsController < ApplicationController
path = params[:path] path = params[:path]
bucket_name = bucket_name =
Rails.env.production? ? Rails.env.production? ?
ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:aws, :bucket)) : ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:minio, :bucket)) :
ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:aws_dev, :bucket)) ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:minio_dev, :bucket))
Rails.logger.info "Sitemap: #{path}" Rails.logger.info "Sitemap: #{path}"
begin begin

View File

@ -27,19 +27,21 @@ class RefreshSitemapWorker
SitemapGenerator::Sitemap.default_host = ENV.fetch("RAILS_SITEMAP_DEFAULT_HOST", host) SitemapGenerator::Sitemap.default_host = ENV.fetch("RAILS_SITEMAP_DEFAULT_HOST", host)
if Rails.env.production? if Rails.env.production?
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new( SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:aws, :bucket)), ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:minio, :bucket)),
aws_access_key_id: ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :access_key_id)), aws_access_key_id: ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio, :access_key_id)),
aws_secret_access_key: ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :secret_access_key)), aws_secret_access_key: ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio, :secret_access_key)),
aws_region: ENV.fetch("AWS_REGION", "wnam"), aws_region: ENV.fetch("AWS_REGION", Rails.application.credentials.dig(:minio, :region)),
endpoint: ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:aws, :endpoint)), force_path_style: ENV.fetch("AWS_FORCE_PATH_STYLE", Rails.application.credentials.dig(:minio, :force_path_style)),
endpoint: ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:minio, :endpoint)),
) )
else else
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new( SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:aws_dev, :bucket)), ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:minio_dev, :bucket)),
aws_access_key_id: ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :access_key_id)), aws_access_key_id: ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio_dev, :access_key_id)),
aws_secret_access_key: ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :secret_access_key)), aws_secret_access_key: ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio_dev, :secret_access_key)),
aws_region: ENV.fetch("AWS_DEV_REGION", "wnam"), aws_region: ENV.fetch("AWS_DEV_REGION", Rails.application.credentials.dig(:minio_dev, :region)),
endpoint: ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:aws_dev, :endpoint)), force_path_style: ENV.fetch("AWS_FORCE_PATH_STYLE", Rails.application.credentials.dig(:minio_dev, :force_path_style)),
endpoint: ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:minio_dev, :endpoint)),
) )
end end
SitemapGenerator::Sitemap.sitemaps_path = "sitemaps/" SitemapGenerator::Sitemap.sitemaps_path = "sitemaps/"

View File

@ -1 +1 @@
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--JNyAqrs+Fsmpu043--vwHHQzq3PsM/qcTSemHHAg== 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--w1b7CHBZ4zFPRjgq--DpdTPDeqnUeN8aZTrINdZg==

View File

@ -1,19 +1,21 @@
if Rails.env.production? if Rails.env.production?
Aws.config.update({ Aws.config.update({
region: ENV.fetch("AWS_REGION", "wnam"), region: ENV.fetch("AWS_REGION", Rails.application.credentials.dig(:minio, :region)),
credentials: Aws::Credentials.new( credentials: Aws::Credentials.new(
ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :access_key_id)), ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio, :access_key_id)),
ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :secret_access_key)) ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio, :secret_access_key))
), ),
endpoint: ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:aws, :endpoint)) force_path_style: ENV.fetch("AWS_FORCE_PATH_STYLE", Rails.application.credentials.dig(:minio_dev, :force_path_style)),
endpoint: ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:minio, :endpoint))
}) })
else else
Aws.config.update({ Aws.config.update({
region: ENV.fetch("AWS_DEV_REGION", "wnam"), region: ENV.fetch("AWS_DEV_REGION", Rails.application.credentials.dig(:minio_dev, :region)),
credentials: Aws::Credentials.new( credentials: Aws::Credentials.new(
ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :access_key_id)), ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio_dev, :access_key_id)),
ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :secret_access_key)) ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio_dev, :secret_access_key))
), ),
endpoint: ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:aws_dev, :endpoint)) force_path_style: ENV.fetch("AWS_DEV_FORCE_PATH_STYLE", Rails.application.credentials.dig(:minio_dev, :force_path_style)),
endpoint: ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:minio_dev, :endpoint))
}) })
end end

View File

@ -2,10 +2,10 @@
host = Rails.env.production? ? "https://todayaiweather.com" : "http://127.0.0.1:3000" host = Rails.env.production? ? "https://todayaiweather.com" : "http://127.0.0.1:3000"
Rails.application.routes.default_url_options[:host] = host Rails.application.routes.default_url_options[:host] = host
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new( SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
Rails.application.credentials.dig(:aws, :bucket), Rails.application.credentials.dig(:minio, :bucket),
aws_access_key_id: Rails.application.credentials.dig(:aws, :access_key_id), aws_access_key_id: Rails.application.credentials.dig(:minio, :access_key_id),
aws_secret_access_key: Rails.application.credentials.dig(:aws, :secret_access_key), aws_secret_access_key: Rails.application.credentials.dig(:minio, :secret_access_key),
aws_region: Rails.application.credentials.dig(:aws, :region) aws_region: Rails.application.credentials.dig(:minio, :region)
) )
SitemapGenerator::Sitemap.sitemaps_path = "sitemaps/" SitemapGenerator::Sitemap.sitemaps_path = "sitemaps/"

View File

@ -19,19 +19,21 @@ build:
# bucket: your_own_bucket-<%= Rails.env %> # bucket: your_own_bucket-<%= Rails.env %>
amazon_dev: amazon_dev:
service: S3 service: S3
access_key_id: <%= ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :access_key_id)) %> access_key_id: <%= ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio_dev, :access_key_id)) %>
secret_access_key: <%= ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :secret_access_key)) %> secret_access_key: <%= ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio_dev, :secret_access_key)) %>
region: <%= ENV.fetch("AWS_DEV_REGION", "wnam") %> region: <%= ENV.fetch("AWS_DEV_REGION", Rails.application.credentials.dig(:minio_dev, :region)) %>
bucket: <%= ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:aws_dev, :bucket)) %> bucket: <%= ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:minio_dev, :bucket)) %>
endpoint: <%= ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:aws_dev, :endpoint)) %> endpoint: <%= ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:minio_dev, :endpoint)) %>
force_path_style: <%= ENV.fetch("AWS_DEV_FORCE_PATH_STYLE", Rails.application.credentials.dig(:minio_dev, :force_path_style)) %>
amazon: amazon:
service: S3 service: S3
access_key_id: <%= ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :access_key_id)) %> access_key_id: <%= ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio, :access_key_id)) %>
secret_access_key: <%= ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :secret_access_key)) %> secret_access_key: <%= ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:minio, :secret_access_key)) %>
region: <%= ENV.fetch("AWS_REGION", "wnam") %> region: <%= ENV.fetch("AWS_REGION", Rails.application.credentials.dig(:minio, :region)) %>
bucket: <%= ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:aws, :bucket)) %> bucket: <%= ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:minio, :bucket)) %>
endpoint: <%= ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:aws, :endpoint)) %> endpoint: <%= ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:minio, :endpoint)) %>
force_path_style: <%= ENV.fetch("AWS_DEV_FORCE_PATH_STYLE", Rails.application.credentials.dig(:minio, :force_path_style)) %>
# Remember not to checkin your GCS keyfile to a repository # Remember not to checkin your GCS keyfile to a repository
# google: # google: