Предисловие

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

Введение

Пару недель назад (в мае 2022) я почти случайно нашел в своей квартире старый ноутбук, который только пылился: Lenovo Thinkpad T440s, который я купил в 2014 году.

Характеристики:

  • Intel® Core™ i7

  • 8 GB DDR3L-SDRAM

  • 256 GB SSD

Он выглядит как хороший кандидат на всегда доступный сервер; машина, к которой я мог подключиться в любое время и установить любое серверное программное обеспечение, которое могло мне понадобиться при разработке приложений.

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

Важно!

Прежде чем начать, убедитесь, что у вас есть резервная копия всех важных файлов, которые вы хотите сохранить. Лучше перестраховаться, чем потом сожалеть! Для перемещения файлов используйте внешний диск или облачного провайдера, такого как Google Drive или Dropbox. Или, если они уже настроены, переместите файлы со старого ноутбука на более новый, используя вашу локальную сеть.

В зависимости от того, как вы планируете использовать ноутбук, вы можете зашифровать его содержимое или безопасно стереть конфиденциальные данные с помощью таких программ, как File Shredder или Eraser.

Ставим серверную ОС

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

Вот лишь некоторые из них:

Обязательно используйте ту, которая соответствует вашим требованиям. Например, убедитесь, что ПО, которое вы хотите установить на сервер, совместимо с операционной системой. Я выбрал Ubuntu Server, которая, на мой взгляд, самая простая в установке и использовании. Я не буду вдаваться в подробности о том, как её установить. Вы можете найти множество онлайн-ресурсов, которые подробно объясняют это.

Устанавливаем статический IP-адрес

Важно!

Вы можете установить avahi-daemon, чтобы сделать компьютер видимым по имени хоста без необходимости настраивать статический IP-адрес. Это также делает имя хоста видимым для всех других устройств в сети без необходимости добавлять запись в каждый файл /etc/hosts. Просто выполните следующую команду на сервере:

sudo apt-get install avahi-daemon

Еще одно открытие. SSH-соединения были мучительно медленными. Я исправил это, отключив функцию энергосбережения Wi-Fi следующим образом:

sudo apt install iw
sudo iw wlp3s0 set power_save off

Чтобы запускать это автоматически при загрузке компьютера, вы можете использовать crontab:

sudo crontab -e
@reboot iw wlp3s0 set power_save off

Переходим к настройке.

При настройке сетевого подключения задайте статический IP-адрес, чтобы вы могли подключаться к серверу с других компьютеров (например, с вашего основного ПК). В Ubuntu Server вы можете сделать это после процесса установки, изменив файл /etc/netplan/00-installer-config-wifi.yaml файл следующим образом:

network:
  version: 2
  wifis:
    wlp3s0:
      access-points:
        YOUR_WIFI_CONNECTION_NAME:
          password: YOUR_WIFI_PASSWORD
      dhcp4: false
      addresses: [192.168.1.200/24]
      routes:
        - to: default
          via: 192.168.1.1

Используйте название Wi-Fi подключения, пароль и шлюз. В приведенном выше примере я присвоил статический IP-адрес 192.168.1.200. Вы можете перезагрузить конфигурацию с помощью:

sudo netplan apply

Отключение режима сна при закрытой крышке

Вероятно, вы хотите, чтобы ваш сервер продолжал работать даже при закрытой крышке. Чтобы перевести Ubuntu Server в спящий режим или перейти в приостановленный режим, отредактируйте файл /etc/systemd/logind.conf следующим образом. Убедитесь, что следующие строки не закомментированы и что их значения соответствуют указанным:

HandleLidSwitch=lock
LidSwitchIgnoreInhibited=no

Сделано! Закройте крышку и разместите сервер в любом месте вашего дома, где вы захотите. Что касается меня, то я просто поставил его в угол своего офиса:

Подключение к серверу через SSH

Теперь вы можете через свой основной ПК подключиться к серверу по SSH, используя что-то вроде:

ssh alejandro@192.168.1.200

Укажите пользователя, которого вы создали при установке Ubuntu Server, вместо моего имени.

Несмотря на то, что вы можете использовать IP-адрес для подключения к серверу, вы можете настроить имя хоста на вашем компьютере, которое соответствует IP-адресу сервера. Просто добавьте запись в файл /etc/hosts на Linux-подобных машинах или c:\Windows\System32\drivers\etc\hosts в Windows:

192.168.1.200 thinkpad.local

Укажите IP-адрес вашего сервера и используйте любое имя хоста, которое вам удобно. Рекомендуется добавлять .local в конце, чтобы помнить, что имя хоста является локальным для вашей сети. В macOS вам также придется добавить IPv6-адрес, если вы хотите избежать длительных поисков DNS, которые замедляют процесс подключения. Например:

fe80::2ab2:bdff:fea2:17dc thinkpad.local

Теперь вы можете подключиться к серверу, используя что-то вроде:

ssh alejandro@thinkpad.local

