Docker сервер на Raspberry Pi
Долгое время у меня копился этот материал, в нём я структурировал знания по администрированию Linux и работе с Docker. Хотел захостить простые задачи на Raspberry Pi. Мой личный опыт в настройке небольшого и функционального сервера.
С февраля 2020 года я активно знакомился с одноплатниками, приложениями Linux, многообразием протоколов, с помощью которых смогу реализовать взаимодействие устройств, а в августе 2022 года плотно занялся Docker. Я уже делал одну попытку настройки связки Docker + Raspberry Pi
, но тогда не хватило опыта и времени. Теперь кратко опишу этапы настройки такого сервера на Raspberry Pi 3
.
Ядро
Установка
- На
DigitalOcean
очень много статей по настройке и администрированию - Операционная система
Ubuntu
дляRaspberry Pi
устанавливается через Raspberry Pi Imager на SD карту - Перед установкой SD карты, в файловой системе можно прописать Wi-Fi беспроводной сети и включить SSH.
- Настроку также можно выполнить после запуска системы, тогда придётся подключать клавиатуру и монитор. Команду
sudo raspi-config
поможет произвести те же настройки Wi-Fi и SSH
Также желательно по sudo raspi-config
перенастроить
hostname
по которому можно будет обращаться в сети, например,server
илиserver.local
- Подключаться стоит через
ssh
, а узнать айпишник можно командойhostname -I
- Изменить пароль для рутового пользователя
passwd
- (?) Установить время бездействия пользователя для логаута
- Настройка входа без пароля по ключу
ssh
осуществляется генерацией ключа на клиентеssh-keygen
и выполнениемssh-copy-id <user>@<host>
. В этом случае публичный ключ пропишется в файл/~/.ssh/authorized_keys
, но можно и самостоятельно прописать публичный ключ в этот файл.
Если нужно избежать выключение сервера при отключении внешнего питания, для Raspberry Pi есть шилд питания
Далее устанавливается поэтапно нижеперечисленное ПО. Докер служит для контейнеризации, изоляции и оркестрации контейнеров.
Docker
Для Ubuntu
нужно воспользоваться статьёй на Docker и уже устаревшей статьёй на Digital Ocean.
Кратко
sudo apt update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
apt-cache policy docker-ce
- если находится кандидат, то репозиторий установлен корректноsudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker устанавливается для Raspberri Pi OS
командой
sudo curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
Чтобы убедиться, что докер работает, вызываем docker -v
, будет выведена версия установленного ПО.
Но для скачивания образа нужно будет каждый раз вызывать sudo
. Для ввода команд без sudo
, добавляем группу docker и добавляем в неё текущего пользователя.
sudo gpasswd -a $USER docker
- добавление текущего пользователя в группуdocker
newgrp docker
- после этого получится подключаться к Docker daemon
Для некоторых контейнеров нужно создавать volumes
, я создаю в /opt/service-name
папки container-name
.
Для каждого контейнера задаётся имя, restart policy, порт, том, образ. Командную строку я привожу для каждого контейнера. А изоляции по сети я не делаю.
Organizr
Основная точка входа. Инструмент, который часто используется, когда всё сервисы настроены, он будет на 80
порту.
docker run --name organizr -d --restart always \
-p 80:80 \
-p 443:443 \
-v /opt/qshZone/other/organizr:/config \
organizr/organizr
Настройка
- Название БД:
SomeDb
- Расположение БД:
/config/db
Portainer
docker run --name portainer -d --restart always \
-p 8080:9443 \
-v /opt/qshZone/other/portainer:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer-ce
Watchtower
Автоматизация обновления запущенных контейнеров, скачивает новые образы и перезапускает контейнеры с теми же параметрами.
docker run --name watchtower -d --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--interval 86400
Полезное ПО
PiHole
Блокировка рекламы на уровне DNS, что-то типа AdBlock, но не для отдельного устройства, а для всей сети. Если есть роутер Mikrotik, то логичнее всего запускать контейнер прямо на роутере, а не на отдельном сервере.
pihole/pihole
Dynamic DNS
Иногда нет возможности получить «белый» статический ip-адрес, динамический ip-адрес можно привязать к доменному имени бесплатно.
- Noip
coppit/no-ip
This is a simple Docker container for running the No-IP2 dynamic DNS update script. It will keep your domain.ddns.net DNS alias up-to-date as your home IP changes. - DuckDNS Получение динамического адреса
Логирование syslog
Логи syslog принимает, например, от Mikrotik, от Linux.
GrayLog
- хороший инструмент, умеет реагировать на приходящие записи. Он работает в связке сElastic Search
иMongo
- это очень тяжёлая связка дляRPi
.syslog-ng
- тоже неплохой и распространённый инструментbalabit/syslog-ng
- ??? syslog можно завязать микротик
Мониторинг состояния
Telegraf
Для запуска Телеграф необходим запущенный контейнер influxdb
(запускаю его в разделе БД).
docker run --name telegraf -d --restart always \
-v /opt/qshZone/soft/telegraf.conf:/etc/telegraf/telegraf.conf:ro
--net=container:influxdb \
telegraf
Медиа
- FreshRss -
freshrss/freshrss
Demo
Torrents
- jackett (indexer для поиска в торрентах)
- bazarr (закачивает сабы для видео)
- sonar (библиотека сериалов, передает в Transmission закачку)
- Мониторинг
radarr
- Jellyfin
- Deluge
- PhotoPrism
Transmission
linuxserver/transmission
Webui is on port 9091, the settings.json file in /config has extra settings not available in the webui. Stop the container before editing it or any changes won’t be saved.
Samba and DLNA
Обмен файлами и стриминг видео.
Plex
linuxserver/plex
TvHeadend
IP webcamera
AirPlay streaming
shairport-sync
https://hub.docker.com/r/kevineye/shairport-sync shairport-sync https://discourse.osmc.tv/t/airplay-audio-server/20294 Можно установить в OSMC Стриминг на AirPlay для Windows http://www.tuneblade.com/
Касты
- https://castbox.fm/
- podcasts.google.com
NAS
- OpenMediaVault -
ikogan/openmediavault
- FreeNAS
- NextCloud - nextcloud, хранилище файлов, типа dropbox,
nextcloud
Разное
Development
- Grafana - grafana/grafana
- PostgreSQL - postgres
- RabbitMQ - rabbitmq
- Телеграф - telegraf, is an agent for collecting metrics and writing them to InfluxDB or other outputs.
VPN
Зона свободного интернета: VPN, направлять через VPN отдельные сайты
- VPN digitalocean.com
- Аруба cloud норм хостер в италии $3.5-5 за 2гб оперы и несколько терабайт трафика, за $1-2 можно самую дешевую виртуалку взять
Базы данных
Mongo
Начиная с Mongo 5 нужна архитектура arm64/v8.2+, у RPi 3 архитектура arm64/v8 - этого не достаточно для 5 версии. Поэтому нужно использовать версию 4+, она будет поддерживаться до февраля 2024 года.
docker run --name mongo -d --restart always \
-p 27017:27017 \
-e MONGO_INITDB_DATABASE=qshZone \
-e MONGO_INITDB_ROOT_USERNAME=quash \
-e MONGO_INITDB_ROOT_PASSWORD=my-secret-pw \
-v /mnt/hdd/mongodb:/data/db \
-v /opt/qshZone/soft/mongodb:/data/configdb \
mongo:4.4.24
MariaDb
Самый популярный форк MySQL
, который был основан основателями MySQL.
Для установки пароля рута, при первом запуске нужен параметр -e MARIADB_ROOT_PASSWORD=my-secret-pw
.
docker run --name mariadb -d --restart always \
-p 8081:80 \
-p 3306:3306 \
-v /mnt/hdd/mariadb:/var/lib/mysql \
-v /opt/qshZone/soft/mariadb/mysqld:/var/run/mysqld \
-v /opt/qshZone/soft/mariadb/config:/etc/mysql/conf.d \
mariadb
InfluxDb
docker run --name influxdb -d --restart always \
-p 8086:8086 \
-v /mnt/hdd/influxdb:/var/lib/influxdb \
-v /opt/qshZone/soft/influxdb:/etc/influxdb \
influxdb:1.8
Домашняя автоматизация
MQTT
Mosquitto - можно установить в виде аддона в hass.io, так он будет попадать в бекап Установить анонимное подключение или пользователем, включить прослушиваемый порт Приложение по отправке сообщений неплохое под разные системы https://mqttx.app/ Docs https://www.hivemq.com/mqtt-essentials/ Приложение под iOS, чтобы рисовать графики
docker run --name mqtt -d --restart always \
-p 1883:1883 \
-p 9001:9001 \
-v /opt/qshZone/soft/mosquitto/config:/mosquitto/config \
-v /opt/qshZone/soft/mosquitto/data:/mosquitto/data \
-v /opt/qshZone/soft/mosquitto/log:/mosquitto/log \
eclipse-mosquitto
Node Red
Довольно тяжёлая штука, позволяет работать с mqtt, получать сообщения и реагировать на них. Имеет удобный графический интерфейс.
docker run --name nodered -d --restart always \
-p 1880:1880 \
-v /opt/qshZone/soft/nodered:/data \
nodered/node-red
Smart Home
Наиболее попопулярные решения на сегодняшний день
Home Assistant
OpenHab 3
-openhab/openhab
Majordomo
Domoticz
GladysAssistant