Yandex Object Storage — российская альтернатива Amazon S3, которая не блокируется в РФ. Можно использовать как CDN для статических файлов Битрикс: изображений, документов, медиа. Это снижает нагрузку на основной сервер и ускоряет загрузку для российских пользователей.
Преимущества Object Storage перед обычным хостингом
- Высокая доступность и отказоустойчивость (SLA 99.9%)
- Оплата только за хранение и трафик (нет аренды сервера)
- CDN через Yandex Cloud CDN поверх Object Storage
- Совместим с S3 API — работают большинство S3-клиентов
- Нет блокировок в РФ в отличие от Cloudflare
Создание бакета
- Перейдите в Yandex Cloud Console
- Object Storage → Создать бакет
- Имя:
mysite-uploads - Класс хранения: Стандартный
- Доступ на чтение объектов: Публичный
Создание сервисного аккаунта и ключа
# Через Yandex Cloud CLI (yc)
yc iam service-account create --name bitrix-s3
# Выдаём права на бакет
yc storage bucket update mysite-uploads \
--grants grant-type=grant-type-account,permission=permission-full-control,id=SERVICE_ACCOUNT_ID
# Создаём статический ключ доступа
yc iam access-key create --service-account-name bitrix-s3
Сохраните access_key_id и secret — они понадобятся для настройки.
PHP-класс для загрузки в Object Storage
bucket = $bucket;
$this->client = new S3Client([
"version" => "latest",
"region" => "ru-central1",
"endpoint" => "https://storage.yandexcloud.net",
"credentials" => [
"key" => $keyId,
"secret" => $secret,
],
"use_path_style_endpoint" => true,
]);
}
public function upload(string $localPath, string $remotePath, string $contentType = ""): string
{
if (!$contentType) {
$contentType = mime_content_type($localPath) ?: "application/octet-stream";
}
$this->client->putObject([
"Bucket" => $this->bucket,
"Key" => $remotePath,
"SourceFile" => $localPath,
"ContentType" => $contentType,
"ACL" => "public-read",
]);
return "https://storage.yandexcloud.net/{$this->bucket}/{$remotePath}";
}
public function delete(string $remotePath): void
{
$this->client->deleteObject([
"Bucket" => $this->bucket,
"Key" => $remotePath,
]);
}
public function getUrl(string $remotePath): string
{
return "https://storage.yandexcloud.net/{$this->bucket}/{$remotePath}";
}
}
// Использование:
$storage = new YandexObjectStorage(
"YOUR_ACCESS_KEY_ID",
"YOUR_SECRET",
"mysite-uploads"
);
$url = $storage->upload(
"/home/bitrix/www/upload/iblock/abc/photo.jpg",
"upload/iblock/abc/photo.jpg"
);
echo $url; // https://storage.yandexcloud.net/mysite-uploads/upload/iblock/abc/photo.jpg
Интеграция с Битрикс: хук на загрузку файлов
upload($arFile["tmp_name"], $remotePath, $arFile["type"]);
// Можно сохранить URL в мета-данных файла для последующего использования
AddMessage2Log("Uploaded to S3: {$url}", "yos_upload");
} catch (AwsException $e) {
AddMessage2Log("YOS upload error: " . $e->getMessage(), "yos_upload");
}
});
Настройка CORS для браузерной загрузки
Если файлы загружаются через JS напрямую в бакет:
[
{
"AllowedOrigins": ["https://karoche.ru"],
"AllowedMethods": ["GET", "PUT", "POST"],
"AllowedHeaders": ["*"],
"MaxAgeSeconds": 3600
}
]
Итог
Yandex Object Storage — надёжный российский S3-совместимый сервис для хранения файлов. Подключается через стандартный AWS SDK для PHP, работает без блокировок в РФ. Для высоконагруженных проектов добавьте Yandex CDN поверх бакета — это даст географически распределённую раздачу файлов.
