WordPress médiatár áthelyezése S3, R2 vagy B2 tárhelyre

WordPress 6 perc olvasás

Ha egy WordPress-webhely médiatára több tíz gigabájtra nő, a feltöltéseket egy objektumtárba (Amazon S3, Cloudflare R2, Backblaze B2) is áthelyezheti. A webhely ezután a képeket a tárolóból szolgálja ki, saját domainnel (például media.pelda.hu), a tárhelyen pedig helyet szabadíthat fel. Egy kiszervező bővítmény (WP Offload Media vagy Media Cloud) végzi a feltöltést és a címek átírását.

Ez nem mindenkinek éri meg. A kiszervezés egy újabb szolgáltatást, újabb hozzáférési kulcsokat és egy újabb mentendő helyet jelent, és egy bővítményt, amelynek minden WordPress- és PHP-frissítés után működnie kell. Ha a médiatár kényelmesen elfér a tárhelyén, és csak a képek kiszolgálását szeretné gyorsítani, egy CDN egyszerűbb: ugyanúgy a látogatóhoz közeli szerverről adja a képeket, mozgó alkatrészek nélkül (weboldal gyorsítása CDN-nel).

Hogyan működik a kiszervezés?

A bővítmény két külön dolgot végez, és ezek összekeverése okozza a legtöbb elrontott költözést:

  1. Feltöltéskor másol. Amikor a WordPress elkészíti a képet és a bélyegképeit a wp-content/uploads mappában, a bővítmény mindet feltölti a tárolóba. Egy beállítás dönti el, hogy a helyi fájlok megmaradnak-e. Csak a törlés szabadít fel helyet, de csak a megtartás ad visszaút.
  2. Megjelenítéskor átírja a címet. A képek címe a tároló (vagy a saját domainje) címére változik. Az adatbázis ehhez nem módosul, ezért a bővítmény kikapcsolásával vissza lehet állni. Az oldalépítők azonban a képek teljes címét gyakran beleírják a tartalomba; azokat ez nem írja át.

Egy feltöltött fotóból a bélyegképekkel együtt egy tucat fájl is lehet. Ha a másolásból a bélyegképek hiányoznak, a nagy kép betöltődik, de a kisebb képernyőkön (és a nagy felbontású kijelzőkön) kép nélkül marad az oldal.

Melyik tárolót válassza?

Mindhárom ugyanazt az S3-kompatibilis felületet beszéli, a bővítmények egyformán kezelik őket. A különbség a forgalom díjazása és a kiszolgálás módja:

  Amazon S3 Cloudflare R2 Backblaze B2
Kimenő forgalom fizetős (CloudFronton át kedvezményes) nincs forgalmi díj, a műveletek darabra fizetősek a tárolt mennyiség háromszorosáig ingyenes, partner CDN felé (például Cloudflare) korlátlanul
Nyilvános kiszolgálás CloudFront vagy a tároló webcíme csak saját domain vagy Worker mögött; az r2.dev cím csak fejlesztésre való CDN-nel előtte
Erőssége a legszélesebb bővítmény- és eszköztámogatás, életciklus-szabályok, verziókezelés a forgalom nem kerül pénzbe a legolcsóbb tárolás

Konkrét árakat szándékosan nem írunk: változnak, és a költség attól függ, mennyi a forgalom a tároláshoz képest. Mérje meg a médiatárát (lásd lent), és számoljon a szolgáltatók saját kalkulátorával.

1. Mérje meg a médiatárat

A cPanel Terminal felületén (Speciális csoport) vagy SSH-n:

cd ~/public_html
du -sh wp-content/uploads
find wp-content/uploads -type f | wc -l
wp post list --post_type=attachment --format=count

A fájlok száma tipikusan a mellékletek számának tízszerese-tizenötszöröse, a bélyegképek miatt. Ha ennél sokkal több, valami felesleges méreteket generál; ezt érdemes a költözés előtt rendbe tenni. A legnagyobb fájlokat a cPanel Lemezhasználat felülete is megmutatja (Lemezhasználat ellenőrzése).

2. Tároló és szűk jogú kulcs

