Мне довольно часто приходится работать с только что созданными VPS — будь то развёртывание нового проекта, подготовка тестового окружения или эксперименты с инфраструктурой. Практически каждый такой сервер после создания находится в «сыром» состоянии и требует базовой первичной настройки.

Как правило, эта настройка включает:

  • Усиление безопасности (пользователи, SSH, базовые ограничения).

  • Настройку фаервола.

  • Установку Docker и сопутствующих инструментов.

  • Установку базового набора утилит, без которых комфортная работа невозможна.

До публикации этой статьи все эти шаги у меня существовали в виде разрозненных заметок в Obsidian: что-то было аккуратно записано, что-то — просто держалось в голове и воспроизводилось «на автомате». Со временем стало понятно, что такой подход неудобен: легко что-то забыть, перепутать порядок действий или каждый раз тратить время на восстановление контекста.

В итоге я решил собрать основное в одну структурированную заметку.
Она призвана упростить процесс первичной настройки сервера — как для вас, так и для меня самого в будущем.

Если вам интересны подобные материалы, подписывайтесь на Telegram-канал «Код на салфетке». Там я делюсь гайдами для новичков, полезными инструментами и практическими примерами из реальных проектов.


Выбор операционной системы

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

  • Ubuntu.

  • Debian.

  • CentOS / AlmaLinux / Rocky Linux.

  • Windows (обычно требует больше ресурсов).

  • Arch Linux.

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

Однако лично я чаще выбираю Debian, и вот почему:

  • Он более минималистичен — в системе изначально меньше лишнего.

  • Отличается высокой стабильностью и предсказуемостью.

  • В моём опыте потребляет меньше ресурсов, чем Ubuntu, что особенно важно для недорогих VPS.

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

Это не означает, что Ubuntu — плохой выбор. Если вам с ней комфортно, вы хорошо её знаете или просто хотите следовать большинству гайдов — это абсолютно нормально.

Важно другое:
В рамках этой статьи все примеры будут приведены для систем семейства Debian — то есть Debian и Ubuntu. Их настройка, пакетный менеджер и общая логика администрирования во многом совпадают, поэтому вы без проблем сможете применять инструкции на обеих системах.


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

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

Время активации может заметно отличаться в зависимости от провайдера:

  • Иногда сервер готов уже через 1–2 минуты.

  • В некоторых случаях процесс может занять несколько часов.

  • Редко, но бывает, что активация растягивается до суток.

После завершения инициализации хостинг предоставит вам данные для подключения:

  • IP-адрес сервера.

  • Логин пользователя (чаще всего это root).

  • Пароль.

Эти данные лучше сразу сохранить в надёжном месте — они понадобятся вам не один раз.

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

SSH — это основной и самый распространённый способ удалённого подключения к серверу.

Шаг 1. Откройте терминал

  • На Linux и macOS используйте стандартный терминал.

  • На Windows подойдёт PowerShell или любая программа с поддержкой SSH, например PuTTY.

Шаг 2. Подключитесь к серверу

В терминале выполните команду:

ssh login@ip-адрес

Где:

  • login — имя пользователя (чаще всего root).

  • ip-адрес — IP вашего сервера.

Пример команды:

ssh root@127.0.0.1

Шаг 3. Подтвердите отпечаток ключа сервера

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

Этот механизм защищает от подключения к поддельному серверу в случае подмены или атаки «man-in-the-middle». Отпечаток будет сохранён в файле:

~/.ssh/known_hosts

В ответ на запрос введите yes и нажмите Enter.

Шаг 4. Введите пароль

После этого система запросит пароль пользователя.

Важно знать несколько моментов:

  • Пароль можно вставить из буфера обмена:

    • Ctrl + Shift + V — в большинстве терминалов Linux и Windows.

    • Cmd + V — на macOS;

  • Символы пароля не отображаются в терминале — ни звёздочками, ни точками. Это нормальное поведение и сделано из соображений безопасности.

Шаг 5. Убедитесь, ��то подключение прошло успешно

Если всё сделано правильно, вы увидите приглашение командной строки сервера.
С этого момента вы работаете не на своём компьютере, а напрямую на VPS, и можете переходить к его дальнейшей настройке.

Подключение через Tabby

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

Шаг 1. Установите Tabby

Скачайте программу с официального сайта Tabby и установите её на свой компьютер. Tabby доступен для Windows, macOS и Linux.

Шаг 2. Запустите приложение

После установки просто откройте Tabby — при первом запуске вы увидите стартовый экран с предложением создать новое подключение.

