Storage Server pentru site-ul propriu: imagini, descărcări, arhive

Publicat pe 7 min de citit

Spațiul pe un server web este scump, cel de pe un Storage Server nu. Articolul arată ce se poate muta, ce protocol funcționează de pe serverul web și cum ajung fișierele în siguranță la vizitatori.

Pe un server web, spațiul pe disc este bunul cel mai scump. Stă pe SSD-uri NVMe rapide, construite pentru baze de date și PHP, și devine simțitor mai scump cu fiecare gigabyte. În același timp, acolo zac lucruri care nu au nevoie niciodată de viteza asta: fotografii originale, fișiere video, arhive de descărcare, backupuri vechi.

Un Storage Server costă o fracțiune din asta și preia exact această povară. Articolul arată ce merită mutat, ce protocol funcționează de pe serverul web, cum ajung fișierele în siguranță la vizitatori și unde sunt limitele.

Ce merită mutat și ce nu

Ține de storageRămâne pe serverul web
Originalele imaginilor și ale videoclipurilorMiniaturile și variantele decupate
Arhive de descărcare, fișiere ISO, colecții de PDFCSS, JavaScript, fonturi
Date brute, exporturi, arhive de jurnaleBaza de date
Backupurile site-uluiTot de ce este nevoie la fiecare afișare de pagină

Linia de separare este simplă: ce se citește rar și se transferă o dată, într-o bucată mare, ține de storage. Ce se încarcă la fiecare afișare de pagină rămâne acolo unde este rapid.

Ce este un Storage Server și ce nu este

Un Storage Server este spațiu de stocare în rețea cu conturi de utilizator. Te conectezi cu datele de acces și citești sau scrii fișiere. Nu este spațiu de stocare de obiecte cu adrese publice și nu este un CDN.

Practic, asta înseamnă: în pagina ta nu poți include o imagine printr-un link direct către storage, pentru că fiecare acces este autentificat. Serverul tău web ia fișierul și îl trimite mai departe, sau generezi singur linkuri de descărcare limitate în timp. Cum se face asta curat scrie mai jos.

Sună ca o limitare, dar are un avantaj: nimeni nu îți poate lua fișierele ghicind adrese sau dând un link mai departe. Accesul trece mereu prin aplicația ta și deci prin regulile tale.

Modelul care funcționează în practică

Trei pași, nimic mai mult:

  1. Originalele stau pe storage. Se încarcă o dată și după aceea se ating rar.
  2. Versiunile derivate se creează o dată și stau pe serverul web. Deci miniaturi, variante decupate, versiuni comprimate. Sunt mici și este nevoie de ele la fiecare afișare de pagină.
  3. Descărcările trec prin aplicația ta. Un script mic verifică dreptul de acces, ia fișierul de pe storage și îl livrează.

Cine întoarce asta pe dos și ia miniaturile proaspăt de pe storage la fiecare afișare își construiește un site lent. Latența de rețea se adună pentru fiecare fișier, iar o galerie cu patruzeci de imagini așteaptă patruzeci de ori.

Ce protocol pentru ce caz

ProtocolPortBun pentruAre nevoie de
SMB / CIFS445Montare ca directordrepturi de root pe server
SSHFS23Montare ca director, criptatdrepturi de root pe server
SFTP23Acces din PHP, scripturi, transferuriportul 23 spre exterior
WebDAV prin HTTPS443Hosting partajat, medii restricționatedoar HTTPS
rsync23Sincronizarea directoarelor mariportul 23 spre exterior
BorgBackup23Backupuri cu deduplicareportul 23 spre exterior

Decizia cea mai importantă nu ține de gust, ci de drepturile tale: pe un server propriu montezi storage-ul ca director, și orice aplicație îl poate folosi fără să știe nimic despre el. Cum se face scrie în Montarea Storage Server-ului ca unitate de rețea.

Pe hosting partajat nu ai drepturi de root, deci montarea cade. Acolo drumul trece prin WebDAV sau SFTP, din aplicație, iar WebDAV este de obicei calea cu cea mai mică rezistență, pentru că portul 443 nu este practic niciodată blocat.

