Storage Server для вашего сайта: изображения, загрузки, архивы
Место на веб-сервере дорогое, на Storage Server нет. В статье разобрано, что можно вынести, какой протокол работает со стороны веб-сервера и как файлы безопасно доходят до посетителей.
На веб-сервере дисковое место это самое дорогое, что там есть. Оно лежит на быстрых NVMe-SSD, рассчитанных на базы данных и PHP, и с каждым гигабайтом заметно дорожает. При этом там же лежат вещи, которым эта скорость не нужна никогда: оригиналы фотографий, видеофайлы, архивы для загрузки, старые резервные копии.
Storage Server стоит малую долю от этого и забирает ровно эту нагрузку. В статье разобрано, что имеет смысл вынести, какой протокол работает со стороны веб-сервера, как файлы безопасно доходят до посетителей и где границы.
Что стоит выносить, а что нет
| Место на хранилище | Остаётся на веб-сервере |
|---|---|
| Оригиналы изображений и видео | Миниатюры и обрезанные версии |
| Архивы для загрузки, файлы ISO, подборки PDF | CSS, JavaScript, шрифты |
| Сырые данные, экспорты, архивы журналов | База данных |
| Резервные копии сайта | Всё, что нужно при каждом открытии страницы |
Граница простая: что читается редко и передаётся один раз большим куском, тому место на хранилище. Что подгружается при каждом открытии страницы, остаётся там, где быстро.
Что такое Storage Server и чем он не является
Storage Server это сетевое хранилище с учётными записями. Вы подключаетесь с данными доступа и читаете или записываете файлы. Это не объектное хранилище с публичными адресами и не CDN.
На практике это значит: вставить в страницу изображение прямой ссылкой на хранилище нельзя, потому что каждое обращение требует входа. Ваш веб-сервер забирает файл и передаёт его дальше, либо вы сами создаёте ссылки на загрузку с ограниченным сроком. Как сделать это чисто, разобрано ниже.
Звучит как ограничение, но в этом есть и плюс: никто не утащит ваши файлы, угадывая адреса или передавая ссылку дальше. Доступ всегда идёт через ваше приложение, а значит по вашим правилам.
Схема, которая работает на практике
Три шага, больше ничего:
- Оригиналы лежат на хранилище. Их загружают один раз и потом трогают редко.
- Производные версии создаются один раз и лежат на веб-сервере. То есть миниатюры, обрезанные варианты, сжатые версии. Они маленькие, и они нужны при каждом открытии страницы.
- Загрузки идут через ваше приложение. Небольшой скрипт проверяет право доступа, забирает файл с хранилища и выдаёт его.
Кто перевернёт это и будет при каждом открытии тянуть миниатюры с хранилища заново, построит медленный сайт. Время передачи по сети на каждый файл складывается, и галерея из сорока изображений ждёт сорок раз.
Какой протокол для какого случая
| Протокол | Порт | Хорош для | Требует |
|---|---|---|---|
| SMB / CIFS | 445 | монтирования как каталога | прав root на сервере |
| SSHFS | 23 | монтирования как каталога, с шифрованием | прав root на сервере |
| SFTP | 23 | доступа из PHP, скриптов, передач | исходящего порта 23 |
| WebDAV по HTTPS | 443 | shared-хостинга, ограниченных окружений | только HTTPS |
| rsync | 23 | синхронизации больших каталогов | исходящего порта 23 |
| BorgBackup | 23 | резервных копий с дедупликацией | исходящего порта 23 |
Главное решение зависит не от вкуса, а от ваших прав: на своём сервере вы монтируете хранилище как каталог, и любое приложение может им пользоваться, ничего о нём не зная. Как это делается, разобрано в статье Подключение Storage Server как сетевого диска.
На shared-хостинге прав root у вас нет, монтирование поэтому отпадает. Там путь идёт через WebDAV или SFTP из самого приложения, и WebDAV обычно сопротивляется меньше, потому что порт 443 практически никогда не закрыт.
Настройка доступа из PHP
Для SFTP достаточно библиотеки на чистом PHP, расширение на сервере не нужно:
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('Ошибка входа');
}
// Загрузка файла
$sftp->put('/bilder/2026/original.jpg', '/tmp/upload.jpg', SFTP::SOURCE_LOCAL_FILE);
// Чтение файла
$inhalt = $sftp->get('/bilder/2026/original.jpg');
Для WebDAV хватает даже встроенного расширения 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);
Оба примера используют суб-аккаунт, а не основной аккаунт. Почему, в следующем разделе.
Для каждой задачи свой суб-аккаунт
Каждый Storage Server допускает до 100 суб-аккаунтов, причём в любом тарифе. Каждый получает:
- свой начальный каталог, из которого он не выходит,
- свой пароль,
- свой набор разрешённых протоколов, то есть например только SFTP и никакой Samba.
Для сайта это значит: один суб-аккаунт для веб-сервера, которому разрешён только SFTP и виден только /web, второй для резервных копий, которому виден только /backup. Если веб-сервер однажды захватят, до резервных копий злоумышленник не доберётся, потому что этот аккаунт их просто не знает.
Одна граница есть: собственной доли места суб-аккаунт не получает. Он остаётся в своём каталоге, но может заполнить там весь объём тарифа. Кому нужно действительно ограничивать отдельных пользователей, тому нужно приложение впереди, которое это возьмёт на себя. Статья Подключение Nextcloud к Storage Server показывает именно такую схему.
Безопасная выдача загрузок
Самая частая ошибка это пустить данные доступа в браузер, например через ссылку с именем пользователя и паролем. Правильно так: ваш сервер устанавливает соединение и передаёт файл дальше:
<?php
// Проверка права доступа, прежде чем произойдёт что-либо ещё
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;
У очень больших файлов лучше читать блоками, а не грузить всё в память, иначе лимит памяти PHP не выдержит. Поставьте для этого ob_end_flush() и отдавайте файл частями.
Кто ждёт много одновременных загрузок, тому стоит учесть ещё одно: каждая идущая загрузка занимает процесс PHP. С определённого масштаба такому место за своим сервером, а не за shared-хостингом.
Резервное копирование сайта на хранилище
Это самый простой старт, и польза от него сразу. С rsync вы передаёте только изменения:
rsync -az --delete -e "ssh -p 23" \
/var/www/example.com/ \
u123456-sub2@u123456.storage.kernelhost.net:/backup/web/
Для резервных копий с дедупликацией и шифрованием лучше подходит BorgBackup, на хранилище он доступен нативно. К этому добавляются снимки самого хранилища как второй уровень: в зависимости от тарифа 10, 20, 30 или 40 ручных снимков, плюс столько же автоматических в ежедневном, еженедельном и ежемесячном ритме.
Отличие от резервной копии на том же сервере решающее: удалённый или зашифрованный диск забирает локальную копию с собой, копию на отдельном хранилище нет.
Прежде чем начать: два переключателя
В личном кабинете у Storage Server есть кнопка «Настройки доступа». Два момента должны быть в порядке:
- Внешняя доступность должна быть включена, иначе ваш веб-сервер не доберётся до хранилища через интернет.
- Нужный протокол должен быть разрешён, то есть Samba для SMB, SSH для SFTP и rsync, WebDAV для пути через HTTPS.
На вновь заказанных серверах всё это включено. Кто из соображений безопасности отключает ненужное, пусть помнит: именно это потом самая частая причина жалобы «перестало работать».
Какой тариф подходит
| Тариф | Место | Суб-аккаунты | Снимки | Цена |
|---|---|---|---|---|
| Storage-1 | 1 ТБ | 100 | 10 плюс 10 автоматических | 9,99 EUR |
| Storage-2 | 5 ТБ | 100 | 20 плюс 20 автоматических | 29,99 EUR |
| Storage-3 | 10 ТБ | 100 | 30 плюс 30 автоматических | 39,99 EUR |
| Storage-4 | 20 ТБ | 100 | 40 плюс 40 автоматических | 69,99 EUR |
Все Storage Server стоят в Германии, говорят на FTP, FTPS, SFTP, SCP, Samba, WebDAV и WebDAVs, нативно приносят с собой rsync и BorgBackup и имеют IPv4 и IPv6. Платы за установку нет, расчёт идёт по модели PrePaid без минимального срока. То есть вы можете начать с 1 ТБ и позже увеличить объём, не переезжая.
Для расчёта: 1 ТБ дополнительного места на веб-сервере стоит, смотря у кого, в несколько раз больше 9,99 евро в месяц, и лежит он тогда на той же машине, что и сайт. Хранилище рядом не только дешевле, оно ещё и отдельное.
Частые вопросы
Можно ли вставить изображения в сайт прямой ссылкой на Storage Server?
Какой протокол выбрать со стороны веб-сервера?
Заменяет ли Storage Server сеть CDN?
Сколько суб-аккаунтов можно создать?
Можно ли выделить суб-аккаунту собственный объём?
Насколько быстрый доступ?
Видны ли данные доступа в браузере?
Можно ли так же делать резервные копии сайта?
Нужен ли для этого свой сервер?
Сколько это стоит?
2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

