Серия «MinIO на VPS»: Buckets и ключи → SDK
Источник совместимости: AWS S3 API, MinIO S3 compatibility.
Общие параметры (из статьи про ключи):
| Параметр | Пример |
|---|---|
| Endpoint | https://s3.example.com |
| Access Key | appuser |
| Secret Key | AppUser_SecretPass456 |
| Bucket | my-app-uploads |
| Region | us-east-1 (для MinIO часто фиксированный) |
Laravel (Flysystem S3)
composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies.env:
AWS_ACCESS_KEY_ID=appuser
AWS_SECRET_ACCESS_KEY=AppUser_SecretPass456
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=my-app-uploads
AWS_ENDPOINT=https://s3.example.com
AWS_USE_PATH_STYLE_ENDPOINT=trueconfig/filesystems.php — диск s3 использует переменные AWS_*.
Проверка в tinker:
php artisan tinker --execute="Storage::disk('s3')->put('laravel-test.txt', 'hello'); echo Storage::disk('s3')->url('laravel-test.txt');"Node.js (@aws-sdk/client-s3)
mkdir -p /tmp/minio-node && cd /tmp/minio-node
npm init -y
npm install @aws-sdk/client-s3upload.js:
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import fs from "fs";
const client = new S3Client({
region: "us-east-1",
endpoint: "https://s3.example.com",
forcePathStyle: true,
credentials: {
```bash
accessKeyId: "appuser",
secretAccessKey: "AppUser_SecretPass456",}, });
await client.send(new PutObjectCommand({ Bucket: "my-app-uploads", Key: "node-test.txt", Body: fs.readFileSync("/etc/hostname"), })); console.log("upload OK");
```bash
node upload.jsPython (boto3)
apt install -y python3-pip
pip3 install boto3upload.py:
import boto3
from botocore.client import Config
s3 = boto3.client(
```bash
"s3",
endpoint_url="https://s3.example.com",
aws_access_key_id="appuser",
aws_secret_access_key="AppUser_SecretPass456",
config=Config(signature_version="s3v4"),
region_name="us-east-1",)
with open("/etc/hostname", "rb") as f:
s3.put_object(Bucket="my-app-uploads", Key="python-test.txt", Body=f.read())print("upload OK")
```bash
python3 upload.py
mc ls local/my-app-uploadsHTTP без SDK (curl + presigned — опционально)
Для отладки используйте mc:
mc cp /etc/hosts local/my-app-uploads/curl-via-mc.txtТипичные ошибки SDK
| Ошибка | Решение |
|---|---|
SignatureDoesNotMatch | forcePathStyle: true, правильный endpoint |
AccessDenied | Policy пользователя — troubleshooting |
| SSL errors | CA / self-signed — используйте Let's Encrypt |
VPS на Simple-Server
Для развёртывания на production возьмите VPS/VDS с Ubuntu 22.04: root по SSH, NVMe и канал от 500 Мбит/с.