Используйте MinIO для простого создания сервисов статических ресурсов

Java

Если вы хотите создать элегантную, простую и полнофункциональную службу статических ресурсов, используйте MinIO.

1. Введение

В процессе разработки веб-проекта часто возникает необходимость обработки статических ресурсов (таких как картинки, видео, аудио, js-библиотеки, css-библиотеки и т. д.) Вообще говоря, если эти файлы ресурсов нужны в проекте, мы обычно используют следующие методы:

  • Локальное хранилище: то есть в статическом каталоге проекта создайте каталоги, такие как js/css/icon/font/image/lib/audio/video, и сохраните файлы ресурсов в соответствующем формате соответственно. При использовании используйте ссылки относительного положения в файле html.
  • Используйте прокси для создания статической службы ресурсов: то есть храните ресурсы в каталоге файлов, используйте прокси-сервер (например, nginx, apache и т. д.) для сопоставления каталога для создания службы ресурсов. При использовании ссылайтесь на URL-адрес прокси-сервиса в html-файле.
  • Используйте сторонние инструменты для создания служб статических ресурсов: используйте сторонние инструменты для хранения файлов или объектов с открытым исходным кодом или сами напишите программу для реализации интерфейса, который может получать файлы. При использовании используйте соответствующий URL-адрес или адрес интерфейса.
  • Используйте онлайн-сервисы статических ресурсов: такие как CDN и другие сервисы.

Для локального хранилища недостаток очевиден, ресурсы и файлы кода перемешаны между собой, что ненужно и неудобно расширять. Для приложений, развернутых локально, очевидно, безопаснее создавать службы статических ресурсов самостоятельно. Для сравнения, для использования прокси-сервисов и сторонних инструментов прокси-сервис выполняет только сопоставление.Хотя он доступен, он имеет одну функцию, выполняет только сопоставление и не имеет других функций управления, и его нелегко расширять. Используя сторонние инструменты хранения файлов или объектов, вы можете управлять файлами и учитывать такие факторы, как высокое расширение, высокая производительность и высокая доступность, поэтому это хороший выбор.Среди них MinIO — такой полезный инструмент хранения объектов.Простой, быстро и полнофункционально.

В этой статье создаются службы статических ресурсов с помощью установки, настройки и использования MinIO, чтобы независимо развертывать и получать доступ к таким ресурсам, как изображения, видео, аудио и сторонние библиотеки js; также кратко рассказывается об использовании предоставленного Java API. от MinIO для дальнейшего развития.

2 Введение в MinIO

в соответствии сMinIOСогласно официальному представлению, MinIO — это высокопроизводительное хранилище объектов (разницу между хранилищем блоков, хранилищем файлов и хранилищем объектов см.Распределенные решения для хранения объектов, знакомые архитекторам), совместимый с интерфейсом Amazon S3, полностью учитывающий потребности и опыт разработчиков; поддерживающий распределенное хранилище с высокой масштабируемостью и высокой доступностью; простое развертывание, но богатый функциями. Официальная документация также очень подробная. Он имеет несколько различных режимов развертывания (развертывание на одном компьютере, распределенное развертывание). Причина, по которой MinIO проста в использовании, заключается в том, что ее легко запустить, запустить и настроить. Его можно установить и запустить через докер или скачать бинарный файл и запустить с помощью скрипта.

Эта статья объясняется самым простым способом: на Linux-машине, развертывание на одной машине, запуск бинарных файлов.

3 Работа MinIO и использование статических ресурсов

3.1 Приобретение MinIO

Документация по разработке MinIO, адрес загрузки выглядит следующим образом:

  • linux: https://dl.min.io/server/minio/release/linux-amd64/minio
  • windows: https://dl.min.io/server/minio/release/windows-amd64/minio.exe

Эта статья работает в Linux.

3.2 Запуск и запуск MinIO

3.2.1 Простой запуск переднего плана

Сохраните загруженный файл minio в каталоге в качестве рабочего каталога (например, /opt/minio) и создайте новый каталог (например, /opt/minio-data) в качестве места хранения данных minio для запуска следующим образом:

cd /opt/minio
chmod +x minio
./minio server /opt/minio-data

После запуска будет выведена конечная точка адреса доступа и соответствующий ключ доступа и секретный ключ.Используйте браузер для доступа к адресу конечной точки.Если к нему можно получить доступ, это означает, что minio был успешно установлен. Однако у этого стартапа есть несколько недостатков:

  • не работает в фоновом режиме,ctrl+cзавершит процесс, и служба остановится
  • Нет пользовательского имени пользователя и пароля для доступа
  • Не указан IP-адрес доступа и порт
  • журнал не сохраняется в файл

Для этих проблем рекомендуется использовать следующие методы запуска и запуска.

3.2.2 Запуск с заданными параметрами в фоновом режиме

использоватьnohupЗапустите программу в фоновом режиме, указав параметры пароля, параметры адреса доступа и вывод журнала, как показано ниже.

MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 nohup /opt/minio/minio  server --address "${MINIO_HOST}:${MINIO_PORT}" /opt/minio-data  > /opt/minio/minio.log 2>&1 &

MINIO_ACCESS_KEYиMINIO_SECRET_KEYэто код доступа

${MINIO_HOST}:${MINIO_PORT}Это хост и порт для доступа, пожалуйста, измените их в соответствии с реальной ситуацией.

Таким образом, доступ к адресу через браузер${MINIO_HOST}:${MINIO_PORT}, используя указанныйMINIO_ACCESS_KEYиMINIO_SECRET_KEYПросто войдите в систему.

3.2.3 Создайте ведро и укажите политику доступа

Войдите в систему хранения MinIO в браузере, нажмите, чтобы создать корзину в правом нижнем углу для хранения объектов, и создайте соответствующие корзины для хранения статических ресурсов: изображения, видео, аудио. Таким образом, файлы могут быть загружены в соответствующее ведро в соответствии с типом ресурса.После загрузки файлы могут быть переданы в общий доступ, а другие места могут получать ресурсы через общий URL-адрес, как показано на следующем рисунке.

分享文件

Политика MinIO по умолчанию заключается в том, что эффективное время обмена адресами составляет не более дней 7. Чтобы нарушить этот лимит, вы можете установить политику в корзине. Щелкните соответствующее ведро ,edit policyДобавить политику*.*,Read Only,следующее:

edit policy

Это освобождает доступ без ограничения по времени и просто нажимаетhttp://${MINIO_HOST}:${MINIO_PORT}/${bucketName}/${fileName}Вы можете получить прямой доступ к ресурсу (операция совместного использования не требуется).

Мифы о каталоге MinIO

  • На самом деле, для объектного хранилища нет различия между файлами и каталогами, все файлы и каталоги являются объектами, то есть image/temp/xxx.jpg и image/temp/ оба являются объектами. Она принципиально отличается от древовидной структуры файловой системы операционной системы.
  • При загрузке файла имя_объекта может быть/temp/xxx.jpg, можно считать, что система автоматически создала временную директорию.
  • MinIO не поддерживает такие операции, как удаление каталога и одновременное удаление всех файлов в этом каталоге (т.rm -rf image/temp), поэтому чтобы удалить изображение / TEMP Directory / Temp, вам нужно удалить все файлы, префиксные с изображением / темп.
  • При запросе нескольких файлов вы можете использовать сопоставление префиксов, чтобы получить их, см. документацию по API.listObjects(bucketName, prefix, recursive)

3.3 Ссылки на статические ресурсы в html-файлах

Благодаря вышеуказанным настройкам и операциям MinIO был завершен как сервер статических ресурсов, и вы можете написать html для ссылки на статические ресурсы в MinIO. Ниже приведены изображение, видео и аудио в протестированном html с использованием адреса ресурса MinIO.

<div class="img-list">
        <img src="http://${MINIO_HOST}:${MINIO_PORT}/image/test.jpg" alt="图片">
    </div>
    <div class="audio-list">
        <audio src="http://${MINIO_HOST}:${MINIO_PORT}/audio/test.mp3"
        controls="controls"></audio>
    </div>
    <div class="video-list">
        <video src="http://${MINIO_HOST}:${MINIO_PORT}/video/test.mp4" controls="controls"></video>
    </div>

Доступные для обнаружения ресурсы могут быть загружены и доступны в обычном режиме.

4 операции клиентского API Java

MinIO очень дружелюбен к разработчикам и предоставляет интерфейсы работы с API на разных языках.Документация по разработке MinIO. Давайте возьмем Java в качестве примера для проведения теста.

4.1 Добавить зависимости

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>6.0.13</version>
</dependency>

4.2 Использование Java API для операций с файлами

Создайте клиент операции для MinIOminioClient = new MinioClient(endpoint, accessKey, secretKey);, в параметреendpointЭто адрес доступа к минимуму, установлен, когда соответствующие два заднего пароля загрузочного пароля.

4.2.1 Загрузка файлов

/**
 * 上传文件
 * @param minioClient 操作客户端
 * @param bucketName 上传的bucket名称 
 * @param objectName 上传后存储在bucket中的文件名
 * @param filePath 上传的本地文件路径
 */
public void uploadFile(MinioClient minioClient, String bucketName, String objectName, String filePath) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {
    try {
        // 若不存在bucket,则新建
        boolean isExist = minioClient.bucketExists(bucketName);
        if (!isExist) {
            minioClient.makeBucket(bucketName);
        }
        // 使用 putObject 上传文件
        minioClient.putObject(bucketName, objectName, filePath, null, null, null, null);
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
    }
}

4.2.2 Загрузка файлов

/**
 * 下载文件
 *
 * @param minioClient 操作客户端
 * @param bucketName 上传的bucket名称 
 * @param objectName 上传后存储在bucket中的文件名
 * @param downloadPath 下载文件保存路径
 */
public void downloadFile(MinioClient minioClient, String bucketName, String objectName, String downloadPath) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {
    File file = new File(downloadPath);
    try (OutputStream out = new FileOutputStream(file)) {
        InputStream inputStream = minioClient.getObject(bucketName, objectName);
        byte[] tempbytes = new byte[1024];
        int byteread = 0;
        while ((byteread = inputStream.read(tempbytes)) != -1) {
            out.write(tempbytes, 0, byteread);
        }
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
    }
}

4.2.3 Удаление файлов

Удалить файлы легко, используйтеremoveObjectВот и все.

minioClient.removeObject(bucketName, objectName);

4.2.4 Список файлов

/**
  * 罗列文件
  * @param minioClient
  * @param bucketName
  */
public void listFile(MinioClient minioClient, String bucketName) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {
    try {
        Iterable<Result<Item>> results = minioClient.listObjects(bucketName);
        Iterator<Result<Item>> iterator = results.iterator();
        while (iterator.hasNext()) {
            Item item = iterator.next().get();
            System.out.println(item.objectName() + ", " + item.objectSize() + "B");
        }
    } catch (MinioException e) {
        System.out.println("Error occurred: " + e);
    }
}

5 Резюме

Из-за необходимости независимого доступа к статическим ресурсам и разделения динамических и статических с помощью MinIO можно быстро и легко реализовать сервер статических ресурсов для доступа. В этой статье описывается загрузка, развертывание, запуск, эксплуатация и настройка MinIO, а в качестве примера для объяснения использования MinIO используется html для ссылки на файлы статических ресурсов, а также предлагается простое использование Java API. Я надеюсь, что все должны помочь.

Скачать

В этой статье nohup используется для запуска MinIO, но эта команда слишком длинная.Как правило, мы напишем сценарий для реализации запуска, завершения работы и запроса состояния.Поэтому я пишу сценарий в виде полного файла sh для использования всеми. Кроме того, тест MinIO Java API, в данном примере используется проект Spring Boot, который проводится в виде модульного тестирования.

файл сценария sh и проект Spring Boot вместе в моемпример минио на гитхабеСредний (сценарийminio-serviced.shВ каталоге скриптов) вы можете скачать ссылку, если она вам нужна.

Как использовать скрипт:

  • Измените параметры в сценарии sh в соответствии с реальной ситуацией.
  • Изменить права на выполнение: chmod +x minio-serviced.sh
  • Статус запуска/остановки/перезапуска/запуска по параметру: ./minio-serviced.sh start/stop/restart/status

использованная литература

Прошлые статьи

Мой официальный аккаунт (поискMason技术记录) для более технических записей:

mason