Шаг 3. Создайте SSH-подключение

В интерфейсе программы:

  • Нажмите кнопку New Connection.

  • Выберите тип подключения SSH.

  • Укажите IP-адрес сервера.

  • Введите логин пользователя (чаще всего это root).

  • Укажите пароль, выданный хостинг-провайдером.

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

Шаг 4. Подключитесь к серверу

Нажмите кнопку Connect. Tabby автоматически попытается установить соединение с сервером.

Шаг 5. Подтвердите отпечаток ключа

Как и при обычном SSH-подключении, при первом соединении Tabby запросит подтверждение отпечатка ключа сервера. Это стандартная мера безопасности.

Просто нажмите Yes, чтобы сохранить ключ и продолжить подключение.

После этого вы сможете полноценно работать с сервером через Tabby, используя его дополнительные возможности:

  • вкладки и раздельные панели;

  • настраиваемые темы оформления;

  • встроенную работу с файлами по SFTP;

  • удобную интеграцию с SSH-ключами.


Установка дополнительных программ и библиотек

Образы операционных систем, предоставляемые хостингами, могут заметно отличаться. В одних уже предустановлены базовые утилиты (например, git), в других — система может быть максимально «чистой».

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

Для начала обновим список доступных пакетов и установим наиболее часто используемые утилиты:

apt update
apt install -y sudo curl nano git btop

Разберёмся, что именно мы установили:

  • sudo — позволяет выполнять команды с правами администратора (актуально, если вы будете работать не под root);

  • curl — инструмент для работы с URL, часто используется для скачивания файлов и выполнения установочных скриптов;

  • nano — простой и понятный текстовый редактор для работы с конфигурационными файлами прямо в терминале;

  • git — система контроля версий, без которой сложно представить работу с современными проектами;

  • btop — современный и наглядный монитор ресурсов, показывающий загрузку CPU, памяти, дисков и сети в реальном времени. Это более функциональная и визуально приятная альтернатива top и htop.

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


Вход на сервер по SSH-ключу

Публичные серверы постоянно находятся под автоматическими атаками. Один из самых распространённых сценариев — перебор паролей (bruteforce) по SSH. Даже если у вас сложный пароль, сам факт возможности входа по паролю уже создаёт лишний риск.

Поэтому в реальных проектах практически всегда делают так:

  • Вход по паролю отключают.

  • Доступ оставляют только по SSH-ключам.

Что такое SSH-ключ

SSH-ключ — это криптографическая пара из двух файлов:

  • Приватный ключ — хранится только у вас.

  • Публичный ключ — добавляется на сервер.

При подключении сервер проверяет, что у вас есть соответствующий приватный ключ, и пускает вас без ввода пароля. Такой подход:

  • Значительно безопаснее паролей.

  • Удобнее в повседневной работе.

  • Устойчив к брутфорсу.

1. Генерация SSH-ключа

Если SSH-ключ у вас уже есть (обычно он лежит в ~/.ssh), этот шаг можно пропустить.

Шаг 1. Создайте ключ на локальной машине

Откройте терминал на своём компьютере и выполните команду:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Пояснения к параметрам:

  • -t rsa — тип ключа (RSA — распространённый и надёжный вариант).

  • -b 4096 — длина ключа в битах (хороший баланс между безопасностью и совместимостью).

  • -C — комментарий для удобной идентификации ключа (обычно указывают email или имя устройства).

Шаг 2. Выберите путь сохранения ключа

В процессе генерации система спросит, куда сохранить ключ.
Если нажать Enter, он будет сохранён в стандартное место:

~/.ssh/id_rsa

Для большинства случаев этого более чем достаточно. Использовать другой путь имеет смысл только при работе с несколькими ключами.

Шаг 3. Установите пароль на ключ (по желанию)

Далее система предложит задать пароль для приватного ключа.

  • Рекомендуется установить пароль — это защитит ключ, если файл попадёт в чужие руки.

  • Если вы понимаете риски и хотите упростить использование, можно оставить пароль пустым и просто нажать Enter.

После этого будут созданы два файла:

  • id_rsaприватный ключ (никому не передавать).

  • id_rsa.pubпубличный ключ (его мы будем добавлять на сервер).

Перемещение SSH-ключей между устройствами

Иногда возникает необходимость использовать один и тот же SSH-ключ на нескольких компьютерах, например, на рабочем и домашнем.

Это допустимо, но требует аккуратности.

Шаг 1. Скопируйте приватный ключ

Перенесите файл приватного ключа (id_rsa) на новое устройство без изменения содержимого.

