diff --git a/README.md b/README.md index d1e859244..1f47ee914 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,7 @@ Rclone *("rsync for cloud storage")* is a command-line program to sync files and * Scaleway [:page_facing_up:](https://rclone.org/s3/#scaleway) * Seafile [:page_facing_up:](https://rclone.org/seafile/) * SeaweedFS [:page_facing_up:](https://rclone.org/s3/#seaweedfs) + * Selectel Object Storage [:page_facing_up:](https://rclone.org/s3/#selectel) * SFTP [:page_facing_up:](https://rclone.org/sftp/) * SMB / CIFS [:page_facing_up:](https://rclone.org/smb/) * StackPath [:page_facing_up:](https://rclone.org/s3/#stackpath) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index ccec63e89..eda36a259 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -154,6 +154,9 @@ var providerOption = fs.Option{ }, { Value: "SeaweedFS", Help: "SeaweedFS S3", + }, { + Value: "Selectel", + Help: "Selectel Object Storage", }, { Value: "StackPath", Help: "StackPath Object Storage", @@ -551,10 +554,19 @@ func init() { Value: "tw-001", Help: "Asia (Taiwan)", }}, + }, { + // See endpoints for object storage regions: https://docs.selectel.ru/en/cloud/object-storage/manage/domains/#s3-api-domains + Name: "region", + Help: "Region where your data stored.\n", + Provider: "Selectel", + Examples: []fs.OptionExample{{ + Value: "ru-1", + Help: "St. Petersburg", + }}, }, { Name: "region", Help: "Region to connect to.\n\nLeave blank if you are using an S3 clone and you don't have a region.", - Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,IONOS,Petabox,Liara,Linode,Magalu,Qiniu,RackCorp,Scaleway,Storj,Synology,TencentCOS,HuaweiOBS,IDrive", + Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,IONOS,Petabox,Liara,Linode,Magalu,Qiniu,RackCorp,Scaleway,Selectel,Storj,Synology,TencentCOS,HuaweiOBS,IDrive", Examples: []fs.OptionExample{{ Value: "", Help: "Use this if unsure.\nWill use v4 signatures and an empty region.", @@ -1319,10 +1331,19 @@ func init() { Value: "s3-ap-northeast-1.qiniucs.com", Help: "Northeast Asia Endpoint 1", }}, + }, { + // Selectel endpoints: https://docs.selectel.ru/en/cloud/object-storage/manage/domains/#s3-api-domains + Name: "endpoint", + Help: "Endpoint for Selectel Object Storage.", + Provider: "Selectel", + Examples: []fs.OptionExample{{ + Value: "s3.ru-1.storage.selcloud.ru", + Help: "Saint Petersburg", + }}, }, { Name: "endpoint", Help: "Endpoint for S3 API.\n\nRequired when using an S3 clone.", - Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,MagaluCloud,Scaleway,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox", + Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,MagaluCloud,Scaleway,Selectel,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox", Examples: []fs.OptionExample{{ Value: "objects-us-east-1.dream.io", Help: "Dream Objects endpoint", @@ -1845,7 +1866,7 @@ func init() { }, { Name: "location_constraint", Help: "Location constraint - must be set to match the Region.\n\nLeave blank if not sure. Used when creating buckets only.", - Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,IBMCOS,IDrive,IONOS,Leviia,Liara,Linode,Magalu,Outscale,Qiniu,RackCorp,Scaleway,StackPath,Storj,TencentCOS,Petabox", + Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,IBMCOS,IDrive,IONOS,Leviia,Liara,Linode,Magalu,Outscale,Qiniu,RackCorp,Scaleway,Selectel,StackPath,Storj,TencentCOS,Petabox", }, { Name: "acl", Help: `Canned ACL used when creating buckets and storing or copying objects. @@ -1860,7 +1881,7 @@ doesn't copy the ACL from the source but rather writes a fresh one. If the acl is an empty string then no X-Amz-Acl: header is added and the default (private) will be used. `, - Provider: "!Storj,Synology,Cloudflare", + Provider: "!Storj,Selectel,Synology,Cloudflare", Examples: []fs.OptionExample{{ Value: "default", Help: "Owner gets Full_CONTROL.\nNo one else has access rights (default).", @@ -3430,6 +3451,8 @@ func setQuirks(opt *Options) { } urlEncodeListings = true useAlreadyExists = true + case "Selectel": + urlEncodeListings = false case "SeaweedFS": listObjectsV2 = false // untested virtualHostStyle = false diff --git a/docs/content/_index.md b/docs/content/_index.md index 45abcfef0..711b55041 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -178,6 +178,7 @@ WebDAV or S3, that work out of the box.) {{< provider name="Seafile" home="https://www.seafile.com/" config="/seafile/" >}} {{< provider name="Seagate Lyve Cloud" home="https://www.seagate.com/gb/en/services/cloud/storage/" config="/s3/#lyve" >}} {{< provider name="SeaweedFS" home="https://github.com/chrislusf/seaweedfs/" config="/s3/#seaweedfs" >}} +{{< provider name="Selectel" home="https://selectel.ru/services/cloud/storage/" config="/s3/#selectel" >}} {{< provider name="SFTP" home="https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol" config="/sftp/" >}} {{< provider name="Sia" home="https://sia.tech/" config="/sia/" >}} {{< provider name="SMB / CIFS" home="https://en.wikipedia.org/wiki/Server_Message_Block" config="/smb/" >}} diff --git a/docs/content/s3.md b/docs/content/s3.md index 0a0f553f1..58b16b79a 100644 --- a/docs/content/s3.md +++ b/docs/content/s3.md @@ -35,6 +35,7 @@ The S3 backend can be used with a number of different providers: {{< provider name="Scaleway" home="https://www.scaleway.com/en/object-storage/" config="/s3/#scaleway" >}} {{< provider name="Seagate Lyve Cloud" home="https://www.seagate.com/gb/en/services/cloud/storage/" config="/s3/#lyve" >}} {{< provider name="SeaweedFS" home="https://github.com/chrislusf/seaweedfs/" config="/s3/#seaweedfs" >}} +{{< provider name="Selectel" home="https://selectel.ru/services/cloud/storage/" config="/s3/#selectel" >}} {{< provider name="StackPath" home="https://www.stackpath.com/products/object-storage/" config="/s3/#stackpath" >}} {{< provider name="Storj" home="https://storj.io/" config="/s3/#storj" >}} {{< provider name="Synology C2 Object Storage" home="https://c2.synology.com/en-global/object-storage/overview" config="/s3/#synology-c2" >}} @@ -3850,6 +3851,125 @@ So once set up, for example to copy files into a bucket rclone copy /path/to/files seaweedfs_s3:foo ``` +### Selectel + +[Selectel Cloud Storage](https://selectel.ru/services/cloud/storage/) +is an S3 compatible storage system which features triple redundancy +storage, automatic scaling, high availability and a comprehensive IAM +system. + +Selectel have a section on their website for [configuring +rclone](https://docs.selectel.ru/en/cloud/object-storage/tools/rclone/) +which shows how to make the right API keys. + +From rclone v1.69 Selectel is a supported operator - please choose the +`Selectel` provider type. + +Note that you should use "vHosted" access for the buckets (which is +the recommended default), not "path style". + +You can use `rclone config` to make a new provider like this + +``` +No remotes found, make a new one? +n) New remote +s) Set configuration password +q) Quit config +n/s/q> n + +Enter name for new remote. +name> selectel + +Option Storage. +Type of storage to configure. +Choose a number from below, or type in your own value. +[snip] +XX / Amazon S3 Compliant Storage Providers including ..., Selectel, ... + \ (s3) +[snip] +Storage> s3 + +Option provider. +Choose your S3 provider. +Choose a number from below, or type in your own value. +Press Enter to leave empty. +[snip] +XX / Selectel Object Storage + \ (Selectel) +[snip] +provider> Selectel + +Option env_auth. +Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars). +Only applies if access_key_id and secret_access_key is blank. +Choose a number from below, or type in your own boolean value (true or false). +Press Enter for the default (false). + 1 / Enter AWS credentials in the next step. + \ (false) + 2 / Get AWS credentials from the environment (env vars or IAM). + \ (true) +env_auth> 1 + +Option access_key_id. +AWS Access Key ID. +Leave blank for anonymous access or runtime credentials. +Enter a value. Press Enter to leave empty. +access_key_id> ACCESS_KEY + +Option secret_access_key. +AWS Secret Access Key (password). +Leave blank for anonymous access or runtime credentials. +Enter a value. Press Enter to leave empty. +secret_access_key> SECRET_ACCESS_KEY + +Option region. +Region where your data stored. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + 1 / St. Petersburg + \ (ru-1) +region> 1 + +Option endpoint. +Endpoint for Selectel Object Storage. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + 1 / Saint Petersburg + \ (s3.ru-1.storage.selcloud.ru) +endpoint> 1 + +Edit advanced config? +y) Yes +n) No (default) +y/n> n + +Configuration complete. +Options: +- type: s3 +- provider: Selectel +- access_key_id: ACCESS_KEY +- secret_access_key: SECRET_ACCESS_KEY +- region: ru-1 +- endpoint: s3.ru-1.storage.selcloud.ru +Keep this "selectel" remote? +y) Yes this is OK (default) +e) Edit this remote +d) Delete this remote +y/e/d> y +``` + +And your config should end up looking like this: + +``` +[selectel] +type = s3 +provider = Selectel +access_key_id = ACCESS_KEY +secret_access_key = SECRET_ACCESS_KEY +region = ru-1 +endpoint = s3.ru-1.storage.selcloud.ru +``` + ### Wasabi [Wasabi](https://wasabi.com) is a cloud-based object storage service for a