
Став счастливым обладателем NAS от Synology, я обнаружил, что Docker из коробки поддерживается только в дорогих версиях на Intel, а у меня дешевая на ARM. Но так как на нем стоит DSM на базе Linux, то все можно сделать вручную. Разбираемся как установить Docker и поднять на нем сервер, в моем случае на Swift и Vapor.
Вводные
Изначально я приобрел Mikrotik hAP ac3, чтобы можно было подключить к нему внешний HDD и поднять Time Machine. SMB протокол-то поддерживается в RouterOS, но time machine поверх него нет. Покурив форумы, из вариантов было перепрошить роутер на OpenWRT или купить NAS. Выбор пал на второй вариант с расчётом на то, что на нем еще и сервак можно будет свой дома поднять для пет-проектов. Раз все равно он всегда подключен к интернету и включен в розетку, зачем еще платить за отдельный хостинг?
Установка Docker на Synology
В итоге купил я Synology DS220j на базе ARM процессора. Можно было бы сразу взять на Intel, где уже есть готовый пакет для docker, но стоят они в 2 раза дороже. А так как на дешевых NAS стоит там тот же linux, то можно установить docker вручную, правда с небольшими ограничениями (об этом позже).

Для ручной установки сначала открываем SSH доступ к NAS в настройках DSM. Подключаемся по SSH, логинемся как root через sudo -i, и запускаем скрипт:
curl https://gist.githubusercontent.com/ta264/2b7fb6e6466b109b9bf9b0a1d91ebedc/raw/b76a28d25d0abd0d27a0c9afaefa0d499eb87d3d/get-docker.sh | sh

Скрипт устанавливает докер, прописывает конфиги, меняет рабочую директорию на подключенный HDD вместо системной памяти, создает группу пользователей и добавляет докер в автозапуск. Полную инструкцию можно найти на этой вики.
Из недостатков докера на арме - все контейнеры должны быть с параметром network_mode: host вместо нормального порт маппинга. Но похоже это можно решить скриптом на самом NAS. Тред с обсуждением проблемы.
Запуск докера
Vapor уже создает готовый шаблон для docker и docker-compose с поднятием бд. Соотвественно нужно просто перенести проект на NAS и сбилдить его. Для копирования проекта можно:
Установить git сервер из готовых пакетов на NAS. И скачать напрямую с удаленного репозитория (например, на github).
Использовать классические консольные утилиты вроде scp и rsync
Для Time Machine на NAS уже поднят SMB сервер, поэтому можно подключится к нему напрямую через finder на mac и скопировать проект.
Рекомендую копировать проект именно на подключенный к NAS HDD, а не на внутреннюю память, так как ее очень мало. И даже только после установки Docker'а DSM теперь ругается, что не хватает места для обновления системы.

Проект скопирован, можно собирать через docker-compose build
или docker build .
Процесс идет, но вот прошел уже час, а еще даже первый swift package из зависимостей не собрался.

Хотя и оперативка, и процессор загружены не полностью судя по мониторингу в DSM, но сборка идет ооочень медленно. Перезапуск также не помог. Причем 1 раз он подвис настолько, что пришлось из розетки дергать. Возможно все-таки дело в слабом железе, да и Synology рекомендуют не использовать их NAS как платформу для разработки. В целом это собирать прямо на устройстве и не обязательно, можно только запустить готовый image, а собрать и на Mac можно.

Собираем docker-compose build
и сохраняем на маке через:
docker save -o <path for generated tar file> <image name>
Копируем уже известными способами на NAS. И загружаем его в докер:
docker load -i <path to image tar file>
Запускаем docker-compose up
и вуаля!
Открываем порты на роутере
Сервер на локалке поднялcя, а теперь нужно открыть к нему доступ извне. Mikrotik похоже умеет в собственный ddns, так как до этого я поднимал vpn-server через quick config в mikrotik и он уже создал домен для меня. Соотвественно теперь нужно только пробросить порты.
Сейчас я живу в Сербии, и у местного провайдера интернет по DOCSIS, поэтому у меня сложная система из 2 роутеров: коаксильный кабель втыкается в провайдерский роутер, а микротик по патч-корду подключается уже к нему, поэтому порты пришлось пробрасывать 2 раза (на каждом роутере).

Проверяем в Postman:
