Начальная настройка сервера на Debian 11
Для начала берем любой VPS. Я взял на reg.ru самый дешевый - Тариф «Base-1»:
- 15 ГБ SSD
- 1 ГБ RAM
- 1 vCPU
- Debian 11 Bullseye
- 370 р/мес (или 0,55 ₽/час)
При первом подключении к новому серверу желательно выполнить несколько шагов по базовой настройке, которые повысят безопасность и удобство использования.
Подключаемся по ssh
под root
:
ssh root@<server_ip>
Обновление Debian и создание юзера
Приступаем к настройке. Для начала обновим систему:
apt update && apt upgrade -y
Установим sudo
, если его нет:
apt install sudo
Теперь нам нужно создать нового юзера, под которым мы будем подключаться к серверу и выполнять все необходимые в дальнейшем операции. Почему нельзя использовать юзера
root
? Можно, но практика показывает, что из-за наличия неограниченных админских прав под рутом гораздо проще натворить непоправимых дел, даже по чистой случайности.
Создаем отдельного юзера www
(можно использовать любое название):
adduser www
Следуем инструкциям на экране (все поля можно оставить пустыми, главное сохранить пароль).
Добавляем пользователя в группу sudo
. Это позволит нашему пользователю www
выполнять команды с административными привилегиями, написав перед командой слово sudo
:
usermod -aG sudo www
Первоначальная настройка UFW
Чтобы разрешить только определенные подключения к определенным службам в Debian
можно использовать брандмауэры, например UFW
. Он позволяет сделать базовые настройки, для более сложных настроек лучше использовать iptables
.
- удобный интерфейс для управления политиками безопасности межсетевого экрана.
- является простым и популярным инструментом для настройки и управления брандмауэром в дистрибутивах
Ubuntu
иDebian
.
Установим брандмауэр UFW (пока мы все еще залогинены под рутом, поэтому без sudo
):
apt install ufw -y
Профили брандмауэра позволяют UFW управлять именованными наборами правил для установленных приложений. Профили для некоторых распространенных программ присутствуют в UFW по умолчанию. Их список пожно посмотреть командой ufw app list
. Статус самого UFW можно проверить коммандой ufw status
.
Например, для OpenSSH и http/https уже есть профили, которые мы и используем (на данном этапе настройки другие нас не интересуют):
ufw allow OpenSSH
|
|
Запускаем сервис:
ufw enable
Вводим y
и Enter
, чтобы подтвердить активацию брандмауэра.
В итоге, ответ на запрос статуса ufw status
должен быть примерно таким:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
WWW Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
WWW Full (v6) ALLOW Anywhere (v6)
Готово. UFW блокирует все соединения, кроме SSH и http/https. В дальнейшем мы будем добавлять новые правила1 по мере необходимости.2
Установка вспомогательных программ
Для дальнейшей работы нам нужно установить несколько полезных инструментов и зависимостей.
sudo apt install -y zsh neovim ripgrep tmux tree htop git curl wget zip unzip build-essential ca-certificates gnupg lsb-release
zsh
- одна из современных командных оболочек UNIX (замена bash);neovim
- мощный текстовый редактор;ripgrep
- хорошая альтернативаgrep
tmux
- терминальный мультиплексор;tree
- просмотр дерева директорий в командной строке;htop
- программа, предназначенная для вывода на терминал списка запущенных процессов и информации о них;git
- система контроля версий (Уже в составе Debian);curl
- кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL. (Уже в составе Debian);wget
- свободная неинтерактивная консольная программа для загрузки файлов по сети. Поддерживает протоколы HTTP, FTP и HTTPS, а также поддерживает работу через HTTP прокси-сервер. (Уже в составе Debian);zip
- это утилита для сжатия и упаковки файлов;unzip
- распаковывает zip-архивы;build-essential
- метапакет (не является программой сам по себе). Устанавливает нужные нам зависимости:g++
,gcc
,libc-dev
,make
;ca-certificates
- pEM-файлы CA сертификатов позволяют приложениям на основе SSL проверять подлинность SSL-соединений. Необходима для установки Docker;gnupg
- свободная программа для шифрования информации и создания электронных цифровых подписей. Необходима для установки Docker;lsb-release
- позволяет использовать одноименную утилиту для получения информации об используемом дистрибутиве Linux. Необходима для установки Docker.
Установка OhMyZsh
+ Powerlevel10k
Этот шаг не обязателен. Просто добавляет удобства и продуктивности дальнейшей работе.
Для начала убедимся, что zsh
установлен:
zsh --version
Если все в порядке, то в терминале будет показана установленная версия, например:
zsh 5.8 (x86_64-debian-linux-gnu)
Теперь установим его оболочкой по умолчанию:
chsh -s $(which zsh)
И переподключимся к серверу. После реконнекта на экране появится сообщение с предложением сконфигурировать zsh
.
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~). This function can help you with a few settings that should
make your use of the shell easier.
You can:
(q) Quit and do nothing. The function will be run again next time.
(0) Exit, creating the file ~/.zshrc containing just a comment.
That will prevent this function being run again.
(1) Continue to the main menu.
(2) Populate your ~/.zshrc with the configuration recommended
by the system administrator and exit (you will need to edit
the file by hand, if so desired).
--- Type one of the keys in parentheses ---
Выбираем вариант 0
(создать файл заглушку) и жмем Enter
. На следующем шаге этот файл настроек за нас создаст великолепный Oh My Zsh
!
Установка OhMyZsh
Oh My Zsh
- восхитительный, управляемый сообществом фреймворк с открытым исходным кодом для управления вашей конфигурациейZsh
. Он поставляется в комплекте с тысячами полезных функций, помощников, плагинов, тем и нескольких вещей, которые заставят вас вскрикнуть… “Oh My ZSH!”3
Установить его можно двумя способами: через wget
, или через curl
. Выбирайте любой, так как мы имеем в своем арсенале обе утилиты.
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
или
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
При успешной установке вы увидите красивую надпись о том, что фрэймворк установлен.
Установка темы Powerlevel10k
Powerlevel10k
- это тема для Zsh
. Она популярная, кастомизируемая, быстрая! и имеет много плюшек.
Для установки достаточно клонировать репозиторий в определенную папку:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
На этом же шаге можно установить два плагина:
zsh-syntax-highlighting
- удобная подсветка комманд оболочки в терминале;zsh-autosuggestions
- предлагает команды при вводе на основе истории.
Выполним поочередно две команды (клонирование репозиториев):
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions
Теперь нужно отредактировать файл настроек zsh
, заменив строку с используемой темой. Открываем файл ~/.zshrc
в nvim
:
nvim ~/.zshrc
Закомментируем дефолтную тему и добавим установленную:
# ZSH_THEME="robbyrussell"
ZSH_THEME="powerlevel10k/powerlevel10k"
Добавим установленные ранее плагины:
# строка 88-89
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
h
j
k
l
или←
↓
↑
→
- навигацияi
- режим редактированияesc
- выход из режима редактирования:wq
- выйти с сохранением изменений:23
- перейти к 23 строке^
и$
- переход в начало и конец строки
Для того, чтобы изменения вступили в силу и тема с плагинами активировались нужно перезагрузить файл настроек следующей коммандой:
source ~/.zshrc
Сразу после этого запустится настройка темы в режиме вопрос-ответ, где нужно просто нажимать нужный варианты ответа. Настройку всегда можно запустить заново командой p10k configure
, поэтому не бойтесь ошибиться. По окончании настройки внешний вид терминала изменится.
Установка Docker и Docker Compose на Debian 11
sudo apt remove docker docker-engine docker.io containerd runc
Установка репозитория
Все нужные зависимости у нас уже установлены, поэтому перейдем к следующему шагу, описанному в официальной документации Docker4:
Добавим официальный GPG key
Docker’а:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Следующей коммандой установим репозиторий:
echo "deb [arch="$(dpkg --print-architecture)" \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Установка Docker
Обновим индекс пакетов:
sudo apt update
И, наконец, установим Docker Engine
, containerd
, и Docker Compose
:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Проверим статус сервиса:
sudo systemctl status docker
В ответ должны получить нечто похожее:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-12-09 23:45:01 MSK; 31s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 183873 (dockerd)
Tasks: 7
Memory: 33.8M
CPU: 357ms
CGroup: /system.slice/docker.service
└─183873 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Добавление юзера в группу docker
Добавим нашего юзера в группу docker
, чтоб он мог им управлять:
sudo usermod -aG docker ${USER}
Проверим, каким группам принадлежит юзер www
:
groups ${USER}
Вывод в терминале должен быть таким: www : www sudo docker
. Если так - все получилось успешно. Чтобы ваше членство в группе было активировано - переподключимся к серверу.
Автозапуск docker.service
Последнее, что нужно сделать - настроить автозапуск Docker при загрузке системы. Сделать это можно при помощи systemd
:
systemd
— подсистема инициализации и управления службами в Linux.
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Создание Swap File
Проверим свободное место на диске
|
|
Размер файла зависит от оперативной памяти серверв. Простое правило - создаем swap в два раза больше, чем RAM. В нашем случае RAM 1GB, значит swap file = 2GB.
Создание файла подкачки
|
|
Пояснения:
if=/dev/zero
: Указывает входной источник данных. В данном случае,/dev/zero
предоставляет поток нулевых байт.of=/swapfile
: Указывает выходной файл, который будет создан. В данном случае, это имя файла подкачки (swapfile
).bs=1M
: Указывает размер блока данных для копирования.1M
означает один мегабайт.count=2048
: Указывает количество блоков для копирования. Здесь2048
означает, что будет создан файл размером2048
блоков по 1 мегабайту, то есть 2048 мегабайта (или 2 гигабайта).
Таким образом, данная команда создаст файл /swapfile
размером 2 гигабайта, заполнив его нулевыми байтами. Файл подкачки может быть использован операционной системой для временного хранения данных, когда физическая память (RAM) исчерпана, и он помогает избежать ситуаций нехватки памяти.
В терминал выведется результат:
|
|
Задаем файлу нужные права:
sudo chmod 600 /swapfile
Укажем ОС, что созданный объект должен использоваться как файл подкачки:
sudo mkswap /swapfile
Вывод в терминал:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=2ad8b3d7-f274-47ed-894e-4cb54183fba5
Активируем файл подкачки:
sudo swapon /swapfile
Проверим, все ли идет по плану:
sudo swapon --show
Вывод в терминал:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
Все операции, которые мы предприняли выше, временны. Как только сервер будет перезагружен, они отменятся.
Делаем файл постоянным
Чтобы сделать изменения постоянными, необходимо отредактировать /etc/fstab
.
Делаем резервную копию файла перед внесением изменений:
|
|
Чтобы внести изменения в файл можно пойти двумя путями:
- Использовать команду
|
|
- Открыть текстовый редактор и добавить строку вркчную
|
|
|
|
Сохранить и закрыть: :wq
Настройка параметров
У файла подкачки существуют параметры, которые сообщают ОС, как часто его нужно использовать. Это называется «свопингом» и может иметь значение в пределах 0 - 100. Если значение ближе к 100 - ядро будет перемещать в раздел подкачки больше информации чтобы освободить память. При значениях ближе к нулю, система будет использовать подкачку только при крайней необходимости.
Выполним команду:
echo 'vm.swappiness=60' | sudo tee -a /etc/sysctl.conf
Или отредактируем /etc/sysctl.conf
вручную
|
|
Добавим в конец строку
|
|
Теперь перезагркзим sysctl
файл конфигурации
|
|
Удаление файла подкачки
Если вам не нужен файл подкачки или вам нужно его увеличить - вы можете отключить уже активный файл в системе, используя следующую команду.
|
|
Теперь можно создать новый файл большего размера, используя описанные выше шаги, или отключить навсегда удалить запись из файла /etc/fstab
.
Использованы материалы статьи Initial Server Setup with Debian 11