Configurarea accesului din PHP

Pentru SFTP este suficientă o bibliotecă scrisă doar în PHP, nu este nevoie de nicio extensie pe server:

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('Autentificare eșuată');
}

// Încarcă fișierul
$sftp->put('/bilder/2026/original.jpg', '/tmp/upload.jpg', SFTP::SOURCE_LOCAL_FILE);

// Citește fișierul
$inhalt = $sftp->get('/bilder/2026/original.jpg');

Pentru WebDAV ajunge chiar extensia curl deja integrată:

$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);

Ambele exemple folosesc un subcont, nu contul principal. De ce, scrie în secțiunea următoare.

Pentru fiecare scop un subcont separat

Fiecare Storage Server permite până la 100 de subconturi, și asta la fiecare tarif. Fiecare primește:

  • un director de start propriu, din care nu poate ieși,
  • o parolă proprie,
  • permisiuni de protocol proprii, deci de exemplu doar SFTP și niciun Samba.

Pentru un site asta înseamnă: un subcont pentru serverul web, care are voie doar SFTP și vede doar /web, și un al doilea pentru backup, care vede doar /backup. Dacă serverul web ajunge să fie compromis, atacatorul nu mai ajunge la backupuri, pentru că acel cont nici nu le cunoaște.

O limită există: un subcont nu primește o cotă de spațiu proprie. Rămâne în directorul lui, dar acolo poate umple tot spațiul tarifului. Cine vrea să limiteze cu adevărat utilizatori individuali are nevoie în fața storage-ului de o aplicație care preia asta. Conectarea Nextcloud la Storage Server arată exact această structură.

Livrarea sigură a descărcărilor

Greșeala cea mai frecventă este să lași datele de acces să ajungă în browser, de exemplu printr-un link cu nume de utilizator și parolă. Corect este ca serverul tău să deschidă conexiunea și să trimită fișierul mai departe:

<?php
// Verifică dreptul de acces înainte să se întâmple orice altceva
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;

La fișiere foarte mari este mai bine să citești în blocuri, în loc să încarci totul în memorie, altfel depășești limita de memorie a PHP. Pentru asta folosește ob_end_flush() și livrează fișierul bucată cu bucată.

Cine se așteaptă la multe descărcări simultane ar trebui să țină cont și de faptul că fiecare descărcare în curs ocupă un proces PHP. Peste un anumit ordin de mărime, așa ceva ține de un server propriu, nu de hosting partajat.

Backupul site-ului pe storage

Acesta este cel mai simplu început și aduce imediat ceva. Cu rsync transferi doar modificările:

rsync -az --delete -e "ssh -p 23" \
      /var/www/example.com/ \
      u123456-sub2@u123456.storage.kernelhost.net:/backup/web/

Pentru backupuri cu deduplicare și criptare, BorgBackup este alegerea mai bună, pe storage este disponibil nativ. La asta se adaugă snapshot-urile storage-ului însuși ca al doilea nivel: în funcție de tarif, 10, 20, 30 sau 40 de snapshot-uri manuale, plus tot atâtea automate, în ritm zilnic, săptămânal și lunar.

Diferența față de backupul pe același server este cea decisivă: un disc șters sau criptat ia cu el backupul local, pe un storage separat backupul rămâne.

Înainte să începi: două comutatoare

În panoul clientului găsești la Storage Server butonul „Setări de acces”. Două lucruri trebuie să fie în ordine:

  • Accesibilitate externă trebuie să fie activată, altfel serverul tău web nu ajunge la storage prin internet.
  • Protocolul dorit trebuie să fie permis, deci Samba pentru SMB, SSH pentru SFTP și rsync, WebDAV pentru calea prin HTTPS.

La serverele comandate nou, toate acestea sunt active. Cine închide din motive de siguranță ce nu îi trebuie ar trebui să țină minte că exact asta este mai târziu cauza cea mai frecventă pentru „nu mai merge”.

Ce tarif se potrivește

TarifSpațiuSubconturiSnapshot-uriPreț
Storage-11 TB10010 plus 10 automate9,99 EUR
Storage-25 TB10020 plus 20 automate29,99 EUR
Storage-310 TB10030 plus 30 automate39,99 EUR
Storage-420 TB10040 plus 40 automate69,99 EUR

