Домашний сервер на Docker - 1

Давно было желание прекратить экспериментировать на голом VPS, захламляя его остатками от убитых сервисов. Хотелось бы в пару кликов разворачивать и убивать сервисы. Думаю, уже догадались что при такой постановке вопроса нам нужен Docker. У меня уже были эксперименты по разворачиванию Docker’а на VPS и управлением с помощью portainer. Основными проблемами были:

  1. требовалось запоминать номер порта для доступа к контейнеру извне;
  2. настройка сертификатов (в каждом приложении приходилось искать возможность интеграции сертификата);
  3. ручной запуск каждого контейнера.

В случае с 3-ей проблемой решение нашлось достаточно быстро - научится использовать docker-compose! Уже неплохо, можно объединять контейнеры в отдельные сервисы. 1-я и 2-я проблемы решились применением обратного прокси-сервера Traefik.

В этом посте попробуем настроить VPS для управления Docker-контейнерами с учетом устранения вышеизложенных проблем. В дальнейшем разберем еще пару задач, которые встали передо мной во время использования такой сборки.

VPS

Я буду использовать VPS от уже проверенного временем и недорого Contabo, конкретно, мой любимый тарифный план VPS S. Желательно брать на год, так как меньшие сроки предполагают наличие Setup Fee, причем немаленькой относительно стоимости самой услуги.

За основу я взял Ubuntu 20.04 без дополнительного ПО/панелей. После регистрации и оплаты Вам на почту придет письмо с паролем от пользователя root. Для удобства и безопасности первым делом я копирую ssh-ключ на сервер, и отключаю возможность авторизации ssh по паролю, оставляя только вход по ключу. Менять порт не имею смысла, так как это лично мне приносит только неудобство, т.к. требуется запоминать порт, а вероятный злоумышленник и так найдет этот порт, “простучав” сервер.

ssh-copy-id -i .ssh/id_ed25519 root@s1.mydomain.com

При первом входе я всегда обновляю систему до актуального состояния и дополнительно устанавливаю удобные мне пакеты: vim (редактор), mc (файловый менеджер), htop (системный монитор), bmon (сетевой монитор), net-tools (набор сетевых утилит).

apt update && apt upgrade -y && apt install -y vim mc htop bmon net-tools

Также предлагаю для удобства сменить имя хоста

hostnamectl set-hostname s1.mydomain.com

и в соответствии с новым именем хоста внести изменение в файл /etc/hosts

После перезагрузки сервер готов к дальнейшей настройке.

HTTPS-сертификаты

Подробного описания не будет, т.к. уже подробно расписано в этом посте. Установлены сертификаты в поддиректорию одноименную с доменом директории certs в домашней директории пользователя root.

Docker

Вот и подошли к самому важному и интересному, что будет составлять фундамент системы - установка Docker. На этом этапе также ничего сложного нет. Можно воспользоваться официально документацией по установке Docker Engine на Ubuntu либо дальше следовать настоящему руководству.

Настройка репозитория

Сначала требуется установить дополнительные пакеты, которые помогут добавить в систему новый репозиторий.

apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

Добавим GPG-ключ для репозитория Docker.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

И добавим собственно сам репозиторий в список источников apt.

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

Установка Docker’а

Чтобы установить сам Docker требуется обновить библиотеку пакетов apt, куда был добавлен новый репозиторий и установить пакеты, которые нужны для работы.

apt update && apt install -y docker-ce docker-ce-cli containerd.io

Другие варианты установки, такие как установка конкретной версии докера либо ручная установка из пакета, можно найти в официальной документации.

Проверка установки

Стандартная процедура для проверки правильности установки/работы Docker это запустить образ, который выведет текстовую информацию и завершит работу.

docker run hello-world

Загрузка при старте

Чтобы быть уверенным, что Docker запуститься сам после перезагрузки сервера, требуется добавить Docker в автозагрузку. Большинство Linux дистрибутивов, включая Ubuntu, для этих целей используют systemd. Добавим Docker в автозагрузку

systemctl enable docker.service
systemctl enable containerd.service

На этом установка Docker завершена. Продолжение настройки сервера будет в следующей части.