Приветствую тебя, уважаемый читатель!
Поздравляю с покупкой этого замечательного NAS, неплохая альтернатива D-Link в примерно той же ценовой категории.
С данным девайсом мне посчастливилось познакомиться благодаря одному моему хорошему товарищу, приспичило ему упростить доступ к файлам из разных операционок (linux/windows/mac), ну чтож сказал тогда я, идея хорошая, но распрашивать дальше не стал. Некоторое время приходит мне сообщение типа "не получается настроить докер, можешь глянуть?", я как большой любитель всяких нестандартных железок с радостью согласился.
И так, давайте начинать с начала, из плюсов:
- Возможность установить 2 полноразмерных жестких диска
- 4х ядерный процессор AL314 ARM Cortex-A15 CPU @ 1.70GHz
- Наличие 2x гигабитных Ethernet портов
- 3x USB порта, 1 - спереди, 2 - сзади
- Почти полноценный Linux inside (почти - потому что это не попсовый Debian или например CentOS, а самодельный QTS 4.3, благодаря busybox очень напоминающий OpenWRT)
- Веб-интерфейс - ну тут на самом деле очень на любителя, лично я предпочитаю делать всё через консоль (по ssh есссно), однако, без веб-морды почти нереально управлять установленным софтом
Из недостатков:
- Немного неадекватная система управления софтом - есть консольная версия qpkg_cli но она работает очень странно и иногда сегфолтится
- Нельзя установить Midnight Commander - в репозиториях его нет, в теории можно скачать портабельную версию под ARM процессоры, но не факт что будет работать
- Много чего невозможно настроить через веб-интерфейс, точнее можно настроить лишь то что предусмотренно разработчиком приложения
- Архитектура процессора - ARM, на мой взгляд устройство такого типа должно иметь на борту какой-нибудь Intel Atom например или AMD Zen, чтобы можно было установить нормальную операционку, а не огрызок под названием QTS, отсюда кстати и следующий недостаток
- Vendor lock - то есть зашить какой-нибудь Debian или FreeNAS (который к слову обладает гораздо большими возможностями) у вас скорее всего не получится
Если вас интересуют подробные технически характеристики сего девайса, то вот ссылочка.
В процессе изучения начинки выяснилось, что операционка не видит установленные 8Гб оперативной памяти, утилита free показала что в системе доступно всего 32мб оперативной памяти, тогда я подумал что с Docker могут возникнуть проблемы, но к счастью Docker демон увидел всю память, вероятно это какой-то глюк.
Давайте ставить Docker!
Установка Container Station
Я без понятия почему спецы из QNAS обозвали Docker не иначе как Container Station, возможно изначально планировалась поддержка других систем контейнеризации, например Rocker или Vagrant (который к слову не простой контейнер, а полноценная виртуальная машина).
Идём в “App Center” > “QTS Essentials”, там находим "Container Station", затем жмём “Add To QTS”. Операционка сама запустит загрузку необходимых утилит среди которых будет Docker и Docker-Compose, так что больше ни о чём беспокоиться не нужно.
Далее логинимся к девайсу через SSH, на винде я обычно использую Putty, а в нормальных операционках уже есть встроенный SSH клиент.
Настройка Docker для работы через командную строку
Увы и ах, "из коробки" Docker на данном чудо девайсе не работает, нужно немного "подшаманить" переменные окружения, для этого добавим в файл /etc/profile (йоу?) пару строк:
cat << EOL >> /etc/profile export PATH=/share/CACHEDEV1_DATA/.qpkg/container-station/bin:$PATH export DOCKER_HOST=unix:///var/run/system-docker.sock EOL
Перелогиниваемся через SSH и вуаля, стали доступны команды типа docker, docker-compose, можно кстати не перелогиниваться, а просто выполнить чтение конфигурации из файла:
source /etc/profile
Теперь давайте поподробнее, что эти переменные окружения означают:
- DOCKER_HOST - Полный путь к сокету через который утилита docker будет будет взаимодействовать с Docker демоном
- PATH - Полный путь к директории в которой находятся исполняемые утилиты для работы с Docker, а так же сам демон
Так как QTS это огрызок полноценного Linux дистрибутива, то и реализованные в нём решения по управлению приложениями имеют промежуточное состояние между "собери сам" и "традиционный установочный пакет". Иными словами, если в нормальном дистрибутиве пакеты распаковываются в системные пути типа /usr, /usr/local или например /opt в этой поделке всё сваливается в директорию /share/CACHEDEV1_DATA/.qpkg.
Без понятия почему разработчики реализовали это именно ТАК, наверно захотелось сделать "не как у всех" или "максимально несовместимо", чтобы мешать пользователям (и другим разработчикам) свободно менять платформу и не зависить от производителя (vendor lock, ага).
Проверим работоспособность
Обычно я проверяю работоспособность Docker при помощи:
docker info
В ответ данная команда должна выдать примерно следующее:
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.09.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0 runc version: 3f2f8b84a77f73d38244dd690525642a72156c64 init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 4.2.8 Operating System: QTS 4.3.5 (20180914) OSType: linux Architecture: armv7l CPUs: 4 Total Memory: 7.908GiB Name: xxx ID: xxx Docker Root Dir: /share/CACHEDEV1_DATA/.qpkg/container-station/system-docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 19 Goroutines: 29 System Time: 2018-09-23T01:20:00.7914074+02:00 EventsListeners: 1 Registry: https://index.docker.io/v1/ Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: No kernel memory limit support
Всё пояснять не буду, остановимся на главном:
- Server Version: 17.09.1-ce - Это версия установленного Docker сервера
- Total Memory: 7.908GiB - Вся видимая демоном оперативка
- Docker Root Dir: /share/CACHEDEV1_DATA/.qpkg/container-station/system-docker - Полный путь к директории в которую буду распоковываться образы, а так же храниться оверлеи
Важно: На ARM процессоре получится использовать контейнеры которые собраны специально под эту архитектуру, любые другие скорее всего работать не будут.
Как пользоваться
Прежде чем начать рекомендую обратить внимание на данный список репозиториев, это проект был создан специально для тех кто хочет использовать Docker на железках с ARM процессором (спойлер: по умолчанию контейнеры Docker собираются под amd64 системы).
Давайте теперь проверим работоспособность на каком-нибудь реальном примере, для этого предлагаю создать фай docker-compose.yml со следующим содержимым:
version: '3.4' services: db: image: hypriot/rpi-mysql command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW restart: unless-stopped ports: - 127.0.0.1:3306:3306 volumes: - /share/CACHEDEV1_DATA/Docker-Volumes/nextcloud/mariadb:/var/lib/mysql env_file: - db.env app: image: arm32v7/nextcloud:apache restart: unless-stopped volumes: - /share/CACHEDEV1_DATA/Docker-Volumes/nextcloud/data:/var/www/html/data environment: - MYSQL_HOST=db env_file: - db.env nginx: image: arm32v7/nginx ports: - 8888:80 restart: unless-stopped
Сохраняем, далее запускаем контейнеры:
docker-compose up -d
Некоторое время пошуршав контейнеры запускаются и вы теперь можете подключиться к 8888-му порту на ваше NAS, там будет дефолтное сообщение от NGINX, вероятно вам портебуется настроит его, но это уже совсем другая история...
Послесловие
Как видно из статьи сложности возникли только в одном месте, а именно в настройке переменных окружения, всё остальное конфигурится примерно так же как и на любом другом сервере (с поправкой на ARM конечно же).
А на этом всё, напомню что в Discord есть сообщество программистов, в котором я принимаю активное участие, поэтому если у вас возникнут вопросы, обращайтесь, не стесняйтесь, ну или в Twitter @EvilFreelancer например.
Удачной настройки, котаны 😉