psj-notes
~/home ~/series ~/archive

Часть 03. Базовая настройка системы

30.07.2026 Серия: Руководство по настройке srv02-Helsinki 'система' 'локаль' 'swap' 'время'

Часть 03. Базовая настройка системы: локаль, время, имя, память

«Система без базовой настройки — это как человек без паспорта и часов. Вроде живёт, а кто он и когда — неизвестно.» — Воланд


Глава 1. Настройка локали ru_RU.UTF-8

Локаль (locale) — набор параметров, определяющих язык, кодировку, формат дат и чисел. Без правильной локали в логах появятся кракозябры, а кириллица будет отображаться некорректно.

Проверяем, какая локаль установлена сейчас:

locale

Ожидаемый вывод (по умолчанию):

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
...
LC_ALL=

Генерируем русскую локаль:

sudo locale-gen ru_RU.UTF-8

Ожидаемый вывод:

Generating locales (this might take a while)...
  ru_RU.UTF-8... done
Generation complete.

Устанавливаем её как основную:

sudo update-locale LANG=ru_RU.UTF-8 LANGUAGE=ru_RU:ru LC_ALL=ru_RU.UTF-8

Команда выполняется без вывода.

Применяем изменения в текущей сессии:

export LANG=ru_RU.UTF-8 LANGUAGE=ru_RU:ru LC_ALL=ru_RU.UTF-8

Проверяем результат:

locale

Ожидаемый вывод:

LANG=ru_RU.UTF-8
LANGUAGE=ru_RU:ru
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
...
LC_ALL=ru_RU.UTF-8

Все переменные теперь указывают на ru_RU.UTF-8.

Воланд удовлетворённо улыбнулся:
«Теперь сервер понимает, на каком языке с ним говорят. Русский, грамотный, с правильной кодировкой. И дата будет отображаться так, как привыкли мы, а не какой-нибудь техасец.»


Глава 2. Часовой пояс и синхронизация времени

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

Проверяем текущие настройки времени:

timedatectl