Обратите внимание, что если вы хотите использовать имя хоста для подключения к серверу с других компьютеров, вам придется настроить это на каждом из них.

Установка Docker

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

Если вы предпочитаете использовать виртуальные машины вместо контейнеров, хорошим вариантом является Vagrant. Vagrant позволяет автоматизировать создание и инициализацию виртуальных машин с помощью VirtualBox или других гипервизоров (называемых поставщиками в терминологии Vagrant). Я думаю, что наличие виртуальных машин, запущенных на вашем старом ноутбуке, является излишеством. Запущенные контейнеры обеспечивают хорошую изоляцию. По этой причине я предлагаю вместо этого использовать Docker.

Вы также можете установить любое серверное программное обеспечение (например, базу данных) на голом железе, непосредственно поверх Ubuntu Server; однако использование контейнеров дает вам возможность гибко экспериментировать с различными вариантами без необходимости удаления и переустановки ПО. Вы просто запускаете контейнеры, которые хотите использовать, и останавливать или удалять их, не вмешиваясь в вашу основную ОС. Более того, существует множество готовых к использованию образов (шаблонов) Docker. Это упрощает процесс установки БД, веб-серверов и других инструментов.

Чтобы установить Docker, подключитесь к своему новому серверу с помощью SSH, как описано выше, и выполните следующую команду:

sudo apt-get install docker.io

Убедитесь, что Docker deamon запустился:

sudo systemctl status docker

Установка сервера базы данных

Если вы загуглите "название базы данных" + "docker”, вы найдете то, что вам нужно для установки этой базы данных с помощью Docker.

В этой статье я покажу, как установить MariaDB Community Server, продвинутый сервер баз данных SQL с открытым исходным кодом. Обратите внимание, что если у вас есть подписка на MariaDB, вы можете установить MariaDB Enterprise Server, улучшенную, защищенную версию сервера MariaDB. Загрузите образ сервера сообщества MariaDB и запустите его с помощью Docker:

sudo docker run --detach --name mariadb 
                --restart unless-stopped --env MARIADB_ROOT_PASSWORD='password' 
                --publish '3306:3306/tcp' --expose '3306' mariadb:latest

Это запустит MariaDB в контейнере с именем mariadb. Контейнер запускается автоматически при перезагрузке компьютера, если только вы не остановите контейнер вручную следующим образом:

docker container stop mariadb

Убедитесь, что контейнер запущен (статус 'UP'):

docker container ls

Скопируйте IPv4-адрес контейнера из выходных данных:

docker network inspect bridge

Используйте этот IP-адрес для подключения к БД с сервера (на котором запущен Docker). Например:

mariadb -h 172.17.0.2 -u root -p

Теперь завершите SSH сессию, чтобы отключиться от сервера:

exit

С вашего основного компьютера подключитесь к базе данных MariaDB, используя имя хоста (или IP-адрес, если вы не настраивали имя хоста). Например:

mariadb -h thinkpad.local -u root -p

Попробуйте выполнить SQL-запрос:

Поздравляю! Ваш старый ноутбук теперь является вашим новым сервером базы данных.

Защита сервера

Возможно, вы захотите установить надежный пароль для пользователя root (интересный факт: MariaDB Enterprise Server даже не позволит вам использовать слабый пароль):

SET PASSWORD FOR 'root'@'%' = PASSWORD('Password123!');

Возможно, вы также хотите создать нового пользователя “почти root”:

CREATE USER 'user'@'%' IDENTIFIED BY 'Password123!';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';

И, возможно, вы хотите отключить удаленный доступ к базе данных для пользователя root.

В этом случае вам придется сначала подключиться к серверу по SSH как root. Вот как отключить удаленный доступ к root:

DELETE FROM mysql.user WHERE User='root' 
                       AND Host NOT IN ('localhost', '127.0.0.1', '::1');

Заключение

Есть много других вещей, которые вы можете установить на свой новый сервер: серверы непрерывной интеграции, веб-серверы, серверы электронной почты и т.д.

Docker Hub - это огромный каталог образов (шаблонов), которые вы можете безопасно использовать в изолированных контейнерах. Вы всегда можете запустить контейнеры и удалить их, когда закончите свои эксперименты. Например, вы можете удалить контейнер MariaDB следующим образом:

docker container stop mariadb
docker rm mariadb

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

sudo docker run --detach --name mariadb-columnstore 
                --restart unless-stopped --env MARIADB_ROOT_PASSWORD='password' 
                --publish '3306:3306/tcp' --expose '3306' mariadb/columnstore:latest

Теперь вы можете создавать таблицы, использующие механизм ColumnStore:

CREATE TABLE some_table(
    ... column definitions here ...
) ENGINE=ColumnStore;

Наслаждайтесь своим новым сервером базы данных!

Надеюсь, что перевод был вам полезен и вы реализовали свой домашний сервер:)

Обязательно присылайте фотографии своих серверов и обсуждайте их в комментариях, а ошибки в статье - сразу мне в лс, заранее спасибо всем внимательным читателям!


Только добра.

Комментарии (14)