S3-хранилище
По умолчанию NORA хранит артефакты на локальной файловой системе. Для рабочих развёртываний можно переключиться на любое S3-совместимое хранилище — AWS S3, MinIO, RustFS, Ceph RGW и другие.
Конфигурация
Заголовок раздела «Конфигурация»| Переменная | По умолчанию | Описание |
|---|---|---|
NORA_STORAGE_MODE | local | Установите s3 для объектного хранилища |
NORA_STORAGE_S3_URL | — | URL S3-совместимого endpoint (например http://minio:9000) |
NORA_STORAGE_BUCKET | registry | Имя бакета. Должен существовать до запуска NORA |
NORA_STORAGE_S3_ACCESS_KEY | — | Ключ доступа. Если не указан, используется анонимный доступ |
NORA_STORAGE_S3_SECRET_KEY | — | Секретный ключ |
NORA_STORAGE_S3_REGION | us-east-1 | Регион. Требуется некоторыми реализациями S3 |
MinIO — наиболее популярное self-hosted S3-совместимое хранилище. Этот пример включает init-контейнер, который создаёт бакет автоматически.
Docker Compose
Заголовок раздела «Docker Compose»services: minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: noraadmin MINIO_ROOT_PASSWORD: changeme-minio-secret ports: - 9000:9000 # S3 API - 9001:9001 # Консоль MinIO volumes: - minio-data:/data healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 5s timeout: 5s retries: 5
createbucket: image: minio/mc:latest depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set myminio http://minio:9000 noraadmin changeme-minio-secret; mc mb --ignore-existing myminio/nora-storage; exit 0; "
nora: image: ghcr.io/getnora-io/nora:latest depends_on: createbucket: condition: service_completed_successfully environment: NORA_HOST: "0.0.0.0" NORA_STORAGE_MODE: s3 NORA_STORAGE_S3_URL: http://minio:9000 NORA_STORAGE_BUCKET: nora-storage NORA_STORAGE_S3_ACCESS_KEY: noraadmin NORA_STORAGE_S3_SECRET_KEY: changeme-minio-secret NORA_STORAGE_S3_REGION: us-east-1 ports: - 4000:4000 restart: unless-stopped
volumes: minio-data:Проверка
Заголовок раздела «Проверка»# Push Docker-образdocker tag alpine:latest localhost:4000/test/alpine:latestdocker push localhost:4000/test/alpine:latest
# Pull обратноdocker rmi localhost:4000/test/alpine:latestdocker pull localhost:4000/test/alpine:latest
# Загрузка raw-файлаcurl -X PUT -d "hello s3" http://localhost:4000/raw/test/hello.txtcurl http://localhost:4000/raw/test/hello.txtПроверьте консоль MinIO на http://localhost:9001 — объекты должны появиться в бакете nora-storage.
RustFS — легковесное S3-совместимое хранилище на Rust. Конфигурация идентична MinIO с одним отличием: endpoint проверки здоровья /health вместо /minio/health/live.
Docker Compose
Заголовок раздела «Docker Compose»services: rustfs: image: rustfs/rustfs:latest command: server /data --console-address ":9001" environment: RUSTFS_ROOT_USER: noraadmin RUSTFS_ROOT_PASSWORD: changeme-rustfs-secret ports: - 9000:9000 # S3 API - 9001:9001 # Консоль volumes: - rustfs-data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/health"] interval: 5s timeout: 5s retries: 5
createbucket: image: minio/mc:latest depends_on: rustfs: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set myrustfs http://rustfs:9000 noraadmin changeme-rustfs-secret; mc mb --ignore-existing myrustfs/nora-storage; exit 0; "
nora: image: ghcr.io/getnora-io/nora:latest depends_on: createbucket: condition: service_completed_successfully environment: NORA_HOST: "0.0.0.0" NORA_STORAGE_MODE: s3 NORA_STORAGE_S3_URL: http://rustfs:9000 NORA_STORAGE_BUCKET: nora-storage NORA_STORAGE_S3_ACCESS_KEY: noraadmin NORA_STORAGE_S3_SECRET_KEY: changeme-rustfs-secret NORA_STORAGE_S3_REGION: us-east-1 ports: - 4000:4000 restart: unless-stopped
volumes: rustfs-data:Для AWS S3 укажите NORA_STORAGE_S3_URL на региональный endpoint:
environment: NORA_STORAGE_MODE: s3 NORA_STORAGE_S3_URL: https://s3.eu-central-1.amazonaws.com NORA_STORAGE_BUCKET: my-nora-registry NORA_STORAGE_S3_ACCESS_KEY: AKIA... NORA_STORAGE_S3_SECRET_KEY: wJal... NORA_STORAGE_S3_REGION: eu-central-1config.toml
Заголовок раздела «config.toml»[storage]mode = "s3"s3_url = "http://minio:9000"bucket = "nora-storage"s3_access_key = "noraadmin"s3_secret_key = "changeme"s3_region = "us-east-1"Диагностика
Заголовок раздела «Диагностика»NORA запускается, но артефакты попадают в локальное хранилище
Заголовок раздела «NORA запускается, но артефакты попадают в локальное хранилище»Проверьте, что NORA_STORAGE_MODE установлен в точности s3 (в нижнем регистре). Любая ошибка в написании приводит к тихому откату на локальный режим:
docker exec nora env | grep NORA_STORAGEОжидаемый вывод:
NORA_STORAGE_MODE=s3NORA_STORAGE_S3_URL=http://minio:9000NORA_STORAGE_BUCKET=nora-storage...Ошибка подключения к S3 endpoint
Заголовок раздела «Ошибка подключения к S3 endpoint»Убедитесь, что S3-сервис работает до запуска NORA. В Docker Compose используйте depends_on с condition: service_healthy.
Бакет не существует
Заголовок раздела «Бакет не существует»NORA не создаёт бакеты. Создайте заранее через mc mb или init-контейнер (см. примеры выше).
См. также
Заголовок раздела «См. также»- Параметры — все параметры конфигурации
- Развёртывание — рекомендации по развёртыванию
- Проксирование Docker — настройка pull-through кэша