Гайд по первоначальной настройке VPS
В этой статье собраны часто используемые действия предназначенные для настройки нового VPS.
Мне часто приходится работать с только что созданными VPS, будь то для развёртывания или тестирования проектов. После создания каждый сервер требует базовой настройки, включающей обеспечение безопасности, настройку фаервола, установку Docker и других необходимых компонентов.
До публикации этой статьи - все шаги по настройке были записаны в виде отдельных заметок в моем хранилище Obsidian, а что-то я просто помнил. Поэтому я принял решение подготовить заметку, чтобы упростить как вам, так и мне процесс первичной настройки своего сервера.
Выбор операционной системы
При создании сервера всегда предлагается выбор операционной системы. Набор доступных образов зависит от хостинга, но чаще всего включает:
- Ubuntu
- Debian
- CentOS
- Windows (при достаточных системных ресурсах сервера)
- Arch Linux
Выбор ОС зависит от ваших предпочтений и целей использования. Наиболее популярным вариантом является Ubuntu благодаря её удобству для новичков и широкой поддержке сообществом. Однако лично я предпочитаю использовать Debian, так как он отличается минимализмом и надёжностью. По моему опыту, Ubuntu потребляет больше ресурсов, что может существенно влиять на производительность при ограниченном бюджете. Кроме того, у меня были случаи возникновения проблем с серверами на её основе.
В этой статье все примеры будут основаны на ОС семейства Debian (например, Debian или Ubuntu), поскольку их настройка и управление во многом схожи.
Подключение к серверу
После приобретения сервера необходимо подождать завершения его инициализации. Этот процесс включает выделение ресурсов виртуальной машины и развёртывание выбранного образа операционной системы. У разных хостинг-провайдеров время активации сервера может варьироваться: где-то это занимает 1–2 минуты, а где-то может потребоваться несколько часов или даже сутки.
Когда сервер будет активирован, хостинг-провайдер предоставит вам:
- IP-адрес сервера,
- логин (обычно это
root
, но иногда может быть другим), - пароль.
Подключение через SSH
- Откройте системный терминал (на Windows можно использовать PowerShell или любую программу с поддержкой SSH, например PuTTY).
- Введите следующую команду:
ssh login@ip-адрес
Например:
ssh root@127.0.0.1
- Сохранение отпечатка ключа
При первом подключении SSH запросит подтверждение для добавления "отпечатка" сервера в файл~/.ssh/known_hosts
. Этот файл используется для предотвращения соединения с поддельным сервером в случае его подмены или изменений в ключах.
На запрос нужно ввестиyes
и нажать Enter.
- Ввод пароля
Система запросит пароль от сервера. Пароль можно:
- вставить из буфера обмена (нажмитеCtrl+Shift+V
в Linux/Windows терминале илиCmd+V
на macOS),
- или ввести вручную.
Обратите внимание: вводимый пароль не отображается в терминале по соображениям безопасности. Это нормально.
- Если подключение выполнено успешно, вы увидите командную строку вашего сервера. Теперь вы можете начинать работу.
Подключение через Tabby
Tabby — это современный терминал с удобным интерфейсом, поддерживающий работу с SSH. Чтобы подключиться к серверу через Tabby:
- Установите Tabby
Загрузите программу с официального сайта Tabby и установите её на ваш компьютер.
- Откройте Tabby
После установки запустите приложение.
- Создайте новое подключение
- Нажмите на кнопку "New Connection".
- Выберите протокол SSH.
- Введите IP-адрес вашего сервера, логин (обычноroot
), а также пароль, выданный хостинг-провайдером.
- Сохраните настройки подключения (опционально), чтобы не вводить их заново при следующем использовании.
- Подключитесь к серверу
Нажмите Connect. Tabby автоматически установит соединение с сервером.
- Сохранение отпечатка ключа
При первом подключении появится запрос на подтверждение отпечатка сервера. Нажмите Yes для сохранения.
Теперь вы готовы работать с сервером через Tabby с удобным интерфейсом и расширенными возможностями, такими как вкладки, настраиваемые темы, передача файлов по sftp
и интеграция с SSH-ключами.
Установка дополнительных программ и библиотек
Образы операционных систем, предоставляемые разными хостингами, могут отличаться. Некоторые образы уже включают популярные инструменты, такие как git
, в то время как другие могут не содержать этих утилит.
Чтобы не устанавливать каждую программу по отдельности, вы можете за раз установить наиболее часто используемые инструменты. Для этого выполните команду:
apt update
apt install -y sudo curl nano git htop
sudo
— позволяет выполнять команды с правами администратора (если они ещё не установлены).curl
— утилита для работы с URL, часто используется для скачивания файлов.nano
— текстовый редактор для работы с файлами в терминале.git
— система контроля версий, необходимая для работы с репозиториями.htop
— улучшенная версия командыtop
, позволяющая отслеживать процессы на сервере в реальном времени.
Вход на сервер по SSH-ключу
Серверы часто подвергаются попыткам взлома, и одним из самых распространённых методов является перебор (брутфорс) паролей. Чтобы защитить сервер, рекомендуется отключить вход по паролю и использовать SSH-ключи.
SSH-ключ — это пара криптографических ключей (приватного и публичного), которая обеспечивает более безопасный доступ к серверу через протокол SSH.
1. Генерация SSH-ключа
Если у вас уже есть SSH-ключ, вы можете пропустить этот шаг.
- Откройте терминал на локальной машине и выполните команду:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Параметры команды:
--t rsa
— тип ключа (RSA, один из наиболее распространённых и надёжных типов).
--b 4096
— длина ключа (4096 бит, что обеспечивает высокий уровень безопасности).
--C "your_email@example.com"
— комментарий для ключа (обычно используется для идентификации, например, ваш email).
- Выбор пути для сохранения ключа:
При запросе пути для сохранения нажмите Enter, чтобы сохранить ключ в папке по умолчанию:
~/.ssh/id_rsa
Если вы хотите использовать другой путь, укажите его вручную.
- Установка пароля для ключа (опционально):
Система предложит ввести пароль для ключа. Этот пароль защищает ваш приватный ключ на случай его компрометации. Рекомендуется установить пароль, но если вы хотите упростить использование ключа, можно оставить это поле пустым, нажав Enter.
После выполнения команды будет создана пара ключей:
- Приватный ключ (
id_rsa
) — храните его в секрете, не передавайте никому. - Публичный ключ (
id_rsa.pub
) — используется для передачи на сервер и настройки доступа.
Перемещение SSH-ключей между устройствами
Если вам нужно использовать ваш SSH-ключ на другом устройстве, это возможно, но требует осторожности. Для переноса выполните следующие шаги:
- Экспорт приватного ключа:
Скопируйте ваш приватный ключ на новое устройство.
- Настройка на новом устройстве:
Перенесите приватный ключ в папку~/.ssh
на новом устройстве и установите правильные права доступа:
chmod 600 ~/.ssh/id_rsa
- Проверка работы:
Убедитесь, что ключ корректно работает, выполнив подключение к серверу:
ssh -i ~/.ssh/id_rsa user@server
Важно: Никогда не передавайте приватный ключ через небезопасные каналы (например, email или мессенджеры). Рекомендуется использовать защищённые методы передачи, такие как scp
или флеш-накопители.
2. Добавление SSH-ключа на VPS
После того как SSH-ключ был создан, необходимо добавить его публичную часть на сервер, чтобы настроить безопасный доступ.
Для этого существует два способа: автоматизированный и ручной.
Использование команды ssh-copy-id
Этот способ позволяет автоматически добавить ваш публичный ключ на сервер.
- На локальной машине выполните команду:
ssh-copy-id login@ip-адрес
- Заменитеlogin
на имя пользователя сервера (например,root
).
- Заменитеip-адрес
на IP-адрес вашего сервера.
- Введите пароль от сервера. После этого публичный ключ будет автоматически добавлен в файл
~/.ssh/authorized_keys
на сервере, и вход по SSH с использованием ключа будет доступен.
Ручное добавление ключа
Если вы не хотите или не можете использовать ssh-copy-id
, можно добавить ключ вручную.
- Подключитесь к вашему серверу с использованием пароля:
ssh login@ip-адрес
- Создайте директорию для хранения SSH-ключей (если она ещё не существует):
mkdir -p ~/.ssh
chmod 700 ~/.ssh
-mkdir -p
создаёт папку, если она ещё не существует.
-chmod 700
устанавливает права доступа, позволяя только владельцу читать и изменять содержимое этой папки.
- Скопируйте публичный ключ в файл
authorized_keys
:
echo "<ваш публичный ключ>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
- Замените<ваш публичный ключ>
на содержимое файлаid_rsa.pub
с вашей локальной машины.
- Альтернативно, можно использовать команду на локальной машине для копирования публичного ключа на сервер в один шаг:
cat ~/.ssh/id_rsa.pub | ssh login@ip-адрес "cat >> ~/.ssh/authorized_keys"
Эта команда добавит публичный ключ на сервер без необходимости вручную редактировать файл.
- Убедитесь, что ключ был успешно добавлен:
cat ~/.ssh/authorized_keys
Вы должны увидеть содержимое вашего публичного ключа в файле.
3. Настройка SSH для отключения входа по паролю
Теперь, когда SSH-ключ настроен, необходимо активировать вход по ключу и отключить вход по паролю.
- Откройте файл конфигурации SSH-сервера:
sudo nano /etc/ssh/sshd_config
-nano
— это текстовый редактор. Вы можете использовать любой другой, например,vim
илиvi
.
- Для редактирования системных файлов требуетсяsudo
, чтобы иметь необходимые права доступа.
- Найдите и измените или добавьте следующие строки:
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
-PasswordAuthentication no
— отключает вход по паролю.
-PermitRootLogin prohibit-password
— запрещает вход для пользователяroot
через пароль, но разрешает вход через SSH-ключи.
-PubkeyAuthentication yes
— включает аутентификацию по SSH-ключу.
Обратите внимание! Некоторые строки в файле конфигурации могут быть закомментированы (начинаться с символа#
). В таком случае удалите#
в начале строки, чтобы активировать параметр.
- Сохраните изменения и выйдите из редактора:
- Вnano
для этого нажмитеCtrl+S
, чтобы сохранить, иCtrl+X
, чтобы выйти.
- Перезапустите службу SSH для применения изменений:
sudo systemctl restart sshd
4. Проверка
Чтобы убедиться, что изменения вступили в силу, откройте новое окно терминала и выполните команду для подключения к серверу:
ssh login@ip-адрес
Если вы всё настроили правильно, при подключении не будет запрашиваться пароль, и вы войдёте в систему через SSH-ключ.
Закрываем порты сервера
Одной из важных мер защиты сервера является настройка фаервола. Он позволяет ограничить доступ к серверу, оставив открытыми только те порты, которые необходимы для работы сервера, и закрыв остальные.
Для настройки фаервола мы будем использовать утилиту UFW
(Uncomplicated Firewall). Чтобы установить её, выполните следующие команды:
sudo apt update
sudo apt install ufw -y
apt update
обновляет список пакетов на сервере, чтобы установить актуальные версии.apt install ufw -y
устанавливаетufw
без запроса на подтверждение.
Далее настройте фаервол следующим образом:
- Сначала запрещаем все входящие соединения и разрешаем все исходящие:
sudo ufw default deny incoming && sudo ufw default allow outgoing
Это правило блокирует все входящие соединения и разрешает все исходящие.
- Теперь разрешаем доступ по 22-му порту для SSH: Важно! Если этот шаг пропустить после предыдущего, вы можете потерять доступ к серверу.
sudo ufw allow 22
Если у вас есть статический IP-адрес, чтобы усилить защиту, вы можете разрешить доступ по SSH только с этого IP:
sudo ufw allow from <IP-адрес> to any port 22
Замените<IP-адрес>
на свой статический IP, с которого будет осуществляться доступ.
- Теперь разрешаем доступ на другие порты, например, для HTTP (80), HTTPS (443), или порт для приложения, например, Django (8000):
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw allow 8000 # Порт для вашего приложения
- Примените изменения и активируйте фаервол:
sudo ufw disable && sudo ufw enable
Командаsudo ufw disable
временно отключит фаервол для применения настроек, аsudo ufw enable
вновь его включит с новыми правилами.
- Для проверки статуса фаервола выполните:
sudo ufw status
Это покажет все текущие правила, включая разрешённые порты.
Смена порта SSH
По умолчанию SSH-сервер использует 22-й порт. Чтобы повысить безопасность сервера и уменьшить количество попыток несанкционированных подключений, можно сменить порт на другой.
Шаги для смены порта SSH:
- Откройте конфигурационный файл SSH:
sudo nano /etc/ssh/sshd_config
- Найдите строку, начинающуюся с
#Port 22
. Уберите решётку (если она есть), чтобы раскомментировать строку, и измените порт на желаемое значение:
Port 20022
(Вместо20022
выберите любой порт, который не используется другими службами.)
- Сохраните изменения и выйдите из редактора. Для этого в
nano
нажмитеCtrl+S
, затемCtrl+X
.
- Перезапустите SSH-сервис, чтобы применить изменения:
sudo systemctl restart sshd
- Разрешите доступ к новому порту в фаерволе:
sudo ufw allow 20022
- Уберите разрешение на доступ к старому 22-му порту:
sudo ufw delete allow 22
- Теперь для подключения к серверу используйте новый порт:
ssh -p 20022 login@ip-адрес
Установка Docker
Какая же современная серверная среда без Docker?
Официальная документация Docker предлагает стандартную процедуру установки, которая хорошо описана в моём посте "Docker 2.2 Установка Docker на Linux".
Однако существует гораздо более простой и быстрый способ установки с помощью скрипта.
Шаги для установки Docker:
- Скачайте скрипт установки:
curl -fsSL https://get.docker.com -o install-docker.sh
Эта команда использует утилитуcurl
для скачивания скрипта установки и сохраняет его в файлinstall-docker.sh
.
- Запустите скрипт:
sudo sh install-docker.sh
После выполнения этой команды скрипт установит Docker на ваш сервер.
Вот и всё! Теперь у вас установлен Docker, и процесс занял всего пару команд.
Оболочка терминала ZSH
Zsh — это мощная командная оболочка для терминала, основанная на Bash, но с рядом улучшений. Она предлагает более гибкие функции автодополнения, улучшенную поддержку плагинов, удобную работу с историей команд и настраиваемый внешний вид.
Для удобства работы с Zsh мы будем использовать фреймворк Oh My Zsh, который включает полезные плагины и настройки. В сочетании с темой PowerLevel10k внешний вид командной строки станет ещё более красивым и функциональным.
С подробной инструкции можно ознакомиться на GitHub.
Установка и настройка:
- Установите Zsh:
sudo apt install zsh -y
- Сделайте Zsh оболочкой по умолчанию:
sudo chsh -s /bin/zsh
- Установите Oh My Zsh:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
На этом этапе система предложит установить Zsh как стандартную оболочку, для этого выберитеY
и нажмите Enter.
- Скачайте тему PowerLevel10k:
git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
- Откройте конфигурационный файл Zsh:
sudo nano ~/.zshrc
- Найдите строку
ZSH_THEME
и замените её на:
ZSH_THEME="powerlevel10k/powerlevel10k"
Сохраните изменения, нажавCtrl + S
, и выйдите, нажавCtrl + X
.
- Примените изменения:
source ~/.zshrc
После этого запустится утилита настройки, с помощью которой вы сможете настроить внешний вид темы по своему вкусу.
Изменение настроек:
Если в процессе настройки вы что-то изменили не так, не переживайте. Для того, чтобы изменить настройки, используйте команду:
p10k configure
Atuin — удобная история предыдущих команд
Atuin — это инструмент, который значительно улучшает работу с историей команд в терминале. Он позволяет удобно искать, синхронизировать и просматривать все выполненные команды, а также предоставляет аналитику и статистику по вашим действиям.
Дополнительные возможности:
- Визуальное отображение истории команд.
- Поиск по выполненным командам.
- Синхронизация истории между устройствами.
- Статистика по использованию команд.
Ознакомьтесь с официальным репозиторием Atuin.
Установка:
- Чтобы установить Atuin, выполните команду:
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
- Для импорта истории из вашей текущей оболочки выполните:
atuin import auto
Если вы хотите импортировать историю из конкретной оболочки, заменитеauto
наbash
илиzsh
.
Использование:
После установки и импорта истории можно начать использовать Atuin для работы с историей команд. Просто нажмите клавишу вверх на клавиатуре для просмотра предыдущих команд.
Если команды не отображаются, перезапустите оболочку:
- Для Bash:
source ~/.bashrc
- Для Zsh:
source ~/.zshrc
Создание бэкапов при помощи ReBack
После настройки сервера и развёртывания проектов часто возникает вопрос: как организовать резервное копирование данных? Где их хранить? Как автоматизировать процесс?
Для решения этой задачи я написал программу ReBack. Она позволяет легко создавать бэкапы локально, отправлять их в S3-хранилище, а также следить за сроком их хранения, удаляя устаревшие файлы. Всё, что требуется, — скачать бинарный файл, настроить конфигурацию и добавить задачу в Cron.
Подробное описание доступно в репозитории. Буду рад вашим отзывам!
Внимание! Для работы программы вам необходимо S3-хранилище (можно развернуть на другом сервере MinIO или, например, приобрести у TimeWeb). Также работающий сервис того, что вы хотите бэкапить, например, если хотите бэкапить PostgreSQL из Docker, то должен быть установлен Docker и запущен сервис с PostgreSQL, почитать о запуске можно в посте "Docker 3. Контейнер с PostgreSQL".
Установка программы
- Скачиваем последнюю версию (на данный момент 0.2.0):
wget https://github.com/proDreams/reback/releases/download/v0.2.0/reback_linux
- Даём права на исполнение:
chmod +x reback_linux
- Создаём файл конфигурации:
touch settings.json
- Открываем файл для редактирования:
nano 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_path_style
— способ подключения:
-path
(например,https://s3.example.com/my-bucket
),
-virtual-host
(например,https://my-bucket.s3.example.com
).backup_dir
— директория для локального хранения бэкапов.elements
— массив объектов для бэкапа.
После настройки сохраняем изменения (CTRL+S
) и выходим (CTRL+X
).
Пример конфигурации для бэкапа PostgreSQL из Docker-контейнера
Допустим, что у вас на сервере есть PostgreSQL запущенный в Docker-контейнере. Для того, чтобы бэкапить базу данных необходимо в файл settings.json
в массив 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_linux backup
Примечание: Аргумент backup
обязателен. Без него программа не запустится.
Если конфигурация корректна, бэкапы создадутся локально и в S3.
Автоматизация с помощью Cron
- Откройте редактор задач Cron:
crontab -e
- Добавьте правило:
0 2 * * * /path/to/reback_linux backup >> /path/to/logs/backup.log 2>&1
-0 2 * * *
— запуск ежедневно в 2 часа ночи.
-/path/to/reback_linux backup
— путь до программы.
-/path/to/logs/backup.log
— файл для логов.
Теперь ReBack будет автоматически выполнять резервное копирование в заданное время.
Заключение
Настройка VPS — это важный этап, который обеспечивает безопасность и стабильность работы ваших проектов. Правильный выбор операционной системы, настройка SSH-доступа, фаервола и базовых инструментов позволяет сократить риски и подготовить сервер к развёртыванию приложений.
Следуя описанным шагам, вы сможете настроить сервер под свои нужды, минимизировать возможные угрозы и создать удобную среду для работы. Не забывайте регулярно обновлять систему, следить за безопасностью и документировать изменения. Эти простые меры помогут вам избежать множества проблем в будущем.
Надеюсь, эта статья станет полезным руководством для тех, кто только начинает работать с VPS, а также послужит шпаргалкой для опытных пользователей. Если у вас есть замечания или предложения по дополнению статьи - пишите в комментарии!
Yuras
9 января 2025 г. 20:15
как своевременно! у меня несколько доменов пустуют. давно хотел взять сервак и с нуля на нем грамотно сайт начать делать. )
благодарю!
Войдите чтобы добавить комментарий.