DinD HostingПосібник
ENУК
РОЗДІЛ 09

Файлове сховище (S3)

Кожен користувач отримує власний бакет, сумісний із S3. Використовуйте його для завантажень, медіафайлів і всього, що має пережити контейнер.

Що ви отримуєте#

Коли створюється ваш обліковий запис, платформа готує у вбудованому MinIO:

  • бакет із назвою <alias>-files;
  • IAM-користувача з вашим псевдонімом і політикою, обмеженою лише цим бакетом;
  • ключ доступу та секретний ключ для нього.

Ніхто інший не може читати ваш бакет, а ви не можете читати чужий. Власний бакет платформи (platform, де зберігаються журнали збірки й резервні копії) окремий і недоступний за вашими ключами.

Де знайти облікові дані#

Відкрийте будь-який проєкт → «Налаштування» → «Сховище S3 (ваш особистий бакет)». У таблиці показано «Адреса», «Регіон», «Бакет», «Ключ доступу» і «Секретний ключ» (прихований, доки ви не натиснете «Показати»).

hosting.example.com/projects/7
Налаштування
Вкладка «Налаштування». Адреса доступна з контейнерів вашого застосунку; секретний ключ показується на вимогу.
bash
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 ваш секретний ключ
js
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" }));
python
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/…).