Faylların obyekt yaddaşına köçürülməsi.
Faylları Amazon S3, Google Cloud Storage, istənilən S3-uyğun yaddaş və ya serverdəki qovluqdan bucket-ə necə köçürmək olar: hamısını bir dəfəyə kopyalamaq və ya fasiləsiz, tədricən köçürmək.
Fayllarınız artıq başqa yerdə saxlanılır? Onları iki üsuldan biri ilə tətbiqinizin bucket-inə köçürün. Hər iki üsul paneldən başladılır: tətbiq → Yaddaş → bucket → Faylları köçür.
| Hamısını indi kopyala | Fasiləsiz, tədricən köçür | |
|---|---|---|
| Nə baş verir | bütün fayllar bir dəfəyə kopyalanır | fayl tətbiqiniz onu ilk dəfə oxuyanda kopyalanır |
| Tətbiqi nə vaxt keçirmək lazımdır | kopyalama bitdikdən sonra | dərhal |
| Gedişat | tapılan, kopyalanan, ötürülən, kopyalanmayan fayllar; fasilə, davam, dayandırma | siz söndürənədək işləyir |
| Köhnə yaddaş | Amazon S3, Google Cloud Storage, S3-uyğun | Amazon S3, Google Cloud Storage |
Kopyalama bizim tərəfimizdə gedir — kompüterinizin açıq qalması lazım deyil. Kopyalama bitəndə (və ya vaxtından əvvəl dayananda) e-poçt və Telegram mesajı alırsınız.
Faylları hesabın sahibi və tətbiqin Administratorları köçürə bilər (bax: Tətbiqə giriş); köçürmə API, CLI və MCP vasitəsilə də mümkündür.
Başlamazdan əvvəl: yalnız oxuma açarı
Köhnə yaddaşda yalnız bir bucket-in siyahısına baxa və onu oxuya bilən ayrıca açar yaradın. Əsas açarlarınızı heç vaxt daxil etməyin. Açar yalnız bu köçürmə üçün istifadə olunur; biz onu saxlamırıq və o, bir daha göstərilmir. Köçürmə bitdikdən sonra açarı köhnə provayderdə silin.
Amazon S3
IAM-də bu siyasətlə istifadəçi (və ya giriş açarı olan rol) yaradın — my-old-bucket əvəzinə öz bucket-inizin adını yazın:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:List*", "s3:Get*"],
"Resource": ["arn:aws:s3:::my-old-bucket", "arn:aws:s3:::my-old-bucket/*"]
}
]
}Sonra onun üçün giriş açarı yaradın. Paneldə giriş açarının ID-si, gizli açar, bucket-in adı və onun regionu lazım olacaq (məsələn, eu-central-1; S3 konsolunda bucket-in yanında göstərilir).
Google Cloud Storage
Bucket-i oxuma icazəsi olan xidmət hesabı yaradın və onun JSON açarını yükləyin:
gcloud iam service-accounts create rivervo-move --display-name="Move files to Rivervo"
gcloud storage buckets add-iam-policy-binding gs://my-old-bucket \
--member="serviceAccount:rivervo-move@MY-PROJECT.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
gcloud storage buckets add-iam-policy-binding gs://my-old-bucket \
--member="serviceAccount:rivervo-move@MY-PROJECT.iam.gserviceaccount.com" --role="roles/storage.legacyBucketReader"
gcloud iam service-accounts keys create key.json \
--iam-account="rivervo-move@MY-PROJECT.iam.gserviceaccount.com"Storage Object Viewer faylları oxuyur; Storage Legacy Bucket Reader bucket-in özünü oxumağa imkan verir. Panelə key.json faylının bütün məzmununu yapışdırın, sonra açar faylını kompüterinizdən silin.
Digər S3-uyğun yaddaş
S3 API-si olan istənilən yaddaş eyni qaydada qoşulur: yalnız bucket-in siyahısına baxa və onu oxuya bilən açar yaradın (adətən «yalnız oxuma» və ya «məhdud» açar adlanır) və bucket-in regionunun S3 ünvanını tapın — məsələn, https://s3.eu-central-003.backblazeb2.com. Ünvan bucket adı olmadan göstərilir.
Hamısını indi kopyala
- Tətbiq → Yaddaş → bucket → Faylları köçür.
- Hamısını indi kopyala, köhnə yaddaşı, oradakı bucket-i, regionu və ya S3 ünvanını seçin və açarı yapışdırın.
- Lazım olsa, qovluq göstərin: məsələn, yalnız
photos/kopyalansın. - Burada artıq olan fayllar: standart olaraq bucket-də eyni adlı fayl varsa, o qalır, köhnə yaddaşdakı fayl isə ötürülür. Üzərinə yazmaq üçün Əvəz et seçimini aktiv edin.
- Kopyalamanı başlat düyməsini basıb təsdiqləyin.
Kartda neçə faylın tapıldığı, kopyalandığı, ötürüldüyü və kopyalanmadığı, həmçinin gedişat zolağı görünür; Jurnalı göstər ötürülən və kopyalanmayan faylları adbaad göstərir. Kopyalamaya Fasilə ver, onu Bərpa et və ya Kopyalamanı dayandır — artıq kopyalanmış fayllar qalır. Kopyalama bitdikdən sonra tətbiqinizi bucket-ə keçirin (onun S3_* dəyişənləri artıq tətbiqdədir).
Faylların adları (açarları) saxlanılır. Kopyalamanı yenidən işə saldıqda yalnız çatışmayan fayllar kopyalanır (Əvəz et söndürülübsə).
Fasiləsiz, tədricən köçür
Tətbiq dayanmadan işləməli olduqda və fayllar daim əlavə edildikdə uyğundur:
- Faylları köçür → Fasiləsiz, tədricən köçür, köhnə yaddaş, bucket və açar → Tədricən köçürməni aktiv et.
- Tətbiqinizi dərhal bu bucket-ə keçirin (onun
S3_*dəyişənləri) və yerləşdirin. - Tətbiq bucket-də hələ olmayan faylı oxuyanda həmin fayl o anda köhnə yaddaşdan kopyalanır və təqdim olunur. Yeni yükləmələr birbaşa bucket-ə düşür.
- Tamamlamaq üçün: hələ heç kimin oxumadığı fayllar üçün Hamısını indi kopyalanı işə salın (Əvəz et söndürülmüş halda ki, yeni fayllar qalsın), bitməsini gözləyin, sonra tədricən köçürməni Söndür.
Köçürmə aktiv olduqca köhnə yaddaş eyni açarla əlçatan qalmalıdır. Söndürüldükdən sonra heç oxunmamış və kopyalanmamış fayllar artıq götürülmür.
Serverdəki qovluqdan
Faylları VPS-dən və ya istənilən başqa serverdən (məsələn, Laravel saytının storage/app/public qovluğundan) köçürmək üçün bucket-in öz açarları ilə rclone istifadə edin. Onlar tətbiqin Dəyişənlər bölməsindədir: S3_ENDPOINT, S3_BUCKET, S3_KEY və S3_SECRET (ikinci bucket-də önündə onun adı olur: MEDIA_S3_KEY …).
# rclone-un quraşdırılması (Linux)
curl https://rclone.org/install.sh | sudo bash
# Bucket-in açarları mühit dəyişənləri kimi — onlar ayarlar faylına düşmür
export RCLONE_CONFIG_RIVERVO_TYPE=s3
export RCLONE_CONFIG_RIVERVO_PROVIDER=Other
export RCLONE_CONFIG_RIVERVO_REGION=auto
export RCLONE_CONFIG_RIVERVO_ENDPOINT='S3_ENDPOINT dəyəri'
export RCLONE_CONFIG_RIVERVO_ACCESS_KEY_ID='S3_KEY dəyəri'
export RCLONE_CONFIG_RIVERVO_SECRET_ACCESS_KEY='S3_SECRET dəyəri'
# Qovluğu strukturunu saxlamaqla bucket-ə (S3_BUCKET dəyəri) kopyalayın
rclone copy /var/www/shop/storage/app/public rivervo:BUCKET/public --progress --transfers 16
# Bütün faylların çatdığını yoxlayın
rclone check /var/www/shop/storage/app/public rivervo:BUCKET/public --one-wayrclone copy bucket-də heç nə silmir və artıq orada olan, dəyişməmiş faylları ötürür, ona görə fasilədən sonra onu yenidən işə salmaq olar. Uzun kopyalamanı serverdə tmux və ya screen daxilində işə salın — onda SSH bağlantısı kəsilsə belə davam edəcək.
Qiyməti
Köçürmənin özü üçün ayrıca ödəniş yoxdur. Bucket-dəki fayllar obyekt yaddaşının adi qiymətləri ilə balansdan ödənilir:
- saxlama: ayda GB üçün $0.025 — 50 GB ayda təxminən $1.25 edir;
- yazma: milyon əməliyyat üçün $6 — hər kopyalanan fayl təxminən bir yazma əməliyyatıdır, ona görə 100 000 fayl təxminən $0.60 edir (çox böyük fayl hissələrlə yüklənir və bir neçə əməliyyat sayılır);
- tədricən köçürmə zamanı oxumalar adi oxuma əməliyyatlarıdır (milyon üçün $0.50).
Bulud yaddaşlarının çoxu çıxan trafik üçün ödəniş alır. Böyük həcmdə məlumat köçürməzdən əvvəl köhnə provayderinizin qiymət siyahısını yoxlayın.
Köçürmə üçün bucket əlavə etməkdə olduğu kimi müsbət balans lazımdır. Köçürmə sınaq müddətində və hazırda yalnız oxuma rejimində olan bucket-ə (ölçü limiti və ya balansın ödədiyi həcm aşılıb) mümkün deyil — panel səbəbi göstərir və kömək edəcəksə, balansı artırmağı təklif edir. Kopyalama zamanı bucket yalnız oxuma rejiminə keçərsə, kopyalamaya fasilə verilir və yazma yenidən mümkün olanda özü davam edir.
Məhdudiyyətlər
- Bir bucket-ə eyni anda bir kopyalama və bir tədricən köçürmə.
- 1 TB-dan böyük fayllar kopyalama zamanı ötürülür.
- Oxunmazdan əvvəl bərpa tələb edən arxiv siniflərindəki fayllar (S3 Glacier Flexible Retrieval, Glacier Deep Archive) ötürülür; əvvəlcə onları bərpa edin.
- Faylla birlikdə yalnız sizin metaməlumatlarınız (
x-amz-meta-*) köçürülür; faylın ETag-i əvvəlkindən fərqli ola bilər. - Tədricən köçürmə aktiv olduqda bucket-dən silinmiş fayl növbəti oxunuşda yenidən kopyalanır.