Storage Server z WordPressem: co działa, a co nie

Opublikowano 5 min czytania

Nie wszystko, co się czyta o WordPressie i zewnętrznej przestrzeni dyskowej, naprawdę działa. Ten artykuł rozdziela trzy przypadki: kopie zapasowe idą od razu, pliki do pobrania małym nakładem, a biblioteka mediów tylko pod jednym warunkiem.

Katalog wp-content/uploads to ta część WordPressa, która rośnie bez hamulców. Zdjęcia, pliki PDF, filmy, a do tego z każdego zdjęcia po kilka rozmiarów, które WordPress generuje automatycznie. Po paru latach leżą tam dziesiątki gigabajtów, a miejsce na serwerze WWW jest najdroższe, jakie można kupić.

Storage Server kosztuje ułamek tego. Pytanie tylko, co naprawdę da się wynieść. W sieci można o tym przeczytać dużo rzeczy, które w praktyce nie działają. Ten artykuł porządnie rozdziela trzy przypadki.

Trzy przypadki w skrócie

CoCzy idzie?Nakład
Kopie zapasowetak, od razukwadrans, darmowa wtyczka
Duże pliki do pobraniatakmały skrypt albo wtyczka do pobierania
Biblioteka mediów, własny serwertakraz zamontować, potem niewidoczne
Biblioteka mediów, hosting współdzielonyniebrakuje pasującej wtyczki

Ostatni punkt jest tym, na którym większość się potyka. Dlatego najpierw niewygodna prawda.

Dlaczego dla biblioteki mediów nie ma wtyczki

Znane wtyczki do wynoszenia plików z WordPressa wszystkie mówią tym samym językiem: S3. Łączą się z Amazon S3 albo z usługą z nim zgodną, wgrywają tam plik, usuwają kopię lokalną i podmieniają adres w treści wpisu na publiczny adres tej usługi.

Dokładnie tego nie da się przenieść na Storage Server, i to z dwóch powodów:

  • Przestrzeń dyskowa mówi w SMB, SFTP i WebDAV, ale nie w S3.
  • Nie ma publicznego adresu dla każdego pliku. Każdy dostęp wymaga zalogowania, nie może więc istnieć odnośnik, który przeglądarka odwiedzającego wywoła bezpośrednio.

Istnieją pojedyncze wtyczki pracujące przez FTP, ale żadna z godnym uwagi rozpowszechnieniem i bieżącym utrzymaniem, która wynosi bibliotekę mediów w całości przez SFTP albo WebDAV. Kto taką znajdzie, powinien przed użyciem spojrzeć na datę ostatniej aktualizacji i na liczbę aktywnych instalacji.

Droga, która działa: montować, a nie wynosić

Na własnym serwerze z uprawnieniami root odwraca się tę sprawę. Zamiast uczyć WordPressa, jak rozmawiać z obcą przestrzenią dyskową, przynosi się tę przestrzeń na miejsce, w które WordPress i tak zapisuje:

apt install -y cifs-utils
mkdir -p /mnt/storage
printf 'username=u123456-sub1\npassword=TWOJE_HASLO\n' > /etc/samba/storage.cred
chmod 600 /etc/samba/storage.cred

Wpis w /etc/fstab:

//u123456.storage.kernelhost.net/backup /mnt/storage cifs credentials=/etc/samba/storage.cred,uid=www-data,gid=www-data,file_mode=0660,dir_mode=0770,seal,_netdev,nofail 0 0

Potem przenosisz istniejące pliki i zastępujesz katalog:

mount -a
mkdir -p /mnt/storage/uploads
rsync -a /var/www/example.com/wp-content/uploads/ /mnt/storage/uploads/
mv /var/www/example.com/wp-content/uploads /var/www/example.com/wp-content/uploads.alt
ln -s /mnt/storage/uploads /var/www/example.com/wp-content/uploads

WordPress nic z tego nie zauważa, dla aplikacji to zupełnie zwykła ścieżka. Stary katalog zostaje jako uploads.alt, dopóki nie sprawdzisz, że wszystko działa. Usuwać dopiero wtedy, nie wcześniej.

Pułapka przy tym: miniatury

WordPress generuje z każdego zdjęcia po kilka rozmiarów i ładuje je przy każdym wywołaniu strony. Jeśli te małe pliki leżą na przestrzeni dyskowej w sieci, do każdego pliku dochodzi opóźnienie sieci, a galeria z czterdziestoma zdjęciami czeka czterdzieści razy.

