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:
- Feltöltéskor másol. Amikor a WordPress elkészíti a képet és a bélyegképeit a
wp-content/uploadsmappá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. - 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): mindegyiknek200-at kell adnia. Egy403vagy404hiá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.