![](https://habrastorage.org/getpro/habr/upload_files/d1e/e00/f05/d1ee00f05316fe78f02c67fc612f8d44.jpg)
Став счастливым обладателем 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 вручную, правда с небольшими ограничениями (об этом позже).
![Docker из пакета на Intel'овском Synology Docker из пакета на Intel'овском Synology](https://habrastorage.org/getpro/habr/upload_files/afc/0f0/a7a/afc0f0a7a1bf0d64b14d958d57e47e4f.png)
Для ручной установки сначала открываем SSH доступ к NAS в настройках DSM. Подключаемся по SSH, логинемся как root через sudo -i, и запускаем скрипт:
curl https://gist.githubusercontent.com/ta264/2b7fb6e6466b109b9bf9b0a1d91ebedc/raw/b76a28d25d0abd0d27a0c9afaefa0d499eb87d3d/get-docker.sh | sh
![Настройки SSH в DSM Настройки SSH в DSM](https://habrastorage.org/getpro/habr/upload_files/83e/472/db9/83e472db9039c1bacdd9b90cd454c908.png)
Скрипт устанавливает докер, прописывает конфиги, меняет рабочую директорию на подключенный 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 теперь ругается, что не хватает места для обновления системы.
![DSM Update после установки Docker DSM Update после установки Docker](https://habrastorage.org/getpro/habr/upload_files/622/f64/5f1/622f645f12fc4fef61ccd482b4ace42e.png)
Проект скопирован, можно собирать через docker-compose build
или docker build .
Процесс идет, но вот прошел уже час, а еще даже первый swift package из зависимостей не собрался.
![](https://habrastorage.org/getpro/habr/upload_files/a8f/c93/88e/a8fc9388ee983bf9f0f73671f6e30fdf.png)
Хотя и оперативка, и процессор загружены не полностью судя по мониторингу в DSM, но сборка идет ооочень медленно. Перезапуск также не помог. Причем 1 раз он подвис настолько, что пришлось из розетки дергать. Возможно все-таки дело в слабом железе, да и Synology рекомендуют не использовать их NAS как платформу для разработки. В целом это собирать прямо на устройстве и не обязательно, можно только запустить готовый image, а собрать и на Mac можно.
![Графики загруженности при сборке докером Графики загруженности при сборке докером](https://habrastorage.org/getpro/habr/upload_files/d33/dac/4bc/d33dac4bc7a38f17e2b62d41d97e864f.png)
Собираем 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 раза (на каждом роутере).
![Проброс портов на микротике Проброс портов на микротике](https://habrastorage.org/getpro/habr/upload_files/55b/5e0/378/55b5e0378fae1789cdd46db05884ce94.png)
Проверяем в Postman:
![](https://habrastorage.org/getpro/habr/upload_files/659/b10/a79/659b10a7922a03905aac17db2733d987.png)
Комментарии (3)
omaxx
28.11.2022 23:46TLDR: зайдите на nas по ssh и под рутом запустите скрипт, скачанный по какой-то мутной ссылке
SjoGi
И это вся статья? Просто как запустить Docker? Думал будет больше информации.
Flatout73 Автор
Ну это уже оказалось отдельным челленджом) А что еще было бы интересно узнать?