Так сложилась жизнь, что я повернут на бэкапах, считаю, что чем их больше, тем лучше. Бэкапы делаются между компами друг на друга, делается бэкап на внешний железный сервер арендуемый мной во Франции, делаются в амазоновское S3-хранилище, делается на гугл-драйв и яндекс-диск(само собой все внешние бэкапы шифрованы, что бы не возникало вопросов)
На днях, осматривая что лежит по углам, я понял, что из имеющегося можно сделать еще выделенный домашний сервер, который будет делать вид, что он — амазоновское хранилище.
У нас была Orange Pi R1 с экспаншен боард, коробка от Orico для подключения накопителя через USB, MicroSD от SanDisk для системы и хард на котором будут храниться бэкапы(вот на хард ссылки нет, он просто из запасов WDшка на 500 гигов).
Вот участники нашего развлечения, наш сервер
В качестве программной основы мы будем использовать 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(лично я использую Duplicati дома и duplicity на серверах).
Так как сервер работает у нас в локальной сети я не стал настраивать подключение через https, если вы настраиваете его на внешнем сервере и с использованием доменного имени, то самый простой способ — использовать Caddy для этих целей, в официальной доке minio вы можете найти пример конфига для Caddy.
Вот так дендрально-фекальным способом мы получили полноценный S3-совместимый сервер для хранения файлов
P.S. Если в комментах найдутся те, кто хочет узнать, как еще сделать на крайний случай наши бэкапы доступными через сеть Tor, то я дополню текст инструкцией для этого.
P.P.S Все команды указаны для выполнения из под рута, а не из под регулярного пользователя, если вы заходите под регулярным пользователем, то либо перед каждой командой добавляйте sudo, либо после захода выполните команду sudo su -, что бы получить рутовый шелл.
P.P.P.S Я постарался высмотреть при помощи LanguageTool ошибки, но если они закрались, то пишите в личку, я буду благодарен за исправление ошибок.