﻿# Кластер SeaweedFS

> [HTML Version](seaweedfs-cluster.html)

В статье рассматривается пример установки SeaweedFS в качестве объектного хранилища S3 для программного комплекса ELMA365.

Перед установкой ознакомьтесь с информацией:

- о лицензировании 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).

## Топология и репликация в SeaweedFS

Рекомендуемой топологией SeaweedFS для ELMA365 является распределённая (distributed) конфигурация. С помощью настроек репликации вы можете определить, сколько копий ваших данных будут храниться и где именно. 

Для этого при конфигурации серверов кластера используйте параметр репликации, задавая его в формате **XYZ**. Где:

- **X** — количество дополнительных копий в разных дата‑центрах (DC);

- **Y** — количество дополнительных копий в разных стойках (rack);

- **Z** — количество дополнительных копий в одной стойке.

Общее количество копий = одна основная + сумма всех цифр, указанных в параметре репликации. С примерами этого параметра можно ознакомиться в таблице.

| | | |
|------|------|------|
| **Параметр** | **Всего копий** | **Где хранится** |
| 000 | 1 | Одна основная копия (volume) без репликации |
| 001 | 2 | Две копии в одной стойке |
| 010 | 2 | Две копии в разных стойках одного дата-центра |
| 020 | 3 | Три копии в разных стойках одного дата-центра |
| 100 | 2 | Две копии в разных дата-центрах |


Рассмотрим подробнее несколько примеров параметра репликации:



1. `replication=001`:

- всего — две копии (основная + 1);

- хранятся в одной стойке;

- если у вас три виртуальные машины, такая репликация не гарантирует, что каждая виртуальная машина получит свою копию.

2. `replication=002`:

- всего — три копии (основная + 2);

- хранятся в одной стойке;

- при наличии трёх виртуальных машин на каждой будет одна копия.

3. `replication=020`:

- всего — три копии (основная + 2);

- хранятся в трёх разных стойках (`rack1`, `rack2`, `rack3`);

- при наличии трёх виртуальных машин на каждой из них есть одна копия;

- ограничение: при выходе из строя одной из трёх стоек кластер прекращает работу.



