Объектное S3-хранилище в serverplus
Объектное хранилище — это место для файлов, к которым обращаются по HTTP, а не как к диску. Вы кладёте объекты (файлы) в «бакеты» (buckets), и каждый объект доступен по своему ключу. У serverplus оно S3-совместимое, поэтому работает со всеми привычными инструментами: aws-cli, rclone, boto3 и другими SDK.
Когда использовать
- Бэкапы и архивы — дампы БД, снимки, логи; хранятся отдельно от серверов.
- Медиа и загрузки пользователей — картинки, видео, документы веб-приложения.
- Статика и раздача файлов — ассеты сайта, дистрибутивы, отчёты.
- Обмен данными между сервисами и большими объёмами, которые неудобно держать на диске сервера.
Если же нужна файловая система, куда пишет приложение как на локальный диск, — это том (Cinder), а не объектное хранилище. Объектное — про «положил/забрал файл по ключу».
1. Эндпоинт, бакет и ключи
Единый адрес для подключения (совместим с Amazon S3, поддерживает стандартный S3 API):
https://object-store.serverplus.uzСоздать бакет: в панели cloud.serverplus.uz откройте раздел «Объектное хранилище» → «Создать бакет», задайте уникальное имя и тип доступа — приватный (для служебных данных) или публичный. После создания бакет доступен через S3 API.
Получить ключи: раздел «Доступ» → «Учётные данные S3/EC2» → создайте пару ACCESS_KEY + SECRET_KEY. Они используются для подключения через API, CLI и приложения.
Ключи S3 — это доступ к вашим файлам. Не размещайте
SECRET_KEYв публичном коде, храните его как пароль, заводите отдельные ключи для разных сервисов и отзывайте ненужные. Для служебных данных используйте приватные бакеты.
2. Настройка aws-cli
aws configure
# AWS Access Key ID: <access key>
# AWS Secret Access Key: <secret>
# Default region name: us-east-1
# Default output format: json
# path-style addressing for S3-compatible storage
aws configure set default.s3.addressing_style pathЧтобы не повторять адрес эндпоинта, удобно сделать псевдоним:
alias s3='aws --endpoint-url https://object-store.serverplus.uz s3'3. Базовые операции
s3 mb s3://my-bucket # create a bucket
s3 cp report.pdf s3://my-bucket/ # upload a file
s3 sync ./site s3://my-bucket/site/ # sync a directory
s3 ls s3://my-bucket/ # list objects
s3 cp s3://my-bucket/report.pdf . # download
s3 rm s3://my-bucket/report.pdf # delete4. Из кода: Python (boto3)
import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://object-store.serverplus.uz",
aws_access_key_id="<access key>",
aws_secret_access_key="<secret>",
region_name="us-east-1",
)
s3.upload_file("photo.jpg", "my-bucket", "images/photo.jpg")
for obj in s3.list_objects_v2(Bucket="my-bucket").get("Contents", []):
print(obj["Key"], obj["Size"])5. rclone: синхронизация и монтирование
rclone удобен для регулярной синхронизации и даже монтирования бакета как папки. Конфиг ~/.config/rclone/rclone.conf:
[sp]
type = s3
provider = Other
access_key_id = <access key>
secret_access_key = <secret>
endpoint = https://object-store.serverplus.uzrclone sync ./data sp:my-bucket/data # sync
rclone ls sp:my-bucket # list
rclone mount sp:my-bucket /mnt/s3 & # mount as a folder6. Версионирование и жизненный цикл
Чтобы защититься от случайной перезаписи и автоматически чистить старое:
# enable bucket versioning
aws --endpoint-url https://object-store.serverplus.uz \
s3api put-bucket-versioning --bucket my-bucket \
--versioning-configuration Status=Enabled- Версионирование хранит прежние версии объектов — можно откатить перезапись или удаление.
- Lifecycle-правила автоматически удаляют или архивируют объекты старше N дней — удобно для логов и бэкапов.
7. Большие файлы
Крупные объекты aws-cli и rclone загружают частями (multipart) автоматически — это надёжнее: при обрыве докачивается только неудавшаяся часть. Отдельная настройка обычно не нужна.
8. Публичный доступ и временные ссылки
По умолчанию объекты приватны. Чтобы дать доступ к файлу, не открывая бакет наружу, используйте presigned URL — временную подписанную ссылку:
s3 presign s3://my-bucket/report.pdf --expires-in 3600
# returns a link valid for 1 hourНе делайте бакет публичным без необходимости. Публичный доступ уместен для статики сайта, но для приватных файлов используйте временные ссылки, а не «открыть всем».
9. Типичные сценарии
- Бэкапы: дампы БД и архивы по расписанию (см. статью «Стратегия резервного копирования»).
- Хранилище загрузок приложения: картинки и файлы пользователей — сервер не растёт, файлы отдаются по ссылкам.
- Раздача статики: ассеты и дистрибутивы, при необходимости — за CDN.
- Перенос больших объёмов между серверами (быстрее прямого копирования).
Безопасность
- Отдельные ключи и минимум прав. Каждому приложению — свои S3-ключи; ненужные отзывайте, периодически ротируйте.
- Приватность по умолчанию. Публичный доступ — только осознанно; для временного доступа — presigned URL.
- HTTPS и шифрование. Работайте только через
https-эндпоинт; чувствительные данные шифруйте до загрузки. - Версионирование как защита от случайного и злонамеренного удаления.
Частые вопросы
Ошибка SignatureDoesNotMatch. Обычно неверный secret, разошлись часы на клиенте или указан не тот эндпоинт/регион. Проверьте ключи, время и адрес.
Access Denied при обращении к бакету. Либо ключи не от того проекта, либо у них нет прав на этот бакет. Проверьте, каким ключом обращаетесь, и политику доступа.
Клиент не находит бакет / странные ошибки адресации. Включите path-style: aws configure set default.s3.addressing_style path (или соответствующую опцию в SDK/rclone).
Какой адрес эндпоинта у serverplus? https://object-store.serverplus.uz — единый S3-совместимый эндпоинт. Его вы передаёте клиенту как --endpoint-url (или в поле endpoint у SDK/rclone).