Шаг 2. Разместите ключ в правильном месте

На новом устройстве поместите ключ в каталог:

~/.ssh

И обязательно установите корректные права доступа (если используете Linux):

chmod 600 ~/.ssh/id_rsa

Это важно: SSH просто откажется использовать ключ с небезопасными правами.

Шаг 3. Проверьте подключение

Попробуйте подключиться к серверу, явно указав путь к ключу:

ssh -i ~/.ssh/id_rsa user@server

Если всё настроено правильно, соединение будет установлено без запроса пароля от сервера.

Важно:
Никогда не передавайте приватный ключ через небезопасные каналы (почта, мессенджеры, облачные заметки). Для передачи используйте защищённые способы — scp, зашифрованные архивы или физические носители.

2. Добавление SSH-ключа на VPS

После того как SSH-ключ создан, необходимо добавить публичную часть ключа на сервер. Именно она сообщает серверу, каким пользователям и с каких устройств разрешён доступ.

Сделать это можно двумя способами:

  • Автоматически — быстрее и проще.

  • Вручную — полезно знать, как работает всё «под капотом».

Способ 1. Использование ssh-copy-id (рекомендуется)

ssh-copy-id — это утилита, которая автоматически копирует ваш публичный ключ на сервер и настраивает всё необходимое.

На локальной машине выполните команду:

ssh-copy-id login@ip-адрес

Где:

  • login — пользователь на сервере (чаще всего root).

  • ip-адрес — IP вашего VPS.

После выполнения команды система попросит ввести пароль от сервера. Это нормально: пароль используется только один раз, чтобы добавить ключ.

В результате публичный ключ будет записан в файл:

~/.ssh/authorized_keys

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

Ручное добавление ключа

Этот способ пригодится, если ssh-copy-id недоступна или вы хотите лучше понимать, что именно происходит.

Шаг 1. Подключитесь к серверу по паролю

ssh login@ip-адрес

Шаг 2. Создайте каталог для SSH-ключей

На сервере выполните команды:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Что здесь важно:

  • Каталог ~/.ssh используется SSH для хранения ключей.

  • Права 700 означают, что доступ к папке есть только у владельца — это обязательное требование безопасности, позволяющее SSH работать.

Шаг 3. Добавьте публичный ключ в authorized_keys

Вставьте содержимое публичного ключа в файл authorized_keys:

echo "<ваш публичный ключ>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Здесь <ваш публичный ключ> — это содержимое файла id_rsa.pub с вашей локальной машины.

Права 600 означают, что файл доступен только владельцу, что также критично для работы SSH.

Альтернативный вариант (одной командой)

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

cat ~/.ssh/id_rsa.pub | ssh login@ip-адрес "cat >> ~/.ssh/authorized_keys"

Эта команда передаст публичный ключ на сервер и добавит его в нужный файл автоматически.

Шаг 4. Проверьте, что ключ добавлен

На сервере выполните:

cat ~/.ssh/authorized_keys

Вы должны увидеть строку с вашим публичным ключом.

3. Отключение входа по паролю в SSH

После того как вход по ключу настроен и проверен, можно переходить к отключению паролей. Делать это раньше не рекомендуется — иначе можно просто потерять доступ к серверу.

Шаг 1. Откройте конфигурацию SSH-сервера

sudo nano /etc/ssh/sshd_config
  • файл /etc/ssh/sshd_config отвечает за поведение SSH-сервера.

  • для его редактирования требуются права администратора.

Шаг 2. Измените параметры аутентификации

Найдите (или добавьте) следующие строки:

PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes

Что они означают:

  • PasswordAuthentication no — полностью отключает вход по паролю.

  • PermitRootLogin prohibit-password — запрещает вход под root по паролю, но разрешает вход по ключу.

  • PubkeyAuthentication yes — явно включает аутентификацию по SSH-ключам.