Dwa rozwiązania, oba dobre:

  • Postawić przed tym pamięć podręczną, na przykład cache w serwerze WWW, który trzyma wydawane pliki lokalnie.
  • Położyć na przestrzeni dyskowej tylko oryginały, a wygenerowane rozmiary zostawić lokalnie. To trochę więcej pracy, ale najczystsza droga dla stron z wieloma zdjęciami.

Kopie zapasowe: najszybszy pożytek

Jeśli zrobisz tylko jedną rzecz, to właśnie tę. Kopia zapasowa na tym samym serwerze nie jest kopią zapasową: jeśli dysk zostanie usunięty albo strona zaszyfrowana, przepada razem z nimi. Na osobnej przestrzeni dyskowej przeżyje.

Darmowa wtyczka WPvivid potrafi w wersji podstawowej robić kopie przez SFTP na przestrzeń dyskową, z harmonogramem i regułą przechowywania. Pełną instrukcję do tego znajdziesz w artykule Kopie zapasowe WordPressa na Storage Server.

Na własnym serwerze idzie to jeszcze lepiej, a mianowicie przez rsync albo BorgBackup wprost z harmonogramu. Wtedy przesyłasz tylko zmiany, a BorgBackup dodatkowo deduplikuje.

Wydawanie dużych plików do pobrania

Dla plików, które odwiedzający mają pobierać, przestrzeń dyskowa jest idealna: są czytane rzadko, są duże i nie muszą być szybkie, muszą tylko dojść. Dostęp idzie przez mały skrypt, który wcześniej sprawdza uprawnienie:

<?php
// w pliku functions.php albo jako własna wtyczka
add_action('template_redirect', function () {
    if (!isset($_GET['kh_download'])) {
        return;
    }
    if (!is_user_logged_in()) {
        wp_die('Zaloguj się', '', ['response' => 403]);
    }

    $pfad = '/mnt/storage/downloads/' . basename($_GET['kh_download']);
    if (!is_readable($pfad)) {
        wp_die('Nie znaleziono pliku', '', ['response' => 404]);
    }

    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($pfad) . '"');
    header('Content-Length: ' . filesize($pfad));
    readfile($pfad);
    exit;
});

Przykład wychodzi z założenia, że przestrzeń dyskowa jest zamontowana. Bez montowania zastępujesz readfile() odwołaniem przez SFTP albo WebDAV, tak jak opisuje to artykuł Storage Server dla własnej strony.

Efekt uboczny jest przyjemny: ponieważ plik nigdy nie ma publicznego adresu, nikt nie przekaże dalej odnośnika. Sprawdzenia uprawnień nie da się obejść.

Co zostaje na hostingu współdzielonym

ZamiarHosting współdzielonyWłasny serwer
Kopia zapasowa przez wtyczkętaktak
Wydawanie plików do pobrania przez PHPtak, przez WebDAV albo SFTPtak
Wyniesienie biblioteki mediównietak, przez montowanie
rsync albo BorgBackupzwykle nietak

Na hostingu współdzielonym WebDAV przez HTTPS jest najpewniejszą drogą, bo port 443 praktycznie nigdy nie jest zablokowany. SFTP też działa, u nas jednak na porcie 23, a nie każdy dostawca dopuszcza wychodzące połączenia na takich portach. Warto to krótko sprawdzić przed zamówieniem.

Jedno subkonto na każdy cel

Każdy Storage Server pozwala na maksymalnie 100 subkont, każde z własnym katalogiem startowym, własnym hasłem i własnymi uprawnieniami protokołów. Dla WordPressa znaczy to co najmniej dwa:

  • Jedno konto dla strony, które widzi tylko /uploads.
  • Jedno konto dla kopii zapasowych, które widzi tylko /backup.

Jeśli strona zostanie kiedyś przejęta, napastnik znajdzie w wp-config.php dane dostępowe pierwszego konta. Kopie zapasowe zostaną nietknięte, bo to konto wcale ich nie zna. Przy jednym jedynym koncie głównym w tym miejscu przepadłoby wszystko.

Gdy wielu użytkowników potrzebuje własnego miejsca

Storage Server nie zna limitu miejsca na subkonto. Konto zostaje w swoim katalogu, ale może stamtąd wypełnić cały pakiet. Kto chce dać klientom, fotografom albo redaktorom po jednym ograniczonym przydziale, stawia dlatego przed Storage Serverem aplikację, która to przejmie. Nextcloud jest do tego najbardziej oczywisty, przynosi użytkowników, limity i odnośniki do udostępniania: Połączenie Nextcloud ze Storage Serverem.

Który pakiet pasuje

PakietMiejsceSubkontaCena
Storage-11 TB1009,99 EUR
Storage-25 TB10029,99 EUR
Storage-310 TB10039,99 EUR
Storage-420 TB10069,99 EUR