Ожидаемый вывод (пример):

               Local time: Sun 2025-01-14 15:30:00 MSK
           Universal time: Sun 2025-01-14 12:30:00 UTC
                 RTC time: Sun 2025-01-14 12:30:00
                Time zone: Etc/UTC (MSK, +0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Устанавливаем московский часовой пояс:

sudo timedatectl set-timezone Europe/Moscow

Команда выполняется без вывода.

Проверяем результат:

timedatectl

Ожидаемый вывод:

               Local time: Sun 2025-01-14 15:30:00 MSK
           Universal time: Sun 2025-01-14 12:30:00 UTC
                 RTC time: Sun 2025-01-14 12:30:00
                Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

NTP service: active — синхронизация времени через NTP включена и работает автоматически через systemd-timesyncd.

Коровьев прищурился на часы:
«Время — вещь удивительная. В Лондоне полдень, а у нас уже три часа дня. Но серверу всё равно — он работает и в UTC, и в MSK. Мы ставим время не ради сервера, а для нашего удобства: чтобы логи показывали, когда именно что-то произошло, а не когда солнце было в зените.»


Глава 3. Имя хоста (hostname)

Провайдеры часто дают серверам безликие имена вроде vps-12345. Меняем на осмысленное.

Проверяем текущее имя:

hostnamectl

Ожидаемый вывод (пример, имя может отличаться):

 Static hostname: vps-12345
       Icon name: computer-vm
         Chassis: vm
      Machine ID: xxxxxx
         Boot ID: xxxxxx
Virtualization: kvm
  Operating System: Ubuntu 24.04 LTS
            Kernel: Linux 6.8.0-xx-generic
      Architecture: x86_64

Устанавливаем новое имя хоста:

sudo hostnamectl set-hostname srv02-Helsinki

Команда выполняется без вывода.

Обновляем файл /etc/hosts, чтобы новое имя сопоставлялось с локальным адресом:

sudo sed -i 's/127\.0\.1\.1.*/127.0.1.1\tsrv02-Helsinki/' /etc/hosts

Проверяем результат:

hostnamectl

Ожидаемый вывод:

 Static hostname: srv02-Helsinki
       Icon name: computer-vm
...

Имя поменялось и теперь видно в приглашении командной строки.

Воланд задумчиво кивнул:
«Теперь у сервера есть имя. Не какое-то "vps-12345", а настоящее — srv02-Helsinki. Знаете, это важно — знать, как зовут того, кому вы поручаете свои секреты.»


Глава 4. Swap-файл 4 ГБ

Swap (файл подкачки) — область на диске, которую ядро Linux использует как расширение оперативной памяти. Когда RAM заканчивается, ядро вытесняет неиспользуемые страницы памяти на диск, освобождая место для активных процессов.

На сервере 2 ГБ оперативной памяти. Для базовых утилит этого хватает, но запуск Nginx, PHP-FPM и VPN может быстро исчерпать этот лимит. Без swap при заполнении RAM сработает OOM-killer (Out Of Memory killer) — он просто завершит самый крупный процесс (обычно веб-сервер или БД), чтобы спасти систему от зависания.

Swap не делает сервер быстрее — он страхует от падений. Пока данные в swap не уходят (используется немного), всё хорошо. Если swap заполняется — значит, не хватает физической памяти и пора увеличивать RAM на сервере.

Создаём swap-файл размером 4 ГБ (оптимально для системы с 2 ГБ RAM):

sudo fallocate -l 4G /swapfile

Команда выполняется без вывода.

Проверяем размер:

ls -lh /swapfile

Ожидаемый вывод:

-rw-r--r-- 1 root root 4.0G Jan 14 15:35 /swapfile

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

sudo chmod 600 /swapfile

Форматируем файл под swap:

sudo mkswap /swapfile

Ожидаемый вывод:

Setting up swapspace version 1, size = 4 GiB (4294967296 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Включаем swap:

sudo swapon /swapfile

Команда выполняется без вывода.

Проверяем, что swap активен:

sudo swapon --show

Ожидаемый вывод:

NAME      TYPE SIZE USED PRIO
/swapfile file   4G   0B   -2

Добавляем автоматическое подключение swap после перезагрузки:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Настраиваем параметр vm.swappiness — он определяет, насколько охотно ядро сбрасывает данные в swap. По умолчанию 60 — слишком агрессивно. Для сервера с 2 ГБ RAM оптимально 10:

echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf

Применяем настройку без перезагрузки:

sudo sysctl vm.swappiness=10

Ожидаемый вывод:

vm.swappiness = 10

Проверяем общую картину памяти:

free -h

Ожидаемый вывод:

               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.2Gi       224Mi       3.6Mi       726Mi       755Mi
Swap:          4.0Gi        13Mi       4.0Gi

Воланд предупреждает:
«Swap — это не замена оперативной памяти. Это последняя линия обороны. Если ваш сервер постоянно работает с заполненным swap — это как дышать через трубочку: жив, но качества жизни нет. Вам нужен сервер с большей RAM.»


Глава 5. Обновление системы

Образ ОС от провайдера может содержать устаревшие пакеты с известными уязвимостями. Обновляем всё:

sudo apt update

Ожидаемый вывод (сокращён):

Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
...
Reading package lists... Done
Building dependency tree... Done

Устанавливаем обновления:

sudo apt upgrade -y

Ожидаемый вывод (пример):

Reading package lists... Done
Building dependency tree... Done
...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

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

sudo apt autoremove -y && sudo apt autoclean

Ожидаемый вывод:

Reading package lists... Done
Building dependency tree... Done
...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

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


Финал части: Резюме Воланда

Параметр Статус
Системная локаль ru_RU.UTF-8
Часовой пояс Europe/Moscow
NTP-синхронизация
Hostname srv02-Helsinki
Swap 4 ГБ
vm.swappiness = 10
Системные пакеты обновлены

Воланд подводит итог третьей части:
«Система настроена. Есть имя, есть время, есть язык, есть запас памяти на чёрный день. Теперь можно ставить защиту — фаервол. Чтобы ни одна незваная душа не прошмыгнула мимо стражи.»

Комментарии

Комментарии пока не подключены.