Подробнее о репликации читайте в [официальной документации SeaweedFS](https://github.com/seaweedfs/seaweedfs/wiki/Replication).



## Установка SeaweedFS



Состоит из нескольких этапов:

1. [Подготовка серверов](#create-servers).

2. [Установка Docker и Docker Compose](#docker).

3. [Установка SeaweedFS](#install).

4. [Настройка включения TLS в SeaweedFS](#tls).

5. [Установка MC Client](#client).

6. [Запуск сервиса SeaweedFS](#seaweed-service).

7. [Настройка подключения к SeaweedFS](#connect).

8. [Создание бакетов](#bucket).

9. [Конфигурация HAproxy](#haproxy).

10. [Подключение к SeaweedFS](#connection).

### Шаг 1. Подготовка серверов

Создайте три сервера (ноды) с последовательно пронумерованными именами хостов, например:

- **seaweedfs-server1.your\_domain**;

- **seaweedfs-server2.your\_domain**;

- **seaweedfs-server3.your\_domain**.

### Шаг 2. Установка Docker и Docker Compose

На созданных серверах установите:

- Docker — согласно инструкциям для вашей операционной системы на [официальном сайте](https://docs.docker.com/engine/install/);

- Docker Compose — согласно инструкциям для вашей операционной системы на [официальном сайте](https://docs.docker.com/compose/install).

### Шаг 3. Установка SeaweedFS

1. Создайте каталог для монтирования диска на всех серверах:

````
mkdir -p /opt/seaweedfs/data/\{master,volume,filer\}

2. ````
Создайте файл `/opt/seaweedfs/s3.json` на всех серверах:

````
\{  
  "identities": \[  
    \{  
      "name": "admin",  
      "credentials": \[  
        \{  
          "accessKey": "elma365user",  
          "secretKey": "SecretPassword"  
        \}  
      \],  
      "actions": \["Admin", "Read", "Write"\]  
    \}  
  \]  
\}

````


3. По умолчанию в SeaweedFS используется база данных LevelDB. Она поддерживает несколько реплик файлового сервера, которые будут автоматически синхронизироваться с некоторыми ограничениями. Подробнее читайте в [официальной документации SeaweedFS](https://github.com/seaweedfs/seaweedfs/wiki/Filer-Store-Replication).  
  
При наличии ограничений или при большом количестве реплик файлового сервера рекомендуем использовать внешнее хранилище данных, например PostgreSQL или MySQL.   
  
Рассмотрим, как настроить такое внешнее хранилище в PostgreSQL. Создайте базу данных в PostgreSQL и свяжите конфигурацию с компонентом filer: `/opt/seaweedfs/filer.toml`. Пример:

````
\#/etc/seaweedfs/filer.toml  
\[leveldb2\]  
enabled = false  
\[postgres2\]  
enabled = true  
createTable = """  
  CREATE TABLE IF NOT EXISTS "%s" (  
    dirhash   BIGINT,  
    name      VARCHAR(65535),  
    directory VARCHAR(65535),  
    meta      bytea,  
    PRIMARY KEY (dirhash, name)  
  )  
"""  
hostname = "hostname"  
port = 5432  
username = "username"  
password = "password"  
database = "database"  
scheme = "scheme"   
sslmode = "disable"

````


4. Создайте файл `docker-compose.yml` на всех серверах.

Пример конфигураций для первого сервера

````
version: "3.9"  
services:  
  master:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      master   
      -garbageThreshold=0.3   
      -volumeSizeLimitMB=1024   
      -ip=192.168.1.101  
      -defaultReplication=010  
      -peers=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333   
      -ip.bind=0.0.0.0  
    ports:  
      - "9333:9333"  
      - "19333:19333"  
    volumes:  
      - /opt/seaweedfs/data/master:/data  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"  
      interval: 30s  
      timeout: 10s  
      retries: 3  
  volume:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      volume  
      -fileSizeLimitMB=1024  
      -mserver=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.101  
      -ip.bind=0.0.0.0  
      -dir=/data  
      -dataCenter=dc1  
      -rack=rack1  
    ports:  
      - "8080:8080"  
      - "18080:18080"  
    depends\_on:  
      - master  
    volumes:  
      -  /opt/seaweedfs/data/volume:/data  
    restart: unless-stopped  
  filer:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      filer  
      -defaultReplicaPlacement=010  
      -master=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.101  
      -ip.bind=0.0.0.0  
      -s3  
      -s3.config=/etc/seaweedfs/s3.json  
      -s3.port=8333  
    ports:  
      - "8888:8888"  
      - "8333:8333"  
      - "18888:18888"  
    depends\_on:  
      - master  
      - volume  
    volumes:  
      - /opt/seaweedfs/data/filer:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
     - /opt/seaweedfs/filer.toml:/etc/seaweedfs/filer.toml:ro  
    restart: unless-stopped  
  worker:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      worker   
      -admin=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
    depends\_on:  
    - master

````




Пример конфигураций для второго сервера

````
version: "3.9"  
services:  
  master:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      master   
      -garbageThreshold=0.3   
      -volumeSizeLimitMB=1024   
      -ip=192.168.1.102  
      -defaultReplication=010  
      -peers=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333   
      -ip.bind=0.0.0.0  
    ports:  
      - "9333:9333"  
      - "19333:19333"  
    volumes:  
      - /opt/seaweedfs/data/master:/data  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"  
      interval: 30s  
      timeout: 10s  
      retries: 3  
  volume:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      volume  
      -fileSizeLimitMB=1024  
      -mserver=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.102  
      -ip.bind=0.0.0.0  
      -dir=/data  
      -dataCenter=dc1  
      -rack=rack2  
    ports:  
      - "8080:8080"  
      - "18080:18080"  
    depends\_on:  
      - master  
    volumes:  
      -  /opt/seaweedfs/data/volume:/data  
    restart: unless-stopped  
  filer:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      filer  
      -defaultReplicaPlacement=010  
      -master=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.102  
      -ip.bind=0.0.0.0  
      -s3  
      -s3.config=/etc/seaweedfs/s3.json  
      -s3.port=8333  
    ports:  
      - "8888:8888"  
      - "8333:8333"  
      - "18888:18888"  
    depends\_on:  
      - master  
      - volume  
    volumes:  
      - /opt/seaweedfs/data/filer:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
     - /opt/seaweedfs/filer.toml:/etc/seaweedfs/filer.toml:ro  
    restart: unless-stopped  
  worker:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      worker   
      -admin=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
    depends\_on:  
    - master

````




Пример конфигураций для третьего сервера

````
version: "3.9"  
services:  
  master:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      master   
      -garbageThreshold=0.3   
      -volumeSizeLimitMB=1024   
      -ip=192.168.1.103  
      -defaultReplication=010  
      -peers=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333   
      -ip.bind=0.0.0.0  
    ports:  
      - "9333:9333"  
      - "19333:19333"  
    volumes:  
      - /opt/seaweedfs/data/master:/data  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"  
      interval: 30s  
      timeout: 10s  
      retries: 3  
  volume:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      volume  
      -fileSizeLimitMB=1024  
      -mserver=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.103  
      -ip.bind=0.0.0.0  
      -dir=/data  
      -dataCenter=dc1  
      -rack=rack3  
    ports:  
      - "8080:8080"  
      - "18080:18080"  
    depends\_on:  
      - master  
    volumes:  
      -  /opt/seaweedfs/data/volume:/data  
    restart: unless-stopped  
  filer:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      filer  
      -defaultReplicaPlacement=010  
      -master=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.103  
      -ip.bind=0.0.0.0  
      -s3  
      -s3.config=/etc/seaweedfs/s3.json  
      -s3.port=8333  
    ports:  
      - "8888:8888"  
      - "8333:8333"  
      - "18888:18888"  
    depends\_on:  
      - master  
      - volume  
    volumes:  
      - /opt/seaweedfs/data/filer:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
     - /opt/seaweedfs/filer.toml:/etc/seaweedfs/filer.toml:ro  
    restart: unless-stopped  
  worker:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      worker   
      -admin=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
    depends\_on:  
    - master

````




### Шаг 4. Настройка включения TLS в SeaweedFS 

Для включения поддержки TLS в SeaweedFS на каждом сервере:

1. Сохраните файл сертификата и файл закрытого ключа в каталоге `/opt/seaweedfs/ssl`.

2. Переименуйте файл сертификата сервера в `cert.pem`.

3. Переименуйте файл закрытого ключа в `key.pem`.

4. При использовании самоподписанных сертификатов сохраните файл корневого CA в каталоге `/opt/seaweedfs/certs`.

5. Подготовьте файл настроек безопасности `security.toml`:

````
\[jwt.signing\]  
key = "MASTERVOLUMESECRET"  
\[jwt.filer\_signing\]  
key = "FILERSECRET"  
\[grpc\]  
ca = "/etc/seaweedfs/certs/ca.pem"  
\[grpc.master\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
\[grpc.volume\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
\[grpc.filer\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
\[grpc.client\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
\[https.client\]  
enabled = true  
ca = "/etc/seaweedfs/certs/ca.pem"  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
\[https.volume\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
ca = "/etc/seaweedfs/certs/ca.pem"  
\[https.master\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
ca = "/etc/seaweedfs/certs/ca.pem"  
\[https.filer\]  
cert = "/etc/seaweedfs/certs/cert.pem"  
key = "/etc/seaweedfs/certs/key.pem"  
ca = "/etc/seaweedfs/certs/ca.pem"

````


Пример конфигураций для первого сервера c TLS

````
version: "3.9"  
services:  
  master:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      master   
      -garbageThreshold=0.3   
      -volumeSizeLimitMB=1024   
      -ip=192.168.1.101  
      -defaultReplication=010  
      -peers=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333   
      -ip.bind=0.0.0.0  
    ports:  
      - "9333:9333"  
      - "19333:19333"  
    volumes:  
      - /opt/seaweedfs/data/master:/data  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"  
      interval: 30s  
      timeout: 10s  
      retries: 3  
  volume:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      volume  
      -fileSizeLimitMB=1024  
      -mserver=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.101  
      -ip.bind=0.0.0.0  
      -dir=/data  
    ports:  
      - "8080:8080"  
      - "18080:18080"  
    depends\_on:  
      - master  
    volumes:  
      -  /opt/seaweedfs/data/volume:/data  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
    restart: unless-stopped  
  filer:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      filer  
      -defaultReplicaPlacement=010  
      -master=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.101  
      -ip.bind=0.0.0.0  
      -s3  
      -s3.config=/etc/seaweedfs/s3.json  
      -s3.port.https=8334  
      -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:  
      - "8888:8888"  
      - "8334:8334"  
      - "18888:18888"  
    depends\_on:  
      - master  
      - volume  
    volumes:  
      - /opt/seaweedfs/data/filer:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
     - /opt/seaweedfs/filer.toml:/etc/seaweedfs/filer.toml:ro  
    restart: unless-stopped  
  worker:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      worker   
      -admin=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
    depends\_on:  
    - master  
    volumes:  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro

````




Пример конфигураций для второго сервера c TLS

````
version: "3.9"  
services:  
  master:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      master   
      -garbageThreshold=0.3   
      -volumeSizeLimitMB=1024   
      -ip=192.168.1.102  
      -defaultReplication=010  
      -peers=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333   
      -ip.bind=0.0.0.0  
    ports:  
      - "9333:9333"  
      - "19333:19333"  
    volumes:  
      - /opt/seaweedfs/data/master:/data  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"  
      interval: 30s  
      timeout: 10s  
      retries: 3  
  volume:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      volume  
      -fileSizeLimitMB=1024  
      -mserver=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.102  
      -ip.bind=0.0.0.0  
      -dir=/data  
    ports:  
      - "8080:8080"  
      - "18080:18080"  
    depends\_on:  
      - master  
    volumes:  
      -  /opt/seaweedfs/data/volume:/data  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
    restart: unless-stopped  
  filer:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      filer  
      -defaultReplicaPlacement=010  
      -master=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.102  
      -ip.bind=0.0.0.0  
      -s3  
      -s3.config=/etc/seaweedfs/s3.json  
      -s3.port.https=8334  
      -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:  
      - "8888:8888"  
      - "8334:8334"  
      - "18888:18888"  
    depends\_on:  
      - master  
      - volume  
    volumes:  
      - /opt/seaweedfs/data/filer:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
     - /opt/seaweedfs/filer.toml:/etc/seaweedfs/filer.toml:ro  
    restart: unless-stopped

````




Пример конфигураций для третьего сервера c TLS

````
version: "3.9"  
services:  
  master:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      master   
      -garbageThreshold=0.3   
      -volumeSizeLimitMB=1024   
      -ip=192.168.1.103  
      -defaultReplication=010  
      -peers=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333   
      -ip.bind=0.0.0.0  
    ports:  
      - "9333:9333"  
      - "19333:19333"  
    volumes:  
      - /opt/seaweedfs/data/master:/data  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
    restart: unless-stopped  
    healthcheck:  
      test: \["CMD", "curl", "-f", "http://localhost:9333/cluster/status"  
      interval: 30s  
      timeout: 10s  
      retries: 3  
  volume:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      volume  
      -fileSizeLimitMB=1024  
      -mserver=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.103  
      -ip.bind=0.0.0.0  
      -dir=/data  
    ports:  
      - "8080:8080"  
      - "18080:18080"  
    depends\_on:  
      - master  
    volumes:  
      -  /opt/seaweedfs/data/volume:/data  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
    restart: unless-stopped  
  filer:  
    image: chrislusf/seaweedfs:4.06  
    command: >  
      filer  
      -defaultReplicaPlacement=010  
      -master=192.168.1.101:9333,192.168.1.102:9333,192.168.1.103:9333  
      -ip=192.168.1.103  
      -ip.bind=0.0.0.0  
      -s3  
      -s3.config=/etc/seaweedfs/s3.json  
      -s3.port.https=8334  
      -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:  
      - "8888:8888"  
      - "8334:8334"  
      - "18888:18888"  
    depends\_on:  
      - master  
      - volume  
    volumes:  
      - /opt/seaweedfs/data/filer:/data  
      - /opt/seaweedfs/s3.json:/etc/seaweedfs/s3.json:ro  
      - /opt/seaweedfs/certs:/etc/seaweedfs/certs:ro  
      - /opt/seaweedfs/security.toml:/etc/seaweedfs/security.toml:ro  
     - /opt/seaweedfs/filer.toml:/etc/seaweedfs/filer.toml:ro  
    restart: unless-stopped
````

````


### Шаг 5. Установка 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/

### ````
Шаг 6. Запуск сервиса SeaweedFS

Запустите манифест:

````
docker-compose -f docker-compose.yml up -d

### ````
Шаг 7. Настройка подключения к SeaweedFS

Создайте алиас для SeaweedFS:

````
/usr/local/bin/mc alias set seaweedfs http://seaweedfs.your\_domain:8333 elma365user SecretPassword

### ````
Шаг 8. Создание бакетов

**Важно**: наименование бакетов в 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), создайте бакеты:

1. **s3elmabot**;

2. **elmabot-temporary-files**;

3. **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

````




### Шаг 9. Конфигурация HAproxy

В рамках статьи пользовательский трафик приходит в HAproxy по подключению `seaweedfs.your\_domain:8333` и равномерно балансируется между серверами кластера SeaweedFS. Для этого выполните настройки согласно статье [«Конфигурация HAProxy для S3»](haproxy-s3-minio.md).

### Шаг 10. Подключение к 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`;

- в параметр `address` — порт подключения `seaweedfs.your\_domain:8334`.

