Storage Server dla własnej strony: zdjęcia, pliki do pobrania, archiwa
Miejsce na serwerze WWW jest drogie, miejsce na Storage Serverze nie. Ten artykuł pokazuje, co da się wynieść, jaki protokół działa z serwera WWW i jak pliki bezpiecznie docierają do odwiedzających.
Na serwerze WWW miejsce na dysku jest najdroższym dobrem. Leży na szybkich dyskach NVMe SSD, zbudowanych dla baz danych i PHP, a z każdym gigabajtem wyraźnie drożeje. Jednocześnie leżą tam rzeczy, które tej szybkości nigdy nie potrzebują: oryginalne zdjęcia, pliki wideo, archiwa do pobrania, stare kopie zapasowe.
Storage Server kosztuje ułamek tego i zdejmuje dokładnie to obciążenie. Ten artykuł pokazuje, co warto wynieść, jaki protokół działa z serwera WWW, jak pliki bezpiecznie docierają do odwiedzających i gdzie są granice.
Co warto wynieść, a czego nie
| Idzie na Storage Server | Zostaje na serwerze WWW |
|---|---|
| Oryginały zdjęć i filmów | Miniatury i przycięte wersje |
| Archiwa do pobrania, pliki ISO, zbiory PDF | CSS, JavaScript, czcionki |
| Dane surowe, eksporty, archiwa logów | Baza danych |
| Kopie zapasowe strony | Wszystko, co jest potrzebne przy każdym wywołaniu strony |
Linia podziału jest prosta: co jest czytane rzadko i przesyłane raz, w jednym dużym kawałku, powinno leżeć na przestrzeni dyskowej. Co doładowuje się przy każdym wywołaniu strony, zostaje tam, gdzie jest szybko.
Czym Storage Server jest, a czym nie jest
Storage Server to przestrzeń dyskowa w sieci z kontami użytkowników. Łączysz się danymi dostępowymi i czytasz albo zapisujesz pliki. Nie jest magazynem obiektowym z publicznymi adresami i nie jest CDN-em.
W praktyce znaczy to tyle: w swojej stronie nie możesz podlinkować zdjęcia wprost na przestrzeń dyskową, bo każdy dostęp wymaga zalogowania. Twój serwer WWW pobiera plik i podaje go dalej, albo sam generujesz odnośniki do pobrania ograniczone czasowo. Jak zrobić to porządnie, opisuję niżej.
Brzmi jak ograniczenie, ale ma zaletę: nikt nie wyciągnie twoich plików, zgadując adresy albo przekazując dalej odnośnik. Dostęp idzie zawsze przez twoją aplikację, a więc przez twoje reguły.
Wzorzec, który sprawdza się w praktyce
Trzy kroki, nic więcej:
- Oryginały leżą na przestrzeni dyskowej. Wgrywa się je raz i potem rzadko rusza.
- Wersje pochodne powstają raz i leżą na serwerze WWW. Czyli miniatury, przycięte warianty, skompresowane wersje. Są małe i są potrzebne przy każdym wywołaniu strony.
- Pobierania idą przez twoją aplikację. Mały skrypt sprawdza uprawnienie, pobiera plik z przestrzeni dyskowej i wydaje go.
Kto odwróci to i będzie przy każdym wywołaniu ściągał miniatury świeżo z przestrzeni dyskowej, zbuduje sobie wolną stronę. Opóźnienie sieci dla każdego pliku się sumuje, a galeria z czterdziestoma zdjęciami czeka czterdzieści razy.
Jaki protokół do jakiego przypadku
| Protokół | Port | Dobry do | Wymaga |
|---|---|---|---|
| SMB / CIFS | 445 | montowania jako katalog | uprawnień root na serwerze |
| SSHFS | 23 | montowania jako katalog, szyfrowane | uprawnień root na serwerze |
| SFTP | 23 | dostępu z PHP, skryptów, transferów | wychodzącego portu 23 |
| WebDAV przez HTTPS | 443 | hostingu współdzielonego, środowisk z ograniczeniami | tylko HTTPS |
| rsync | 23 | synchronizacji dużych katalogów | wychodzącego portu 23 |
| BorgBackup | 23 | kopii zapasowych z deduplikacją | wychodzącego portu 23 |
Najważniejsza decyzja nie zależy od gustu, tylko od twoich uprawnień: na własnym serwerze montujesz przestrzeń dyskową jako katalog i każda aplikacja może jej używać, nic o niej nie wiedząc. Jak to zrobić, opisuje artykuł Storage Server jako dysk sieciowy.
Na hostingu współdzielonym nie masz uprawnień root, montowanie jest więc wykluczone. Tam droga idzie przez WebDAV albo SFTP z poziomu aplikacji, a WebDAV stawia zwykle mniejszy opór, bo port 443 praktycznie nigdy nie jest zablokowany.
Konfiguracja dostępu z PHP
Do SFTP wystarczy czysta biblioteka PHP, nie potrzeba żadnego rozszerzenia na serwerze:
composer require phpseclib/phpseclib:~3.0
use phpseclib3\Net\SFTP;
$sftp = new SFTP('u123456.storage.kernelhost.net', 23);
if (!$sftp->login('u123456-sub1', $passwort)) {
throw new RuntimeException('Nie udało się zalogować');
}
// Wgranie pliku
$sftp->put('/bilder/2026/original.jpg', '/tmp/upload.jpg', SFTP::SOURCE_LOCAL_FILE);
// Odczyt pliku
$inhalt = $sftp->get('/bilder/2026/original.jpg');
Do WebDAV wystarczy nawet wbudowane rozszerzenie curl:
$ch = curl_init('https://u123456.storage.kernelhost.net/bilder/2026/original.jpg');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => 'u123456-sub1:' . $passwort,
CURLOPT_TIMEOUT => 30,
]);
$inhalt = curl_exec($ch);
curl_close($ch);
Oba przykłady używają subkonta, nie konta głównego. Dlaczego, wyjaśnia następny rozdział.
Do każdego celu osobne subkonto
Każdy Storage Server pozwala na maksymalnie 100 subkont, i to w każdym pakiecie. Każde dostaje:
- własny katalog startowy, z którego nie wychodzi,
- własne hasło,
- własne uprawnienia protokołów, czyli na przykład tylko SFTP i żadnej Samby.
Dla strony znaczy to tyle: jedno subkonto dla serwera WWW, któremu wolno tylko SFTP i które widzi tylko /web, drugie dla kopii zapasowej, które widzi tylko /backup. Jeśli serwer WWW zostanie kiedyś przejęty, napastnik nie dojdzie do kopii zapasowych, bo to konto wcale ich nie zna.
Jedna granica istnieje: subkonto nie dostaje własnego przydziału miejsca. Zostaje w swoim katalogu, ale może stamtąd wypełnić całą przestrzeń z pakietu. Kto chce naprawdę ograniczyć poszczególnych użytkowników, potrzebuje przed Storage Serverem aplikacji, która to przejmie. Dokładnie taki układ pokazuje artykuł Połączenie Nextcloud ze Storage Serverem.
Bezpieczne wydawanie plików do pobrania
Najczęstszym błędem jest wpuszczenie danych dostępowych do przeglądarki, choćby przez odnośnik z nazwą użytkownika i hasłem. Poprawnie jest tak, że twój serwer zestawia połączenie i podaje plik dalej:
<?php
// Sprawdzenie uprawnienia, zanim stanie się cokolwiek innego
if (!nutzer_darf_datei($_GET['id'])) {
http_response_code(403);
exit;
}
$sftp = neue_verbindung();
$datei = $sftp->get(pfad_zu($_GET['id']));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="dokument.pdf"');
header('Content-Length: ' . strlen($datei));
echo $datei;
Przy bardzo dużych plikach lepiej czytać blokami, zamiast ładować wszystko do pamięci, bo inaczej pęknie limit pamięci PHP. Użyj do tego ob_end_flush() i wydawaj plik po kawałku.
Kto spodziewa się wielu jednoczesnych pobierań, powinien dodatkowo pamiętać, że każde trwające pobieranie zajmuje jeden proces PHP. Od pewnej skali takie rzeczy powinny stać na własnym serwerze, a nie na hostingu współdzielonym.
Kopia zapasowa strony na przestrzeni dyskowej
To jest najprostszy początek i daje coś od razu. Przy pomocy rsync przesyłasz tylko zmiany:
rsync -az --delete -e "ssh -p 23" \
/var/www/example.com/ \
u123456-sub2@u123456.storage.kernelhost.net:/backup/web/
Do kopii zapasowych z deduplikacją i szyfrowaniem lepszym wyborem jest BorgBackup, na przestrzeni dyskowej jest dostępny natywnie. Do tego dochodzą migawki samej przestrzeni dyskowej jako druga warstwa: w zależności od pakietu 10, 20, 30 albo 40 migawek ręcznych, plus tyle samo automatycznych w rytmie dziennym, tygodniowym i miesięcznym.
Różnica wobec kopii na tym samym serwerze jest decydująca: usunięty albo zaszyfrowany dysk zabiera kopię lokalną ze sobą, kopii na osobnej przestrzeni dyskowej nie zabierze.
Zanim zaczniesz: dwa przełączniki
W panelu klienta znajdziesz przy Storage Serverze przycisk „Ustawienia dostępu”. Dwie rzeczy muszą być w porządku:
- Dostępność zewnętrzna musi być włączona, inaczej twój serwer WWW nie dojdzie do przestrzeni dyskowej przez internet.
- Potrzebny protokół musi być dopuszczony, czyli Samba dla SMB, SSH dla SFTP i rsync, WebDAV dla drogi przez HTTPS.
W nowo zamówionych serwerach wszystko to jest aktywne. Kto z powodów bezpieczeństwa wyłącza to, czego nie potrzebuje, powinien pamiętać, że właśnie to jest później najczęstszą przyczyną „już nie działa”.
Który pakiet pasuje
| Pakiet | Miejsce | Subkonta | Migawki | Cena |
|---|---|---|---|---|
| Storage-1 | 1 TB | 100 | 10 plus 10 automatycznych | 9,99 EUR |
| Storage-2 | 5 TB | 100 | 20 plus 20 automatycznych | 29,99 EUR |
| Storage-3 | 10 TB | 100 | 30 plus 30 automatycznych | 39,99 EUR |
| Storage-4 | 20 TB | 100 | 40 plus 40 automatycznych | 69,99 EUR |
Wszystkie Storage Servery stoją w Niemczech, obsługują FTP, FTPS, SFTP, SCP, Samba, WebDAV i WebDAVs, przynoszą natywnie rsync oraz BorgBackup i mają IPv4 i IPv6. Nie ma opłaty instalacyjnej, rozliczenie idzie w modelu PrePaid bez minimalnego okresu umowy. Możesz więc zacząć od 1 TB i powiększyć pakiet później, bez przeprowadzki.
Przykładowy rachunek: 1 TB dodatkowego miejsca na serwerze WWW kosztuje, zależnie od dostawcy, wielokrotność 9,99 euro miesięcznie, a leży potem na tej samej maszynie co strona. Przestrzeń dyskowa obok jest nie tylko tańsza, jest też osobna.
Najczęstsze pytania
Czy mogę wstawić zdjęcia do strony bezpośrednio ze Storage Servera?
Jaki protokół wybrać z serwera WWW?
Czy Storage Server zastępuje CDN?
Ile subkont mogę utworzyć?
Czy mogę przypisać subkontu własne miejsce?
Jak szybki jest dostęp?
Czy dane dostępowe są widoczne w przeglądarce?
Czy mogę w ten sposób robić też kopie zapasowe strony?
Czy potrzebuję do tego własnego serwera?
Ile to kosztuje?
2026 KernelHost GmbH. Wszelkie prawa zastrzeżone. Ten poradnik jest chroniony prawem autorskim. Publikowanie go w innych serwisach, w całości, we fragmentach lub w zmienionej formie, wymaga naszej pisemnej zgody. Cytaty z podaniem źródła i z linkiem są jak najbardziej mile widziane.