Hozza létre a tárolót (bucket) a szolgáltatónál, és egy olyan API-kulcsot, amely csak ehhez az egy tárolóhoz ad olvasási és írási jogot. Ne használjon a teljes fiókhoz szóló kulcsot. Jegyezze fel az S3-kompatibilis végpont címét is (R2-nél https://<fiókazonosító>.r2.cloudflarestorage.com, B2-nél https://s3.<régió>.backblazeb2.com).

3. Saját domain a tárolóhoz

Mielőtt bármit átírna, kösse a tárolót egy saját aldomainhez (például media.pelda.hu). Így a szolgáltatót később címváltozás nélkül cserélheti. R2-nél a tároló Settings oldalán a Custom Domains résznél adhatja hozzá, ha a domain a Cloudflare-ben van; S3-nál CloudFronttal, B2-nél egy elé tett CDN-nel. Ellenőrzés egy előre feltöltött tesztképpel:

curl -sI https://media.pelda.hu/wp-content/uploads/2026/10/proba.jpg | head -5

200-as választ és content-type: image/jpeg fejlécet kell látnia. Egy 403 azt jelenti, hogy a domain hozzá van rendelve, de a nyilvános elérés nincs bekapcsolva; R2-nél ez a leggyakoribb oka annak, hogy „nem működik”.

4. A meglévő fájlok átmásolása

Kisebb médiatárnál (néhány GB) a bővítmény saját eszköze is elvégzi: a WP Offload Media és a Media Cloud is fel tudja tölteni a meglévő mellékleteket, és közben a saját nyilvántartását is kitölti.

Nagy médiatárnál gyorsabb és megbízhatóbb az rclone programmal másolni, amely megszakadás után folytatja, és ellenőrzőösszeggel vet össze. Az aWh tárhelyein az rclone nincs telepítve, de a saját gépén futtatva közvetlenül a tárhelyről másolhat a tárolóba, SFTP-n át (a cPanel tárhelyeken SSH-kulccsal, a 4231-es porton). Állítson be két kapcsolatot az rclone config paranccsal: egy sftp típusút a tárhelyhez (tarhely) és egy s3 típusút a tárolóhoz (tarolo), majd:

rclone copy tarhely:public_html/wp-content/uploads tarolo:sajat-tarolo/wp-content/uploads --transfers 8 --progress
rclone check tarhely:public_html/wp-content/uploads tarolo:sajat-tarolo/wp-content/uploads --one-way

A check végén 0 differences found legyen. Ha hibát jelzett, futtassa újra a copy parancsot: csak a hiányzó fájlokat másolja. A másolás után futtassa a bővítmény saját eszközét is, hogy a bővítmény tudja, melyik melléklet van már a tárolóban; enélkül a régebbi képeket továbbra is a tárhelyről szolgálja ki.

5. A bővítmény beállítása

A hozzáférési kulcsot ne az adatbázisban tárolja (az bekerül minden mentésbe és minden staging másolatba), hanem a wp-config.php fájlban. A WP Offload Media például az AS3CF_SETTINGS állandót olvassa; a szolgáltató pontos azonosítóját a bővítmény dokumentációja adja meg:

define( 'AS3CF_SETTINGS', serialize( array(
    'provider'          => 'SZOLGALTATO',
    'access-key-id'     => 'KULCS_AZONOSITO',
    'secret-access-key' => 'TITKOS_KULCS',
) ) );

A bővítmény felületén adja meg a tárolót, az útvonal előtagját (wp-content/uploads, ahogy másolt), kapcsolja be a kiszolgálást a saját domainnel, és a helyi fájlok törlését hagyja kikapcsolva. Ellenőrzés:

wp eval 'echo wp_get_attachment_url( 123 ), PHP_EOL;'
wp eval 'echo wp_get_attachment_image_srcset( 123, "large" ), PHP_EOL;'

A 123 helyére írjon egy valódi melléklet-azonosítót (wp post list --post_type=attachment --field=ID --posts_per_page=1). Mindkét parancsnak a https://media.pelda.hu/… címet kell kiírnia.

6. Utolsó szinkronizálás

Amíg a másolás futott, a webhelyre új képek is kerülhettek. Futtassa újra a 4. lépés copy és check parancsát, majd a bővítmény eszközét. A második futás már csak néhány fájlt mozgat.

Ellenőrzés

  • Töltsön fel egy új képet az admin felületen, és nézze meg, hogy a címe a saját domainre mutat, és a fájl megjelent a tárolóban.
  • Egy régi bejegyzés minden képméretét kérje le (a srcset összes címét): mindegyiknek 200-at kell adnia. Egy 403 vagy 404 hiányos másolást jelez.
  • Ha az oldalépítő a tartalomba írta a képek teljes címét, azt a wp search-replace paranccsal írhatja át (https://pelda.hu/wp-content/uploads → https://media.pelda.hu/wp-content/uploads), mindig próbafuttatással kezdve.

A helyi fájlok törlését csak hetekkel később, alapos ellenőrzés után kapcsolja be, ha egyáltalán. Onnantól a tároló az egyetlen példány: a webhely mentése a médiatárat már nem tartalmazza, ezért a tárolóról külön mentésre van szüksége.

Gyakori hibák

Vegyes tartalom figyelmeztetés. Ha a képek címe http:// lett, a böngésző HTTPS-oldalon letiltja őket. Kapcsolja be a bővítményben a HTTPS kényszerítését, és ellenőrizze, hogy a saját domain tanúsítványa érvényes (mixed content).

A betűtípusok nem töltődnek be. A webes betűtípusokra (és néhány más fájltípusra) a böngésző CORS-szabályt alkalmaz: más domainről csak akkor tölti be őket, ha a tároló Access-Control-Allow-Origin fejlécet küld. A sima képekre ez nem vonatkozik, ezért a képek működnek, a betűtípus csendben lecserélődik. Állítson be a tárolón CORS-szabályt a webhelye címére, GET és HEAD kérésekre.

Túl korán törölt helyi fájlok. Ha a törlés be volt kapcsolva egy hiányos másolás alatt, egyes fájlok sehol nincsenek meg. A napi mentésből állítsa vissza a wp-content/uploads mappát (visszaállítás JetBackupból), másolja fel újra a tárolóba, és a hiányzó bélyegképeket generálja újra: wp media regenerate --only-missing.

Vissza: WordPress leírások (39)