Add config of multipart threshold for S3 (#11924)
This commit is contained in:
		
							parent
							
								
									637cc7bf78
								
							
						
					
					
						commit
						172eaeba3f
					
				
					 3 changed files with 44 additions and 1 deletions
				
			
		|  | @ -115,6 +115,20 @@ SMTP_FROM_ADDRESS=notifications@example.com | ||||||
| # S3_ENDPOINT= | # S3_ENDPOINT= | ||||||
| # S3_SIGNATURE_VERSION= | # S3_SIGNATURE_VERSION= | ||||||
| 
 | 
 | ||||||
|  | # Google Cloud Storage (optional) | ||||||
|  | # Use S3 compatible API. Since GCS does not support Multipart Upload, | ||||||
|  | # increase the value of S3_MULTIPART_THRESHOLD to disable Multipart Upload. | ||||||
|  | # The attachment host must allow cross origin request - see the description | ||||||
|  | # above. | ||||||
|  | # S3_ENABLED=true | ||||||
|  | # AWS_ACCESS_KEY_ID= | ||||||
|  | # AWS_SECRET_ACCESS_KEY= | ||||||
|  | # S3_REGION= | ||||||
|  | # S3_PROTOCOL=https | ||||||
|  | # S3_HOSTNAME=storage.googleapis.com | ||||||
|  | # S3_ENDPOINT=https://storage.googleapis.com | ||||||
|  | # S3_MULTIPART_THRESHOLD=52428801 # 50.megabytes | ||||||
|  | 
 | ||||||
| # Swift (optional) | # Swift (optional) | ||||||
| # The attachment host must allow cross origin request - see the description | # The attachment host must allow cross origin request - see the description | ||||||
| # above. | # above. | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ if ENV['S3_ENABLED'] == 'true' | ||||||
|     s3_protocol: s3_protocol, |     s3_protocol: s3_protocol, | ||||||
|     s3_host_name: s3_hostname, |     s3_host_name: s3_hostname, | ||||||
|     s3_headers: { |     s3_headers: { | ||||||
|  |       'X-Amz-Multipart-Threshold' => ENV.fetch('S3_MULTIPART_THRESHOLD') { 15.megabytes }, | ||||||
|       'Cache-Control' => 'public, max-age=315576000, immutable', |       'Cache-Control' => 'public, max-age=315576000, immutable', | ||||||
|     }, |     }, | ||||||
|     s3_permissions: ENV.fetch('S3_PERMISSION') { 'public-read' }, |     s3_permissions: ENV.fetch('S3_PERMISSION') { 'public-read' }, | ||||||
|  |  | ||||||
|  | @ -135,7 +135,7 @@ namespace :mastodon do | ||||||
|       prompt.say "\n" |       prompt.say "\n" | ||||||
| 
 | 
 | ||||||
|       if prompt.yes?('Do you want to store uploaded files on the cloud?', default: false) |       if prompt.yes?('Do you want to store uploaded files on the cloud?', default: false) | ||||||
|         case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio']) |         case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio', 'Google Cloud Storage']) | ||||||
|         when 'Amazon S3' |         when 'Amazon S3' | ||||||
|           env['S3_ENABLED']  = 'true' |           env['S3_ENABLED']  = 'true' | ||||||
|           env['S3_PROTOCOL'] = 'https' |           env['S3_PROTOCOL'] = 'https' | ||||||
|  | @ -217,6 +217,34 @@ namespace :mastodon do | ||||||
|             q.required true |             q.required true | ||||||
|             q.modify :strip |             q.modify :strip | ||||||
|           end |           end | ||||||
|  |         when 'Google Cloud Storage' | ||||||
|  |           env['S3_ENABLED']             = 'true' | ||||||
|  |           env['S3_PROTOCOL']            = 'https' | ||||||
|  |           env['S3_HOSTNAME']            = 'storage.googleapis.com' | ||||||
|  |           env['S3_ENDPOINT']            = 'https://storage.googleapis.com' | ||||||
|  |           env['S3_MULTIPART_THRESHOLD'] = 50.megabytes | ||||||
|  | 
 | ||||||
|  |           env['S3_BUCKET'] = prompt.ask('GCS bucket name:') do |q| | ||||||
|  |             q.required true | ||||||
|  |             q.default "files.#{env['LOCAL_DOMAIN']}" | ||||||
|  |             q.modify :strip | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           env['S3_REGION'] = prompt.ask('GCS region:') do |q| | ||||||
|  |             q.required true | ||||||
|  |             q.default 'us-west1' | ||||||
|  |             q.modify :strip | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           env['AWS_ACCESS_KEY_ID'] = prompt.ask('GCS access key:') do |q| | ||||||
|  |             q.required true | ||||||
|  |             q.modify :strip | ||||||
|  |           end | ||||||
|  | 
 | ||||||
|  |           env['AWS_SECRET_ACCESS_KEY'] = prompt.ask('GCS secret key:') do |q| | ||||||
|  |             q.required true | ||||||
|  |             q.modify :strip | ||||||
|  |           end | ||||||
|         end |         end | ||||||
| 
 | 
 | ||||||
|         if prompt.yes?('Do you want to access the uploaded files from your own domain?') |         if prompt.yes?('Do you want to access the uploaded files from your own domain?') | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue