﻿# SeaweedFS

> [HTML Version](seaweedfs.html)

В статье рассмотрим пример установки SeaweedFS в качестве объектного хранилища S3 для программного комплекса ELMA365. Статья охватывает установку SeaweedFS в конфигурации с одним узлом и одним диском (SNSD). Такая конфигурация не обеспечивает дополнительной надёжности или доступности, помимо того, что реализовано в базовом томе хранилища (RAID, LVM, ZFS и т. д.). 

Перед установкой ознакомьтесь с информацией:

- о лицензировании SeaweedFS в [официальной документации](https://seaweedfs.com/docs/deploy/);

- о поддерживаемых версиях SeaweedFS и других требованиях в статье [«Системные требования ELMA365 On‑Premises»](elma365-enterprise-on-premises.md#minio);

- о вариантах организации инфраструктуры для работы системы ELMA365 в статьях [«ELMA365 On‑Premises Standard»](elma365-on-premises-standard.md) и [«ELMA365 On‑Premises Enterprise»](elma365-enterprise.md).

Установка состоит из нескольких этапов:

1. [Установка Docker и Docker Compose](#docker).

2. [Установка SeaweedFS](#install).

3. [Установка MC Client](#client).

4. [Запуск сервиса SeaweedFS](#service).

5. [Настройка подключения к SeaweedFS](#connect).

6. [Создание бакета](#bucket).

7. [Подключение к SeaweedFS](#parameters).

## Шаг 1. Установка Docker и Docker Compose

Для установки SeaweedFS потребуются следующие инструменты:

- Docker — установите согласно инструкциям для вашей операционной системы на [официальном сайте](https://docs.docker.com/engine/install/);

- Docker Compose — установите согласно инструкциям для вашей операционной системы на [официальном сайте](https://docs.docker.com/compose/install).



## Шаг 2. Установка SeaweedFS

1. Создайте каталог для монтирования диска:

````
mkdir -p /opt/seaweedfs/data/

2. ````
Создайте файл `docker-compose.yml`:

````
version: "3.9"  
services:  
  seaweedfs:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
        server   
        -ip.bind=0.0.0.0   
        -s3   
        -s3.config=/etc/seaweedfs/s3.json   
        -s3.port=8333  
    ports:  
      - "8333:8333"  
    volumes:  
      - /opt/seaweedfs/data/:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"\]  
      interval: 30s  
      timeout: 10s  
      retries: 3

3. ````
Создайте файл `/opt/seaweedfs/s3.json`:

````
\{  
  "identities": \[  
    \{  
      "name": "admin",  
      "credentials": \[  
        \{  
          "accessKey": "elma365user",  
          "secretKey": "SecretPassword"  
        \}  
      \],  
      "actions": \["Admin", "Read", "Write"\]  
    \}  
  \]  
\}

````


Настройка включения TLS в SeaweedFS

  
Для включения поддержки TLS в SeaweedFS:

1. Сохраните файл сертификата и файл закрытого ключа в каталоге `/opt/seaweedfs/certs`.

2. Переименуйте файл сертификата сервера в `cert.pem`.

3. Переименуйте файл закрытого ключа в `key.pem`.

4. При использовании самоподписанных сертификатов сохраните файл корневого CA в каталоге `/opt/seaweedfs/certs`.

````
version: "3.9"  
services:  
  seaweedfs:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
        server   
        -ip.bind=0.0.0.0   
        -s3  
        -s3.https.port=8443  
        -s3.cacert.file=/etc/seaweedfs/certs/ca.pem  
        -s3.cert.file=/etc/seaweedfs/certs/cert.pem  
        -s3.key.file=/etc/seaweedfs/certs/key.pem  
    ports:  
      - "8443:8443"  
    volumes:  
      - /opt/seaweedfs/data/:/data  
     - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
     - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"\]  
      interval: 30s  
      timeout: 10s  
      retries: 3

````




## Шаг 3. Установка MC Client

Загрузите последний стабильный binary‑файл [SeaweedFS Client](https://min.io/docs/minio/linux/reference/minio-mc.html) и установите его в систему:

````
wget https://dl.min.io/client/mc/release/linux-amd64/mc  
chmod +x mс  
sudo mv mc /usr/local/bin/

## ````
Шаг 4. Запуск сервиса SeaweedFS

Запустите манифест:

````
docker-compose -f docker-compose.yml up -d

## ````
Шаг 5. Настройка подключения к SeaweedFS

Создайте алиас для SeaweedFS:

````
/usr/local/bin/mc alias set seaweedfs http://SeaweedFS.your\_domain:8333 elma365user SecretPassword

## ````
Шаг 6. Создание бакета

**Важно**: наименование бакетов в S3 должно соответствовать формату **s3elma365\***. Для примера в статье используется имя бакета **s3elma365**, пользователь **elma365user** и пароль **SecretPassword**. При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.

Примеры наименований для бакетов: **s3elma365**; **s3elma365-dev**; **s3elma365-prod**.

Для работы ELMA365 создайте бакет c наименованием **s3elma365**, используя команду:

````
/usr/local/bin/mc mb -p seaweedfs/s3elma365 --region=ru-central-1

````


Создание в S3 бакетов для работы ELMA Bot

  
Если вы планируете использовать  [ELMA Bot](elma-bot.md), создайте бакеты:

- **s3elmabot**;

- **elmabot-temporary-files**;

- **elmabot-static-files**.

Для создания бакетов выполните следующие команды:

````
/usr/local/bin/mc mb -p SeaweedFS/s3elmabot --region=ru-central-1  
/usr/local/bin/mc mb -p SeaweedFS/elmabot-temporary-files --region=ru-central-1  
/usr/local/bin/mc mb -p SeaweedFS/elmabot-static-files --region=ru-central-1

````




## Шаг 7. Подключение к SeaweedFS

Параметры для подключения к SeaweedFS:

- `address` — `seaweedfs.your\_domain:8333`;

- `bucket` — `s3elma365`;

- `region` — `ru-central-1`;

- `access key ID` — `elma365user`;

- `secret access key` — `SecretPassword`;

- `upload method` — `PUT`;

- `enable SSL` — `No`.

Если SeaweedFS ожидает подключение с использованием TLS, укажите в параметре `enable SSL` значение `Yes`.