Toate Storage Server-ele stau în Germania, vorbesc FTP, FTPS, SFTP, SCP, Samba, WebDAV și WebDAVs, aduc rsync și BorgBackup nativ și au IPv4 și IPv6. Nu există taxă de configurare, facturarea se face pe bază PrePaid, fără durată minimă. Poți deci începe cu 1 TB și crește mai târziu, fără să te muți.

Un exemplu de calcul: 1 TB de spațiu suplimentar pe un server web costă, în funcție de furnizor, de mai multe ori prețul de 9,99 euro pe lună, și stă apoi pe aceeași mașină ca site-ul. Storage-ul de lângă nu este doar mai ieftin, este și separat.

Întrebări frecvente

Pot include imagini în site direct de pe Storage Server?
Nu printr-un link direct în eticheta imaginii. Un Storage Server nu este un server web public, fiecare acces este autentificat. Serverul tău web ia fișierul și îl trimite mai departe, sau generezi linkuri de descărcare limitate în timp. Pentru miniaturi, calea mai bună este să le creezi o dată și să le ții în cache pe serverul web.
Ce protocol să folosesc de pe serverul web?
Pe un server propriu, cu drepturi de root, SMB sau SSHFS este cel mai comod, pentru că spațiul de stocare apare ca un director obișnuit. Pe hosting partajat, fără drepturi de root, asta nu merge; acolo WebDAV prin HTTPS este calea cu cea mai mică rezistență, pentru că portul 443 nu este practic niciodată blocat.
Un Storage Server înlocuiește un CDN?
Nu. Un CDN distribuie copii în multe locații și le livrează direct vizitatorilor. Un Storage Server este un loc de depozitare într-o singură locație, iar fiecare acces este autentificat. Cele două se completează: originalele pe storage, versiunile livrate prin serverul web sau prin CDN.
Câte subconturi pot crea?
Până la 100, la fiecare tarif. Fiecare subcont are propriul director de start, propria parolă și propriile permisiuni de protocol. Astfel site-ul primește un cont care are voie doar SFTP și vede doar directorul lui, iar backupul primește unul separat.
Pot aloca unui subcont un spațiu propriu?
Nu, o cotă pe subcont nu există. Un subcont rămâne în directorul lui, dar acolo poate ocupa tot spațiul tarifului. Cine vrea să limiteze utilizatori individuali trebuie să facă asta în propria aplicație.
Cât de rapid este accesul?
La fișiere mari, transferate dintr-o bucată, accesul este foarte bun, iar limita este conexiunea serverului tău web. La multe accesări mici, una după alta, se adaugă latența de rețea pentru fiecare fișier. De aceea originalele și arhivele stau pe storage, în timp ce piesele mici încărcate des, cum sunt miniaturile, stau în cache pe serverul web.
Datele de acces sunt vizibile în browser?
Doar dacă o construiești greșit. Corect este ca serverul web să deschidă conexiunea și să trimită fișierul mai departe. Datele de acces rămân atunci pe server și nu apar nici în codul sursă, nici într-o adresă.
Pot face cu el și backupul site-ului meu?
Da, și este cel mai simplu început. Cu rsync sau BorgBackup transferi doar modificările, iar la asta se adaugă snapshot-urile storage-ului ca al doilea nivel. În funcție de tarif sunt posibile între 10 și 40 de snapshot-uri, plus tot atâtea automate.
Am nevoie pentru asta de un server propriu?
Nu. Funcționează și de pe hosting partajat, atunci prin WebDAV sau SFTP din PHP. Doar montarea ca unitate are nevoie de drepturi de root și deci de un server propriu.
Cât costă?
Storage-1 cu 1 TB costă 9,99 euro pe lună, Storage-2 cu 5 TB 29,99, Storage-3 cu 10 TB 39,99 și Storage-4 cu 20 TB 69,99. Fără taxă de configurare, pe bază PrePaid și fără durată minimă, locație Germania.

Storage Server Webserver WebDAV SFTP Mediendateien Downloads Backup