Домашний S3-совместимый бэкап-сервер из подручных материалов


Домашний S3-совместимый бэкап-сервер из подручных материалов

Так сложилась жизнь, что я повернут на бэкапах, считаю, что чем их больше, тем лучше. Бэкапы делаются между компами друг на друга, делается бэкап на внешний железный сервер арендуемый мной во Франции, делаются в амазоновское S3-хранилище, делается на гугл-драйв и яндекс-диск(само собой все внешние бэкапы шифрованы, что бы не возникало вопросов)

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

У нас была Orange Pi R1 с экспаншен боард, коробка от Orico для подключения накопителя через USB, MicroSD от SanDisk для системы и хард на котором будут храниться бэкапы(вот на хард ссылки нет, он просто из запасов WDшка на 500 гигов).

Вот участники нашего развлечения, наш сервер
Домашний S3-совместимый бэкап-сервер из подручных материалов

В качестве программной основы мы будем использовать Armbian GNU/Linux(сборка Ubuntu GNU/Linux, в моем случае, но если заменить на сборку Debian GNU/Linux, то ничего не поменяется, вообще), а в качестве S3-хранилища у нас будет выступать minio(сборка под ARM)

Для начала скачиваем образ Armbian для нашей платы и распаковываем его

cd `mktemp -d`

wget https://dl.armbian.com/orangepi-r1/Ubuntu_bionic_next.7z
7z x Ubuntu_bionic_next.7z

вы можете у себя в ОС использовать более удобный для вас способ скачки и распаковки.

Теперь нам надо его залить на нашу MicroSD. Официально предлагаемый способ это использовать Etcher, он есть под все основные платформы, так что берите под свою и запускайте. Тут ничего объяснять не нужно, все делается мышкой, там все очевидно. Выбираете файл образа скачанного и распакованного, выбираете флешку на которую заливать, нажимаете на кнопку заливки.

Теперь втыкаем флешку в нашу Апельсинку, втыкаем в Апельсинку сетевой шнурок и даем ей питание в microUSB. По дефолту Armbian получает IP-адрес по DHCP, так что идем в веб-морду своего роутера и смотрим выданный адрес, что бы зайти туда по ssh.

Дефолтные логин-пароль root-1234, при первом заходе нам будет предложено сменить рутовый пароль, создать регулярного пользователя и задать ему пароль.

Вставляем наш хард в коробочку, а хвост USBшный коробочки в USB-порт Апельсинки. Заходим на Апельсинку по ssh, заглядываем в dmesg, что бы посмотреть имя устройства назначенное системой харду

dmesg -T

, видим там что-то типа sda(sdb,sdc). Переразбиваем диск

cfdisk /dev/sda

, удаляем все что есть, создаем единственный раздел и задаем ему тип 82(Linux). Форматируем созданный раздел

mkfs.ext4 -m0.1 /dev/sda1

. Смотрим UUID созданного раздела, что бы прописать его автоматическое подключение в /etc/fstab

blkid|grep sda1

, видим там что-то типа

UUID="b7388609-601a-45e6-a8fb-274cda0c2057"

, открываем файл /etc/fstab в любимом редакторе

nano /etc/fstab

и добавляем строчку

UUID=b7388609-601a-45e6-a8fb-274cda0c2057 /data ext4    errors=remount-ro       0       0

, сохраняем файл и выходим.

Создаем директорию /data, куда будет подключаться наш внешний диск и там поддиректорию где у нас будет наше хранилище держать свои файлы

mkdir -p /data/minio

Теперь нам надо собственно поставить и настроить minio

wget https://dl.minio.io/server/minio/release/linux-arm/minio

chmod +x ./minio
mv minio /usr/local/bin
useradd -r minio-user -s /sbin/nologin
chown minio-user:minio-user /data/minio
mkdir /etc/minio
chown minio-user:minio-user /etc/minio
nano /etc/default/minio

В /etc/default/minio прописываем

MINIO_VOLUMES="/data/minio/"

MINIO_OPTS="-C /etc/minio --address :9000"

Теперь нам нужно обеспечить старт minio при ребуте нашего чудо-сервера.

curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

mv minio.service /etc/systemd/system
systemctl daemon-reload
systemctl enable minio
systemctl start minio

Если мы нигде не ошиблись, то все запустилось и теперь на

http://XX.XX.XX.XX:9000

(где XX.XX.XX.XX — IP-адрес нашего сервера в нашей внутренней сети) у нас работает S3-совместимое хранилище. Командой

cat /etc/minio/config.json |grep Key

мы можем посмотреть accessKey и secretKey которые необходимы и для захода в веб-морду, и для подключения S3-клиентами.

Скриншот того, что вы увидите
Домашний S3-совместимый бэкап-сервер из подручных материалов

Собственно все. У нас в локальной сети работает полноценное S3-совместимое хранилище, на которое мы можем наладить бэкапы любым ПО умеющим работать с S3(лично я использую Duplicati дома и duplicity на серверах).

Так как сервер работает у нас в локальной сети я не стал настраивать подключение через https, если вы настраиваете его на внешнем сервере и с использованием доменного имени, то самый простой способ — использовать Caddy для этих целей, в официальной доке minio вы можете найти пример конфига для Caddy.

Вот так дендрально-фекальным способом мы получили полноценный S3-совместимый сервер для хранения файлов

P.S. Если в комментах найдутся те, кто хочет узнать, как еще сделать на крайний случай наши бэкапы доступными через сеть Tor, то я дополню текст инструкцией для этого.

P.P.S Все команды указаны для выполнения из под рута, а не из под регулярного пользователя, если вы заходите под регулярным пользователем, то либо перед каждой командой добавляйте sudo, либо после захода выполните команду sudo su -, что бы получить рутовый шелл.

P.P.P.S Я постарался высмотреть при помощи LanguageTool ошибки, но если они закрались, то пишите в личку, я буду благодарен за исправление ошибок.

Оцените статью