Файлове сховище (S3)
Кожен користувач отримує власний бакет, сумісний із S3. Використовуйте його для завантажень, медіафайлів і всього, що має пережити контейнер.
Що ви отримуєте#
Коли створюється ваш обліковий запис, платформа готує у вбудованому MinIO:
- бакет із назвою
<alias>-files; - IAM-користувача з вашим псевдонімом і політикою, обмеженою лише цим бакетом;
- ключ доступу та секретний ключ для нього.
Ніхто інший не може читати ваш бакет, а ви не можете читати чужий. Власний бакет платформи (platform, де зберігаються журнали збірки й резервні копії) окремий і недоступний за вашими ключами.
Де знайти облікові дані#
Відкрийте будь-який проєкт → «Налаштування» → «Сховище S3 (ваш особистий бакет)». У таблиці показано «Адреса», «Регіон», «Бакет», «Ключ доступу» і «Секретний ключ» (прихований, доки ви не натиснете «Показати»).
curl -fsS "$BASE/api/v1/users/me/storage" -H "Authorization: Bearer $TOKEN"
get_s3_credentials()
Повертає адресу, регіон, бакет і обидва ключі. Секретний ключ стабільний — між викликами він не змінюється.
Використання із застосунку#
Додайте s3: true до platform.yaml, і платформа додасть облікові дані під час наступного розгортання чи перестворення:
| Змінна | Значення |
|---|---|
S3_ENDPOINT |
адреса MinIO в мережі платформи, наприклад http://172.28.0.5:9000 |
S3_BUCKET |
<alias>-files |
S3_ACCESS_KEY |
ваш ключ доступу |
S3_SECRET_KEY |
ваш секретний ключ |
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({
endpoint: process.env.S3_ENDPOINT, region: "us-east-1", forcePathStyle: true,
credentials: { accessKeyId: process.env.S3_ACCESS_KEY, secretAccessKey: process.env.S3_SECRET_KEY },
});
await s3.send(new PutObjectCommand({ Bucket: process.env.S3_BUCKET, Key: "hello.txt", Body: "hi" }));
import os, boto3
from botocore.config import Config
s3 = boto3.client(
"s3", endpoint_url=os.environ["S3_ENDPOINT"], region_name="us-east-1",
aws_access_key_id=os.environ["S3_ACCESS_KEY"], aws_secret_access_key=os.environ["S3_SECRET_KEY"],
config=Config(s3={"addressing_style": "path"}),
)
s3.put_object(Bucket=os.environ["S3_BUCKET"], Key="hello.txt", Body=b"hi")
Використовуйте адресацію в стилі шляху (path-style)
Більшість SDK типово використовують імена хостів виду bucket.endpoint, які приватна адреса обслужити не може. Вмикайте path-style (forcePathStyle, addressing_style: path), коли спрямовуєте SDK на адресу платформи.
Що варто знати#
- Адреса — внутрішня: застосунки звертаються до неї напряму, але чи доступний MinIO також ззовні (консоль працює на порту 9001) — це рішення оператора; запитайте свого адміністратора.
- Регіон — умовне значення
us-east-1; MinIO його ігнорує, але більшість SDK вимагають якесь значення. - Ваш бакет не входить до резервної копії проєкту. Створюйте його копії самостійно, якщо в ньому лежить єдина копія чогось важливого.
- Ключі належать вам, а не проєкту — усі ваші проєкти бачать той самий бакет, тому додавайте до ключів префікс для кожного проєкту (
blog/…,shop/…).