Dla jednej strony na WordPressie z kopiami zapasowymi Storage-1 z reguły wystarcza na długo. Kto wynosi biblioteki mediów kilku stron albo pracuje z wideo, szybko wyląduje przy Storage-2 albo Storage-3. Wszystkie pakiety stoją w Niemczech, nie mają opłaty instalacyjnej, rozliczane są w modelu PrePaid i nie wiążą cię minimalnym okresem umowy. Zmiana na następny większy pakiet jest możliwa w każdej chwili, bez ruszania danych.

Najczęstsze pytania

Czy mogę wynieść bibliotekę mediów WordPressa na Storage Server przy pomocy wtyczki?
Nie, w każdym razie nie w sposób, na którym można polegać. Znane wtyczki do wynoszenia plików obsługują wyłącznie S3 i usługi z nim zgodne. Dla SFTP albo WebDAV nie ma utrzymywanej wtyczki, która wynosi bibliotekę mediów w całości. Kto to czyta i mimo wszystko znajdzie jakąś wtyczkę, powinien sprawdzić jej datę aktualizacji i liczbę instalacji.
Jak wtedy jednak da się to zrobić?
Na własnym serwerze z uprawnieniami root. Montujesz tam przestrzeń dyskową w systemie plików i kładziesz na niej katalog wp-content/uploads. WordPress nic z tego nie zauważa, dla aplikacji to zupełnie zwykła ścieżka. Na hostingu współdzielonym bez uprawnień root to nie działa.
Jaki jest najprostszy pożytek?
Kopie zapasowe. Wtyczka taka jak WPvivid potrafi w darmowej wersji robić kopie przez SFTP na przestrzeń dyskową, konfiguracja zajmuje kwadrans i od razu daje bezpieczeństwo, bo kopia nie leży już na tej samej maszynie co strona.
Czy moje zdjęcia będą się przez to ładować wolniej?
Jeśli zbudujesz to źle, to tak. Miniatury są potrzebne przy każdym wywołaniu strony, a każdy dostęp przez sieć kosztuje czas. Rozwiązaniem jest trzymać oryginały na przestrzeni dyskowej, a rozmiary wygenerowane przez WordPressa zostawić lokalnie albo trzymać w pamięci podręcznej.
Czy mogę podlinkować pliki do pobrania wprost ze Storage Servera?
Nie, każdy dostęp do przestrzeni dyskowej wymaga zalogowania. Plik wydajesz małym skryptem PHP albo wtyczką do pobierania, która sprawdza uprawnienie i podaje plik dalej. To jest nawet zaletą, bo nikt nie przekaże dalej odnośnika.
Jaki protokół wybrać na hostingu współdzielonym?
WebDAV przez HTTPS, bo port 443 praktycznie nigdy nie jest zablokowany. SFTP też działa, u nas jednak na porcie 23, a niektórzy dostawcy hostingu współdzielonego nie dopuszczają wychodzących połączeń na takich portach. Najlepiej sprawdzić to wcześniej.
Czy potrzebuję osobnego subkonta do każdego celu?
Jest to bardzo zalecane. Każdy Storage Server pozwala na maksymalnie 100 subkont z własnym katalogiem i własnym hasłem. Jeśli strona zostanie kiedyś przejęta, napastnik nie dojdzie wtedy do kopii zapasowych, bo konto strony wcale ich nie widzi.
Co z wieloma użytkownikami, z których każdy potrzebuje własnego miejsca?
Do tego sama przestrzeń dyskowa nie jest zrobiona, bo limitu miejsca na subkonto nie ma. Postaw w tym przypadku przed nią Nextcloud, który przynosi użytkowników, limity i udostępnianie, a pliki odkłada na przestrzeni dyskowej.
Czy opłaca się to przy małej stronie?
Do kopii zapasowych tak, zawsze. Do biblioteki mediów dopiero wtedy, gdy miejsce na serwerze WWW staje się ciasne albo drogie. Reguła praktyczna: w chwili, gdy myślisz o dopłacie za dodatkowe miejsce na hosting, Storage Server jest tańszą odpowiedzią.
Ile to kosztuje?
Storage-1 z 1 TB kosztuje 9,99 euro miesięcznie, Storage-2 z 5 TB 29,99, Storage-3 z 10 TB 39,99, a Storage-4 z 20 TB 69,99. Lokalizacja Niemcy, bez opłaty instalacyjnej, PrePaid i bez minimalnego okresu umowy.

WordPress Storage Server Mediathek Backup Downloads SFTP WebDAV