Если строки закомментированы (начинаются с #), уберите символ #, чтобы настройки применились.

Шаг 3. Сохраните файл и перезапустите SSH

В редакторе nano:

  • Ctrl + S — сохранить файл;

  • Ctrl + X — выйти.

Затем перезапустите SSH-сервис:

sudo systemctl restart sshd

4. Проверка доступа

Откройте новое окно терминала (важно не закрывать текущее соединение) и попробуйте подключиться к серверу:

ssh login@ip-адрес

Если всё настроено корректно:

  • Пароль запрошен не будет.

  • Вход произойдёт автоматически по SSH-ключу.

На этом этапе сервер уже защищён от брутфорса по паролям, и можно переходить к следующим шагам — созданию отдельного пользователя, настройке sudo и фаервола.


Закрываем порты сервера

Одна из базовых и при этом критически важных мер защиты сервера — настройка фаервола. По умолчанию сервер может принимать соединения практически на любые порты, и если не ограничить этот доступ, вы фактически оставляете лишние «двери» открытыми.

Идея простая:

  • Разрешаем только то, что действительно нужно.

  • Всё остальное — закрываем.

Для этой задачи мы будем использовать UFW (Uncomplicated Firewall) — простой и удобный интерфейс для управления фаерволом, который отлично подходит для начальной и средней настройки сервера.

Установка UFW

Для начала установим ufw:

sudo apt update
sudo apt install ufw -y

Здесь:

  • apt update обновляет список доступных пакетов.

  • apt install ufw -y устанавливает фаервол без дополнительных вопросов.

Базовая настройка правил

Теперь зададим базовую политику работы фаервола.

Шаг 1. Запрещаем все входящие соединения

sudo ufw default deny incoming && sudo ufw default allow outgoing

Что это означает:

  • Все входящие подключения запрещены по умолчанию.

  • Сервер по-прежнему может инициировать исходящие соединения (обновления, обращения к API и т.д.).

Это основа безопасной конфигурации.

Шаг 2. Разрешаем доступ по SSH

Очень важно: этот шаг нужно выполнить до включения фаервола, иначе вы рискуете потерять доступ к серверу.

Разрешаем стандартный SSH-порт:

sudo ufw allow 22

Если у вас есть статический IP-адрес, защиту можно усилить и разрешить SSH-доступ только с него:

sudo ufw allow from <IP-адрес> to any port 22

В этом случае заменить <IP-адрес> нужно на IP, с которого вы подключаетесь к серверу.
Такой подход сильно снижает вероятность атак на SSH.

Шаг 3. Открываем нужные порты для сервисов

Теперь разрешаем доступ только к тем портам, которые действительно используются:

sudo ufw allow 80    # HTTP
sudo ufw allow 443   # HTTPS
sudo ufw allow 8000  # порт приложения (например, Django)

Если вы не используете какой-то из этих портов — не открывайте его.
Фаервол должен отражать реальную конфигурацию вашего сервера, а не «на всякий случай».

Включение фаервола

После того как все необходимые правила добавлены, активируем ufw.

sudo ufw enable

Если фаервол был включён ранее и вы вносили изменения, иногда имеет смысл временно его отключить и включить снова:

sudo ufw disable && sudo ufw enable

Проверка состояния фаервола

Чтобы убедиться, что правила применились корректно, выполните:

sudo ufw status

Вы увидите список разрешённых портов и общее состояние фаервола.
Если SSH (порт 22) присутствует в списке — доступ к серверу сохранён.


Смена порта SSH

По умолчанию SSH-сервер работает на 22-м порту. Это общеизвестно, поэтому большинство автоматических ботов и сканеров начинают атаки именно с него.

Смена порта не является полноценной мерой безопасности, но она:

  • Заметно снижает количество шумных попыток входа.

  • Уменьшает нагрузку на сервер.

  • Упрощает анализ логов.

Важно понимать: смена порта — это дополнение к SSH-ключам и фаерволу, а не замена им.

Порядок действий

Важно:
Перед началом убедитесь, что:

  • Вход по SSH-ключу уже работает.

  • Фаервол настроен корректно.

  • У вас есть активное SSH-подключение к серверу.

Шаг 1. Откройте конфигурацию SSH

sudo nano /etc/ssh/sshd_config

Это основной конфигурационный файл SSH-сервера.

Шаг 2. Измените порт

Найдите строку:

#Port 22

Уберите символ # (если он есть) и укажите новый порт, например:

Port 20022

Рекомендации по выбору порта:

  • Используйте значения выше 1024.

  • Избегайте популярных портов других сервисов.

  • Не используйте слишком очевидные варианты вроде 2222.

Шаг 3. Сохраните изменения

В редакторе nano:

  • Ctrl + S — сохранить файл.

  • Ctrl + X — выйти.

Шаг 4. Перезапустите SSH-сервис

Чтобы изменения вступили в силу, выполните:

sudo systemctl restart sshd

Шаг 5. Разрешите новый порт в фаерволе

Если используется ufw, обязательно откройте новый порт:

sudo ufw allow 20022

⚠ Делать это нужно до закрытия 22-го порта, иначе можно потерять доступ.

Шаг 6. Закройте стандартный SSH-порт

После того как новый порт открыт, можно удалить правило для 22-го порта:

sudo ufw delete allow 22

Шаг 7. Проверьте подключение

Откройте новое окно терминала и попробуйте подключит��ся, указав новый порт:

ssh -p 20022 login@ip-адрес

Если соединение установилось — всё настроено корректно.

Шаг 8. Примените правила фаервола

После того, как сменили порт и проверили подключение нужно применить правила фаервола:

sudo ufw disable && sudo ufw enable

Установка Docker

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

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

Быстрая установка Docker через официальный скрипт

Docker поддерживает специальный скрипт, который:

  • Автоматически определяет дистрибутив.

  • Добавляет официальный репозиторий Docker.

  • Устанавливает Docker Engine и необходимые зависимости.

Для установки выполните одну команду:

curl -fsSL https://get.docker.com | sh

Важно понимать, что здесь происходит:

  • curl скачивает установочный скрипт.

  • символ | (pipe) сразу передаёт его на выполнение.

  • скрипт запускается сразу, без сохранения в файл.

Если вы работаете не под root, команда может запросить пароль или завершиться с ошибкой. В этом случае выполните:

curl -fsSL https://get.docker.com | sudo sh

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

После завершения установки убедитесь, что Docker установлен корректно:

docker --version

В ответ вы должны увидеть текущую версию Docker Engine.

Также можно проверить состояние сервиса:

sudo systemctl status docker

Если сервис запущен — установка прошла успешно.

Добавление пользователя в группу docker

По умолчанию Docker требует прав администратора, поэтому все команды приходится запускать с sudo. Для повседневной работы это неудобно, а команды быстро превращаются в нечитаемые.

Решается это добавлением пользователя в группу docker.

Выполните команду:

sudo usermod -aG docker $USER

Здесь:

  • usermod — утилита для изменения параметров пользователя.

  • -aG docker — добавляет пользователя в группу docker, не удаляя его из других групп.

  • $USER — текущий пользователь.

После этого необходимо перелогиниться:

  • выйдите из текущей SSH-сессии и подключитесь заново.

  • либо выполните команду:

newgrp docker

Чтобы убедиться, что всё работает корректно, выполните команду без sudo:

docker ps

Если команда отработала без ошибок, значит Docker настроен правильно и готов к использованию без прав администратора.


Оболочка терминала ZSH

Zsh — это современная командная оболочка, основанная на Bash, но с рядом улучшений. Она предлагает:

  • Удобное автодополнение команд и аргументов.

  • Расширенные возможности работы с историей команд.

  • Поддержку плагинов и тем оформления.

  • Гибкую настройку внешнего вида и поведения терминала.

Для удобной работы с Zsh часто используют фреймворк Oh My Zsh. Он сразу включает набор полезных плагинов, тем и базовых настроек.

В сочетании с темой PowerLevel10k ваша командная строка станет не только красивой, но и информативной: индикаторы статуса Git, текущая директория, время выполнения команд и многое другое.

Подробная инструкция доступна на GitHub.

Установка и настройка Zsh

Шаг 1. Установите Zsh

sudo apt install zsh -y

Шаг 2. Сделайте Zsh оболочкой по умолчанию

sudo chsh -s /bin/zsh

Шаг 3. Установите Oh My Zsh

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Во время установки система предложит сделать Zsh стандартной оболочкой — выберите Y и нажмите Enter.

Шаг 4. Установите тему PowerLevel10k

git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k

Шаг 5. Настройте тему в конфигурации

Откройте файл конфигурации Zsh:

nano ~/.zshrc

Найдите строку:

ZSH_THEME="robbyrussell"

и замените её на:

ZSH_THEME="powerlevel10k/powerlevel10k"

Сохраните изменения (Ctrl + S) и выйдите из редактора (Ctrl + X).

Шаг 6. Примените настройки

source ~/.zshrc

При первом запуске PowerLevel10k автоматически запустит мастер настройки.
Вы сможете выбрать:

  • Стиль отображения командной строки.

  • Информацию о Git.

  • Цветовую схему и иконки.

  • Дополнительные визуальные индикаторы.

Изменение настроек после установки

Если вы захотите что-то изменить в будущем или что-то пошло не так в мастере настройки, достаточно выполнить команду:

p10k configure

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


Atuin — удобная история команд

Atuin — это современный инструмент для работы с историей команд в терминале. Он делает её по-настоящему удобной и наглядной, а также добавляет функции, которых нет в стандартной истории Bash или Zsh:

  • Визуальное отображение предыдущих команд.

  • Быстрый поиск по выполненным командам.

  • Синхронизация истории между устройствами.

  • Аналитика и статистика по использованию команд.

Благодаря Atuin вы легко сможете вспомнить сложные команды, проверить, что и когда выполнялось, и даже перенести историю на другой компьютер.

Официальный репозиторий: Atuin на GitHub

Установка Atuin

Установка Atuin проста и занимает буквально одну команду:

curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

Команда скачивает и сразу запускает установщик.

Импорт истории команд

После установки рекомендуется импортировать историю из вашей текущей оболочки, чтобы не потерять старые команды:

atuin import auto
  • Опция auto автоматически определит вашу оболочку.

  • Если нужно, можно указать конкретную оболочку, например bash или zsh:

atuin import bash

или

atuin import zsh

Использование

После установки и импорта истории Atuin будет работать автоматически:

  • Клавиша — просмотр предыдущих команд с возможностью поиска.

  • При вводе текста Atuin покажет совпадения из истории.

  • Команды можно фильтровать, сортировать и анализировать через встроенные функции.

Если вы не видите историю, перезапустите оболочку:

  • Для Bash:

source ~/.bashrc
  • Для Zsh:

source ~/.zshrc

Создание бэкапов с помощью ReBack

После настройки сервера и развёртывания проектов часто возникает вопрос: как организовать резервное копирование данных?

  • Где хранить бэкапы?

  • Как автоматизировать процесс?

  • Как контролировать срок хранения файлов?

Для этих задач я разработал программу ReBack. Она позволяет:

  • Создавать бэкапы локально на сервере.

  • Отправлять их в S3-хранилище.

  • Автоматически удалять устаревшие файлы по заданному сроку хранения.

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

Подробное описание доступно в репозитории ReBack. Буду рад вашим отзывам и предложениям по улучшению!

Важно: Для работы программы необходимо иметь S3-хранилище.
Это может быть:

Также для бэкапа конкретного сервиса, например PostgreSQL из Docker, сам сервис должен быть установлен и запущен.

Установка ReBack

Скачиваем последнюю версию (на данный момент 0.3.1):

wget https://github.com/proDreams/reback/releases/latest/download/reback_linux

Даём права на выполнение:

chmod +x reback_linux

Создаём файл конфигурации:

touch settings.json

Открываем файл для редактирования:

nano settings.json

Настройка конфигурации

Пример базового шаблона settings.json:

{
  "s3_endpoint": "https://s3.example.com",
  "s3_region": "us-east-1",
  "s3_bucket": "my-bucket",
  "s3_access": "access-key",
  "s3_secret": "secret-key",
  "s3_path_style": "path",
  "backup_dir": "/tmp/backups",
  "elements": []
}

Описание ключевых параметров:

  • s3_endpoint — адрес S3-хранилища (MinIO или облачный сервис).

  • s3_region — регион S3.

  • s3_bucket — название вашего бакета.

  • s3_access и s3_secret — ключи доступа к S3.

  • s3_path_style — способ подключения:

  • backup_dir — директория для локального хранения бэкапов.

  • elements — массив объектов, которые будут бэкапиться.

После настройки сохраняем изменения (Ctrl + S) и выходим (Ctrl + X).

Пример: бэкап PostgreSQL из Docker

Если на сервере есть PostgreSQL в Docker-контейнере, добавляем объект в массив elements:

{
  "element_title": "my_pg_docker_db",
  "s3_folder": "postgres_docker_backups",
  "backup_retention_days": 30,
  "s3_backup_retention_days": 90,
  "params": {
    "type": "postgresql_docker",
    "docker_container": "postgres_container",
    "db_name": "my_database",
    "db_user": "user",
    "db_password": "password"
  }
}

Описание параметров элемента:

  • element_title — уникальное название объекта.

  • s3_folder — папка в S3 для хранения бэкапов.

  • backup_retention_days — срок хранения локальных бэкапов (в днях).

  • s3_backup_retention_days — срок хранения бэкапов в S3 (в днях).

  • params — настройки объекта:

    • type — тип элемента (postgresql_docker, mongodb, folder и т.д.).

    • docker_container — имя контейнера (узнать можно через docker ps).

    • db_name, db_user, db_password — параметры базы данных.

Сохраняем изменения (Ctrl + S) и выходим (Ctrl + X).

Запуск ReBack вручную

Для разового бэкапа выполните:

./reback_linux backup
  • Аргумент backup обязателен.

  • Если конфигурация корректна, бэкапы создадутся локально и в S3.

Автоматизация с помощью Cron

Откройте редактор Cron:

crontab -e

Добавьте задачу для ежедневного бэкапа, например в 2 часа ночи:

0 2 * * * /path/to/reback_linux backup >> /path/to/logs/backup.log 2>&1
  • 0 2 * * * — время запуска (ежедневно в 2:00).

  • /path/to/reback_linux backup — путь до программы и аргумент backup.

  • /path/to/logs/backup.log — файл для записи логов работы.

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


Заключение

Настройка VPS — это ключевой этап, который напрямую влияет на безопасность, стабильность и производительность ваших проектов. Даже небольшой упуск в конфигурации может привести к проблемам, поэтому важно уделить внимание базовым шагам: выбору операционной системы, настройке SSH-доступа, фаервола и установке необходимых инструментов.

Следуя описанным в статье шагам, вы сможете:

  • Подготовить сервер под свои задачи.

  • Минимизировать потенциальные угрозы безопасности.

  • Создать удобную и функциональную среду для разработки и развёртывания приложений.

  • Автоматизировать рутинные процессы, такие как бэкапы и управление историей команд.

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

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

Если у вас есть идеи, дополнения или советы, которые могли бы сделать процесс настройки VPS ещё удобнее и безопаснее — делитесь в комментариях! Ваш опыт может быть полезен другим.

Если вам интересны подобные материалы, подписывайтесь на Telegram-канал «Код на салфетке». Там я делюсь гайдами для новичков, полезными инструментами и практическими примерами из реальных проектов.

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


  1. ash_lm
    03.01.2026 07:29

    Расскажите мне, а кто вообще на хабре целевая аудитория статей на тему "Сейчас настроим VPS"? Пока у меня только одно предположение - для портфолио.


    1. proDream Автор
      03.01.2026 07:29

      Хабр огромный ресурс, на котором уже давно постится всё подряд, некоторое даже с натяжкой ITшным не назовёшь. Почему все считают, что тут всё ещё только прожжёные гики сидят? Сюда приходит множество новичков, но их отсюда гонят ссаными тряпками, вместо того, чтобы поделиться опытом.


    1. pinac
      03.01.2026 07:29

      Какое портфолио?
      Это обычная реклама телеграмм канала, для собирания подписчиков, для того что бы там крутить рекламу. Хабр уже давно утонул в подобных статьях от бизнесменов рекламирующих телеграмм каналы. У кого то они полезней, а у кого то просто авторерайт и перевод через LLM, любого мусора, лишь бы вставить ссылку.
      Так же учитывайте что люди приходят и из поисковой системы, и читатели совсем не обязательно коренные жители хабра.
      Эти бизнесмены создают десятки аккаунтов, стараются поднять им рейтинг, и когда зацепятся, то допустим написав статью с нужной ссылкой одним аккаунтом, остальными аккаунтами плюсуют эту статью, и плюют в карму тем кто нехорошо отозвался про автора статьи. И так по кругу.

      Хабр уже давно превратился в площадку для продвижения и куда постят любой мусор.
      В принципе просто деградировал до того же Дзена.
      Как шпаргалка статья полезна, для тех кто ежедневно не настраивает.


      1. useribs
        03.01.2026 07:29

        Не мешайте человеку учиться ) https://ny.pressanybutton.ru/


        1. proDream Автор
          03.01.2026 07:29

          Вы хоть имя автора этого укажите, а то как-то неприлично получается.


          1. useribs
            03.01.2026 07:29

            Откуда же я автора могу знать, все что размещено под доменом на ответственности владельца домена, а в демке автора не увидел.


            1. proDream Автор
              03.01.2026 07:29

              Ну раз смогли найти домен, то сможете найти и автора этой страницы.


              1. useribs
                03.01.2026 07:29

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


            1. useribs
              03.01.2026 07:29

              И конечно автору сего опуса понадобилось голосовать в карму за неконструктивное общение.


      1. Sukesada
        03.01.2026 07:29

        Если бы в начале был чек лист. Который ты мог скопировать и ставить галочки. Для человека который в первый раз настраивает ок. Так прочитать все статью заставляют.


      1. pae174
        03.01.2026 07:29

        Как шпаргалка статья полезна

        Неа. Есть концептуальные ошибки, которые напрямую могут привести к компрометации сервера прямо с первой минуты его работы. Эти ошибки просто копипастят из предыдущих статей, такчто имеем что имеем.


        1. ILyaCyclone
          03.01.2026 07:29

          Пожалуйста, напишите, какие здесь концептуальные ошибки.


          1. pae174
            03.01.2026 07:29

            В ответ на запрос введите yes и нажмите Enter.

            1) При первом подключении предлагается ответить Yes на вопрос "доверяете ли вы этому серверному ключу". Это хреновый совет т.к. если уже в этот момент времени у вас MitM, то он теперь останется с вами навсегда :-) На самом деле ключ сначала надо проверить и только потом, если он действительно от вашего сервера а не от MitM, тогда ему можно доверять. Эта концептуальная ошибка есть чуть менее чем в каждом руководстве по настройке виртуалок.

            2) В статье написано как перейти с входа по паролям на вход по клиентским ключам. Сгенерить и залить на сервер ключ, потом сделать изменения в конфиге сервера:

            PasswordAuthentication no
            PermitRootLogin prohibit-password
            PubkeyAuthentication yes

            Включится ли после этого вход по ключам? Конечно. Это проверяется последующим заходом с ключем. Выключится ли после этого вход по паролям? У меня для вас неприятный сюрприз - это не обязательно. Потому что вход по паролям работает если включена хотя бы одна из следующих опций: PasswordAuthentication или KbdInteractiveAuthentication. Подавляющее большинство статей предписывают отключать PasswordAuthentication но при этом забывают отключить KbdInteractiveAuthentication. В результате вход по паролям не отключается, но мамкин админ об этом не знает т.к. теория в статьях не описана а практической проверки такого отключения админ не делает. В некоторых дистрах KbdInteractiveAuthentication включена по умолчанию, в некоторых других - нет.

            3) Отсюда сразу следующий пункт: в статьях часто нет предписания немедленно поменять выданный хостером пароль. Так что пароль лежит в электронной почте и ждет своего часа. То есть вы получаете валяющийся в почте в открытом виде рутовый пароль плюс недовыключенный вход по паролям из предыдущего пункта. Прекрасная дыра в безопасности. Конкретно в этой статье эта дыра закрыта директивой PermitRootLogin prohibit-password но я уже насмотрелся статей в которых этого нет.

            4) В настройках фаерволла режутся входящие TCP соединения но никак не предпринимается никаких попыток убедиться в том, что наружу не выставлено что-нибудь с UDP. Там может обнаружиться какой-нибудь унылый syslogd.

            5) Конкретно в этой статье творится какое-то безумие с sudo. Если хостер вам выдал рутовый логин-пароль и вы действительно работатете под рутом, то зачем вам далее по тексту sudo? А если вы все же работаете под другим юзером, то у вас не написано ничего про создание этого юзера и его последующее добавление в sudoers.


      1. Miller777
        03.01.2026 07:29

        Для новичков полезно.

        Я вот узнал о существовании 2-х утилит, о которых раньше не слышал.

        А, еще тема для ZSH.


    1. Hadis
      03.01.2026 07:29

      Я, например, с интересом прочитал о доп.софте типа Tabby.


  1. viktor-b
    03.01.2026 07:29

    Не смотря на относительно известные процедуры. Мне всегда приятно читать новые статьи, нет-нет да что-то новенькое проскочит. Не дает останавливаться на достигнутом.


  1. Alersha
    03.01.2026 07:29

    Я бы посоветовал новичкам вместо докера устанавливать podman, безопаснее.


  1. nitro80
    03.01.2026 07:29

    Очередная статья ради ссылки на ТГ.

    Вы бы хоть как-то креативили..


  1. Sukesada
    03.01.2026 07:29

    Как реклама телеграм-канала - ок. Но как гайд именно для первичной настройки VPS — спорно: нету чек листа короткого веачале. Вынуждаете читать всю статью.

    Плюс, сам подход с ручными командами плохо масштабируется. Новичок через месяц уже не вспомнит, что он правил в sshd_config, какие порты открывал в UFW и почему именно так. А если вы делаете это регулярно, то повторять одно и то же руками каждый раз - тоже нерационально: неизбежно появляется "дрейф" конфигурации и мелкие отличия между серверами. Потому и для опытных людей бесполезно.

    На практике такие вещи лучше оформлять в репозиторий Ansible (или Terraform + Ansible): роли, переменные, идемпотентность, понятный порядок шагов. Тогда вместо полотна команд просто даёте ссылку на репозиторий и запускаете playbook — и через месяц/год сервер будет настроен ровно так же, как в первый раз. И 2–3 и тд VPS поднимаются значительно быстрее, без расхождений и забытых шагов.


    1. Miller777
      03.01.2026 07:29

      А есть где-нибудь гайд с примерами для начинающих про то, что вы написали?