# Инструкции для UNIX-систем — полный текст документации
> Полный текст раздела «Инструкции для UNIX-систем» документации Timeweb Cloud в markdown. Каждая статья начинается с заголовка первого уровня и ссылки на свою каноническую страницу.
Индекс: https://timeweb.cloud/docs/unix-guides/llms.txt
Статей: 74
Последнее обновление: 2026-08-03
# Инструкции для UNIX-систем
Source: https://timeweb.cloud/docs/unix-guides?utm_source=llms_txt&utm_medium=ai
В разделе собраны инструкции по настройке облачных и физических серверов с установленными Unix-подобными системами.
- [Подключение к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh)
- [Подключение к серверу по SFTP](https://timeweb.cloud/docs/unix-guides/sftp)
- [Авторизация по SSH-ключу](https://timeweb.cloud/docs/unix-guides/ssh-key-authentication)
- [Смена или сброс пароля root](https://timeweb.cloud/docs/unix-guides/root-password-reset)
- [Смена пароля root для MySQL](https://timeweb.cloud/docs/unix-guides/mysql-root-password-reset)
- [Добавление пользователей](https://timeweb.cloud/docs/unix-guides/adding-users)
- [Управление правами доступа](https://timeweb.cloud/docs/unix-guides/permissions-management)
- [Изменение стандартного порта SSH](https://timeweb.cloud/docs/unix-guides/changing-default-ssh-port)
- [Защита SSH от подбора пароля. Fail2ban](https://timeweb.cloud/docs/unix-guides/block-ssh-brute-force-attacks-fail2ban)
- [Настройка подключения через SSH в VSCode](https://timeweb.cloud/docs/unix-guides/configuring-ssh-connection-in-vscode)
- [Создание дампа базы и восстановление данных](https://timeweb.cloud/docs/unix-guides/database-dump-and-restore)
- [Установка LAMP на Ubuntu](https://timeweb.cloud/docs/unix-guides/installing-lamp-on-ubuntu)
- [Установка phpMyAdmin на Ubuntu с LAMP](https://timeweb.cloud/docs/unix-guides/installing-pma-on-ubuntu-with-lamp)
- [Установка SSL на Nginx](https://timeweb.cloud/docs/unix-guides/ustanovka-ssl-na-nginx)
- [Установка модулей PHP (CentOS)](https://timeweb.cloud/docs/unix-guides/installing-php-modules-centos)
- [Установка модулей PHP (Debian / Ubuntu)](https://timeweb.cloud/docs/unix-guides/installing-php-modules-debian-ubuntu)
- [Настройка параметров PHP (CentOS)](https://timeweb.cloud/docs/unix-guides/setting-php-options-centos)
- [Настройка параметров PHP (Debian / Ubuntu)](https://timeweb.cloud/docs/unix-guides/setting-php-options-debian-ubuntu)
- [Настройка перенаправлений](https://timeweb.cloud/docs/unix-guides/setting-up-redirects)
- [Настройка перенаправлений (Nginx)](https://timeweb.cloud/docs/unix-guides/setting-up-redirects-nginx)
- [Настройка FTP в Ubuntu](https://timeweb.cloud/docs/unix-guides/ftp-setup-in-ubuntu-20-04)
- [Оптимизация MySQL с помощью MySQLTuner](https://timeweb.cloud/docs/unix-guides/optimizing-mysql-with-mysqltuner)
- [Сканирование с помощью ClamAV](https://timeweb.cloud/docs/unix-guides/scanning-with-clamav)
- [Управление службами в systemd](https://timeweb.cloud/docs/unix-guides/service-management-in-systemd)
- [Логирование в systemd](https://timeweb.cloud/docs/unix-guides/logging-systemd)
- [Аудит системных событий](https://timeweb.cloud/docs/unix-guides/auditing-system-events)
- [Добавление дополнительного IP](https://timeweb.cloud/docs/unix-guides/adding-ip-addresses)
- [Добавление и удаление диска](https://timeweb.cloud/docs/unix-guides/adding-removing-disk)
- [Изменение размера диска](https://timeweb.cloud/docs/unix-guides/disk-resizing)
- [Монтирование резервных копий](https://timeweb.cloud/docs/unix-guides/mounting-backups)
- [Создание swap, изменение его размера](https://timeweb.cloud/docs/unix-guides/creating-and-resizing-swap)
- [Установка и удаление программ. Менеджеры пакетов](https://timeweb.cloud/docs/unix-guides/package-management)
- [Установка графической оболочки XFCE на Ubuntu](https://timeweb.cloud/docs/unix-guides/install-xfce-gui-ubuntu)
- [Настройка iptables](https://timeweb.cloud/docs/unix-guides/iptables-setup)
- [Удаленный доступ к MySQL](https://timeweb.cloud/docs/unix-guides/remote-access-to-mysql)
- [Установка произвольной ОС на сервер](https://timeweb.cloud/docs/unix-guides/ustanovka-proizvolnoj-os-na-server)
- [Установка QEMU-агента](https://timeweb.cloud/docs/unix-guides/installing-qemu-agent)
- [Установка Zabbix-агента](https://timeweb.cloud/docs/unix-guides/installing-zabbix-agent)
- [Установка и работа с PostgreSQL](https://timeweb.cloud/docs/unix-guides/installing-and-using-postgresql)
- [Установка почтового сервера iRedMail](https://timeweb.cloud/docs/unix-guides/installing-iredmail)
- [Настройка почтового сервера iRedMail](https://timeweb.cloud/docs/unix-guides/configuring-iredmail)
- [Установка SSL на сервер с Keitaro](https://timeweb.cloud/docs/unix-guides/installing-ssl-on-server-with-keitaro)
- [Запуск Wordpress на сервере c Ubuntu](https://timeweb.cloud/docs/unix-guides/wordpress-on-ubuntu)
- [Запуск бота в фоновом режиме](https://timeweb.cloud/docs/unix-guides/zapusk-bota-v-fonovom-rezhime)
- [Установка сертификатов Минцифры](https://timeweb.cloud/docs/unix-guides/ustanovka-sertifikatov-mincifry)
- [Создание образа виртуальной машины для облачного сервера](https://timeweb.cloud/docs/unix-guides/sozdanie-obraza-virtualnoj-mashiny-dlya-oblachnogo-servera)
- [Подготовка образа для создания облачного сервера](https://timeweb.cloud/docs/unix-guides/podgotovka-obraza-dlya-sozdaniya-oblachnogo-servera)
- [Создание и развертывание образа диска с помощью утилиты dd](https://timeweb.cloud/docs/unix-guides/creating-images-with-dd)
- [Установка Minecraft на Ubuntu](https://timeweb.cloud/docs/unix-guides/ustanovka-minecraft-na-ubuntu)
- [Установка Bareos](https://timeweb.cloud/docs/unix-guides/bareos-install)
- [Настройка bastion-хоста](https://timeweb.cloud/docs/unix-guides/configuring-bastion-host)
- [Запуск сервера Minecraft](https://timeweb.cloud/docs/unix-guides/zapusk-servera-minecraft)
- [Настройка сети Outline](https://timeweb.cloud/docs/unix-guides/nastrojka-outline)
- [Изменение настроек DNS-серверов](https://timeweb.cloud/docs/unix-guides/izmenenie-nastroek-dns-serverov)
- [Перенос сервера с большим диском на меньший с помощью rsync](https://timeweb.cloud/docs/unix-guides/perenos-servera-s-bolsim-diskom-na-mensii-s-pomoshhiu-rsync)
- [Установка n8n](https://timeweb.cloud/docs/unix-guides/installing-n8n)
- [Установка OpenClaw](https://timeweb.cloud/docs/unix-guides/openclaw)
- [Установка Paperclip](https://timeweb.cloud/docs/unix-guides/paperclip)
- [Установка Hermes Agent](https://timeweb.cloud/docs/unix-guides/hermes)
- [Установка Cloud Hosted Router](https://timeweb.cloud/docs/unix-guides/chr-install)
Диагностика и решение проблем
- [Базовая диагностика при проблемах в работе сайта](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/basic-diagnostics)
- [Проблемы с базой данных](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/database-issues)
- [Анализ дискового пространства: ncdu, du](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-space-analysis-ncdu-du)
- [Данные о дисках: df, lsblk, parted, fdisk](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-data-df-lsblk-parted-fdisk)
- [Контроль нагрузки и процессов: top, htop, atop](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/load-and-process-control-top-htop-atop)
- [Завершение процессов OOM Killer](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/ending-processes-oom-killer)
- [Переполнение inodes](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/inodes-overflow)
- [Проверка файловой системы](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/file-system-check)
- [Другие возможные проблемы](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/other-issues)
- [Ускорение работы сайта: перенос MySQL в tmpfs](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/improving-site-performance-mysql-to-tmpfs)
# Подключение к серверу по SSH
Source: https://timeweb.cloud/docs/unix-guides/ssh?utm_source=llms_txt&utm_medium=ai
Реквизиты для доступа к серверу под пользователем root (IP-адрес и пароль) можно найти на Дашборде сервера.

Работать с сервером по SSH можно через [веб-консоль в панели управления](https://timeweb.cloud/docs/cloud-servers/manage-servers/console), но это не всегда удобно.
Лучше всего подключиться к серверу по SSH с помощью специального ПО — в зависимости от используемой на вашем компьютере операционной системы оно может быть либо встроенным в систему, либо его потребуется установить дополнительно.
## Linux, MacOS, Windows 10
При работе с **Linux** или **MacOS** вы можете использовать встроенную в систему утилиту — **терминал**.
В **Windows**, начиная с Windows 10 1809, имеется встроенный SSH-клиент, и вы можете использовать для работы по SSH **Windows PowerShell**.
Для установки соединения с сервером:
1. На странице «Дашборд» вашего сервера скопируйте команду для подключения по SSH.

2. Запустите терминал / PowerShell и вставьте скопированную команду щелчком правой кнопки мыши.
Вы также можете ввести команду вручную, в формате:
```shell
ssh root@IP_адрес_сервера
```
3. При первом подключении вы увидите уведомление для подтверждения соединения. Введите **yes** и нажмите Enter.
4. Далее появится запрос пароля. Скопируйте root-пароль со страницы «Дашборд» и вставьте его щелчком правой кнопки мыши. Нажмите Enter.
Вы также можете вводить пароль вручную. Будьте внимательны, так как символы не будут отражены на экране.
Если все данные указаны правильно, соединение будет установлено.
## Windows без OpenSSH
Пользователям старых версий **Windows** для подключения по SSH потребуется дополнительная программа — SSH-клиент, например, PuTTY. Ее можно скачать с [официального сайта](https://www.chiark.greenend.org.uk/~sgtatham/putty/) (также доступна неофициальная [сборка](https://putty.org.ru/download) на русском языке).
После установки PuTTY на своем компьютере запустите ее и укажите необходимые настройки для соединения с сервером:
- **Host Name** — IP-адрес сервера;
- **Port** — 22 (по умолчанию).
Вы также можете сохранить параметры данной сессии, задав любое удобное имя (например, vds1) в поле Saved Sessions и нажав Save.
После нажмите на кнопку **Open**.
При первом подключении вы увидите дополнительное окно для подтверждения соединения. Нажмите **Yes / Да** .
Далее откроется консоль, где вам будет необходимо ввести логин и пароль доступа:
- **login as** — укажите root;
- **password** — введите пароль (будьте внимательны, так как символы пароля не будут отражены на экране; можно скопировать пароль из полученного письма и вставить его щелчком правой кнопки мыши).
После нажмите Enter. Если все данные указаны правильно, соединение будет установлено. Далее все команды для сервера вы будете вводить в окне консоли.
# Подключение к серверу по SFTP
Source: https://timeweb.cloud/docs/unix-guides/sftp?utm_source=llms_txt&utm_medium=ai
SFTP (SSH File Transfer Protocol) — безопасный протокол для работы с файлами на удаленном сервере. Позволяет передавать файлы, создавать каталоги, управлять правами и многое другое. Для пользователя работа по SFTP выглядит аналогично работе по FTP, при этом соединение осуществляется на базе защищенного протокола SSH.
Для подключения по SFTP можно воспользоваться FTP-клиентом, например, FileZilla.
## Реквизиты подключения
Стандартно для подключения используются следующие реквизиты:
- **Хост**: IP-адрес вашего сервера (можно найти на главной странице сервера в панели управления)
- **Имя пользователя**: имя пользователя, созданного на сервере
- **Пароль**: пароль данного пользователя
- **Порт**: 22
Если для подключения используется IPv6-адрес, то в интерфейсе FileZilla его необходимо указать в квадратных скобках, например: `[295f:e05b:3dc5:bed2:2350:9648:ef5f:c304]`.
Если у вас настроена [авторизация по RSA-ключу](https://timeweb.cloud/docs/unix-guides/ssh-key-authentication), то также потребуется указать кодовую фразу (если она была задана при создании RSA-ключа) и загрузить содержимое публичного ключа.
**Не рекомендуется подключаться по SFTP от имени root-пользователя**. Помимо того, что это небезопасно, это также менее удобно. После подключения под root вы по умолчанию окажетесь в домашней директории root (то есть `/root`), и для перехода к директории с вашими проектами потребуется перемещаться по файловой структуре. Кроме того, если вы загрузите файлы от имени root, для них будут выставлены пользователь и группа root:root, и веб-сервер не сможет прочитать их. Как следствие, на сайте появятся ошибки доступа к новым файлам.
## Fastpanel
При установки панели будет создан пользователь `fastuser`. Для подключения под данным пользователем необходимо использовать реквизиты:
- Хост: IP-адрес сервера
- Имя пользователя: `fastuser`
- Пароль: пароль пользователя `fastuser` (обратите внимание, что он отличается от пароля `root`)
- Порт: 22
После подключения вы окажетесь в директории `/var/www/fastuser/data`.
Директории сайтов размещаются по адресу: `/var/www/fastuser/data/www/имя_домена`.
Если вы создали дополнительного пользователя (например, `user`), для подключения используйте его реквизиты:
- Хост: IP-адрес сервера
- Имя пользователя: `user`
- Пароль: пароль пользователя `user`
- Порт: 22
После подключения вы окажетесь в директории `/var/www/user/data`.
Директории сайтов размещаются по адресу: `/var/www/user/data/www/имя_домена`.
## VestaCP
По умолчанию в VestaCP создан пользователь `admin`. Для подключения под данным пользователем необходимо использовать реквизиты:
- Хост: IP-адрес сервера
- Имя пользователя: `admin`
- Пароль: пароль пользователя `admin` (по умолчанию совпадает с паролем `root`)
- Порт: 22
После подключения вы окажетесь в директории `/home/admin/`.
Директории сайтов размещаются по адресу: `/home/admin/web/имя_домена`.
Если вы создали в VestaCP дополнительного пользователя (например, `user`) и добавили сайт в разделе WEB от его имени, подключиться по SFTP нужно с его реквизитами:
- Хост: IP-адрес сервера
- Имя пользователя: `user`
- Пароль: пароль пользователя `user`
- Порт: 22
После подключения вы окажетесь в директории `/home/user/`.
Директории сайтов размещаются по адресу: `/home/user/web/имя_домена`.
## Ispmanager
Перед подключением по SFTP убедитесь, что у нужного пользователя есть shell-доступ. Это можно проверить в ispmanager в разделе «Учетные записи» — «Пользователи» — выделить нужного пользователя — «Изменить».
Необходимо, чтобы был отмечен пункт «Доступ к shell».
По умолчанию в ispmanager создан пользователь `www-root`. Если вы размещали сайты в разделе «WWW-домены» от имени данного пользователя, то подключиться по SFTP можно с реквизитами:
- Хост: IP-адрес сервера
- Имя пользователя: `www-root` (по умолчанию совпадает с паролем `root`)
- Пароль: пароль пользователя `www-root`
- Порт: 22
После подключения вы окажетесь в директории `/var/www/www-root/data/`.
Директории сайтов размещаются по адресу `/var/www/www-root/data/www/имя_домена`.
Если вы создали дополнительного пользователя (например, `user`) и добавляли сайты от его имени, для подключения используйте его реквизиты:
- Хост: IP-адрес сервера
- Имя пользователя: `user`
- Пароль: пароль пользователя `user`
- Порт: 22
После подключения вы окажетесь в директории `/var/www/user/data`.
Директории сайтов размещаются по адресу `/var/www/user/data/www/имя_домена`.
## BitrixVM
По умолчанию в системе BitrixVM создан пользователь `bitrix`. При подключении по SFTP необходимо использовать реквизиты:
- Хост: IP-адрес сервера
- Имя пользователя: `bitrix`
- Пароль: пароль пользователя `bitrix` (по умолчанию совпадает с паролем `root`)
- Порт: 22
После подключения вы окажетесь в директории `/home/bitrix/`.
Директории сайтов размещаются по адресам `/home/bitrix/www/` (для основного сайта) и `/home/bitrix/ext_www/имя_домена` (для дополнительных сайтов, [созданных средствами BitrixVM](https://timeweb.cloud/docs/control-panels/bitrixvm/create-site)).
## LAMP
По умолчанию в такой сборке для работы веб-серверов используется пользователь `www-data`. Для того чтобы работать от другого пользователя, в том числе подключаться по SFTP, необходимо выполнить настройку по инструкции ниже.
[Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните следующие действия:
1. Создайте нового SFTP-пользователя (в примере — `sftpuser`) с домашней директорией `/var/www/`:
```shell
useradd -d /var/www/ sftpuser
```
2. Установите пароль для нового пользователя:
```shell
passwd sftpuser
```
Появится запрос на ввод пароля — введите его. Обратите внимание, что символы не будут отражены на экране во время ввода.
3. Добавьте пользователя к группе `www-data`:
```shell
usermod -aG www-data sftpuser
```
Сделайте группу `www-data` основной:
```shell
usermod -g www-data sftpuser
```
4. Откройте конфигурационный файл Nginx:
```shell
nano /etc/nginx/nginx.conf
```
В нем замените строку:
```shell
user www-data;
```
На:
```shell
user sftpuser;
```
И перезапустите Nginx:
```shell
service nginx restart
```
Проверьте, от какого пользователя запускается веб-сервер Nginx. Это можно сделать командой:
```shell
ps auxwwww | grep nginx
```
В выводе команды видим, что запуск выполняется от `sftpuser`.
6. Для веб-сервера Apache2 пользователь может быть задан в одном из следующих файлов:
В Ubuntu / Debian:
```shell
/etc/apache2/apache2.conf
```
Или:
```shell
/etc/apache2/envvars
```
В CentOS:
```shell
/etc/httpd/httpd.conf
```
Или:
```shell
/etc/httpd/envvars
```
В нашей сборке LAMP задавать переменные необходимо в файле `/etc/apache2/envvars`.
В целом же, чтобы проверить, в каком файле необходимо задавать переменные, необходимо его просмотреть — в том из них, который будет содержать `www-data`, необходимо заменить этот значение на `sftpuser`.
Откройте конфигурационный файл с переменными сервера Apache2:
В Ubuntu / Debian:
```shell
nano /etc/apache2/envvars
```
В CentOS:
```shell
nano /etc/httpd/envvars
```
Замените строку:
```shell
export APACHE_RUN_USER=www-data
```
На:
```shell
export APACHE_RUN_USER=sftpuser
```
Далее перезапустите веб-сервер. Команда для Debian/Ubuntu:
```shell
service apache2 restart
```
Для CentOS:
```
service httpd restart
```
И проверьте, от какого пользователя запускается Apache2, с помощью команды:
```shell
ps auxwwww | grep apache
```
7. Установите корректные права, владельца и группу для директории, где будут храниться сайты (домашней директории пользователя), поочередно выполнив команды:
```shell
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;
chown -R sftpuser:www-data /var/www/
```
На этом настройка завершена.
Теперь необходимо проверить подключение по SFTP, используя следующие реквизиты для авторизации:
- Хост: IP-адрес сервера
- Имя пользователя: `sftpuser`
- Пароль: пароль пользователя `sftpuser` (заданный на шаге 2)
- Порт: 22
# Авторизация по SSH-ключу
Source: https://timeweb.cloud/docs/unix-guides/ssh-key-authentication?utm_source=llms_txt&utm_medium=ai
Использование SSH-ключа для подключения к серверу позволяет сделать работу более безопасной (снизится вероятность взлома учетной записи) и более удобной (не будет необходимости при каждом соединении вводить пароль).
Настройка авторизации по ключу состоит из создания ключа на локальном компьютере и копирования его на сервер.
> [!NOTE]
> Скопировать ключ на облачный сервер также можно с помощью панели управления — при [создании нового VDS](https://timeweb.cloud/docs/cloud-servers/manage-servers/create-server) или [переустановке системы](https://timeweb.cloud/docs/cloud-servers/manage-servers/os-reinstall). Кроме того, вы можете [добавить ключ для уже существующего сервера](https://timeweb.cloud/docs/cloud-servers/manage-servers/ssh-keys#dobavlenie-klucha-na-sushchestvuushchij-server).
## Linux, MacOS, Windows 10
### **Создание SSH-ключей**
Эта инструкция подойдет для ОС Linux, MacOS, а также для версий Windows 10 начиная с 1809 — в них доступен встроенный SSH-клиент. Если у вас более ранняя версия Windows, воспользуйтесь инструкцией из пункта [Старые версии Windows (без OpenSSH)](https://timeweb.cloud/docs/unix-guides/ssh-key-authentication#starye-versii-windows-bez-openssh).
Запустите терминал или Windows PowerShell на вашем компьютере и выполните команду:
```shell
ssh-keygen
```
Вы увидите примерно следующее сообщение:
```shell
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
```
Нажмите **Enter** — ключ будет сохранен в указанную директорию по умолчанию.
Далее вам будет предложено задать пароль (кодовую фразу) для ключа. Вы можете задать ее или оставить пустой, просто нажав Enter. Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу.

Процедура создания ключей завершена, ключи сохранены в директории `~/.ssh/` в файлах `id_rsa` и `id_rsa.pub`.
Можно скопировать значение публичного ключа прямо в терминале. Чтобы вывести его в терминал, выполните:
```shell
cat ~/.ssh/id_rsa.pub
```
Теперь публичный ключ необходимо скопировать на сервер.
### **Копирование ключа на сервер**
Выполните в терминале следующую команду, указав вместо user имя пользователя, созданного на сервере, а вместо server — IP-адрес вашего сервера.
**Для Linux и MacOS:**
```shell
ssh-copy-id user@server
```
Например:
```shell
ssh-copy-id root@2.59.43.145
```
**Для Windows:**
```shell
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh user@server "cat >> .ssh/authorized_keys"
```
Например:
```shell
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@213.171.8.153 "cat >> .ssh/authorized_keys"
```
В результате содержимое файла с публичным ключом `id_rsa.pub` будет скопировано в файл `~/.ssh/authorized_keys` на сервере, и в дальнейшем вы сможете устанавливать соединение с сервером, используя команду:
```shell
ssh user@server
```
Например:
```shell
ssh root@213.171.8.153
```

Если вам не удается подключиться с использованием ключа, проверьте логи SSH на сервере:
```shell
sudo journalctl -u ssh
```
Если в логах наблюдается строка:
```shell
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
```
Значит, на вашем сервере отключена поддержка ssh-rsa (RSA с SHA‑1). В качестве решения, вы можете разрешить авторизацию с таким ключом, добавив в файл `/etc/ssh/sshd_config.d/enable_rsa_keys.conf` следующую строку
```shell
HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa
```
После чего перезапустите службу:
```shell
sudo systemctl restart sshd
```
Или, что более правильно, создайте другой ключ с более стойким шифрованием. Например, для создания сильного RSA-ключа используйте:
```
ssh-keygen -t rsa -b 4096 -o -a 100
```
Или для использования `ed25519`:
```shell
ssh-keygen -t ed25519
```
И загрузите новый ключ повторно на сервер.
## Старые версии Windows (без OpenSSH)
Если вы используете версию Windows без OpenSSH, вам потребуется специальная программа — PuTTYgen. Вы можете скачать дистрибутив `puttygen.exe` с [официального сайта PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html).
### Создание SSH-ключей с помощью PuTTYgen
1. Запустите программу, в открывшемся окне выберите RSA в блоке «Type of key to generate» и нажмите «Generate».
2. Пока создается ключ, водите мышью в хаотичном порядке в пространстве под строкой загрузки для генерации случайных значений.
3. После того, как ключ будет создан, в окне программы вы сможете задать «Key passphrase» (кодовую фразу) для ключа. Это необязательно, вы можете оставить строку пустой. Если вы решите задать кодовую фразу, обратите внимание, что ее потребуется вводить при каждой авторизации по ключу.
4. Далее сохраните созданные ключи, нажав на кнопки «Save public key» и «Save private key», например, под именами `id_rsa.pub` и `mykey.ppk`.
5. Также скопируйте и сохраните в любом текстовом файле содержимое окна «Public key for pasting…» — оно потребуется при копировании созданного ключа на сервер.
На этом процедура создания ключей завершена.
### **Копирование ключа на сервер с помощью pageant**
В процессе копирования ключей вам потребуется утилита `pageant`. Вы можете скачать дистрибутив pageant.exe с [официального сайта PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html).
1. Подключитесь к серверу по SSH и выполните команду для создания на сервере файла для хранения ключей:
```shell
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
```
2. Откройте созданный файл с помощью текстового редактора:
```shell
nano ~/.ssh/authorized_keys
```
3. Вставьте в него текст public key, ранее скопированный из окна PuTTYgen, и сохраните файл.
4. Запустите `pageant` — его иконка появится в трее. Щелкните по ней правой кнопкой мыши и выберите «Add Key».
5. В открывшемся окне укажите путь к приватному ключу `mykey.ppk`, сохраненному ранее, и нажмите «Open». Если при создании ключа вы указывали кодовую фразу, `pageant` запросит ее на данном этапе.
6. Для проверки работы авторизации по ключу снова запустите утилиту PuTTY, подключитесь к вашему серверу и введите свой логин. Если все настроено корректно, вы увидите подобный вывод в окне консоли:
```shell
Authenticating with public key "rsa-key-20151220" from agent
```
## Отключение доступа по паролю
Для того, чтобы доступ к серверу мог осуществляться только по ключу, необходимо запретить авторизацию по паролю. Для этого требуется внести правки в файл `/etc/ssh/sshd_config`.
1. Откройте файл командой:
```shell
sudo nano /etc/ssh/sshd_config
```
2. Найдите в нем строку `PasswordAuthentication` и замените ее значение на: `PasswordAuthentication no`.
3. Сохраните изменения, после чего перезапустите службу SSH:
```shell
sudo systemctl restart sshd
```
> [!NOTE]
> Если после выполненных действий у вас по-прежнему запрашивается пароль, проверьте, нет ли в директории `/etc/ssh/sshd_config.d/` файла `50-cloud-init.conf` с директивой `PasswordAuthentication yes`.
>
> Если файл присутствует — удалите его, после чего перезапустите службу SSH.
# Смена или сброс пароля root
Source: https://timeweb.cloud/docs/unix-guides/root-password-reset?utm_source=llms_txt&utm_medium=ai
В инструкции приводим несколько способов сброса или смены root-пароля.
## Средствами панели управления
Проще всего сбросить пароль пользователя `root` [через панель управления](https://timeweb.cloud/docs/cloud-servers/manage-servers/root-password-reset), на вкладкe «Дашборд».
Способ подойдет, даже если старый пароль утерян, так как вводить его не потребуется.
## При подключении по SSH
### **Если текущий пароль известен**
Если вам известен текущий пароль пользователя `root`, но вы хотите изменить его на другой, выполните следующие шаги.
1. [Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) под пользователем `root` с текущим паролем.
2. Выполните команду:
```shell
passwd
```
3. Система дважды запросит новый пароль. Введите его.
Готово, пароль изменен. Теперь вы можете авторизоваться под `root`, используя новый пароль.
### **Если текущий пароль неизвестен**
Сбросить пароль пользователя `root` и установить новый вы можете, загрузив сервер с диска восстановления. Данный способ подходит любым ОС на базе Linux.
1. Загрузите систему [в режиме восстановления](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode).
2. Откройте консоль в панели управления.
3. Смонтируйте корневой раздел. Он может называться по-разному — `sda1` или `vda1`. Сначала попробуйте:
```shell
mount -o rw /dev/sda1 /mnt
```
Если получите ошибку:
```shell
mount: /mnt: fsconfig system call failed: /dev/sda1: Can't lookup blockdev.
```
Выполните:
```shell
mount -o rw /dev/vda1 /mnt
```
После этого выполните команды:
```shell
chroot /mnt /bin/bash
passwd root
```
3. На данном этапе система дважды запросит новый пароль `root`\-пользователя, введите его.
При удачной смене пароля вы увидите уведомление об этом (например, `passwd: all authentication tokens updated successfully` или `password updated successfully`, в зависимости от операционной системы).
4. Нажмите сочетание клавиш **Ctrl** **+ D** для выхода из `chroot`.
5. Отмонтируйте диск командой:
```shell
umount /mnt
```
6. Для корректной перезагрузки перемонтируйте корневую файловую систему в режим read-only, используя корректное имя диска из шага 3:
```shell
mount -o ro /dev/sda1 /mnt
```
7. Перезагрузите сервер [в обычном режиме](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode).
Теперь вы можете подключиться к серверу под пользователем `root` с новым паролем.
# Смена пароля root для MySQL
Source: https://timeweb.cloud/docs/unix-guides/mysql-root-password-reset?utm_source=llms_txt&utm_medium=ai
В случае, если необходимо изменить пароль root-пользователя базы данных, в том числе при его утере, воспользуйтесь следующей инструкцией.
## Смена пароля, если текущий пароль утерян
1. Подключитесь к серверу [по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Остановите службу MySQL:
```shell
/etc/init.d/mysql stop
```
3. Отредактируйте файл `mysqld.cnf`, чтобы запустить службу без проверки прав доступа. Для этого:
**3.1.** Откройте файл в редакторе:
```shell
nano /etc/mysql/mysql.conf.d/mysqld.cnf
```
**3.2.** В секцию `[mysqld]` добавьте следующую строку:
```shell
skip-grant-tables
```
Должно получиться примерно так:

**3.3.** Сохраните изменения (в `nano` это выполняется комбинацией Ctrl O -> Enter -> Ctrl X, либо Ctrl X -> Y -> Enter).
4. Перезапустите mysql:
```shell
service mysql restart
```
5. Снова откройте файл `mysqld.cnf`:
```shell
nano /etc/mysql/mysql.conf.d/mysqld.cnf
```
И **удалите** добавленную строку. Сохраните изменения.
6. Подключитесь к MySQL как root без пароля:
```shell
mysql
```
7. Выберите активную БД:
```shell
use mysql;
```
MySQL 5
8. Обновите пароль:
```shell
UPDATE user SET authentication_string = PASSWORD('ВАШ_НОВЫЙ_ПАРОЛЬ') WHERE User = 'root';
```
9. Примените изменения:
```shell
FLUSH PRIVILEGES;
```
10. Выйдите из mysql командой **\\q**.
11. Перезапустите службу в обычном режиме:
```shell
/etc/init.d/mysql start
```
12. Теперь проверьте, что пароль успешно изменен, подключившись под root с новым паролем. Для этого выполните:
```shell
mysql -u root -p
```
После чего введите ваш новый пароль.
MySQL 8
8. Перезагрузите таблицы привилегий:
```shell
FLUSH PRIVILEGES;
```
9. Обновите пароль:
```shell
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ваш_новый_пароль';
```
10. Примените изменения:
```shell
FLUSH PRIVILEGES;
```
11. Выйдите из mysql командой **\\q**.
12. Перезапустите службу в обычном режиме:
```shell
/etc/init.d/mysql start
```
13. Теперь проверьте, что пароль успешно изменен, подключившись под root с новым паролем. Для этого выполните:
```shell
mysql -u root -p
```
После чего введите ваш новый пароль.
## Смена пароля, если текущий пароль известен или не был установлен ранее
Если требуется изменить существующий root-пароль для MySQL либо установить его в случае, когда он не был задан в принципе (это актуально, например, при автоматической установке LAMP при создании сервера — root-пароль MySQL при этом не задается), это можно сделать следующим образом:
1. Подключитесь к серверу [по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Перейдите к управлению MySQL:
Если пароль root не задан, используйте команду:
```shell
mysql
```
Если пароль существует, используйте команду:
```shell
mysql -u root -p
```
После чего введите текущий пароль.
MySQL 5
3. Выполните запрос ниже, заменив «пароль» на нужное вам значение:
```shell
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('пароль');
```
4. Выйдите из консоли MySQL командой `\q`.
5. Проверьте изменения, подключившись с новым паролем. Выполните команду:
```shell
mysql -u root -p
```
После чего введите ваш новый пароль.
MySQL 8
3. Выполните запрос ниже, заменив «пароль» на нужное вам значение:
```
ALTER USER 'root'@'localhost' IDENTIFIED BY 'пароль';
```
4. Примените изменения:
```sql
FLUSH PRIVILEGES;
```
5. Выйдите из консоли MySQL командой `\q`.
6. Проверьте изменения, подключившись с новым паролем. Выполните команду:
```shell
mysql -u root -p
```
После чего введите ваш новый пароль.
# Добавление пользователей
Source: https://timeweb.cloud/docs/unix-guides/adding-users?utm_source=llms_txt&utm_medium=ai
Из соображений безопасности работа от пользователя root в системе Linux не рекомендуется.
Оптимальным решением является создание дополнительного пользователя VDS с привилегиями `sudo`. Механизм `sudo` позволит пользователю при необходимости выполнять операции с правами администратора (`root`).
По этой же инструкции создаются и обычные пользователи системы (без привилегий `sudo`) — достаточно выполнить первые три шага.
## Создание пользователя с привилегиями sudo
1\. Создайте нового пользователя (в примере — `username`) командой ниже:
```shell
sudo adduser username
```
По умолчанию создаваемый пользователь будет добавлен в группу с таким же именем, а также для него будет создан домашний каталог.
2\. В **Ubuntu / Debian** далее будет запрошен пароль пользователя. Его будет необходимо ввести дважды. Помните, что символы пароля не отображаются в консоли Linux при вводе.

В **CentOS** для установки пароля выполните команду:
```shell
sudo passwd username
```
После введите пароль и повторите его.
3\. Далее в **Ubuntu / Debian** будет запрошен ввод дополнительной информации о пользователе (имя, номер телефона и пр.). Вы можете указать данные или нажимать Enter, чтобы оставить значения по умолчанию (т.е. пустые). После нажмите Y для подтверждения.

В **CentOS**, если вы хотите указать дополнительную информацию, выполните команду:
```shell
sudo chfn username
```
На этом этапе создание обычного пользователя (без привилегий `sudo`) завершено
4\. Теперь для того, чтобы предоставить пользователю `sudo`\-привилегии, его нужно добавить в группу `sudo`. Это делается следующими командами.
В Ubuntu / Debian:
```shell
sudo usermod -aG sudo username
```
В CentOS:
```shell
sudo usermod -aG wheel username
```
5\. Проверьте работу пользователя. Для этого переключитесь на сеанс работы от его имени:
```shell
su - username
```
Система запросит пароль пользователя (при первом запуске `sudo`). Введите его, после чего попробуйте выполнить любую команду с привилегиями `sudo`. Например, можно просмотреть содержимое каталога `/root`, которое недоступно пользователю с обычными правами:
```shell
sudo ls -la /root
```
Если содержимое каталога отобразится, значит, созданный пользователь работает корректно.
### **Если для root используется аутентификация по SSH-ключу**
Если вы подключились под `root` без ввода пароля, значит используется аутентификация по SSH-ключу. Чтобы новый пользователь мог входить в систему, добавьте копию вашего открытого ключа в файл `~/.ssh/authorized_keys` этого пользователя.
Поскольку ваш открытый ключ уже находится в файле `~/.ssh/authorized_keys` учетной записи root, можно скопировать этот файл в каталог нового пользователя с помощью команды `cp` и настроить права на файлы с помощью команды `chown`.
Скопируем весь каталог в домашний каталог нового пользователя:
```shell
cp -r ~/.ssh /home/username
```
Установим `username` владельцем этого каталога (также будет создана группа с тем же именем):
```shell
chown -R username:username /home/username/.ssh
```
Теперь можно залогиниться на сервер под новым пользователем без использования пароля:
```shell
ssh username@your_server_ip
```
Если нужно запустить команду с правами администратора, введите `sudo` перед ней:
```shell
sudo команда
```
Вам будет предложено ввести пароль обычного пользователя при первом использовании `sudo` (и периодически после этого).
6\. Этот шаг не является обязательным, но для повышения безопасности можно отключить дистанционный доступ для суперпользователя `root`. В этом случае пользователям всегда будет необходимо подключаться под собственными учетными записями, что позволит отслеживать действия на сервере, видеть, кем были внесены те или иные изменения и т.д.
Для отключения доступа root откройте файл `/etc/ssh/sshd_config`:
```shell
sudo nano /etc/ssh/sshd_config
```
Найдите строку `PermitRootLogin` и замените ее текущее значение на:
```shell
PermitRootLogin no
```
Выйдите из редактора с сохранением изменений (комбинация Ctrl X -> Y -> Enter).
После выполненных действий перезапустите службу SSH командами ниже.
В Ubuntu / Debian:
```shell
sudo service ssh restart
```
В CentOS:
```shell
sudo service sshd restart
```
## Другие команды для управления пользователями
Если вам необходимо добавить пользователя в другую группу, она должна быть предварительно создана:
```shell
sudo groupadd имя_группы
```
В Ubuntu и Debian для создания группы также можно использовать команду:
```shell
sudo addgroup имя_группы
```
После чего можно создать пользователя следующим образом:
```shell
sudo useradd -g имя_группы username
```
Если пользователь уже существует, вы можете добавить его в нужную группу командой `usermod`:
```shell
sudo usermod -G имя_группы username
```
Для того, чтобы изменить первичную группу пользователя, используется ключ `-g`:
```shell
sudo usermod -g имя_группы username
```
Для смены домашнего каталога пользователя используется команда:
```shell
sudo usermod -d путь/к/новому/каталогу username
```
Получить информацию о пользователе можно командой:
```shell
id username
```
Вывод будет содержать примерно следующие сведения:
```shell
uid=1000(username) gid=1000(username) groups=1000(username),27(sudo)
```
Сменить пароль можно командой:
```shell
sudo passwd username
```
Просмотреть список всех созданных пользователей можно командой:
```shell
cat /etc/passwd
```
Чтобы получить только список имен, без дополнительной информации, можно использовать:
```shell
sed 's/:.*//' /etc/passwd
```
Вывести список пользователей, которые сейчас в системе, можно простой командой `w`.
Удалить пользователя можно командой:
```shell
sudo deluser username
```
Для удаления группы используется команда:
```shell
sudo delgroup имя_группы
```
# Управление правами доступа
Source: https://timeweb.cloud/docs/unix-guides/permissions-management?utm_source=llms_txt&utm_medium=ai
Рассказываем, как настроить права доступа к файлам на сервере через SSH или с помощью FileZilla.
## Общая информация о правах доступа
Система прав доступа в Linux позволяет разграничивать и гибко настраивать доступ пользователей к файлам и каталогам, повышая тем самым безопасность системы.
Полные права ко всему имеет только суперпользователь root (именно поэтому работать от root может быть небезопасно); остальные пользователи по умолчанию имеют доступ только к своему домашнему каталогу, а значит не могут выполнить каких-либо нежелательных изменений в системных файлах.
Права доступа включают в себя право на **чтение** (**r**), **запись** (**w**) и **исполнение** (**x**).
Права назначаются как файлам, так и каталогам, и дают пользователям с этими правами следующие возможности:
| **Права** | **Для файлов** | **Для каталогов** |
| --- | --- | --- |
| r, чтение | Просмотр содержимого | Просмотр содержимого, то есть списка объектов в каталоге (например, командами cat, ls) |
| w, запись | Изменение содержимого | Изменение содержимого каталога, то есть можно добавлять и удалять файлы (даже принадлежащие другим пользователям), переименовывать их |
| x, исполнение | Запуск файла на исполнение | Вход в каталог (например, командой сd), просмотр атрибутов файлов, находящихся в каталоге |
Существует **три категории пользователей** для каждого файла:
- **Владелец** файла — пользователь, который создал файл (или который сейчас [указан](https://timeweb.cloud/docs/unix-guides/permissions-management#izmenenie-vladelca-ili-gruppy-fajla) в качестве владельца). По умолчанию владелец имеет полные права.
- **Группа** — созданная в системе группа пользователей, которой выдан определенный набор прав к файлу. Может состоять из одного пользователя (владельца) или из нескольких. Если группа состоит из нескольких пользователей, то все они имеют права к файлу, выданные группе.
- **Остальные** — все прочие пользователи, которые не являются владельцем файла и не входят в группу, назначенную для файла.
Для каждой категории может быть установлен свой набор прав к конкретному файлу.
Права могут обозначаться двумя способами: буквами или цифрами:
| **Цифровая запись** | **Буквенная запись** | **Права** |
| --- | --- | --- |
| 0 | \--- | Отсутствие прав |
| 1 | \--x | Исполнение |
| 2 | \-w- | Запись |
| 3 | \-wx | Запись и исполнение |
| 4 | r-- | Чтение |
| 5 | r-x | Чтение и исполнение |
| 6 | rw- | Чтение и запись |
| 7 | rwx | Чтение, запись и исполнение |
Права записываются последовательно: сначала для владельца, затем для группы, затем для остальных пользователей. Например, запись 755 (или rwx r-x r-x) означает, что владельцу даны права на чтение, запись и исполнение (7 / rwx), всем остальным — на чтение и исполнение (5 / r-x).
Примеры наиболее распространенных комбинаций для прав доступа:
| **Цифры** | **Буквы** | **Права** |
| --- | --- | --- |
| 600 | rw------ | Владелец может просматривать и изменять содержимое, у остальных нет доступа к объекту |
| 644 | rw-r--r-- | Владелец может просматривать и изменять содержимое, остальные могут только просматривать |
| 700 | rwx-- -- | Владелец может просматривать, изменять содержимое, запускать исполнение объекта, у остальных нет доступа к объекту |
| 755 | rwxr-xr-x | У владельца полный набор прав, остальным доступны просмотр и исполнение |
Предоставляя доступ к каталогам, необходимо учитывать, что для полноценной работы с ними нужны, как минимум, права на чтение и исполнение (5 / r-x). Право на чтение (4 / r) будет означать только возможность просмотра имен файлов, без их атрибутов (размер, владелец и пр.).
## Просмотр установленных прав
Просмотреть назначенные права для файлов в текущем каталоге можно командой `ls -l`.
Права для файлов в выводе будут отмечены флагом `-`, для директории — флагом `d` в начале строки, например:
```shell
username@server:~/new_directory$ ls -l
total 4
drwx------ 2 username customers 4096 Mar 10 14:39 dir1
-rw-r--r-- 1 username customers 128 Mar 10 14:39 test.php
```
Параметры в выводе:
```shell
Права Владелец Группа Размер файла Последнее изменение Имя файла
rw-r--r-- username customers 0 Mar 10 14:39 test.php
```
Если нужно просмотреть права только на конкретный файл или каталог в текущей директории, необходимо указать его имя. Например:
```shell
ls -l test.php
ls -l dir5
```
Чтобы просмотреть права на файлы во всех вложенных подкаталогах в текущей директории, можно использовать флаг `-R`:
```shell
ls -Rl
```
Либо можно указать имя директории, права на файлы и подкаталоги в которой нужно просмотреть:
```shell
ls -Rl dir1
```
## Настройка прав доступа
Изменять права доступа для файла может только его владелец или администратор системы (т.е. root или пользователь с привилегиями sudo).
Настройку прав доступа можно выполнять:
- при SSH-подключении;
- через FTP-клиент.
### **По SSH**
Настраивать права доступа можно командой `chmod`. Существует два способа ее использования.
**Способ 1**, наиболее простой. При каждом изменении прав указывается весь набор прав для всех категорий пользователей. Права указываются в числовом формате.
Синтаксис команды:
```shell
chmod xxx имя_файла
```
Например, следующей командой можно установить для файла `test.php` права 755, т.е. полные права для владельца, права на чтение и исполнение для всех остальных.
```shell
chmod 755 test.php
```
Чтобы установить права 644 файлу `test.php`, необходимо выполнить:
```shell
chmod 644 test.php
```
Установить права 755 на каталог `dir`:
```shell
chmod 755 dir
```
В отдельных случаях может быть полезна опция `-R`, она позволяет назначать права рекурсивно. Будьте внимательны при ее использовании, так как она изменит права доступа для всех файлов во всех подкаталогах в текущем каталоге.
Указать права 755 всем объектам в текущем каталоге (включая подкаталоги):
```shell
chmod -R 755 *
```
**Способ 2** позволяет указывать только конкретное изменение в правах для конкретной категории пользователей. Используется символьная запись прав.
Синтаксис команды:
```shell
chmod Категория Действие Права имя_файла
```
**Категории пользователей** имеют следующие обозначения:
- **u** — владелец (от user)
- **g** — группа (от group)
- **o** — остальные (от other)
- **a** — все категории (от all)
**Действия с правами** включают в себя:
- **+** — добавить указанные права
- **\-** — удалить указанные права
- **\=** — заменить права на указанные
**Права** указываются как **r**, **w** и **x**. При указании комбинаций (например, чтение и исполнение) здесь не нужно использовать дефис, т.е. указываем **rx**, а не r-x.
Например, следующей командой можно добавить права на чтение и исполнение для группы. Другие ранее установленные права никак не изменяются.
```shell
chmod g+rx test.php
```
Удалить для группы права на запись в файл `test.php`:
```shell
chmod g-w test.php
```
Удалить права на чтение и запись для остальных пользователей:
```shell
chmod o-rw test.php
```
Дать группе и остальным пользователям доступ к каталогу `dir1` (права на чтение и исполнение):
```shell
chmod go+rx dir1
```
Дать группе и остальным пользователям право на чтение всех файлов и каталогов в директории `new_directory` (используется ключ `-R`):
```shell
chmod -R go+r new_directory
```
### **По FTP/SFTP (FileZilla)**
Задавать и изменять права в FTP-клиенте очень просто.
1. Подключитесь к серверу с помощью FileZilla.
2. Найдите нужный файл или каталог.
3. Кликните по нему правой кнопкой мыши и выберите «Права доступа к файлу».
4. Задайте нужные права. При редактировании прав на каталог также есть возможность применить настройки к вложенным каталогам.
5. Сохраните изменения.

_Настройка атрибутов файла в интерфейсе в [FileZilla](https://filezilla-project.org)_
## Изменение владельца или группы файла
Чтобы изменить для файла или каталога группу или владельца, используется команда `chown`.
Синтаксис команды:
```shell
chown владелец:группа имя_файла
```
Например, чтобы установить `user1` владельцем файла `test.php`, необходимо выполнить:
```shell
chown user1 test.php
```
Если одновременно надо изменить группу на `customers`, используем:
```shell
chown user1:customers test.php
```
Чтобы изменить только группу:
```shell
chown :customers test.php
```
# Изменение стандартного порта SSH
Source: https://timeweb.cloud/docs/unix-guides/changing-default-ssh-port?utm_source=llms_txt&utm_medium=ai
Изменение порта SSH помогает усилить защиту вашего сервера, усложняя обнаружение SSH-службы для потенциальных злоумышленников. Рассмотрим, как заменить стандартный порт (`22`) для SSH на другой.
## Проверка доступности нового порта
Перед тем как изменить порт, убедитесь, что выбранный вами порт не занят другими сервисами. Для проверки выполните следующую команду:
```shell
ss -tnlp | grep '<порт>'
```
Если порт свободен, команда не выдаст никаких результатов. Это означает, что порт можно использовать для SSH-подключений.
## Изменение конфигурации SSH
Для изменения порта SSH откройте конфигурационный файл:
```shell
sudo nano /etc/ssh/sshd_config
```
Найдите строку:
```shell
#Port 22
```
Удалите символ `#` в начале строки, чтобы раскомментировать ее, и замените номер порта `22` на желаемый порт.
## Перезапуск службы SSH
После изменения конфигурации нужно перезапустить службу SSH, чтобы изменения вступили в силу. Выполните одну из команд:
Для **Debian-based-**дистрибутивов:
```shell
sudo systemctl restart ssh
```
Для **Ubuntu 24.04**:
```shell
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
```
Для **CentOS** и подобных дистрибутивов:
```shell
sudo systemctl restart sshd
```
## Проверка успешного применения изменений
Для проверки, что SSH теперь прослушивает новый порт, выполните следующую команду:
```shell
ss -tnlp | grep '<порт>'
```
Если конфигурация выполнена верно, вы увидите, что служба SSH теперь работает на указанном вами порту.
## Обновление правил файрвола
Если на сервере используется файрвол, например, UFW, необходимо разрешить новый порт для SSH. Выполните следующую команду для открытия нового порта:
```shell
sudo ufw allow <порт>/tcp
```
Замените `<порт>` на номер порта, который вы указали в конфигурации SSH. После этого не забудьте перезагрузить UFW для применения изменений:
```shell
sudo ufw reload
```
## Подключение с новым портом
Теперь, при подключении к серверу необходимо явно указать новый порт. Используйте следующую команду:
```shell
ssh -p <порт> username@ip_address
```
Где `<порт>` — это номер нового порта, который вы указали в конфигурации, `username` — имя пользователя, а `ip_address` — IP-адрес вашего сервера.
# Защита SSH от подбора пароля. Fail2ban
Source: https://timeweb.cloud/docs/unix-guides/block-ssh-brute-force-attacks-fail2ban?utm_source=llms_txt&utm_medium=ai
Для защиты вашего сервера от брутфорс-атак (взломов путем перебора паролей) лучше всего настроить и использовать [авторизацию по ключу](https://timeweb.cloud/docs/unix-guides/ssh-key-authentication) вместо авторизации по паролю.
Другим способом защиты может быть использование утилиты **Fail2ban**. Fail2ban анализирует логи служб, работающих на сервере, и при обнаружении подозрительной активности блокирует IP-адреса возможных злоумышленников. Fail2ban может использоваться для защиты Apache, FTP, dovecot и многих других сервисов.
В рамках этой статьи мы рассмотрим базовую настройку Fail2ban для защиты службы SSH от подбора пароля.
Для установки Fail2ban на Ubuntu/Debian выполните:
```shell
sudo apt update
```
```shell
sudo apt install fail2ban -y
```
Если у вас не установлен файрвол, установите `iptables`:
```shell
sudo apt install iptables
```
Для установки на CentOS:
```shell
sudo yum update && yum install epel-release
```
```shell
sudo yum install fail2ban
```
Если у вас не установлен файрвол, установите `iptables`:
```shell
sudo yum install iptables-services
```
Добавьте Fail2ban в автозагрузку:
```shell
sudo systemctl enable fail2ban
```
На Ubuntu защита для SSH начнет работать сразу после установки. По умолчанию Fail2ban будет на 10 минут блокировать IP-адреса, с которых в течение 10 минут было выполнено 5 неудачных попыток авторизации.
Эти и другие параметры работы утилиты можно изменить в ее настройках.
## Конфигурационный файл Fail2ban
Настройки Fail2ban хранятся в конфигурационном файле `/etc/fail2ban/jail.conf`.
Настройки разделены по секциям. В `[DEFAULT]` указываются общие параметры, которые определяют работу Fail2ban в целом и применяются для большинства служб. Специфические настройки для той или иной службы прописываются внутри соответствующей секции (например, `[sshd]`, `[apache-auth]`, `[vsftpd]`).
Менять какие-либо параметры напрямую в файле `jail.conf` не рекомендуется. Вместо этого необходимо создать новый файл `jail.local`, разместив его в той же директории:
```shell
sudo touch /etc/fail2ban/jail.local
```
В новом файле будет достаточно указать только те настройки, значения которых вы хотите изменить: для всех параметров, которые вы не пропишете отдельно, Fail2ban будет применять значения по умолчанию.
## Настройка защиты SSH
Откройте файл `jail.local` для редактирования:
```shell
sudo nano /etc/fail2ban/jail.local
```
Пример настроек, которые можно добавить в файл:
```shell
[DEFAULT]
ignoreip = 95.111.123.21
[sshd]
enabled = true
findtime = 120
maxretry = 3
bantime = 43200
```
Такая настройка означает, что если с какого-либо IP-адреса, за исключением указанного в `ignoreip`, в течение 2 минут будут выполнены 3 неудачные попытки авторизоваться, Fail2ban заблокирует этот адрес на 12 часов.
В секции `DEFAULT` могут быть указаны такие параметры, как период блокировки (`bantime`), количество попыток (`maxretry`) и пр., но в рамках данной инструкции мы пропишем большинство настроек в отдельной секции для SSH, а в раздел `DEFAULT` включим только параметр `ignoreip`:
- `ignoreip` — это «белый список» IP-адресов, то есть те адреса, которые не будут заблокированы при неудачных попытках подключения. Здесь можно прописать ваш собственный IP (если он статический, а не динамический), с которого вы подключаетесь к серверу. Можно указать несколько адресов через пробел или маску подсети.
Если вам не требуется белый список, строку можно просто закомментировать, указав перед ней `#`.
В секции `[sshd]` указываются настройки для работы Fail2ban с конкретной службой — SSH. В зависимости от системы, секция может называться `[sshd]`, `[ssh]` или `[ssh-iptables]` (можно проверить в файле `jail.conf`).
Как упоминалось выше, при отсутствии того или иного параметра в этом файле, Fail2ban будет использовать значения по умолчанию. Соответственно, указать требуется только те настройки, значения которых нужно изменить.
Здесь мы прописали параметры:
- `enabled` — обязательный параметр, определяющий включение или отключение секции. Для включения должно быть установлено значение true, оно указано по умолчанию. Обратите внимание, что в CentOS этот параметр по умолчанию закомментирован. Если вы работаете с копией основного файла `jail.conf`, не забудьте раскомментировать эту строку (убрать `#`), чтобы активировать секцию;
- `bantime` — продолжительность бана в секундах, то есть период, на который подозрительный IP-адрес будет заблокирован;
- `maxretry` — количество неудачных попыток в течение периода `findtime`, после которых будет выполнена блокировка;
- `findtime` — период в секундах, в течение которого действие (в данном случае — неудачная попытка подключения) должно повториться определенное количество раз (`maxretry`), после чего будет выполнена блокировка.
Дополнительно могут быть настроены и другие параметры, например:
- `port` — порт, используемый службой, в данном случае SSH. Если SSH у вас работает на нестандартном порту (то есть не 22), пропишите его здесь. Если порт стандартный, указывать эту настройку необязательно.
- `logpath` — путь к файлу лога, который анализирует Fail2ban. По умолчанию это стандартный путь к логу `sshd`.
- `action` — выполняемое действие при блокировке IP. По умолчанию выполняется блок подозрительного IP путем изменения правил `iptables`.
Чтобы заблокировать все порты для этого IP, можно использовать: `action = iptables-allports`.
Если на сервере настроен `firewalld` или `ufw`, то для фильтрации с их помощью нужно указать соответствующее значение для `action:` `firewallcmd-ipset` и `ufw`, соответственно.
Полный список действий доступен в `/etc/fail2ban/action.d`.
После сохранения изменений перезапустите Fail2ban:
```shell
sudo systemctl restart fail2ban.service
```
## Проверка
После настройки Fail2ban имеет смысл проверить его работу. Лучше делать это не сразу, а спустя пару часов после сохранения настроек, тогда результат будет более наглядным.
Просмотреть заблокированные IP-адреса можно в `iptables`:
```shell
sudo iptables -L
```

Также, можно вывести логи работы Fail2ban:
```shell
sudo tail /var/log/fail2ban.log
```

Информацию можно получить и из интерфейса Fail2ban:
```shell
sudo fail2ban-client status sshd
```

# Настройка подключения через SSH в VSCode
Source: https://timeweb.cloud/docs/unix-guides/configuring-ssh-connection-in-vscode?utm_source=llms_txt&utm_medium=ai
Remote SSH — это мощная функция в Visual Studio Code, позволяющая работать с удаленными серверами так, как будто они находятся на вашем локальном компьютере. Эта возможность полезна для разработки и отладки кода на сервере, поскольку она предоставляет доступ к файловой системе и инструментам разработки без необходимости копировать файлы локально.
## Предварительная подготовка
Для работы с Remote SSH в VSCode необходимо сгенерировать SSH-ключи и добавить их на сервер, к которому будет выполняться подключение. Вы можете создать SSH-ключи, следуя [этой инструкции](https://timeweb.cloud/docs/unix-guides/ssh-key-authentication). Затем добавьте ключи на сервер с помощью [этой инструкции](https://timeweb.cloud/docs/cloud-servers/manage-servers/ssh-keys).
## Установка расширения
Первым шагом для подключения через SSH является установка расширения «Remote - SSH». Для этого выполните следующие действия:
1. Откройте VSCode и перейдите в раздел расширений, нажав на значок в левой боковой панели или используя сочетание клавиш `Ctrl+Shift+X`.
2. Введите в поиске «Remote - SSH» и установите расширение от Microsoft.

_Расширение «Remote - SSH» в интерфейсе [VS Code](https://code.visualstudio.com/)_
## Настройка подключения к удаленному серверу
После установки расширения, перейдем к настройке подключения.
1. Нажмите на иконку «Open a Remote Window» в левом нижнем углу.
2. В открывшемся меню выберите пункт «Connect to Host».

_Опция «Connect to Host...» в интерфейсе [VS Code](https://code.visualstudio.com/)_
3. Нажмите на «Add New SSH Host» и введите команду для подключения к SSH, вида:
```shell
ssh user@ip
```
Если вы используете нестандартный порт, укажите его так же, как при обычном подключении по SSH:
```shell
ssh user@ip -p <порт>
```
4. Выберите путь к конфигурации SSH. Обычно это файл `/home/user/.ssh/config`.
5. По завершении настройки повторно нажмите на «Open a Remote Window» → «Connect to Host». Теперь в списке доступных подключений будет виден добавленный сервер. Для подключения просто нажмите на него.
Чтобы изменить параметры хоста, нажмите на «Configure SSH Hosts», и откроется файл конфигурации. Пример конфигурации:
```shell
Host 185.178.45.58
HostName 185.178.45.58
User root
Port 2299
IdentityFile ~/.ssh/id_rsa
```
- `Host` — имя, отображаемое в списке SSH-хостов.
- `HostName` — IP-адрес сервера.
- `User` — имя пользователя для подключения.
- `Port` — необязательный параметр, используемый, если для подключения используется нестандартный порт (не 22).
- `IdentityFile` — необязательный параметр, используемый, если SSH-ключ расположен не по пути `~/.ssh/id_rsa`.
## Работа с удаленной средой
При первом подключении на сервере будет установлен VSCode Server. После успешного подключения вы получите доступ к удаленной файловой системе и сможете работать с файлами так же, как с локальными. VSCode автоматически установит на сервер необходимые компоненты для интеграции с инструментами, установленными на удаленной машине.
Вы можете устанавливать расширения, как обычно, и они будут установлены на удаленном сервере, обеспечивая полноценную работу с редактором. Все изменения, которые вы вносите в файлы, сразу сохраняются на удаленной машине, что делает процесс разработки удобным и бесшовным.
# Создание дампа базы и восстановление данных
Source: https://timeweb.cloud/docs/unix-guides/database-dump-and-restore?utm_source=llms_txt&utm_medium=ai
Для создания дампа (резервной копии базы данных) и восстановления данных вы можете воспользоваться phpMyAdmin либо консольными командами при [подключении по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
## Создание дампа базы через PMA
Экспортирование базы данных — это создание резервной копии базы данных и ее загрузка на локальный компьютер.
Чтобы осуществить быстрый экспорт базы данных, выполните следующее:
1. В области слева выберите необходимую базу данных (должен раскрыться список таблиц базы данных).
2. Перейдите на вкладку «Экспорт» в меню PMA.
3. Нажмите кнопку «Вперед», и файл дампа базы данных сохранится на локальный компьютер.

_Опция «Экспорт» в интерфейсе [phpMyAdmin](https://www.phpmyadmin.net/)_
### Экспорт отдельных таблиц
Если требуется выполнить экспорт только отдельных таблиц, войдите в phpMyAdmin и выполните следующее.
1. В области слева выберите необходимую базу данных (должен раскрыться список таблиц базы данных).
2. Отметьте галочками нужные таблицы для экспорта.
3. Внизу страницы в выпадающем списке «С отмеченными:» выберите пункт «Экспорт».
4. На следующей странице убедитесь, что выбран формат SQL, и нажмите на кнопку «Вперед». Дамп будет сохранен на ваш компьютер.
## Создание дампа базы через консоль
Подключитесь к серверу по SSH и выполните команду, указав корректные данные:
```shell
mysqldump -u'имя_пользователя' база_данных -p'пароль_базы_данных' > имя_дампа.sql
```
## Восстановление данных через PMA
Импортирование базы данных — это загрузка сохраненной на локальном компьютере базы данных на сервер.
Чтобы осуществить импорт базы данных, необходимо выполнить следующие действия:
1. В области слева выберите необходимую базу данных (должен раскрыться список таблиц базы данных).
2. Перейдите на закладку «Импорт» в меню PMA.
3. Загрузите импортируемый файл (дамп базы данных), нажав на кнопку «Выберите файл» и указав файл на локальном компьютере.
4. Выберите кодировку, формат и проверьте другие настройки импорта (можно оставить по умолчанию).
5. Нажмите кнопку «Вперед», и дамп будет импортирован в базу данных.

_Опция «Импорт» в интерфейсе [phpMyAdmin](https://www.phpmyadmin.net/)_
При загрузке дампов баз данных размером более 1 ГБ могут наблюдаться проблемы. В случае, если ваш дамп имеет больший размер, вы можете выполнить импорт через командную строку с помощью подключения по SSH.
## Восстановление данных через консоль
Импортировать дамп в созданную базу данных можно с помощью команды:
```shell
mysql -u'имя_пользователя' база_данных -p'пароль_базы_данных' < имя_дампа.sql
```
# Установка LAMP на Ubuntu
Source: https://timeweb.cloud/docs/unix-guides/installing-lamp-on-ubuntu?utm_source=llms_txt&utm_medium=ai
LAMP — набор программного обеспечения (Linux, Apache, MySQL, PHP) с открытым исходным кодом, который обычно устанавливается на сервер для отображения динамических веб-сайтов и веб-приложений.
В статье описан процесс установки LAMP на сервер с операционной системой Ubuntu 24.04.
> [!NOTE]
> LAMP также можно установить автоматически: при [создании нового сервера](https://timeweb.cloud/docs/cloud-servers/manage-servers/create-server) или [переустановке ОС](https://timeweb.cloud/docs/cloud-servers/manage-servers/os-reinstall).
## Установка Apache
Для установки веб-сервера выполните команды ниже:
```shell
sudo apt update
sudo apt install apache2
```
Далее добавьте Apache в автозагрузку:
```shell
sudo systemctl enable apache2
```
И запустите веб-сервер:
```shell
sudo systemctl start apache2
```
Чтобы проверить, что все работает корректно, введите в адресной строке браузера IP-адрес вашего сервера. Если установка прошла успешно, вы увидите стандартное приветственное окно Apache:

_Стандартное приветственное окно веб-сервера [Apache](https://httpd.apache.org/)_
### **Настройка виртуальных хостов**
Важной особенностью Apache является возможность создания виртуальных хостов, настраиваемых независимо друг от друга, что позволяет размещать на VDS-сервере сразу несколько сайтов. За конфигурацию каждого сайта будет отвечать конкретный виртуальный хост. Даже если на начальном этапе вы планируете размещать только один сайт на сервере, мы рекомендуем в любом случае использовать виртуальные хосты. Это обеспечит вам удобство администрирования и обслуживания вашего проекта, а в дальнейшем и легкость расширения при необходимости.
Перед настройкой виртуального хоста добавьте домен сайта в раздел «[Домены и SSL](https://timeweb.cloud/my/domains)». Вы можете [перенести существующий домен](https://timeweb.cloud/docs/domains/domain-technical-transfer), [зарегистрировать новый](https://timeweb.cloud/docs/domains/registration-and-renewal) или воспользоваться бесплатным техническим доменом, чтобы протестировать работу сайта на сервере. По ссылкам вы найдете необходимые инструкции для данных процедур.
Создайте директорию сайта (в примере используется `site1`, укажите вместо него удобное вам имя сайта / директории):
```shell
sudo mkdir /var/www/site1
sudo mkdir /var/www/site1/public_html
```
Установите права доступа:
```shell
sudo chmod -R 755 /var/www/site1
```
По умолчанию Apache содержит стандартный файл конфигурации `000-default.conf`, который хранится в директории `/etc/apache2/sites-available`. Файлы новых виртуальных хостов будут храниться здесь же.
Сначала отключите стандартный файл конфигурации командой:
```shell
sudo a2dissite 000-default
```
После чего создайте конфигурационный файл нового хоста:
```shell
sudo nano /etc/apache2/sites-available/site1.conf
```
Приведите его содержимое к следующему виду:
```bash
ServerName site1.com
ServerAlias www.site1.com
ServerAdmin admin@localhost
DocumentRoot /var/www/site1/public_html
AllowOverride All
Require all granted
ErrorLog /var/www/site1/error.log
CustomLog /var/www/site1/access.log combined
```
Сохраните файл.
Поясним приведенные выше параметры.
- Блок `` включает в себя набор директив, задающих настройки для конкретного виртуального хоста.
- `ServerName` — имя созданного хоста, полное доменное имя вашего сайта.
- `ServerAlias` — альтернативное имя, по которому сайт тоже должен быть доступен.
- `ServerAdmin` — e-mail администратора сервера.
- `DocumentRoot` — путь до корневой директории, в которой хранятся файлы сайта `site1`.
- Блок `` задает настройки, которые будут применены для конкретной папки (`/var/www/site1/public_html`). В данном случае это: `AllowOverride All` — разрешение допускать настройки, заданные в `.htaccess`; и `Require all granted` — доступ к каталогу разрешен всем.
- `ErrorLog` — расположение файла с логами ошибок (по умолчанию логи размещаются в директории `/var/log/apache2/error.log`, доступ к которой имеет только root-пользователь; поэтому для удобства обращения к логам можно задать для них другой путь).
- `CustomLog` — расположение файла с логами доступа.
Этого набора директив достаточно для функционирования виртуального хоста, хотя список не является исчерпывающим. Со списком всех возможных директив и их описанием можно ознакомиться на сайте [Apache](https://httpd.apache.org/docs/2.4/mod/core.html).
Далее включите сайт следующей командой:
```shell
sudo a2ensite site1.conf
```
И перезапустите Apache:
```shell
sudo systemctl reload apache2
```
На этом этапе настройка виртуального хоста завершена. Для того, чтобы проверить корректность его работы, создайте индексный файл сайта:
```shell
nano /var/www/site1/public_html/index.html
```
Внесите в него любой HTML-код для проверки и сохраните документ. Например:
```html
Удалось!
Виртуальный хост работает!
```
Теперь введите в браузере адрес сайта, для которого вы настраивали виртуальный хост. Если все настройки были выполнены корректно, на экране будет выведено содержимое созданного выше индексного файла.
## Установка MySQL
Следующий этап — установка СУБД, то есть системы управления базами данных.
Для установки MySQL выполните команду:
```bash
sudo apt install mysql-server
```
После установки служба будет запущена автоматически.
Для подключения к СУБД выполните команду:
```bash
sudo mysql
```
При таком способе входа пароль не требуется.
Чтобы выйти из консоли MySQL, выполните команду:
```shell
\q
```
Чтобы выполнить базовую настройку безопасности, используйте команду:
```bash
sudo mysql_secure_installation
```
Далее последовательно ответьте на запросы системы:
- `Would you like to setup VALIDATE PASSWORD component` — при необходимости включите проверку сложности паролей (нажмите `y`) или пропустите этот шаг.
- `Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG` — выберите уровень сложности паролей.
- `Remove anonymous users` — нажмите `y`, чтобы удалить анонимных пользователей.
- `Disallow root login remotely` — введите `y`, чтобы запретить удаленный доступ для `root`.
- `Remove test database and access to it` — введите `y`, чтобы удалить тестовую базу.
- `Reload privilege tables now` — введите `y`, чтобы применить изменения.
Для подключения к MySQL используйте команду:
```bash
sudo mysql
```
Если для пользователя `root` настроен вход по паролю, подключение можно выполнить командой:
```bash
mysql -u root -p
```
Для удобства работы с базами данных вы также можете установить phpMyAdmin [по нашей инструкции](https://timeweb.cloud/docs/unix-guides/installing-pma-on-ubuntu-with-lamp).
## Установка PHP
Установить PHP c несколькими основными модулями можно командой ниже:
```shell
sudo apt install php libapache2-mod-php php-mysql
```
Можно добавить необходимые модули в команду выше или установить их по отдельности, также командой `apt install имя_модуля`.
Получить дополнительную информацию по каждому модулю можно с помощью команды:
```shell
sudo apt show имя_модуля
```
После того, как необходимые модули будут установлены, проверьте работу PHP. Для этого создайте php-файл в директории сайта:
```shell
nano /var/www/site1/public_html/test.php
```
Внесите в него следующее содержимое и сохраните файл:
```shell
```
Теперь перейдите по адресу `http://IP-адрес-сервера/test.php` (либо `http://вашдомен/test.php`) — если все в порядке, будет отображена страница с параметрами PHP.

_Страница с параметрами [PHP](https://www.php.net/)_
При необходимости тестовый файл можно удалить командой ниже:
```shell
rm /var/www/site1/public_html/test.php
```
На этом установка LAMP на ваш сервер завершена.
# Установка phpMyAdmin на Ubuntu с LAMP
Source: https://timeweb.cloud/docs/unix-guides/installing-pma-on-ubuntu-with-lamp?utm_source=llms_txt&utm_medium=ai
Для удобства работы с базами данных можно установить на сервер phpMyAdmin. В статье описан процесс установки PMA на сервер с ОС Ubuntu с уже установленным [LAMP](https://timeweb.cloud/docs/unix-guides/installing-lamp-on-ubuntu).
1\. Выполните команду:
```shell
sudo apt install phpmyadmin
```
2\. В процессе установки потребуется ответить на запросы системы:
- Нажмите пробел, чтобы выбрать `apache2` (после чего он будет отмечен звездочкой), и нажмите Enter:

_Окно выбора веб-сервера при настройке PMA в интерфейсе [Ubuntu](https://ubuntu.com/)_
- Нажмите Enter, чтобы выбрать `Yes`:

_Подтверждение автоматической конфигурации PMA в интерфейсе [Ubuntu](https://ubuntu.com/)_
- Задайте пароль для регистрации PMA на сервере баз данных и нажмите Enter; после повторите ввод пароля:

_Окно указания пароля при настройке PMA в интерфейсе [Ubuntu](https://ubuntu.com/)_
3\. После того, как установка будет завершена, включите модуль PHP `mbstring` командой:
```shell
sudo phpenmod mbstring
```
4\. Перезапустите веб-сервер:
```shell
sudo systemctl restart apache2
```
Вход в PMA осуществляется по адресу `http://IP-адрес-сервера/phpmyadmin` с логином root и паролем root-пользователя MySQL.
**Обратите внимание!** При автоматической установке LAMP вместе с сервером пароль root-пользователя MySQL не задается, поэтому если вы не устанавливали его дополнительно, это необходимо сделать сейчас.
Для этого перейдите к управлению MySQL:
```shell
mysql
```
И выполните запрос ниже, заменив «пароль» на нужное вам значение:
```shell
ALTER USER 'root'@'localhost' IDENTIFIED BY 'пароль';
```
Для выхода из консоли MySQL введите `\q`.
Далее вы сможете войти в phpMyAdmin по адресу `http://IP-адрес-сервера/phpmyadmin` с логином root и только что заданным паролем.
# Установка SSL-сертификата на Nginx
Source: https://timeweb.cloud/docs/unix-guides/ustanovka-ssl-na-nginx?utm_source=llms_txt&utm_medium=ai
Рассмотрим, как установить SSL-сертификат от Let's Encrypt для веб-сервера Nginx на операционных системах Ubuntu и CentOS.
## **Выпуск и установка Let's Encrypt**
### **Установка Certbot**
Для выпуска сертификата воспользуемся утилитой Certbot.
Ubuntu
Установим Certbot и плагин для Nginx:
```shell
sudo apt install certbot python3-certbot-nginx
```
CentOS
Для установки Certbot на CentOS требуется включить репозиторий EPEL (Extra Packages for Enterprise Linux), который содержит дополнительные пакеты, не входящие в стандартные репозитории CentOS.
Репозиторий EPEL добавляется с помощью пакета `epel-release`, который можно установить так:
```shell
sudo dnf install epel-release
```
После этого, установим Certbot и плагин для Nginx:
```shell
sudo dnf install certbot python3-certbot-nginx
```
Теперь Certbot готов к использованию для выпуска и настройки SSL-сертификата.
### Проверка конфигурации Nginx
Certbot настроит сертификат для виртуального хоста, ориентируясь на домен, указанный в директиве `server_name`. Убедитесь, что в конфигурации Nginx указан правильный домен вашего сайта.
Для этого откройте файл конфигурации:
Ubuntu
```shell
sudo nano /etc/nginx/sites-available/имя_сайта
```
CentOS
```shell
sudo vi /etc/nginx/conf.d/имя_сайта
```
Проверьте, что в директиве `server_name` указан правильный домен. Если нужно внести изменения, сделайте это, а затем сохраните файл.
После этого, проверьте конфигурацию Nginx на наличие ошибок:
```shell
sudo nginx -t
```
Если вы вносили изменения в конфигурацию, перезапустите веб-сервер:
```shell
sudo systemctl reload nginx
```
### Получение SSL
Запустите Certbot с плагином Nginx, чтобы получить и настроить SSL-сертификат:
```shell
sudo certbot --nginx -d example.com -d www.example.com
```
Где `example.com` и `www.example.com` — это домены, которые должны быть указаны в конфигурации Nginx.
При первом запуске Certbot запросит ваш контактный email, а также предложит принять условия лицензионного соглашения.
После успешного завершения процедуры, Certbot покажет путь к сохранённым сертификатам:
```shell
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for example.com and www.example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2025-01-14.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for example.com to /etc/nginx/conf.d/example.com.conf
Successfully deployed certificate for www.example.com to /etc/nginx/conf.d/example.com.conf
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com
```
### Автоматическое обновление SSL-сертификатов
Сертификаты Let's Encrypt действуют 90 дней, поэтому их необходимо своевременно обновлять. Это можно сделать вручную с помощью команды:
```shell
certbot renew
```
Однако рекомендуется настроить автоматическое обновление с помощью cron-задачи. Откройте редактор cron:
```shell
crontab -e
```
Добавьте следующую строку:
```shell
30 3 * * 2 /usr/bin/certbot renew >> /var/log/renew-ssl.log --post-hook "systemctl reload nginx"
```
Эта задача настроит автоматическое обновление сертификатов каждый вторник в 03:30 утра. Certbot будет проверять срок действия сертификатов и, если до их истечения останется менее 30 дней, выполнит автоматическое обновление. После успешного обновления Nginx будет перезагружен, чтобы начать использовать новый сертификат. Все действия Certbot будут записываться в файл `renew-ssl.log`.
## Установка существующего сертификата
Если у вас уже приобретен SSL-сертификат, установить его можно по инструкции ниже.
### Загрузка файлов сертификата на сервер
1. Как правило, после покупки сертификата у вас будут следующие файлы: сам сертификат (`.crt`) и цепочка сертификатов (`.ca-bundle`), которая содержит промежуточный и корневой сертификат.
Вам нужно скопировать их содержимое в единый файл `ваш_домен.crt`, друг под другом, без пробелов. Файл `ваш_домен.crt` можно создать с помощью Блокнота или любого другого текстового редактора.
У вас получится следующее:
```shell
-----BEGIN CERTIFICATE-----
#Сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----
```
> [!NOTE]
> Если вы покупали SSL в Timeweb Cloud, у вас будет один файл CRT, который уже содержит все необходимые данные. Просто полностью скопируйте его содержимое — это можно сделать в разделе «SSL-сертификаты».

Если вы покупали SSL у другого провайдера и у вас нет файла цепочки, запросить ее можно через поддержку провайдера или сгенерировать с помощью сервиса [https://whatsmychaincert.com/](https://whatsmychaincert.com/).
2. Также после покупки SSL у вас будет файл приватного (секретного) ключа.
В Timeweb Cloud файл `Private KEY` можно найти в разделе «SSL-сертификаты». Если вы покупали SSL через другого провайдера и у вас нет этого файла, запросите его через поддержку провайдера.
Создайте новый файл с именем `ваш_домен.key` и скопируйте в него содержимое приватного ключа.
3. Подключитесь к серверу по [FTP / SFTP](https://timeweb.cloud/docs/unix-guides/sftp) и загрузите файлы в директорию `/etc/ssl`.
Другой вариант — [подключиться по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и создать нужные файлы в директории `/etc/ssl`, например:
```shell
sudo nano /etc/ssl/mydomain.ru.crt
```
В созданный файл вставьте содержимое сертификата и цепочки. Сохраните изменения (Ctrl+X, затем Y и Enter).
Создайте файл ключа:
```shell
sudo nano /etc/ssl/mydomain.ru.key
```
Вставьте в него содержимое файла ключа и сохраните изменения.
### Настройка конфигурационного файла Nginx
В зависимости от ваших настроек, потребуется изменить либо основной конфиг-файл Nginx (`/etc/nginx/nginx.conf`), либо конфиг виртуального хоста, если вы его создавали.
Для Ubuntu файл конфигурации виртуального хоста находится по пути `/etc/nginx/sites-available/ваш_домен.conf`. Для CentOS конфигурационный файл виртуального хоста располагается в директории `/etc/nginx/conf.d/ваш_домен.conf`.
Ubuntu
Откройте его:
```shell
sudo nano /etc/nginx/sites-available/ваш_домен.conf
```
CentOS
Откройте его:
```shell
sudo vi /etc/nginx/conf.d/ваш_домен.conf
```
В блок `server{}` добавьте следующие данные:
Вместо:
```shell
listen 80;
listen [::]:80;
```
Укажите:
```shell
listen 443 ssl;
```
Под строкой:
```shell
server_name ваш_домен www.ваш_домен;
```
Укажите пути к файлам сертификата и ключа:
```shell
ssl_certificate /etc/ssl/ваш_домен.crt;
ssl_certificate_key /etc/ssl/ваш_домен.key;
```
Чтобы перенаправлять клиентов, обратившихся к сайту по HTTP, на безопасное подключение, добавьте новый блок `server{}` под существующим со следующим содержимым:
```shell
server {
listen 80;
listen [::]:80;
server_name ваш_домен www.ваш_домен;
return 302 https://$server_name$request_uri;
}
```
Здесь мы указываем временный 302 редирект. После того, как вы проверите работу и убедитесь, что все в порядке, замените его на 301.
В итоге у вас должно получиться что-то подобное:
```shell
server {
listen 443 ssl;
server_name mydomain.ru www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.ru.crt;
ssl_certificate_key /etc/ssl/mydomain.ru.key;
root /var/www/mydomain.ru/html;
index index.html index.xml;
}
server {
listen 80;
listen [::]:80;
server_name mydomain.ru www.mydomain.ru;
return 302 https://$server_name$request_uri;
}
```
Этих настроек достаточно для работы сертификата. Вы можете сохранить изменения и сразу перейти к шагу 4. Либо можно настроить дополнительные параметры — их рассмотрим на следующем шаге.
### Дополнительные настройки (опционально)
1. Чтобы оптимизировать работу Nginx при использовании SSL, можно задействовать кэш SSL-сессий.
- - Укажем, что будем использовать shared-кэш, который делится между всеми рабочими процессами, и его размер — 10 МБ:
```shell
ssl_session_cache shared:SSL:10m;
```
Эту и следующие строки также вставьте в блок `server{}` — под строки с путями до сертификатов.
- - Зададим таймаут кэша в 10 минут:
```shell
ssl_session_timeout 10m;
```
Таймаут — это период, в течение которого параметры SSL-сессии используются повторно. По умолчанию таймаут равен 5 минутам, если вам подходит это значение, директиву `ssl_session_timeout` можно не указывать. А можно, напротив, значительно увеличить таймаут, чтобы повысить производительность веб-сервера — например, до одного дня (`1d`).
- - Зададим время работы одного соединения:
```shell
keepalive_timeout 70;
```
2. Чтобы ускорить загрузку страниц сайта у его посетителей, можно включить опцию SSL stapling — это разрешит серверу прикреплять OCSP-ответы для валидации сертификата.
Для этого вам понадобится создать файл `ca.crt`, который будет содержать корневой сертификат, полученный вами при покупке SSL (в файле цепочки он идет последним).
Созданный файл нужно разместить на сервере в директории с сертификатами `/etc/ssl`.
Включаем SSL stapling, добавляя директиву:
```shell
ssl_stapling on;
```
Указываем путь к корневому сертификату:
```shell
ssl_trusted_certificate /etc/ssl/ca.crt;
```
Указываем DNS:
```shell
resolver 8.8.8.8;
```
Сохраните изменения.
В итоге вас получится конфигурация примерно следующего вида:
```shell
server {
listen 443 ssl;
server_name mydomain.ru www.mydomain.ru;
ssl_certificate /etc/ssl/mydomain.ru.crt;
ssl_certificate_key /etc/ssl/mydomain.ru.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
ssl_stapling on;
ssl_trusted_certificate /etc/ssl/ca.crt;
resolver 8.8.8.8;
root /var/www/mydomain.ru/html;
index index.html index.xml;
}
server {
listen 80;
listen [::]:80;
server_name mydomain.ru www.mydomain.ru;
return 302 https://$server_name$request_uri;
}
```
### Применение настроек
Проверьте конфигурацию Nginx:
```shell
sudo nginx -t
```
Перезапустите Nginx, чтобы изменения вступили в силу:
```shell
sudo systemctl restart nginx
```
Проверьте работу сайта — теперь он должен быть доступен по HTTPS.
# Использование proxy_pass в Nginx
Source: https://timeweb.cloud/docs/unix-guides/nginx-proxy-pass?utm_source=llms_txt&utm_medium=ai
`proxy_pass` — это директива Nginx, при помощи которой можно передавать входящие HTTP-запросы другому сервису. Nginx в принимает запрос от клиента, отправляет его на указанный адрес и возвращает ответ обратно.
Один из самых распространенных примеров применения — сервис, запущенный на сервере и доступный только локально по адресу вида `localhost:порт`. Технически можно открыть этот порт наружу и обращаться к сервису напрямую, но такой подход может быть неудобным и небезопасным. Обращаться к сервису по домену проще, а сам сервис при этом может не поддерживать SSL, авторизацию или ограничение доступа по IP. В такой схеме Nginx принимает запросы по домену и проксирует их на локальный порт сервиса.
Другой сценарий — использование вебхуков. Например, при работе Telegram-бота вебхуки требуют публичный HTTPS-адрес. Сам бот при этом может работать локально или в контейнере и принимать HTTP-запросы. Nginx в этом случае используется для приема HTTPS-запросов, обработки сертификатов и проксирования запросов к сервису бота через `proxy_pass`.
`proxy_pass` также часто применяют, когда инфраструктура разнесена на несколько серверов. Например, сайт работает на одном сервере, а форум — на другом. С помощью Nginx можно настроить проксирование так, чтобы при обращении к `/forum` запросы отправлялись на отдельный сервер с форумом. Для пользователя все выглядит как единый сайт, хотя фактически сервисы физически разделены.
Перечисленные примеры — лишь часть ситуаций, в которых применим `proxy_pass`.
## Предварительная подготовка
Если Nginx еще не установлен — установите его при помощи команд:
deb-based
```bash
sudo apt update && sudo apt install nginx -y
```
rpm-based
```bash
sudo dnf update && sudo dnf install nginx -y
```
После установки запустите сервис и добавьте его в автозагрузку:
```bash
sudo systemctl start nginx && sudo systemctl enable nginx
```
Проверьте статус сервиса — он должен быть в состоянии `active`:
```bash
sudo systemctl status nginx
```
Для удобства управления конфигурациями рекомендуется создавать отдельный конфиг для каждого сервиса. В rpm-based дистрибутивах конфигурационные файлы обычно располагаются в каталоге `/etc/nginx/conf.d/`.
В deb-based дистрибутивах используется другая схема: конфиги размещаются в `/etc/nginx/sites-available/`, а для их активации создаются симлинки в `/etc/nginx/sites-enabled/`.
Далее в примерах будет использоваться deb-based дистрибутив.
По умолчанию Nginx создает конфигурацию `default`. Если обратиться в браузере к адресу `http://IP_сервера`, вы увидите стандартную заглушку Nginx — за нее как раз отвечает этот конфиг. Его можно удалить:
```bash
rm /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default
```
Создайте новый конфигурационный файл для сервиса:
```bash
touch /etc/nginx/sites-available/my-service.conf
```
И сразу создайте симлинк:
```bash
sudo ln -s /etc/nginx/sites-available/my-service.conf /etc/nginx/sites-enabled/
```
Далее, после любого изменения конфигурации проверьте ее корректность:
```bash
nginx -t
```
Если ошибок нет, примените изменения:
```bash
systemctl reload nginx
```
## Пример использования
В первом примере представим, что сервис запущен на `localhost:6789`. Это может быть, например, сайт на Python или Telegram-бот на Node.js, запущенный через `gunicorn` или `pm2`. Мы хотим, чтобы сервис был доступен из интернета по домену `service.example.com`.
Откройте конфигурационный файл для редактирования:
```bash
nano /etc/nginx/sites-available/my-service.conf
```
Минимальная конфигурация будет выглядеть следующим образом:
```shell
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:6789;
}
}
```
При такой конфигурации все обращения к серверу, включая обращения по его IP-адресу, будут проксироваться на внутренний сервис `127.0.0.1:6789`. Вместо IP-адреса можно указать домен, URI или путь к UNIX-сокету.
Чтобы сервис был доступен по конкретному домену, укажите его вместо `_` в директиве `server_name`.
В текущей конфигурации внутреннему сервису не передаются заголовки, которые отправляет клиент. Это может привести к проблемам с логированием, редиректами и определением реального IP клиента. Для передачи заголовков используются директивы `proxy_set_header`. Также имеет смысл отключить буферизацию ответов с помощью `proxy_buffering`, особенно если сервис отдает данные потоково или используется для вебхуков.
Итоговая конфигурация может выглядеть так:
```shell
server {
listen 80;
server_name service.example.com;
location / {
proxy_pass http://127.0.0.1:6789;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
}
```
Проверьте конфигурацию:
```bash
nginx -t
```
И перезагрузите Nginx, чтобы применить изменения:
```bash
systemctl reload nginx
```
## Проксирование части запроса
Предположим, что у сервиса есть API, который расположен на другом сервере и должен быть доступен по адресу `service.example.com/api`. В этом случае также можно использовать `proxy_pass`.
Добавьте новый блок `location` в конфигурационный файл:
```bash
server {
listen 80;
server_name service.example.com;
location / {
proxy_pass http://127.0.0.1:6789;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
location /api/ {
proxy_pass http://ip_стороннего_сервера:8000;
}
}
```
В этом случае все запросы к `/api` будут проксироваться на отдельный сервер, а остальные — обрабатываться основным сервисом.
## Настройка авторизации
Чтобы ограничить доступ к сервису с помощью базовой HTTP-аутентификации, сначала сгенерируйте хэш пароля. Например, с помощью `openssl`:
```bash
openssl passwd -apr1
```
Дважды укажите желаемый пароль. В результате команда вернет строку с хэшем, например:
```bash
$apr1$9o.mJgYk$43kvlHx0DSqezaAL3yMHe1
```
Создайте файл для размещения логинов и хэшей паролей. Его можно разместить в любой удобной директории, например в каталоге Nginx:
```bash
nano /etc/nginx/.htpasswd
```
Укажите в файле данные в формате `имя_пользователя:хэш_пароля`:
```bash
admin:$apr1$9o.mJgYk$43kvlHx0DSqezaAL3yMHe1
```
Сохраните файл и установите для него права доступа:
```bash
sudo chmod 640 /etc/nginx/.htpasswd
```
Задайте владельца и группу:
```bash
sudo chown root:www-data /etc/nginx/.htpasswd
```
В rpm-based дистрибутивах группу `www-data` нужно заменить на `nginx`.
После этого добавьте директивы `auth_basic` в конфигурацию Nginx:
```bash
server {
listen 80;
server_name service.example.com;
location / {
proxy_pass http://127.0.0.1:6789;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
}
```
Проверьте конфигурацию и примените изменения:
```bash
sudo nginx -t
sudo systemctl reload nginx
```
## Ограничение по IP
Чтобы ограничить доступ к сервису по IP-адресам, используйте директивы `allow` и `deny`. Пример конфигурации:
```bash
server {
listen 80;
server_name service.example.com;
location / {
allow IP1;
allow IP2.0/24;
deny all;
proxy_pass http://127.0.0.1:6789;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
}
}
```
В этом случае доступ к сервису будет разрешен только с IP-адреса `IP1` и из подсети `IP2.0/24`.
## Настройка SSL
Чтобы настроить SSL-сертификат для уже существующего конфига, можно [воспользоваться certbot или установить сертификат вручную](https://timeweb.cloud/docs/unix-guides/ustanovka-ssl-na-nginx).
# Установка модулей PHP (CentOS)
Source: https://timeweb.cloud/docs/unix-guides/installing-php-modules-centos?utm_source=llms_txt&utm_medium=ai
Ниже мы рассмотрим установку модулей PHP на сервер с операционной системой CentOS.
### **Создание phpinfo-скрипта**
В процессе установки модулей нам потребуется получать информацию о параметрах PHP на сервере, поэтому в первую очередь разместим скрипт `phpinfo.php` в директории сайта.
Для этого [подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните следующие шаги:
1\. Перейдите в директорию сайта:
```shell
cd путь/к/директории/сайта
```
Например, если на сервере установлен LAMP (автоматически при создании сервера):
```shell
cd /var/www/html
```
Если на сервере установлена панель VestaCP:
```shell
cd /home/имя_пользователя/web/имя_домена/public_html
```
2\. Создайте файл `phpinfo.php`:
```shell
nano phpinfo.php
```
3\. Добавьте в него следующее содержимое:
```shell
```
4\. Сохраните изменения (нажмите Ctrl+X для выхода из nano, далее Y для сохранения изменений и Enter).
После перейдите по адресу `http://вашдомен/phpinfo.php`, и в браузере будет отображена информация о настройках PHP.
### **Установка модулей на примере imagick**
Рассмотрим установку модулей php на примере модуля `imagick`.
1\. Уточните имя пакета.
Если вы не уверены в точном названии пакета, можно воспользоваться командой ниже, указав часть названия пакета.
```shell
yum search ima
```
После определения точного имени модуля, можно перейти к установке.
2\. Обновите информацию из репозиториев:
```shell
yum update
```
3\. Установите библиотеку:
```shell
yum install ImageMagick ImageMagick-devel
```
4\. Большинство расширений можно установить из репозитория PECL (чтобы убедиться, что этот способ подходит для нужного расширения, проверьте его наличие здесь: [https://pecl.php.net/packages.php](https://pecl.php.net/packages.php)).
Установите пакет `php-pear`:
```shell
yum install php-pear gcc make php-devel
```
5\. Выполните команду:
```shell
pecl install imagick
```
6\. В процессе установки будет выведен запрос:
```shell
Please provide the prefix of Imagemagick installation
```
В ответ на запрос системы введите `all` и нажмите Enter.
7\. Проверьте, какая директория задана для расширений. Для этого нужно на странице `http://вашдомен/phpinfo.php` найти параметр `extension_dir`:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
Перейдите в указанную директорию:
```shell
cd /usr/lib64/php/modules
```
Проверьте, есть ли в ней установленная библиотека:
```shell
ls
```
Можно указать часть имени пакета в названии, чтобы упростить вывод, например:
```shell
ls ima*
```
Если библиотека присутствует, она будет выведена в консоли:

8\. Выполните команду ниже, чтобы создать файл конфигурации `imagick.ini` и добавить в него директиву `extension=imagick.so`:
```shell
echo "extension=imagick.so" > /etc/php.d/imagick.ini
```
9\. Перезапустите веб-сервер Apache:
```shell
systemctl restart httpd
```
10\. Обновите страницу `http://вашдомен/phpinfo.php` и найдите установленный модуль, чтобы убедиться, что все в порядке:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
### **Подключение внешних библиотек**
Если вам требуется подключить библиотеку, скачанную не из репозитория, необходимо:
1\. Загрузить файл с расширением `.so` в директорию с остальными библиотеками (см. значение параметра `extension_dir` на странице `http://вашдомен/phpinfo.php`; в нашем примере это директория `/usr/lib64/php/modules/`).

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
2\. Перейти в директорию `/etc/php.d`:
```shell
cd /etc/php.d
```
3\. Создать конфигурационный файл:
```shell
nano имя_библиотеки.ini
```
Например:
```shell
nano curl.ini
```
4\. Указать в данном файле директиву и сохранить изменения:
```shell
extension=имя_библиотеки.so
```
Например:
```shell
extension=curl.so
```
5\. Перезагрузить Apache:
```shell
systemctl restart httpd
```
6\. Обновить страницу `http://вашдомен/phpinfo.ph`p и убедиться, что библиотека установлена.
Если файл библиотеки был размещен в другой директории, то на шаге 4 необходимо в директиве `extension` указать соответствующий путь, например:
```shell
extension=/usr/local/lib/php/extensions/curl.so
```
# Установка модулей PHP (Debian / Ubuntu)
Source: https://timeweb.cloud/docs/unix-guides/installing-php-modules-debian-ubuntu?utm_source=llms_txt&utm_medium=ai
Ниже мы рассмотрим установку модулей PHP на сервер с операционной системой Ubuntu или Debian.
### **Создание phpinfo-скрипта**
В процессе установки модулей нам потребуется получать информацию о параметрах PHP на сервере, поэтому в первую очередь разместим скрипт `phpinfo.php` в директории сайта.
Для этого [подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните следующие шаги:
1\. Перейдите в директорию сайта:
```shell
cd путь/к/директории/сайта
```
Например, если на сервере установлен LAMP (автоматически при создании сервера):
```shell
cd /var/www/html
```
Если на сервере установлена панель VestaCP:
```shell
cd /home/имя_пользователя/web/имя_домена/public_html
```
2\. Создайте файл `phpinfo.php`:
```shell
nano phpinfo.php
```
3\. Добавьте в него следующее содержимое:
```shell
```
4\. Сохраните изменения (нажмите Ctrl+X для выхода из nano, далее Y для сохранения изменений и Enter).
После перейдите по адресу `http://вашдомен/phpinfo.php`, и в браузере будет отображена информация о настройках PHP.
### **Установка модулей на примере imagick**
Рассмотрим установку модулей php на примере модуля `imagick`.
1\. Уточните имя пакета.
Если вы не уверены в точном названии пакета, можно воспользоваться командой ниже, указав часть названия пакета. Для PHP названия большинства библиотек будут начинаться с «php».
```shell
apt-cache search что_ищем
```
Например:
```shell
apt-cache search php-ima
```
Вывод команды выглядит примерно следующим образом:

В данном случае нам будет нужен пакет `php-imagick`.
2\. Обновите информацию из репозиториев:
```shell
apt update
```
3\. Установите библиотеку:
```shell
apt install имя_пакета
```
Например:
```shell
apt install php-imagick
```
4\. Проверьте, какая директория задана для расширений. Для этого нужно на странице `http://вашдомен/phpinfo.php` найти параметр «extension\_dir»:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
Перейдите в указанную директорию:
```shell
cd /нужная/директория
```
В нашем случае:
```shell
cd /usr/lib/php/20170718
```
Проверьте, есть ли в ней установленная библиотека:
```shell
ls
```
Можно указать часть имени библиотеки, чтобы упростить вывод, например:
```shell
ls ima*
```
Если библиотека присутствует, она будет выведена в консоли:

5\. Проверьте, какая директория используется для дополнительных конфигурационных файлов. Для этого нужно на странице `http://вашдомен/phpinfo.php` найти параметр «Scan this dir for additional .ini files»:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
Перейдите в указанную директорию и просмотрите ее содержимое:
```shell
cd /нужная/директория
ls
```
В нашем случае:
```shell
cd /etc/php/7.2/apache2/conf.d
```
```shell
ls
```
Можно указать часть имени библиотеки, чтобы упростить вывод, например:
```shell
ls *imag*
```
Если конфигурационный файл с директивой, подключающей библиотеку, успешно создан, он будет выведен в консоли:

Если файл отсутствует, воспользуйтесь командой ниже, чтобы его создать:
```shell
echo "extension=imagick.so" > /директория/из/пункта/5/imagick.ini
```
В нашем случае:
```shell
echo "extension=imagick.so" > /etc/php/7.2/apache2/conf.d/imagick.ini
```
Она создаст файл конфигурации `imagick.ini` в нужной директории и добавит в него директиву `extension=imagick.so`.
6\. Перезагрузите веб-сервер Apache:
```shell
service apache2 restart
```
7\. Обновите страницу `http://вашдомен/phpinfo.php` и найдите установленный модуль, чтобы убедиться, что все в порядке:

**
_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
**
### **Подключение внешних библиотек**
Если вам требуется подключить библиотеку, скачанную не из репозитория, необходимо:
1\. Загрузить файл с расширением `.so` в директорию с остальными библиотеками (см. значение параметра `extension_dir` на странице `http://вашдомен/phpinfo.php`; в нашем примере это директория `/usr/lib/php/20170718`).

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
2\. Перейти в директорию с дополнительными конфигурационными файлами (см. значение параметра «Scan this dir for additional .ini files» на странице `phpinfo.php`; в нашем примере это `/etc/php/7.2/apache2/conf.d`):
```shell
cd /etc/php/7.2/apache2/conf.d
```
3\. Создать конфигурационный файл:
```shell
nano имя_библиотеки.ini
```
Например:
```shell
nano curl.ini
```
4\. Указать в данном файле директиву и сохранить изменения:
```shell
extension=имя_библиотеки.so
```
Например:
```shell
extension=curl.so
```
5\. Перезапустить Apache:
```shell
service apache2 restart
```
6\. Обновить страницу `http://вашдомен/phpinfo.php` и убедиться, что библиотека установлена.
Если файл библиотеки был размещен в другой директории, то на шаге 4 необходимо в директиве `extension` указать соответствующий путь, например:
```shell
extension=/usr/local/lib/php/extensions/curl.so
```
# Настройка параметров PHP (CentOS)
Source: https://timeweb.cloud/docs/unix-guides/setting-php-options-centos?utm_source=llms_txt&utm_medium=ai
Ниже мы рассмотрим настройку параметров PHP на сервере с операционной системой Centos или Bitrix.
## Создание phpinfo-скрипта
В процессе настройки потребуется получать информацию о параметрах PHP на сервере, поэтому в первую очередь необходимо разместить скрипт `phpinfo.php` в директории сайта.
[Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните следующие действия:
1\. Перейдите в директорию сайта:
```shell
cd путь/к/директории/сайта
```
Например, если на сервере установлен LAMP (автоматически при создании сервера):
```shell
cd /var/www/html
```
Если на сервере установлена панель VestaCP:
```shell
cd /home/имя_пользователя/web/имя_домена/public_html
```
2\. Создайте файл `phpinfo.php`:
```shell
nano phpinfo.php
```
3\. Добавьте в него следующее содержимое:
```shell
```
4\. Сохраните изменения (нажать Ctrl+X для выхода из `nano`, далее Y для сохранения изменений и Enter).
После перейдите по адресу `http://вашдомен/phpinfo.php`, и в браузере будет отображена информация о настройках PHP.
Путь к конфигурационному файлу `php.ini` можно найти в строке `Loaded Configuration File`:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
В нашем случае это `/etc/php.ini` (стандартное размещение для CentOS).
## Настройка параметров
Рассмотрим настройку параметров на примере `mbstring.func_overload`.
1\. Найдите нужный параметр в `php.ini` при помощи команды:
```shell
grep -ni 'имя_параметра' /путь/до/php.ini
```
Например:
```shell
grep -ni 'mbstring.func_overload' /etc/php.ini
```
Ключ `-n` покажет, в какой строке расположена директива, чтобы можно было перейти сразу к ней.

В данном случае номер строки — 1714.
2\. Откройте файл в текстовом редакторе, указав номер нужной строки:
```shell
nano +номер_строки путь/до/php.ini
```
Например:
```shell
nano +1714 /etc/php.ini
```
3\. Отредактируйте строку: уберите знак комментария (`;`) и измените значение параметра на нужное вам:

В данном случае мы указываем 2.

4\. Сохраните изменения (нажмите Ctrl+x для выхода из `nano`, далее Y для сохранения изменений и Enter).
5\. Перезагрузите веб-сервер Apache:
```shell
service apache2 restart
```
6\. Для проверки обновите страницу `http://вашдомен/phpinfo.php` и найдите текущее значение нужной директивы:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
# Настройка параметров PHP (Debian / Ubuntu)
Source: https://timeweb.cloud/docs/unix-guides/setting-php-options-debian-ubuntu?utm_source=llms_txt&utm_medium=ai
В статье описана настройка параметров PHP на сервере с операционными системами Ubuntu или Debian.
Настройка параметров производится в конфигурационном файле `php.ini`.
В зависимости от того, как используется PHP на сервере, эти файлы обычно размещаются по следующим путям:
```shell
/etc/php/x.x/apache2/php.ini
# Если PHP работает в режиме FastCGI:
/etc/php/x.x/cgi/php.ini
# Настройки PHP в командной строке:
```
Определить точное расположение файла `php.ini` можно с помощью скрипта `phpinfo.php`.
### **Создание phpinfo-скрипта**
[Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните следующие действия:
1\. Перейдите в директорию сайта:
```shell
cd путь/к/директории/сайта
```
Например, если на сервере установлен LAMP (автоматически при создании сервера):
```shell
cd /var/www/html
```
Если на сервере установлена панель VestaCP:
```shell
cd /home/имя_пользователя/web/имя_домена/public_html
```
2\. Создайте файл `phpinfo.php`:
```shell
nano phpinfo.php
```
3\. Добавьте в него следующее содержимое:
```shell
```
4\. Сохраните изменения (нажать Ctrl+X для выхода из `nano`, далее Y для сохранения изменений и Enter).
После перейдите по адресу `http://вашдомен/phpinfo.php`, и в браузере будет отображена информация о настройках PHP.
Путь к конфигурационному файлу `php.ini` можно найти в строке `Loaded Configuration File`:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
### **Настройка параметров**
Рассмотрим настройку на примере параметра `mbstring.func_overload`.
1\. Найдите нужный параметр в `php.ini` при помощи команды:
```shell
grep -ni 'имя_параметра' /путь/до/php.ini
```
Например:
```shell
grep -ni 'mbstring.func_overload' /etc/php/7.2/apache2/php.ini
```
Ключ `-n` покажет, в какой строке расположена директива, чтобы можно было перейти сразу к ней.

В данном случае номер строки — 1704.
2\. Откройте файл в текстовом редакторе, указав номер нужной строки:
```shell
nano +номер_строки путь/до/php.ini
```
Например:
```shell
nano +1704 /etc/php/7.2/apache2/php.ini
```
3\. Отредактируйте строку: уберите знак комментария (`;`) и измените значение на нужное вам:

В данном случае мы указываем 2:

4\. Сохраните изменения: нажмите Ctrl+x для выхода из `nano`, далее Y для сохранения изменений и Enter.
5\. Перезапустите веб-сервер Apache командой:
```shell
service apache2 restart
```
6\. Для проверки обновите страницу `http://вашдомен/phpinfo.php` и найдите текущее значение нужной директивы:

_Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_
# Настройка перенаправлений
Source: https://timeweb.cloud/docs/unix-guides/setting-up-redirects?utm_source=llms_txt&utm_medium=ai
В статье приведены примеры стандартных перенаправлений, которые могут быть настроены с помощью файла `.htaccess` вашего сайта.
Указанные перенаправления будут работать:
- для большинства конфигураций VDS, где используется веб-сервер **Apache** (необходимо, чтобы был [включен модуль mod\_rewrite](https://timeweb.cloud/docs/unix-guides/setting-up-redirects#kak-proverit-chto-mod-rewrite-vkluchen));
- для серверов с VestaCP или ispmanager, установленными через панель управления аккаунтом. В ispmanager простые перенаправления могут также быть настроены [средствами панели](https://timeweb.cloud/docs/control-panels/ispmanager/setting-up-redirects).
Обратите внимание, что данные редиректы **не подойдут** для OS Bitrix7.
## Что такое .htaccess?
Файл `.htaccess` позволяет вам настраивать конфигурацию веб-сервера Apache для конкретного сайта, не затрагивая настройки основных конфигурационных файлов Apache (`httpd.conf` в CentOS и `apache2.conf` в Ubuntu/Debian) и не рискуя что-то необратимо сломать на сервере. Директивы, указанные в `.htaccess` будут действовать только для каталога, в котором размещается этот файл, и его подкаталогов.
Для подкаталогов также можно создавать дополнительные `.htaccess`\-файлы; при этом они переопределят настройки, назначенные в `.htaccess` на уровне выше.
В `.htaccess` можно:
- Настраивать перенаправления с одного адреса на другой;
- Управлять настройками PHP;
- Задавать собственные страницы ошибок;
- Устанавливать права доступа к файлам;
- — и многое другое.
## Как создать .htaccess?
Файл необходимо создать в каталоге сайта (обычно это `/var/www/html`, но у вас путь может отличаться — в этом случае замените его в командах) с помощью подключения по SSH или FTP.
При подключении по SSH это можно сделать так:
```shell
touch /var/www/html/.htaccess
```
## Как «включить» .htaccess?
Чтобы веб-сервер Apache читал и применял настройки из файла `.htaccess`, в главном конфигурационном сайте Apache — `httpd.conf` или `apache2.conf` — должна быть прописана директива `Allow Override All` для нужной нам директории.
Рассмотрим на примере сервера с LAMP с системой Ubuntu 20.04.
Откроем файл конфигурации `apache2.conf`:
```shell
nano /etc/apache2/apache2.conf
```
Стандартно сайт размещается в директории `/var/www/html/`. Видим, что `Allow Override` для нее имеет значение `None` — значит, `.htaccess` не будет работать.

Если ваш сайт размещен по другому пути (не `/var/www/.../`), исправьте путь на верный или добавьте еще один блок `` с нужным путем.
Меняем значение на `Allow Override All`:

Сохраняем изменения (Ctrl + X, затем Y, затем Enter).
И перезагружаем веб-сервер:
```shell
systemctl restart apache2
```
Теперь мы можем прописывать директивы для сайта в файле `.htaccess`.
## Как проверить, что mod\_rewrite включен?
Во-первых, убедитесь, что у вас включен модуль `mod_rewrite`. Для этого выполните команду:
```shell
apache2ctl -M | grep rewrite
```
В выводе должно быть `rewrite_module (shared)`:

Если вывод отличается — включите mod\_rewrite командой:
```shell
sudo a2enmod rewrite
```
## Как прописывать редиректы?
Директивы перенаправлений необходимо указывать в блоке `` со следующим содержимым:
```shell
Options +FollowSymLinks
RewriteEngine on
#Ваши правила
```
В качестве правил указываются директивы `RewriteCond` и `RewriteRule` с необходимыми значениями — `RewriteCond` задает условие, при котором происходит выполнение правила, указанного в `RewriteRule`.
Например, так мы настроим перенаправление с HTTP на HTTPS для сайта mydomain.com:
```shell
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^mydomain.com$
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]
```

## Настройка перенаправлений
### Перенаправление на другой домен
В примере ниже выполняется редирект с www.old-domain.ru на www.new-domain.ru:
```shell
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.ru$
RewriteRule ^(.*)$ http://www.new-domain.ru/$1 [R=301,L]
```
### Перенаправление c http на https
1\. Перенаправление с **http**://example.ru на **https**://example.ru.
```shell
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^example.ru$
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]
```
1a. Для серверов **с панелью VestaCP**:
```shell
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
```
1b. Для серверов **с панелью ispmanager** при использовании Nginx:
```shell
RewriteBase /
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
```
2\. Перенаправление с **http**://example.ru на **https**://**www**.example.ru.
```shell
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^example.ru$
RewriteRule ^(.*)$ https://www.example.ru/$1 [R=301,L]
```
3\. Перенаправление с **http**://**www**.forum.example.ru на **https**://forum.example.ru.
```shell
RewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
```
4\. Перенаправление с **http**://forum.example.ru на **https**://**www**.forum.example.ru.
```shell
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://www.forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
```
### Перенаправление с https на http
```shell
RewriteBase /
RewriteCond %{HTTPS} on [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
```
### Перенаправление на http для одной страницы
Вариант 1:
```shell
RewriteBase /
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
```
Вариант 2:
```shell
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
```
**Пример**: отключение перенаправления на https для страницы `bitrix/admin/1c_exchange.php` для корректной работы обмена данных с 1C:
```shell
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on [NC]
RewriteCond %{REQUEST_URI} ^/bitrix/admin/1c_exchange\.php$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
```
Оно же **для панели VestaCP**:
```shell
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} ^/bitrix/admin/1c_exchange\.php$
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
```
### Перенаправление на https для одной страницы
```shell
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
```
### Перенаправление домена без www на домен с www
В примерах осуществляется редирект с forum.example.ru на www.forum.example.ru.
Способ 1:
```shell
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://www.forum.example.ru/$1 [R=301,L]
```
Способ 2, без указания домена:
```shell
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
```
### Перенаправление домена с www на домен без www
В примерах осуществляется перенаправление с www.forum.example.ru на forum.example.ru.
Способ 1:
```shell
RewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]
```
Способ 2.
```shell
RewriteCond %{HTTP_HOST} !^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]
```
### Перенаправление в подкаталог
Перенаправление поддомена forum.example.ru в подкаталог forum:
```shell
RewriteBase /
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$
RewriteCond %{REQUEST_URI} !/forum/ RewriteRule ^(.*)$ /forum/$1 [L]
```
# Настройка перенаправлений (Nginx)
Source: https://timeweb.cloud/docs/unix-guides/setting-up-redirects-nginx?utm_source=llms_txt&utm_medium=ai
В статье приведены примеры стандартных перенаправлений для веб-сервера **Nginx** (настройка редиректов для Apache описана в [отдельной статье](https://timeweb.cloud/docs/unix-guides/setting-up-redirects)).
Для настройки перенаправлений директивы нужно прописывать в файле конфигурации `nginx.conf` или, если у вас настроены виртуальные хосты, — в конфигурационном файле соответствующего виртуального хоста. Директиву с редиректом необходимо добавлять в блок `server` конфигурационного файла.
## Перенаправление на другой домен
В примере ниже выполняется редирект на www.new-domain.ru:
```shell
server {
#...
rewrite ^ $scheme://www.new-domain.ru;
#...
}
```
## Перенаправление c http на https
```shell
server {
#...
return 301 https://$host$request_uri;
#...
}
```
## Перенаправление с https на http
```shell
server {
#...
server_name
example.ru www.example.ru;
return 301 http://$server_name$request_uri;
#...
}
```
## Перенаправление домена без www на домен с www
```shell
server {
#...
return 301 $scheme://www.example.ru$request_uri;
#...
}
```
## Перенаправление домена с www на домен без www
```shell
server {
#...
return 301 $scheme://example.ru$request_uri;
#...
}
```
## Перенаправление для одной страницы
```shell
server
{
#...
location = /example_old.html {
return 301 /example_new.html;
}
#...
}
```
## Перенаправление на страницу со слэшем в конце
```shell
server {
#...
rewrite ^(.*[^/])$ $1/ permanent;
#...
}
```
## Перенаправление на страницу без слэша в конце
```shell
server {
#...
rewrite ^/(.*)/$ /$1 permanent;
#...
}
```
# Настройка FTP в Ubuntu
Source: https://timeweb.cloud/docs/unix-guides/ftp-setup-in-ubuntu-20-04?utm_source=llms_txt&utm_medium=ai
В инструкции мы рассмотрим, как установить и настроить работу FTP-сервера `vsftpd` на VDS с **Ubuntu 24.04**. Описанный алгоритм также подойдет для более ранних версий ОС.
## Установка vsftpd
Обновите пакеты и запустите установку:
```shell
sudo apt update && sudo apt install vsftpd
```
После завершения установки FTP-сервер будет запущен. Убедиться в этом можно, проверив статус сервиса:
```shell
sudo systemctl status vsftpd
```

Далее добавьте `vsftpd` в автозагрузку:
```shell
sudo systemctl enable vsftpd
```
## Настройка конфигурации
Далее нужно внести изменения в конфигурационный файл `vsftpd`. Cоздайте копию файла, чтобы при необходимости вернуть настройки по умолчанию.
Cоздайте копию файла, чтобы при необходимости вернуть настройки по умолчанию:
```shell
sudo mv /etc/vsftpd.conf /etc/vsftpd.confbak
```
Откройте конфигурационный файл:
```shell
sudo nano /etc/vsftpd.conf
```
Скопируйте в него следующий блок директив:
```shell
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_min_port=40000
pasv_max_port=50000
```
Сохраните изменения и закройте файл (Ctrl+X для выхода из `nano`, далее Y и Enter).
Перезапустите службу FTP:
```shell
sudo systemctl restart vsftpd
```
## Создание FTP-пользователей
Создайте пользователя для работы по FTP:
```
sudo useradd -m -s /bin/bash имя_пользователя
```
Задайте пароль для него:
```shell
sudo passwd имя_пользователя
```
## Настройка файрвола
Чтобы подключения по FTP не блокировались файрволом, необходимо добавить правила, которые разрешают FTP-трафик. Рассмотрим настройку на примере UFW.
Откройте порты 20, 21, 22, 990 и зарезервируйте диапазон портов 40000-50000:
```shell
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow OpenSSH
sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp
```
Перезагрузите UFW:
```KDcb0c
sudo ufw reload
```
Проверьте статус сервиса UFW:
```shell
sudo ufw status
```
На этом установка и настройка FTP-сервера `vsftpd` завершена. Проверьте работу FTP, подключившись к серверу через FileZilla.
# Оптимизация MySQL с помощью MySQLTuner
Source: https://timeweb.cloud/docs/unix-guides/optimizing-mysql-with-mysqltuner?utm_source=llms_txt&utm_medium=ai
MySQLTuner — это скрипт, который анализирует работу MySQL и выводит рекомендации по его оптимизации.
Скачать скрипт можно командой:
```shell
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
```
> [!NOTE]
> Перед запуском скрипта сервер MySQL должен **проработать около суток** без перезагрузок и смены конфигурации, чтобы MySQLTuner мог получить достаточно данных для полноценного анализа. В противном случае результаты работы скрипта будут бесполезны.
Запустите скрипт:
```shell
perl mysqltuner.pl
```
MySQLTuner выведет результат, который будет состоять из нескольких секций и выглядеть примерно следующим образом (реальный вывод будет подробнее и длиннее):
```shell
root@server:~# perl mysqltuner.pl
>> MySQLTuner 1.7.19 - Major Hayden
>> Bug reports, feature requests, and downloads at http://mysqltuner.pl/
>> Run with '--help' for additional options and output filtering
[--] Skipped version check for MySQLTuner script
[OK] Logged in using credentials from Debian maintenance account.
-------- Log file Recommendations ---------------------------------------------
[OK] Log file /var/log/mysql/error.log exists
[--] Log file: /var/log/mysql/error.log(0B)
[OK] Log file /var/log/mysql/error.log is readable.
[!!] Log file /var/log/mysql/error.log is empty
-------- Security Recommendations ---------------------------------------------
[OK] There are no anonymous accounts for any database users
[!!] User 'root@localhost' has no password set.
[!!] User 'user1@%' does not specify hostname restrictions.
[!!] User 'user@%' does not specify hostname restrictions.
-------- Performance Metrics --------------------------------------------------
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 243.2M (12.20% of installed RAM)
[!!] Maximum possible memory usage: 2.7G (138.90% of installed RAM)
[!!] Overall possible memory usage with other process exceeded memory
-------- InnoDB Metrics -------------------------------------------------------
[--] InnoDB is enabled.
[--] InnoDB Thread Concurrency: 0
[OK] InnoDB File per table is activated
[OK] InnoDB buffer pool / data size: 128.0M/416.0K
-------- Recommendations ------------------------------------------------------
General recommendations:
Set up a Secure Password for root@localhost user: SET PASSWORD FOR 'root'@'SpecificDNSorIp' = PASSWORD('secure_password');
Restrict Host for 'user1'@% to user1@SpecificDNSorIp
UPDATE mysql.user SET host ='SpecificDNSorIp' WHERE user='user1' AND host ='%'; FLUSH PRIVILEGES;
Dedicate this server to your database for highest performance.
Reduce or eliminate unclosed connections and network issues
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
Before changing innodb_log_file_size and/or innodb_log_files_in_group read this: https://bit.ly/2TcGgtU
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_size (=0)
query_cache_type (=0)
query_cache_limit (> 1M, or use smaller result sets)
innodb_log_file_size should be (=16M) if possible, so InnoDB total log files size equals to 25% of buffer pool size.
```
Внимательно изучите строки, отмеченные знаком `[!!]`, и итоговую сводку рекомендуемых изменений в последнем блоке `Recommendations`.
Параметры, приведенные в пункте `Variables to adjust`, необходимо изменять в конфигурационном файле MySQL. Если в файле такой параметр отсутствует, его необходимо вписать.
Конфигурационный файл MySQL может размещаться по различным путям.
В Debian/Ubuntu это могут быть:
```shell
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
```
В CentOS:
```shell
/etc/my.cnf
/etc/mysql/my.cnf
```
После каждого изменения конфигурационного файла необходимо перезапускать MySQL:
```shell
systemctl restart mysql
```
### **Дополнительные рекомендации**
1\. Перед изменением конфигурационного файла сделайте его бэкап (в команде необходимо указать актуальный для вас путь):
```shell
cp /etc/mysql/my.cnf ~/my.cnf.backup
```
2\. После внесения правок подождите, чтобы сервер проработал около суток, после чего можно снова запустить MySQLTuner. Так вы сможете проанализировать работу MySQL уже с новыми настройками и продолжить оптимизацию.
3\. Правки по рекомендациям MySQLTuner имеет смысл вносить постепенно и после каждого изменения наблюдать за работой сервера. В этом случае, если возникнут какие-либо проблемы, вы сможете быстро определить их причину и откатить нежелательные изменения.
Не забывайте после каждого изменения настроек перезапускать службу MySQL.
# Сканирование с помощью ClamAV
Source: https://timeweb.cloud/docs/unix-guides/scanning-with-clamav?utm_source=llms_txt&utm_medium=ai
ClamAV — это утилита с открытым исходным кодом для сканирования файлов на вредоносный код. ClamAV позволяет обнаруживать трояны, вирусы, вредоносные программы и другие угрозы.
## Установка
Установить ClamAV можно с помощью команды:
Ubuntu / Debian:
```
apt update && apt install -y clamav clamav-daemon
```
CentOS / Fedora:
```shell
dnf install -y clamav clamav-update
```
## Обновление баз
> [!NOTE]
> ClamAV ограничивает доступ для пользователей из России, поэтому обновить базы получится только с IP-адреса из другой страны.
Перед сканированием необходимо обновить сигнатуры ClamAV. Для этого используйте команду:
```shell
systemctl stop clamav-freshclam.service ; freshclam ; systemctl start clamav-freshclam.service
```
Она позволит остановить сервис Freshclam (в противном случае он не даст обновить базы из-за блокировки), провести обновление сигнатур, а после снова запустить сервис.
## Сканирование
Сканер использует большое количество оперативной памяти, поэтому рекомендуется запускать его на системах с как минимум 1-1.5 ГБ доступной ОЗУ. Также, при отсутствии swap на сервере рекомендуем настроить его по [инструкции](https://timeweb.cloud/docs/unix-guides/creating-and-resizing-swap).
#### **Примеры использования**
Просканировать конкретный файл:
```shell
clamscan имя_файла
```
Выполнить сканирование директории и вывести только зараженные файлы:
```shell
clamscan -r -i /директория
```
Переместить зараженные файлы в определенную директорию:
```shell
clamscan -r -i --move=/папка_куда_переносим /папка_для_сканирования
```
Автоматически удалять зараженные файлы при обнаружении (**используйте с осторожностью!**):
```shell
clamscan -r --remove /папка_для_сканирования
```
# Управление службами в systemd
Source: https://timeweb.cloud/docs/unix-guides/service-management-in-systemd?utm_source=llms_txt&utm_medium=ai
В современных дистрибутивах Linux (начиная с Debian 8, Ubuntu 16.04, CentOS 7) в качестве системы инициализации используется `Systemd`. Systemd запускается при старте сервера (после загрузки ядра) и инициализирует службы, необходимые для работы сервера и системы.
Systemd содержит инструмент `systemctl`, который позволяет пользователю управлять работой служб в фоне: запускать и останавливать их, проверять состояние, обновлять конфигурацию и т.д.
Ниже мы рассмотрим основные варианты применения `systemctl`.
Синтаксис при использовании `systemctl` следующий:
```shell
systemctl команда служба
```
## Просмотр списка служб
Вывести список всех запущенных служб:
```bash
systemctl list-units
```
Вывести список только программ (сервисов), без дополнительных системных компонентов:
```shell
systemctl list-units -t service
```
Вывести список всех сервисов (не только запущенных):
```shell
systemctl list-units -t service --all
```
Вывести список только выполняющихся сервисов:
```shell
systemctl list-units -t service --state running
```
## Управление состоянием службы
Рассмотрим основные команды `systemctl` на примере службы Nginx.
Посмотреть состояние службы:
```shell
systemctl status nginx
```
Запустить службу:
```shell
systemctl start nginx
```
Остановить службу:
```shell
systemctl stop nginx
```
Обновить конфигурацию без перезапуска службы (отработает только в случае, если сама служба поддерживает такую возможность):
```shell
systemctl reload nginx
```
Перезапустить службу (если служба не была запущена, она запустится этой командой):
```shell
systemctl restart nginx
```
Обновить конфигурацию без перезапуска, если есть такая возможность; в противном случае перезапустить службу:
```shell
systemctl reload-or-restart nginx
```
Перезапустить службу, только если она уже запущена:
```shell
systemctl try-restart nginx
```
Проверить, запущена ли служба:
```shell
systemctl is-active nginx
```
Проверить, не завершилась ли работа службы с ошибкой:
```shell
systemctl is-failed nginx
```
## Управление автозагрузкой
Добавить службу в автозагрузку:
```shell
systemctl enable nginx
```
Удалить из автозагрузки:
```shell
systemctl disable nginx
```
Проверить, добавлена ли служба в автозагрузку:
```shell
systemctl is-enabled nginx
```
Удалить из автозагрузки и снова добавить:
```shell
systemctl reenable nginx
```
Восстановить параметры автозагрузки по умолчанию:
```shell
systemctl preset nginx
```
# Логирование в systemd
Source: https://timeweb.cloud/docs/unix-guides/logging-systemd?utm_source=llms_txt&utm_medium=ai
Системный менеджер `systemd` присутствует в большинстве современных Linux-дистрибутивов, в том числе, в Ubuntu, Debian и CentOS. С помощью `systemd` выполняется управление сервером и службами (например, их запуск и остановка), а также — ведение логов. В журнал `systemd` (компонент `journal`) собираются все системные сообщения — от ядра, служб и приложений. Логирование `systemd` может использоваться параллельно с `syslog` либо заменить его.
Для работы с логами используется утилита `journalctl`.
## Просмотр и фильтрация логов
### Отображение времени в логах
Просматривать записи логов можно как с указанием местного времени, так и с указанием UTC — достаточно внести в команду опцию `--utc`.
По умолчанию в выводе будет указано местное время. Чтобы убедиться, что часовой пояс задан верно, можно выполнить:
```shell
timedatectl status
```
Корректное местное время должно быть выведено в строке `Local time`.
Если требуются изменения, можно просмотреть весь список часовых поясов:
```shell
timedatectl list-timezones
```
После чего установить нужный:
```shell
timedatectl set-timezone часовой_пояс
```
Далее можно еще раз выполнить проверку с помощью `timedatectl status`.
### Фильтр по определенной загрузке
Вывод событий из последней (то есть текущей) загрузки выполняется с помощью опции `-b`:
```shell
journalctl -b
```
Если нужно указать UTC вместо местного времени:
```shell
journalctl -b --utc
```
Вывод списка доступных загрузок:
```shell
journalctl --list-boots
```
Пример вывода:
```
-2 b94zf405f9424a1d39b667ce0bdbcff7 Wed 2020-07-08 08:34:12 MSK—Wed 2020-07-08 08:41:22 MSK
-1 t80dc883d180dc04z5db0abcb0dc5fa2 Wed 2020-07-08 09:01:46 MSK—Wed 2020-07-08 09:28:08 MSK
0 8cabc9420ea34a8d868e3014895269d8 Wed 2020-07-08 11:56:57 MSK—Wed 2020-07-08 13:51:27 MSK
```
Чтобы просмотреть данные конкретной загрузки из списка, необходимо указать ее порядковый номер (первая колонка в выводе) или ID (вторая колонка):
```shell
journalctl -b -1
# Или:
journalctl -b t80dc883d180dc04z5db0abcb0dc5fa2
```
Если по умолчанию данные предыдущих загрузок не сохраняются, необходимо внести изменения в конфигурационный файл:
```shell
sudo nano /etc/systemd/journald.conf
```
И заменить значение для `Storage` на `persistent`:
```shell
[Journal]
Storage=persistent
```
### Фильтр по временному промежутку
Если интересующий нас период не совпадает с той или иной загрузкой, можно указывать конкретное время. Для этого используются:
- опции `--since` (начиная с) и `--until` (до)
- время в формате: `"ГГГГ-ММ-ДД ЧЧ:ММ:СС"`
- ключи `yesterday`, `today`, `now` (вчера, сегодня, сейчас)
Например, вывод событий с указанного времени по текущий момент:
```shell
journalctl --since "2020-07-06 07:00:00"
```
Вывод событий за конкретный период:
```shell
journalctl --since "2020-07-06 07:00:00" --until "2020-07-06 08:00:00"
```
Вывод событий со вчерашнего дня:
```shell
journalctl --since yesterday
```
### Фильтр по службе (юниту)
Если нас интересуют только события конкретной службы, можно использовать:
```shell
journalctl -u имя_службы
```
Дополнительно могут быть внесены временные параметры. Например, чтобы просмотреть события Nginx за определенные часы, выполним:
```shell
journalctl -u nginx.service --since 10:00 --until 16:00
```
Можно указывать более одного юнита:
```shell
journalctl -u nginx.service -u php-fpm.service --since today
```
### Фильтр событий ядра
Можно отдельно вывести только события ядра. Для этого используется `-k`.
Например, чтобы просмотреть такие события в одной из предыдущих загрузок, выполним:
```shell
journalctl -k -2
```
### Фильтр по пользователю, группе или процессу
Есть возможность просматривать данные для конкретного PID, UID, GID:
```shell
journalctl _PID=id_процесса
journalctl _UID=id_пользователя
journalctl _GID=id_группы
```
Например, чтобы вывести только сегодняшние события, связанные с определенным процессом, выполним:
```shell
journalctl _PID=544 --since today
```
Получить список всех ID, записи о которых есть в логах, можно с помощью:
```shell
journalctl -F _UID
# Аналогично для GID:
journalctl -F _GID
```
### Фильтр по приоритету
С помощью опции `-p` можно вывести только события, начиная с определенного уровня приоритета. Уровни следующие:
- 0: emerg (авария, неработоспособность системы)
- 1: alert (тревога, требует немедленного внимания)
- 2: crit (критическое состояние)
- 3: err (ошибка)
- 4: warning (предупреждение)
- 5: notice (уведомление)
- 6: info (информация)
- 7: debug (отладка)
В команде можно указывать как название уровня, так и его числовое обозначение.
Например, следующей командой мы можем вести все события в текущей загрузке, имеющие уровень 3 (ошибка) и выше:
```shell
journalctl -p err -b
# Или:
journalctl -p 3 -b
```
## Настройка отображения
### Базовые настройки
Сокращение строк по ширине окна терминала:
```shell
journalctl --no-full
```
Запись в стандартный вывод (чтобы сделать возможной обработку другими утилитами, например, `grep`, или сохранение в текстовый файл):
```shell
journalctl --no-pager
```
### Форматы вывода
Специфический формат вывода можно указать с помощью `-o`:
```shell
journalctl -o формат
```
Доступные форматы:
- `cat` — только само сообщение из лога, без служебной информации;
- `export` — бинарный формат, подходящий для экспорта или бэкапов логов;
- `json` — стандартный `.json`, с одной записью на строку;
- `json-pretty` или `json-sse` — удобный для чтения `.json`;
- `short` — формат вывода `syslog`;
- `short-iso` — формат вывода `syslog` с метками времени по стандарту ISO8601;
- `short-monotonic` — формат вывода `syslog` с монотонными временными метками;
- `short-precise` — формат вывода `syslog` с указанием времени с точностью до микросекунд;
- `verbose` — максимально подробный вывод, со скрытыми полями.
Пример использования:
```shell
journalctl -b -u nginx.service -o json-pretty
```
### Отображение недавних событий
По умолчанию будут выведены последние 10 событий:
```shell
journalctl -n
```
Их количество можно уточнить, например:
```shell
journalctl -n 20
```
Вывод на экран событий в режиме реального времени:
```shell
journalctl -f
```
## Управление журналом
### Занимаемый объем
Узнать, сколько места на диске занимает журнал на текущий момент, можно с помощью:
```shell
journalctl --disk-usage
```
### Ограничение объема
Вы можете настроить лимиты для журнала, отредактировав его конфигурационный файл:
```shell
sudo nano /etc/systemd/journald.conf
```
Можно настроить следующие параметры:
- `SystemMaxUse` — максимальный объем на диске, который может занимать журнал.
- `SystemKeepFree` — объем, который должен оставаться свободным на диске после сохранения логов.
- `SystemMaxFileSize` — максимальный объем файла лога, при достижении которого он должен быть удален.
- `RuntimeMaxUse` — максимальный объем, который могут занимать логи в файловой системе `/run`.
- `RuntimeKeepFree` — объем, который должен оставаться свободным в файловой системе `/run` после сохранения логов.
- `RuntimeMaxFileSize` — максимальный объем файла лога, при достижении которого он должен быть удален из файловой системы `/run`.
### Удаление старых записей
Для удаления старых логов и уменьшения объема журнала можно использовать два способа.
Способ 1. Можно указать объем, к которому нужно привести журнал. Это запустит удаление старых записей до тех пор, пока журнал не будет уменьшен до указанного объема. Например:
```shell
sudo journalctl --vacuum-size=1G
```
Способ 2. Можно указать период, данные за которые должны быть сохранены. В этом случае все записи, которые будут старше указанного периода, удалятся. Например:
```shell
sudo journalctl --vacuum-time=1years
```
В этом случае будут удаляться все записи, кроме тех, что были созданы за последний год.
# Аудит системных событий
Source: https://timeweb.cloud/docs/unix-guides/auditing-system-events?utm_source=llms_txt&utm_medium=ai
Для поддержания безопасности и стабильности системы важно следить за ее состоянием. В основном это достигается с помощью мониторинга, анализа логов, а также — аудита системных событий. Хотя аудит сам по себе не является средством защиты от нежелательных действий, он полезен для обнаружения нарушений в безопасности и их дальнейшего устранения.
Специальная утилита — `auditd` — позволяет вести мониторинг системных действий и анализировать их. Система аудита устанавливает триггеры на функции, ответственные за обработку системных вызовов (обращений к функциям ядра, без которых не может быть произведена ни одна операция в системе), после чего эти триггеры срабатывают согласно пользовательским правилам. Информация об всех действиях записывается в журнал и после может быть проанализирована администратором.
С помощью `auditd` можно отслеживать, например, такие события, как запуск и завершение работы системы; запуск и остановка приложений; доступ к файлам и изменение прав на них; изменение информации о пользователе или группе; установка сетевого соединения, изменение настроек сети и многое другое.
## Установка
В системе CentOS пакет `audit`, как правило, установлен по умолчанию.
Для установки на Debian / Ubuntu выполните:
```shell
sudo apt install auditd
```
В пакет входит несколько утилит:
- `auditctl` — управление системой аудита, получение информации о состоянии системы, добавление и удаление правил;
- `autrace` — аудит событий, вызываемых процессами (аналогично `strace`);
- `ausearch` — поиск событий в журналах;
- `aureport` — создание отчетов о работе аудита.
Основные настройки демона `auditd` (формат логов, частота обновления, максимальный размер и др.) находятся в конфигурационном файле `/etc/audit/auditd.conf`. Как правило, стандартной конфигурации достаточно для эффективной работы с аудитом, но вы можете дополнительно изменить настройки по своему усмотрению. Подробную информацию о каждом параметре можно получить, например, [здесь](https://www.opennet.ru/man.shtml?topic=auditd.conf&category=5&russian=0), либо выполнив `man auditd.conf`.
## Создание правил
Настройка правил выполняется с помощью утилиты `auditctl` и следующих опций:
- `-l` — вывести список созданных правил (если выполнить команду сразу после установки `auditd`, список правил будет пустым);
- `-а` — добавить новое правило;
- `-d` — удалить правило из списка;
- `-D` — удалить все правила.
Для создания нового правила используется команда:
```shell
sudo auditctl -a список,действие -S имя_системного_вызова -F фильтр
```
**Список** — это список событий, в который нужно добавить правило. Для упрощения можно воспринимать список как фильтр, позволяющий сделать правило точнее.
Существует пять списков:
- `task` — события, связанные с созданием процессов;
- `entry` — события, происходящие при входе в системный вызов;
- `exit` — события, происходящие во время выхода из системного вызова;
- `user` — события, использующие параметры пользовательского пространства (`uid`, `pid` и `gid`);
- `exclude` — используется для исключения событий.
На практике в основном используются `entry` и `exit`.
**Действие** — определяет, что нужно выполнить после события: записать его в журнал (`always`) или не записывать (`never`).
**Имя системного вызова** — при обращении к какому вызову должен срабатывать триггер и перехватываться событие (например, `open`, `close`, `exit`, и т.д.)
**Фильтр** — необязательная опция, которая используется для указания дополнительных параметров. Например, если нужно отслеживать обращения к файлам из каталога `/etc`, можно указать его в данном параметре:
```shell
sudo auditctl -a exit,always -S open -F path =/etc/
```
Можно использовать более одного фильтра, например, дополнительно уточнить, что нас интересуют только события, связанные с изменением файлов: `w` (write) и `a` (attribute change):
```shell
sudo auditctl -a exit,always -S open -F path=/etc/ -F perm=wa
```
При создании правил слежения за файлами можно не указывать имя системного вызова (опцию `-S`):
```shell
sudo auditctl -a exit,always -F path=/etc/ -F perm=wa
```
Чтобы следить за конкретным файлом, можно использовать еще более сокращенный вариант (опция `-p` здесь заменяет `perm`):
```shell
sudo auditctl -w /etc/passwd -p wa
```
## Файл audit.rules
Задавать правила возможно как через консоль, так и путем сохранения их в файле `/etc/audit/audit.rules`, в этом случае они будут действовать постоянно.
Синтаксис правил точно такой же, нужно только опустить саму команду `auditctl`, например:
```shell
-w /etc/passwd -p wa
```
В начале файла обычно задаются метаправила, определяющие базовые настройки:
```shell
# Удалить все ранее созданные правила
-D
# Задать количество буферов, в которых будут храниться сообщения
-b 320
# Действие при переполнении буферов: 0 — ничего не делать; 1 — отправить сообщение в dmesg, 2 — отправить ядро в панику
-f 1
```
Далее указываются пользовательские правила.
Ниже приведены примеры правил для отслеживания различных событий.
```shell
# Наблюдение за конфигурационными файлами системы аудита
-w /etc/audit/auditd.conf -p wa
-w /etc/audit/audit.rules -p wa
# Наблюдение за журнальными файлами
-w /var/log/audit/
-w /var/log/audit/audit.log
# Настройки и задания at
-w /var/spool/at
-w /etc/at.allow
-w /etc/at.deny
# Файлы паролей и групп
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow
# Конфигурационные и журнальные файлы входа в систему
-w /etc/login.defs -p wa
-w /etc/securetty
-w /var/log/faillog
-w /var/log/lastlog
# Список и имена хостов
-w /etc/hosts -p wa
# Стартовые скрипты демонов
-w /etc/init.d/
-w /etc/init.d/auditd -p wa
# Настройки сервера SSH
-w /etc/ssh/sshd_config
# Изменение прав доступа к файлам
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown32
# Создание, открытие или изменение размеров файлов
-a entry,always -S creat -S open -S truncate -S truncate64 -S ftruncate -S ftruncate64
# Создание и удаление каталогов
-a entry,always -S mkdir -S rmdir
# Удаление или создание ссылок
-a entry,always -S unlink -S rename -S link -S symlink
# Монтирование файловых систем
-a entry,always -S mount -S umount -S umount2
```
После внесения изменений в конфигурационный файл необходимо перезапустить `auditd`, чтобы они вступили в силу:
```shell
sudo service auditd restart
```
## Анализ журналов аудита
Журнальные файлы системы аудита хранятся по пути `/var/log/audit`. Для работы с ними используются утилиты `aureport` и `ausearch`, которые, обладая очень большим количеством опций, позволяют получать информативные отчеты из файлов журнала согласно заданным параметрам.
Полный список опций можно просмотреть с помощью `man aureport` (и `man ausearch` для второй утилиты) либо в различных источниках в сети, например, [здесь](https://www.opennet.ru/man.shtml?topic=aureport&category=8&russian=0).
Например, для получения отчета о файлах необходимо использовать `aureport` с опцией `-f`:
```shell
sudo aureport -f
```
Отчет можно ограничить только определенным промежутком времени:
```shell
sudo aureport --start месяц/день/год часы:минуты:секунды --end месяц/день/год часы:минуты:секунды
# Например:
sudo aureport -f --start 08/20/20 12:00 --end 08/20/20 13:00
```
Время можно указывать также с помощью параметров:
- `now` (сейчас),
- `recent` (десять минут назад),
- `today` (сегодня, начиная с полуночи),
- `yesterday` (вчерашний день),
- `this-week` (неделя),
- `this-month` (месяц),
- `this-year` (год).
Вывод команды содержит очень много информации, поэтому его можно сократить с помощью опции `--summary`, чтобы получить сводку обращений к каждому файлу.
```shell
sudo aureport -f -i --start recent --summary
```
При обнаружении подозрительной попытки доступа, можно найти процесс, который ее произвел:
```shell
sudo aureport -f -i --start today | grep /etc/passwd
```
Далее с помощью `ausearch` можно проанализировать каждое событие отдельно:
```shell
sudo auserch -a номер_события
```
С помощью `ausearch` можно находить события и по другим параметрам, например:
По идентификатору пользователя (опция `-ui`):
```shell
sudo ausearch -ui 1111 --interpret
```
(Опция `--interpret` или `-i` позволяет выводить данные в удобном для чтения формате.)
По имени исполняемого файла (опция `-x`):
```shell
sudo ausearch -x /путь/к/файлу
```
По имени демона (опция `-tm`):
```shell
sudo ausearch -tm cron
```
По системному вызову (опция `-sc`):
```shell
sudo ausearch -sc ptrace
```
Для ограничения вывода определенным промежутком времени можно использовать тот же синтаксис, что для `aureport`.
Полный список опций `ausearch` можно просмотреть с помощью `man ausearch` или в различных источниках в сети, например, [здесь](https://www.opennet.ru/man.shtml?topic=ausearch&category=8&russian=0).
# Добавление дополнительного IP
Source: https://timeweb.cloud/docs/unix-guides/adding-ip-addresses?utm_source=llms_txt&utm_medium=ai
> [!NOTE]
> Это инструкция для серверов с операционными системами Linux. Если вы используете сервер с ОС Windows, воспользуйтесь [этой статьей](https://timeweb.cloud/docs/windows-guides/adding-ip-addresses).
Чтобы добавить на сервер дополнительный IP-адрес, сначала добавьте его в панели управления:
- [для VDS](https://timeweb.cloud/docs/cloud-servers/manage-servers/network#dopolnitelnye-ip-adresa);
- [для выделенных серверов](https://timeweb.cloud/docs/dedicated/adding-ip).
После этого настройте IP-адрес внутри сервера — по инструкции ниже.
По этой же инструкции вы можете настроить **статический адрес** для сервера; в этом случае при настройке вместо дополнительного IP указывайте основной IP-адрес сервера.
В качестве примера в этой инструкции мы будем использовать адреса:
- `192.0.2.70`
- `198.51.100.12`
- `2001:db8:a:a::a`
- `2001:db8:b:b::b`
Кроме самих адресов также потребуется указать маску сети, шлюз и название интерфейса.
- **Маска сети**. Для IPv4-адресов указывайте `/24`, а для IPv6 — `/128` (или `/64`). В статье мы будем использовать `192.0.2.70/24` и `2001:db8:a:a::a/128`.
- **Шлюз**. Для IPv4 используйте первый адрес в сети: например, для `192.0.2.70/24` шлюзом будет `192.0.2.1`.
Для IPv6 используйте первый адрес в сети `/64`: возьмите первые четыре хекстета адреса и добавьте `::1`. Например, для `2001:db8:a:a::a` шлюзом будет `2001:db8:a:a::1`.
Не заменяйте только последний хекстет IPv6-адреса. Например, для `2a03:6f00:a::2:866` шлюз — `2a03:6f00:a::1`, а не `2a03:6f00:a::2:1`.
- **Интерфейс**. В зависимости от дистрибутива название интерфейса будет отличаться. Например, это могут быть `eth0` или `ens3`. Проверить имя интерфейса на своем сервере можно командой `ip addr`.
Чтобы настроить IP-адрес на сервере, [подключитесь к нему по SSH](https://timeweb.cloud/docs/unix-guides/ssh). В статье будут указаны команды, которые нужно выполнить в консоли.
Если во время настройки что-то пойдет не так и на сервере пропадет интернет, вы не сможете подключиться к нему удаленно по SSH. В этом случае вы можете использовать консоль в панели управления: для VDS — [консоль сервера](https://timeweb.cloud/docs/cloud-servers/manage-servers/console), для выделенного сервера — [IPMI](https://timeweb.cloud/docs/dedicated/using-ipmi). В консоли можно продолжить настройку или временно настроить интернет утилитой ip.
## Временная настройка
Если вам нужно настроить сеть временно, вы можете использовать утилиту `ip`. Все изменения пропадут после перезагрузки сервера.
Проверьте, какие адреса уже добавлены на интерфейс:
```shell
ip addr
```
Добавьте нужные адреса командой ниже, указав верное значение IP. Для IPv4:
```shell
ip addr add 192.0.2.70/24 dev eth0
```
Для IPv6:
```shell
ip addr add 2001:db8:a:a::a/128 dev eth0
```
Проверьте, какой IPv4-адрес указан в качестве шлюза по умолчанию:
```shell
ip route show default
```
Посмотреть шлюз для IPv6 можно так:
```shell
ip -6 route show default
```
Если шлюза нет, добавьте его этой командой:
```shell
ip route add default via 192.0.2.1 dev eth0
```
Для IPv6:
```shell
ip route add default via 2001:db8:a:a::1 dev eth0 onlink
```
## Постоянная настройка
Чтобы изменения сохранились в конфигурации сервера и не сбросились при перезагрузке, используйте инструкции ниже.
> [!NOTE]
> При добавлении дополнительного IP-адреса основной IP-адрес должен остаться в конфигурации сетевого интерфейса. Укажите все адреса, которые должны быть назначены серверу: основной и дополнительные.
Ubuntu
Ubuntu использует [netplan](https://netplan.readthedocs.io/en/stable/) для сетевых настроек, все конфигурационные файлы находятся в `/etc/netplan/` и называются произвольно. Своим файлам вы тоже можете выбрать произвольные названия, но они должны иметь расширение `.yaml`.
В файлах формата YAML важно выставлять одинаковые отступы пробелами, табуляция не допускается. С помощью отступов вы указываете вложенность конфигурации, например, что настройка маршрутов `routes` вложена в настройки интерфейса `eth0`.
После выполнения этой инструкции у вас будет два файла: для IPv4 и IPv6. Вы можете держать их вместе одновременно без конфликтов, потому что `netplan` объединит их в одну конфигурацию.
Посмотреть на объединенную конфигурацию можно этой командой:
```shell
netplan get
```
Вот пример вывода команды, который получится, если следовать каждому пункту в этой инструкции:
```yml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- "192.0.2.70/24"
- "198.51.100.12/24"
- "2001:db8:a:a::a/128"
- "2001:db8:b:b::b/128"
nameservers:
addresses:
- "1.1.1.1"
- "1.0.0.1"
- "2606:4700:4700::1111"
- "2606:4700:4700::1001"
dhcp4: false
dhcp6: false
accept-ra: false
routes:
- to: "0.0.0.0/0"
via: "192.0.2.1"
- to: "::/0"
via: "2001:db8:a:a::1"
on-link: true
```
В этой конфигурации название интерфейса `eth0` на некоторых версиях Ubuntu придется поменять. Проверьте имя интерфейса на своем сервере этой командой:
```shell
ip addr
```
### Настройка IPv4 в Ubuntu
Создайте файл `/etc/netplan/99-ipv4.yaml`:
```shell
nano /etc/netplan/99-ipv4.yaml
```
Скопируйте эти строки, заменив адреса (`addresses`) и шлюз (`via`) на нужные значения:
```yml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- "192.0.2.70/24"
- "198.51.100.12/24"
routes:
- to: "0.0.0.0/0"
via: "192.0.2.1"
nameservers:
addresses:
- "1.1.1.1"
- "1.0.0.1"
```
Закройте права на чтение этого файла всем, кроме `root`:
```shell
chmod 600 /etc/netplan/99-ipv4.yaml
```
### Настройка IPv6 в Ubuntu
Создайте файл `/etc/netplan/99-ipv6.yaml`:
```shell
nano /etc/netplan/99-ipv6.yaml
```
Скопируйте эти строки, заменив адреса (`addresses`) и шлюз (`via`) на нужные значения:
```
network:
version: 2
renderer: networkd
ethernets:
eth0:
accept-ra: false
dhcp6: false
addresses:
- "2001:db8:a:a::a/128"
- "2001:db8:b:b::b/128"
routes:
- to: "::/0"
via: "2001:db8:a:a::1"
on-link: true
nameservers:
addresses:
- "2606:4700:4700::1111"
- "2606:4700:4700::1001"
```
Закройте права на чтение этого файла всем, кроме `root`:
```shell
chmod 600 /etc/netplan/99-ipv6.yaml
```
Отключите `dhclient6` из автозагрузки. В Ubuntu 22.04 и более ранних версиях выполните:
```shell
systemctl disable dhclient6.service
```
В Ubuntu 24.04 и 26.04:
```bash
systemctl disable dhcpcd6.service
```
Примените конфигурацию `systemd`:
```shell
systemctl daemon-reload
```
### Отключение прошлых настроек в Ubuntu
Проверьте директорию `/etc/netplan/`, в ней могут быть другие настройки интерфейсов, которые будут конфликтовать с вашими. На чистой установке будет файл `50-cloud-init.yaml`, остальные можно проверить этой командой:
```shell
ls -a /etc/netplan/
```
Переименуйте файл `/etc/netplan/50-cloud-init.yaml`, главное — чтобы он не заканчивался на `.yaml`:
```shell
mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml-backup-$(date +"%Y%m%d")
```
Повторите это со всеми файлами, кроме `99-ipv4.yaml` и `99-ipv6.yaml`, если они есть.
В старых версиях Ubuntu также могут быть файлы `01-netcfg.yaml` или `00-installer-config.yaml`, их тоже нужно переименовать:
```shell
mv /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml-backup-$(date +"%Y%m%d")
mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml-backup-$(date +"%Y%m%d")
```
Чтобы `cloud-init` больше не создавал свой файл после перезагрузки сервера, создайте файл `/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg`:
```shell
nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
```
И пропишите в нем эту строку:
```shell
network: {config: disabled}
```
### Прослушивание адреса в Ubuntu
После перезагрузки сервера адрес может не успеть добавиться, когда другие службы захотят его прослушивать. Поэтому разрешаем `bind` на адреса, которых нет на интерфейсе.
Откройте файл `/etc/sysctl.conf`:
```shell
nano /etc/sysctl.conf
```
Допишите в него эти строки:
```shell
net.ipv4.ip_nonlocal_bind = 1
net.ipv6.ip_nonlocal_bind = 1
```
Перезагрузите конфигурацию `sysctl`:
```shell
sysctl -p /etc/sysctl.conf
```
### Применение настроек в Ubuntu
Примените конфиг `netplan`:
```shell
netplan --debug apply
```
Проверьте, что адреса добавились на интерфейс:
```shell
ip addr
```
После этого рекомендуем перезагрузить сервер и проверить, что адреса работают верно.
Debian/Astra
> [!NOTE]
> Начиная с Debian 12, для настройки сети используется Netplan. Если вы работаете с этой версией, воспользуйтесь инструкцией для Ubuntu.
Debian и Astra Linux используют файл [/etc/network/interfaces](https://wiki.debian.org/NetworkConfiguration) для сетевых настроек.
Вот пример итоговой конфигурации, если следовать каждому пункту в этой инструкции:
```shell
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.0.2.70/24
gateway 192.0.2.1
post-up ip addr add 198.51.100.12/24 dev eth0
pre-down ip addr del 198.51.100.12/24 dev eth0
auto eth0
allow-hotplug eth0
iface eth0 inet6 static
address 2001:db8:a:a::a/128
gateway 2001:db8:a:a::1
post-up ip addr add 2001:db8:b:b::b/128 dev eth0
pre-down ip addr del 2001:db8:b:b::b/128 dev eth0
```
### Настройка IPv4
Откройте файл `/etc/network/interfaces`:
```shell
nano /etc/network/interfaces
```
Закомментируйте или удалите текущие настройки интерфейса `eth0`:
```shell
#allow-hotplug eth0
#iface eth0 inet dhcp
```
Добавьте следующие строки, заменив адреса и шлюз (`gateway`) на нужные значения:
```shell
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.0.2.70/24
gateway 192.0.2.1
post-up ip addr add 198.51.100.12/24 dev eth0
pre-down ip addr del 198.51.100.12/24 dev eth0
```
### Настройка IPv6
Откройте файл `/etc/network/interfaces`:
```shell
nano /etc/network/interfaces
```
Добавьте в него следующие строки, заменив адреса и шлюз (`gateway`) на нужные значения:
```bash
auto eth0
allow-hotplug eth0
iface eth0 inet6 static
address 2001:db8:a:a::a/128
post-up ip addr add 2001:db8:b:b::b/128 dev eth0
post-up ip -6 route replace default via 2001:db8:a:a::1 dev eth0 onlink
pre-down ip addr del 2001:db8:b:b::b/128 dev eth0
pre-down ip -6 route del default via 2001:db8:a:a::1 dev eth0 onlink
```
Отключите `dhclient6` из автозагрузки:
```shell
systemctl disable dhclient6.service
```
В некоторых образах служба DHCPv6 может называться `dhcpcd6.service`. Если `dhclient6.service` не найдена, проверьте наличие `dhcpcd6.service` и отключите ее.
Примените конфигурацию `systemd`:
```shell
systemctl daemon-reload
```
### Отключение прошлых настроек
Проверьте директорию `/etc/network/interfaces.d/`, в ней могут быть другие настройки интерфейсов, которые будут конфликтовать с вашими. На чистой установке будет файл `50-cloud-init`, остальные можно проверить этой командой:
```shell
ls -a /etc/network/interfaces.d/
```
Переместите `/etc/network/interfaces.d/50-cloud-init` в другую директорию, например, в `/root/`:
```shell
mv /etc/network/interfaces.d/50-cloud-init /root/50-cloud-init-backup-$(date +"%Y%m%d")
```
Чтобы `cloud-init` больше не создавал свой файл после перезагрузки сервера, создайте файл `/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg`:
```shell
nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
```
И добавьте в него эту строку:
```shell
network: {config: disabled}
```
### Прослушивание адреса
После перезагрузки сервера адрес может не успеть добавиться, когда другие службы захотят его прослушивать. Поэтому разрешаем `bind` на адреса, которых нет на интерфейсе.
Откройте файл `/etc/sysctl.conf`:
```shell
nano /etc/sysctl.conf
```
Допишите в него эти строки:
```shell
net.ipv4.ip_nonlocal_bind = 1
net.ipv6.ip_nonlocal_bind = 1
```
Перезагрузите конфигурацию `sysctl`:
```shell
sysctl -p /etc/sysctl.conf
```
### Применение настроек
Перезапустите службу `networking`:
```shell
systemctl restart networking.service
```
Проверьте, что адреса добавились на интерфейс:
```shell
ip addr
```
После этого рекомендуем перезагрузить сервер и проверить, что адреса работают верно.
CentOS/AlmaLinux
CentOS и AlmaLinux используют [NetworkManager](https://networkmanager.dev/) для сетевых настроек. Вместо редактирования конфигурационных файлов можно использовать утилиту `nmcli` или `nmtui`.
Перед выполнением команд из инструкции проверьте имя соединения:
```shell
nmcli connection show
```
Отсюда вам нужно значение `NAME` — в нашем случае это `ens3`, в следующих командах будет использоваться это имя:
```shell
NAME UUID TYPE DEVICE
ens3 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens3
```
Чтобы не исправлять каждую команду в инструкции, вы можете временно переименовать соединение на `ens3`, а потом вернуть удобное имя. Например, если соединение называется `eth0`, команда будет выглядеть так:
```shell
nmcli connection modify eth0 connection.id ens3
```
В последних версиях CentOS `NetworkManager` сохраняет настройки в директорию `/etc/NetworkManager/system-connections/`. Раньше использовались [ifcfg](https://networkmanager.dev/docs/api/latest/nm-settings-ifcfg-rh.html)\-файлы в `/etc/sysconfig/network-scripts/`, но они [устарели](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/9.0_release_notes/deprecated_functionality#BZ-1894877) и скоро будут удалены.
Вот пример содержания итоговой конфигурации в `/etc/NetworkManager/system-connections/`, который получится, если следовать каждому пункту в этой инструкции:
```shell
[connection]
id=ens3
uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
type=ethernet
interface-name=ens3
timestamp=1719197216
[ethernet]
[ipv4]
address1=192.0.2.70/24,192.0.2.1
address2=198.51.100.12/24
dns=1.1.1.1;1.0.0.1;
method=manual
[ipv6]
addr-gen-mode=eui64
address1=2001:db8:a:a::a/128,2001:db8:a:a::1
address2=2001:db8:b:b::b/128
dns=2606:4700:4700::1111;2606:4700:4700::1001;
method=manual
[proxy]
```
### Настройка IPv4
Добавьте первый адрес к соединению:
```shell
nmcli connection modify ens3 ipv4.addresses 192.0.2.70/24
```
С помощью `+` перед `ipv4.addresses` можно добавить второй адрес:
```shell
nmcli connection modify ens3 +ipv4.addresses 198.51.100.12/24
```
Аналогично с помощью `-` перед `ipv4.addresses` можно удалить адрес, если вы ошиблись. Проверить все добавленные адреса можно этой командой:
```shell
nmcli connection show ens3 | grep addresses
```
Добавьте шлюз:
```shell
nmcli connection modify ens3 ipv4.gateway 192.0.2.1
```
Остальные команды можно просто скопировать. В них прописаны настройки DNS и указывается ручной способ конфигурации.
```shell
nmcli connection modify ens3 ipv4.dns 1.1.1.1
nmcli connection modify ens3 +ipv4.dns 1.0.0.1
nmcli connection modify ens3 ipv4.method manual
```
### Настройка IPv6
Конфигурация IPv6 выполняется по такому же принципу, как IPv4, только названия настроек теперь начинаются с `ipv6`.
Добавьте ваши адреса и шлюз:
```shell
nmcli connection modify ens3 ipv6.addresses 2001:db8:a:a::a/128
nmcli connection modify ens3 +ipv6.addresses 2001:db8:b:b::b/128
nmcli connection modify ens3 ipv6.gateway 2001:db8:a:a::1
```
После этого скопируйте эти команды:
```shell
nmcli connection modify ens3 ipv6.dns 2606:4700:4700::1111
nmcli connection modify ens3 +ipv6.dns 2606:4700:4700::1001
nmcli connection modify ens3 ipv6.method manual
```
### Отключение прошлых настроек
Проверьте директорию `/etc/sysconfig/network-scripts/`, в ней могут быть другие настройки интерфейсов, которые будут конфликтовать с вашими. На чистой установке будет файл `ifcfg-ens3`, созданный `cloud-init`. Остальные можно проверить этой командой:
```shell
ls -a /etc/sysconfig/network-scripts/
```
Проверьте, что `ifcfg-ens3` действительно создан `cloud-init`. Он должен начинаться со слов «Created by cloud-init on instance boot automatically»:
```shell
head /etc/sysconfig/network-scripts/ifcfg-ens3
```
Переместите `/etc/sysconfig/network-scripts/ifcfg-ens3` в другую директорию, например, в `/root/`:
```shell
mv /etc/sysconfig/network-scripts/ifcfg-ens3 /root/ifcfg-ens3-backup-$(date +"%Y%m%d")
```
Чтобы изменения сохранились после перезагрузки сервера, создайте файл `/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg`:
```shell
nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
```
И пропишите в нем эту строку:
```shell
network: {config: disabled}
```
### Прослушивание адреса
После перезагрузки сервера адрес может не успеть добавиться, когда другие службы захотят его прослушивать. Поэтому разрешаем `bind` на адреса, которых нет на интерфейсе.
Откройте файл `/etc/sysctl.conf`:
```shell
nano /etc/sysctl.conf
```
Допишите в него эти строки:
```shell
net.ipv4.ip_nonlocal_bind = 1
net.ipv6.ip_nonlocal_bind = 1
```
Перезагрузите конфигурацию `sysctl`:
```shell
sysctl -p /etc/sysctl.conf
```
### Применение настроек
Перезапустите службу `NetworkManager`:
```shell
systemctl restart NetworkManager.service
```
Проверьте, что адреса добавились на интерфейс:
```shell
ip addr
```
После этого рекомендуем перезагрузить сервер и проверить, что адреса работают верно.
BitrixVM
1. В меню Битрикса выберите: _2\. Configure localhost settings - 3. Configure network interface manually_.
2. Укажите следующие параметры:
- **Выберите сетевой интерфейс:** например, `ens3`.
- **Enter IP address:** новый IP-адрес сервера (можно указать несколько через запятую, без пробелов). Например: `192.0.2.70`.
- **Enter default gateway address:** шлюз по умолчанию. Например: `192.0.2.1`.
- **Would you like to configure DNS server**: `y`.
- **Enter DNS server address:** адрес DNS-сервера. Если указывается несколько серверов, разделяйте их пробелами. Например: `1.1.1.1 1.0.0.1`.
3. Проверить введенные данные и дать согласие на изменение параметров сети сервера (Please confirm changes).
4. Проверьте, что адреса добавились на интерфейс в меню BitrixVM или при помощи команды:
```shell
ip addr
```
После этого рекомендуем перезагрузить сервер и проверить, что адреса работают верно.
Arch Linux
В Arch Linux для настройки сети используется `systemd-networkd`. Все конфигурационные файлы располагаются в директории `/etc/systemd/network/` и должны иметь расширение `.network`.
Перед началом убедитесь, что службы `systemd-networkd` и `systemd-resolved` запущены и добавлены в автозагрузку:
```shell
sudo systemctl enable --now systemd-networkd.service
```
```shell
sudo systemctl enable --now systemd-resolved.service
```
### Определение имени сетевого интерфейса
Узнайте имя интерфейса с помощью команды:
```shell
ip a
```
Пример вывода:
```shell
2: eth0: mtu 1500 ...
inet 198.51.100.12/24 ...
```
В нашем примере интерфейс называется `eth0`.
### Настройка IPv4
Создайте файл `/etc/systemd/network/10-static-ipv4.network`:
```shell
sudo nano /etc/systemd/network/10-static-ipv4.network
```
Скопируйте в него следующий шаблон, заменив IP-адреса и шлюз на свои значения:
```shell
[Match]
Name=eth0
[Network]
Address=198.51.100.12/24
Address=198.51.100.12/24
Gateway=192.0.2.1
DNS=1.1.1.1
DNS=1.0.0.1
DHCP=no
```
### Настройка IPv6
Создайте файл `/etc/systemd/network/20-static-ipv6.network`:
```shell
sudo nano /etc/systemd/network/20-static-ipv6.network
```
Вставьте настройки, заменив адреса и шлюз:
```bash
[Match]
Name=eth0
[Network]
Address=2001:db8:a:a::a/128
DNS=2606:4700:4700::1111
DNS=2606:4700:4700::1001
DHCP=no
IPv6AcceptRA=no
[Route]
Destination=::/0
Gateway=2001:db8:a:a::1
GatewayOnLink=yes
```
### Отключение старых конфигураций
Убедитесь, что в директории `/etc/systemd/network/` нет других активных конфигураций, которые могут конфликтовать с вашими. Например, файл `10-cloud-init-eth0.network`. Его можно переименовать:
```shell
sudo mv /etc/systemd/network/10-cloud-init-eth0.network /etc/systemd/network/10-cloud-init-eth0.network_old
```
### Настройте прослушивание адреса
После перезагрузки IP-адрес может не успеть привязаться к интерфейсу до запуска других служб. Чтобы разрешить `bind` на ещё не добавленные IP, создайте или отредактируйте файл `/etc/sysctl.d/99-nonlocal-bind.conf`:
```shell
sudo nano /etc/sysctl.d/99-nonlocal-bind.conf
```
Добавьте строки:
```shell
net.ipv4.ip_nonlocal_bind = 1
net.ipv6.ip_nonlocal_bind = 1
```
Примените конфигурацию:
```shell
sudo sysctl --system
```
### Применение настроек
Перезапустите `systemd-networkd`, чтобы применить конфигурацию:
```shell
sudo systemctl restart systemd-networkd
```
Проверьте, что адреса добавились:
```shell
ip a
```
После этого рекомендуем перезагрузить сервер и проверить, что адреса работают верно.
Теперь интерфейс должен быть настроен, и IP-адреса — как IPv4, так и IPv6 — привязаны к нему. Рекомендуется перезагрузить сервер и убедиться, что конфигурация работает корректно после старта.
# Добавление и удаление диска
Source: https://timeweb.cloud/docs/unix-guides/adding-removing-disk?utm_source=llms_txt&utm_medium=ai
> [!NOTE]
> Это инструкция для серверов с операционными системами Linux. Если вы используете сервер с **ОС Windows**, воспользуйтесь [этой статьей](https://timeweb.cloud/docs/windows-guides/add-disk).
После подключения диска в панели управления его необходимо настроить на сервере.
Подготовка диска в системе Linux разделяется на несколько этапов:
1. Создание раздела на диске.
2. Создание файловой системы.
3. Монтирование диска для работы (при необходимости).
4. Создание записи в файле `/etc/fstab`.
> [!NOTE]
> Если ваш сервер был создан до мая 2025 года, диски будут иметь имена вида `vd*`. На серверах, созданных позже, диски будут называться `sd*`. Учитывайте это при выполнении действий из инструкции.
Ниже мы рассмотрим подготовку диска `sdb` (`sda` — основной диск сервера, `vda` по умолчанию зарезервирован для [cloud-init](https://timeweb.cloud/docs/cloud-servers/manage-servers/cloud-init)). Замените это значение в приводимых командах на реальное имя диска в вашей системе. Проверить имена дисков можно с помощью одной из команд, описанных в статье «[Данные о дисках](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-data-df-lsblk-parted-fdisk)», например:
```shell
lsblk
```
Вы получите примерно такой вывод:
```shell
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop1 7:1 0 63.9M 1 loop /snap/core20/2318
loop2 7:2 0 87M 1 loop /snap/lxd/29351
loop3 7:3 0 50.9M 1 loop /snap/snapd/24505
loop4 7:4 0 63.8M 1 loop /snap/core20/2599
loop5 7:5 0 89.4M 1 loop /snap/lxd/31333
loop6 7:6 0 50.9M 1 loop /snap/snapd/24718
sda 8:0 0 15G 0 disk
└─sda1 8:1 0 15G 0 part /
sdb 8:16 0 10G 0 disk
vda 252:0 0 1M 1 disk
```
Где `sdb` — наш подключенный диск.
## Создание раздела на диске
Создать раздел на диске можно утилитой `fdisk`. Для этого запустите консоль и введите команду:
```shell
fdisk /dev/sdb
```
1. Создайте новый раздел командой `n`.
2. Выберите тип раздела: для этого введите команду `p`.
3. Остальные параметры оставьте без изменений, просто нажав `Enter`.
4. Для сохранения изменений введите команду `w`.

Повторно выполните команду, чтобы убедиться, что раздел был создан:
```shell
lsblk
```
В нашем примере — `sdb1`.
## Создание файловой системы
Следующий этап добавления диска — это создание в новом разделе файловой системы. В качестве примера возьмем систему `EXT4`. Для ее создания введите команду:
```shell
mkfs.ext4 /dev/sdb1
```
Файловая система создана.
## Монтирование диска
Если вы хотите сразу начать работать с диском, его необходимо примонтировать к определенной директории. Разные диски необходимо монтировать к разным директориям. Допустим, если в дальнейшем вы будете добавлять еще один диск — `sdc`, для его монтирования будет нужно создать отдельную директорию.
1. Создайте директорию, к которой будет примонтирован диск, командой:
```shell
mkdir /mnt/disk2
```
2. Примонтируйте диск к директории:
```shell
mount -o barrier=0 /dev/sdb1 /mnt/disk2
```
Теперь вы можете сохранять файлы в директории `/mnt/disk2`, и они будут записаны на новый диск.
## Создание записи в файле /etc/fstab
Чтобы привязка диска к директории сохранилась после перезагрузки, необходимо добавить запись в `/etc/fstab`.
Можно указать буквенный идентификатор устройства (например, `sdb1`), но при переподключении диска или удалении другого диска этот идентификатор может измениться. Поэтому лучше использовать `UUID`, который уникален для каждого диска. Получить `UUID` можно при помощи команды:
```shell
lsblk -o NAME,UUID
```
Пример вывода:
```shell
sda
└─sda1 fcafbb78-fd6c-4083-82d8-3c06bd6ad4b1
sdb
└─sdb1 534c6694-d2b0-4867-843b-b8a934bf0e5d
vda 041E-4E90
```
В нашем случае `534c6694-d2b0-4867-843b-b8a934bf0e5d` — это UUID, который нужно использовать в файле `/etc/fstab`.
1. Добавьте запись в `/etc/fstab`, указав `UUID` добавленного диска. Откройте файл для редактирования:
```shell
nano /etc/fstab
```
2. Добавьте строку с `UUID` вашего диска:
```shell
UUID= /mnt/disk2 ext4 defaults 0 2
```
## Удаление диска
> [!NOTE]
> Удаление локального диска будет недоступно, пока на сервере создана [точка восстановления](https://timeweb.cloud/docs/cloud-servers/manage-servers/backup#snapshoty).
#### Если на сервере был только один дополнительный диск
1. Откройте файл:
```bash
nano /etc/fstab
```
2. Удалите или закомментируйте строку с этим диском.
3. Сохраните изменения: нажмите `Ctrl + X`, затем `Y` и Enter.
4. Отмонтируйте диск, указав корректную точку монтирования вместо `/mnt/disk2`:
```shell
umount -l /mnt/disk2
```
5. Удалите диск в [панели управления](https://timeweb.cloud/my/) в разделе «Конфигурация».
#### Если на сервере несколько дополнительных дисков
После удаления одного из дисков их имена в системе могут измениться — например, `sdd` может стать `sdc`. В этом случае потребуется обновить конфигурацию.
1. Откройте файл:
```bash
nano /etc/fstab
```
2. Удалите или закомментируйте запись о диске, который был удален.
3. Проверьте текущие имена дисков:
```bash
lsblk
```
Например, если ранее были диски `sdc` и `sdd`, после удаления `sdc` диск `sdd` может получить имя `sdc`.
4. Примонтируйте оставшийся диск, указав его новое имя устройства:
```bash
mount -o barrier=0 /dev/sdc1 /mnt/disk3
```
В данном примере `/mnt/disk3` — прежняя точка монтирования третьего диска.
5. Обновите запись в `/etc/fstab`, указав новое имя устройства:
```bash
nano /etc/fstab
```
6. Перезагрузите сервер, чтобы применить изменения.
7. Удалите диск в [панели управления](https://timeweb.cloud/my/) в разделе «Конфигурация».
# Изменение размера диска
Source: https://timeweb.cloud/docs/unix-guides/disk-resizing?utm_source=llms_txt&utm_medium=ai
> [!NOTE]
> Это инструкция для серверов с операционными системами **Linux**. Если вы используете сервер с **ОС Windows**, воспользуйтесь [этой статьей](https://timeweb.cloud/docs/windows-guides/disk-resizing).
## Изменение размера системного диска
Перед увеличением размера диска на VDS убедитесь, что на сервере отсутствует [точка восстановления](https://timeweb.cloud/docs/cloud-servers/manage-servers/backup#snapshoty). При ее наличии изменить размер диска будет невозможно.
### Изменение размера диска в панели управления
1. Создайте [резервную копию диска](https://timeweb.cloud/docs/cloud-servers/manage-servers/backup), чтобы в случае непредвиденной ситуации данные не были утеряны.
2. Измените размер диска в панели [timeweb.cloud/my](https://timeweb.cloud/my/):
- Выберите нужный сервер из списка, перейдите в раздел «Конфигурация».
- Выберите подходящую конфигурацию либо настройте размер диска вручную.
- Нажмите «Сохранить и перезагрузить». Более подробная информация доступна [здесь](https://timeweb.cloud/docs/cloud-servers/manage-servers/server-configuration).
### Расширение разделов на диске
> [!NOTE]
> Данную процедуру необходимо выполнять **только в случае**, если вы ранее самостоятельно меняли разметку диска и в результате на нем создано **два логических раздела и больше**.
>
>
> В остальных случаях (если на диске 1 раздел; если на диске 2 раздела, один из которых — swap) — диск будет переразмечен автоматически, и с вашей стороны никакие действия не требуются.
>
>
> Процесс пересоздания / расширения разделов не приводит к удалению данных на диске.
**1**. Загрузите сервер [с диска восстановления](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode).
**2**. Определите имя системного диска:
```bash
lsblk
```
Пример вывода:
```bash
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 10G 0 part /
├─sda2 8:2 0 4G 0 part
├─sda14 8:14 0 4M 0 part
├─sda15 8:15 0 106M 0 part /boot/efi
└─sda16 259:0 0 913M 0 part /boot
vda 253:0 0 1M 1 disk
```
В данном примере системный диск — `sda`. На старых серверах он может именоваться `vda`.
**3**. Запустите утилиту `parted`, указав имя системного диска:
```bash
parted /dev/sda
```
Выполните команду:
```bash
print
```
При первом запуске после увеличения размера диска может появиться предупреждение:
```shell
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra 31457280 blocks) or continue
with the current setting?
Fix/Ignore?
```
Введите:
```shell
Fix
```
Это обновит таблицу GPT и позволит использовать все доступное пространство диска.
В выводе команды `print` вы увидите список разделов:

Если вы хотите расширить последний раздел на всю свободную область диска — переходите к пункту **4a**.
Если вы хотите создать новый раздел в свободной области диска — переходите к пункту **4b**.
При необходимости удалить раздел используйте команду:
```bash
rm <номер_раздела>
```
**4**. Выполните переразметку диска.
**4a**. Расширение существующего раздела
Чтобы расширить последний раздел, выполните:
```bash
resizepart <номер_раздела> 100%
```
Параметр 100% означает, что раздел будет расширен до конца диска.
Далее:
- выполните `print`, чтобы проверить результат;
- если все корректно — введите `q`, чтобы выйти из `parted`;
- переходите к пункту 5.
**4b**. Создание нового раздела
Чтобы создать новый раздел в свободной области диска, выполните:
```bash
mkpart primary <номер_раздела> 100%
```
Введите `yes`, когда система запросит подтверждение.
После этого:
- выполните `print`, чтобы проверить результат;
- введите `q`, чтобы выйти из программы разметки.
Создайте файловую систему в новом разделе:
```bash
mkfs.ext4 /dev/sda3
```
После этого переходите к следующему шагу.
**5**. Теперь необходимо проверить файловую систему раздела, который был изменен:
```bash
e2fsck -yf /dev/sda2
```
Вывод команды:

**6**. После проверки выполните изменение размера файловой системы:
```bash
resize2fs /dev/sda2
```

### Проверка файловой системы после расширения
Теперь необходимо примонтировать раздел, в который вносились изменения (`/dev/sda2`, `/dev/sda3` и т.д.):
```bash
mount /dev/sda2 /mnt
```
И проверить, что размер был успешно изменен:
```bash
df -h
```

Если вы видите, что размер диска остался прежним, рекомендуем вернуться к первому шагу и повторить процедуру пересоздания разделов, уделив внимание каждому этапу.
Если же размер диска изменился, отмонтируйте системный диск командой ниже, после чего вернитесь в стандартный режим загрузки.
```bash
umount /mnt
```
## Изменение размера дополнительного диска
> [!NOTE]
> Если вы выполняете увеличение размера локального диска, обязательно создайте [резервную копию](https://timeweb.cloud/docs/cloud-servers/manage-servers/backup) перед выполнением процедуры. Это поможет избежать потери данных в случае непредвиденных ситуаций.
Измените размер [локального](https://timeweb.cloud/docs/cloud-servers/manage-servers/server-configuration#izmenenie-razmera-diska) или [сетевого диска](https://timeweb.cloud/docs/network-drives/resize-drives) в панели управления.
После изменения размера диска в панели управления выполните команду, чтобы проверить новый размер устройства:
```shell
lsblk
```
Пример вывода:
```shell
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 87M 1 loop /snap/lxd/29351
loop1 7:1 0 63.7M 1 loop /snap/core20/2434
loop2 7:2 0 63.9M 1 loop /snap/core20/2318
loop3 7:3 0 44.3M 1 loop /snap/snapd/23258
loop4 7:4 0 38.8M 1 loop /snap/snapd/21759
loop5 7:5 0 89.4M 1 loop /snap/lxd/31333
vda 252:0 0 15G 0 disk
└─vda1 252:1 0 15G 0 part /
vdb 252:16 0 1M 1 disk
vdc 252:32 0 20G 0 disk
└─vdc1 252:33 0 10G 0 part /mnt/disk2
```
Обратите внимание, что сетевые диски будут иметь обозначение `sdX`, тогда как локальные — `vdX`.
В данном примере видно, что устройство `vdc` имеет увеличенный размер `20G`, но раздел `vdc1` всё ещё `10G`. Следовательно, потребуется переразметить раздел и увеличить файловую систему.
Если вы увеличиваете локальный диск, создайте резервную копию, чтобы в случае непредвиденной ситуации данные не были утеряны.
### Перед переразметкой
1. Закомментируйте запись в `/etc/fstab` (если диск добавлен). Откройте файл /etc/fstab:
```shell
nano /etc/fstab
```
Найдите строку, соответствующую `/dev/vdc1` (или его `UUID`), и добавьте `#` в начало строки, чтобы закомментировать ее. Это предотвратит автоматическое монтирование.
2. Перед размонтированием проверьте, какие процессы используют диск, выполнив:
```shell
lsof /mnt/disk2
```
Если вывод команды пустой, диск безопасен для размонтирования. Если процессы есть, завершите их или остановите соответствующее приложение.
3. Отмонтируйте диск:
```shell
sudo umount -l /mnt/disk2
```
### Разметка диска
1. Запустите `fdisk` для редактирования диска:
```shell
fdisk /dev/vdc
```
2. Удалите старый раздел (не затрагивая данные). Введите команду `d` для удаления раздела. Если у диска один раздел, как в нашем примере, он будет выбран автоматически.
3. Создайте новый раздел:
- - Введите команду `n` для создания нового раздела.
- Выберите тот же тип раздела (например, `p` для основного).
- Установите начальный сектор таким же, как был ранее (по умолчанию будет предложен верный вариант).
- В качестве конечного сектора выберите максимальный доступный размер (по умолчанию).
- При появлении вопроса:
```shell
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o:
```
Ответьте `N`, если вы хотите сохранить данные на диске.
4. Введите команду `w` для сохранения изменений.
5. После завершения работы с `fdisk` выполните команду для обновления таблицы разделов в системе:
```shell
partprobe /dev/vdc
```
Эта команда обновит таблицу разделов в ядре, чтобы система учла изменения без необходимости перезагрузки. Если всё прошло успешно, то вы не увидите никакого сообщения.
6. Повторно выполните команду:
```shell
lsblk
```
Убедитесь, что раздел обновился и занимает весь доступный размер.
### Увеличение файловой системы
После обновления раздела нужно расширить файловую систему на новый размер. Для файловой системы EXT4 выполните:
1. Проверьте файловую систему:
```shell
e2fsck -f /dev/vdc1
```
2. Увеличьте файловую систему:
```shell
resize2fs /dev/vdc1
```
3. После этого можно примонтировать диск обратно и раскомментировать запись в `/etc/fstab`:
```shell
mount -o barrier=0 /dev/vdc1 /mnt/disk2
```
4. Убедитесь, что новый размер доступен:
```shell
df -h
```
Пример вывода:
```shell
Filesystem Size Used Avail Use% Mounted on
tmpfs 96M 1.0M 95M 2% /run
/dev/vda1 15G 2.3G 13G 16% /
tmpfs 479M 0 479M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 96M 4.0K 96M 1% /run/user/0
/dev/vdc1 20G 28K 19G 1% /mnt/disk2
```
Теперь диск полностью готов к использованию.
# Монтирование резервных копий
Source: https://timeweb.cloud/docs/unix-guides/mounting-backups?utm_source=llms_txt&utm_medium=ai
> [!NOTE]
> Ниже в примерах используется имя диска `vdc`; замените это значение на реальное имя диска в вашей системе. Проверить имена дисков можно, например, командой [lsblk](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-data-df-lsblk-parted-fdisk#lsblk).
Монтирование резервной копии подразумевает подключение диска внутри операционной системы.
## Смонтировать бэкап
1. Перейдите в раздел «Облачные серверы» и кликните на нужный сервер.
2. На вкладке «Бэкапы» наведите курсор на нужный бэкап и нажмите на кнопку «Смонтировать».
3. Подтвердите действие.

3. Примонтируйте бэкап внутри ОС. Сделать это можно в консоли при помощи команды `mount`. Пример использования команды:
```shell
mount /dev/vdc1 /mnt
```
## Отмонтировать бэкап
Для отключения диска сначала отмонтируйте его внутри операционной системы командой `umount`:
```shell
umount /dev/vdc1
```
После нажмите «Отмонтировать» в панели управления сервером.

> [!NOTE]
> Отмонтировать резервную копию в панели невозможно до тех пор, пока она используется внутри операционной системы.
# Создание swap, изменение его размера
Source: https://timeweb.cloud/docs/unix-guides/creating-and-resizing-swap?utm_source=llms_txt&utm_medium=ai
Swap — механизм виртуальной памяти, при котором отдельные фрагменты памяти (обычно неактивные) перемещаются из ОЗУ во вторичное хранилище, освобождая ОЗУ для загрузки активных фрагментов памяти.
## Просмотр текущих сведений о swap
Перед осуществлением каких-либо действий со swap выполните следующую команду, чтобы узнать его текущие тип и расположение:
```
swapon -s
```
Если команда не выводит никакой информации совсем либо выводит только заголовки таблицы, без данных в ней, например:
```
Filename Type Size Used Priority
```
— это означает, что swap в системе отсутствует. Выполнение шагов, описанных в данной инструкции, позволит вам его создать.
Также вывод может содержать данные, подобные этим:
```
Filename Type Size Used Priority
/dev/vda5 partition 1046524 4568 -1
```
Это означает, что для swap используется раздел `vda5` вашего диска. Если вы хотите увеличить размер swap, с помощью данной инструкции вы сможете создать swap-файл, и общий размер swap в системе будет суммироваться с текущим разделом.
Еще один вариант вывода команды:
```
Filename Type Size Used Priority
/swap file 1048572 0 -1
```
Такой вывод означает, что для swap используется файл /swap. Вы можете изменить его размер с помощью данной инструкции (при этом можно не выполнять пункт 6, т.к. запись о swap в файле `/etc/fstab` уже существует).
## Создание и изменение swap
Для изменения размера swap или для создания swap-файла при его отсутствии выполните следующие действия.
1. В первую очередь отключите swap:
```
swapoff -a
```
2. Далее измените размер swap-файла. Если файл отсутствует в системе, эта же команда позволит его создать:
```
sudo dd if=/dev/zero of=/swap bs=1M count=1024
```
Укажите в качестве `count` необходимый размер swap, например, 512 или 1024 или 4096.
3. Подготовьте swap-файл:
```
chmod 600 /swap && mkswap /swap
```
4. Включите swap:
```
swapon /swap
```
5. Проверьте результат:
```shell
swapon -s
```
Пример вывода команды:
```
Filename Type Size Used Priority
/swap file 1048572 0 -1
```
6. Чтобы внесенные изменения были применены при следующей загрузке сервера, нужно добавить информацию о swap в файл `/etc/fstab`. Для этого выполните команду:
```shell
echo "/swap none swap sw 0 0"| sudo tee -a /etc/fstab
```
# Установка и удаление программ. Менеджеры пакетов
Source: https://timeweb.cloud/docs/unix-guides/package-management?utm_source=llms_txt&utm_medium=ai
Программное обеспечение в Linux распространяется, как правило, в виде пакетов, которые хранятся в репозиториях. Для управления пакетами используются специальные утилиты — менеджеры пакетов.
В системах Debian и Ubuntu 24.04 используется инструмент `apt`. Он применяется для установки, обновления, удаления пакетов, а также для поиска и получения информации о них.
В CentOS Stream 9 и BitrixVM (а также в других современных RHEL-совместимых системах) для управления пакетами используется `dnf`, пришедший на смену `yum`.
> [!NOTE]
> Если при вызове утилиты `apt` вы получаете ошибку `Could not get lock /var/lib/dpkg/lock` или схожую, вам поможет [наша статья](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/ustranenie-oshibki-could-not-get-lock-var-lib-dpkg-lock).
## Обновление базы пакетов
Перед выполнением каких-либо операций с `apt` или `dnf` имеет смысл актуализировать локальный кэш пакетов до текущего состояния репозитория:
**Debian / Ubuntu**
```shell
sudo apt update
```
**CentOS / Bitrix**
```
sudo dnf check-update
```
## Поиск пакетов
Если вы не уверены в названии конкретного пакета, вы можете выполнить его поиск по репозиторию. Поиск осуществляются по названию и описанию пакетов.
**Debian / Ubuntu**
```
apt search что_ищем
```
**CentOS / Bitrix**
```
dnf search что_ищем
```
## Получение информации о пакете
Если перед установкой вы хотите уточнить дополнительные детали (версию программы, размер пакета, сведения о необходимых зависимостях и пр.), можно вывести информацию о пакете:
**Debian / Ubuntu**
```
apt show имя_пакета
```
**CentOS / Bitrix**
```
dnf info имя_пакета
```
## Установка пакетов
Установить пакет можно одной простой командой:
**Debian / Ubuntu**
```
sudo apt install имя_пакета
```
**CentOS / Bitrix**
```
sudo dnf install имя_пакета
```
Так же можно установить сразу несколько пакетов, просто перечислив их друг за другом:
**Debian / Ubuntu**
```
sudo apt install имя_пакета1 имя_пакета2 имя_пакета3
```
**CentOS / Bitrix**
```
sudo dnf install имя_пакета1 имя_пакета2 имя_пакета3
```
Если вам необходимо установить определенную версию, укажите ее после имени пакета:
**Debian / Ubuntu**
```
sudo apt install имя_пакета=версия
```
**CentOS / Bitrix**
```
sudo dnf install имя_пакета-версия
```
Для того, чтобы в процессе установки автоматически отвечать «Yes» на все запросы системы, можно добавить ключ `-y`:
**Debian / Ubuntu**
```
sudo apt install -y имя_пакета
```
**CentOS / Bitrix**
```
sudo dnf install -y имя_пакета
```
## Обновление установленных пакетов
Обновить уже установленные пакеты до актуальных версий можно следующим образом:
**Debian / Ubuntu**
```
sudo apt upgrade
```
**CentOS / Bitrix**
```
sudo dnf upgrade
```
## Удаление пакетов
Для удаления приложений используйте:
**Debian / Ubuntu**
```
sudo apt remove имя_пакета
```
**CentOS / Bitrix**
```
sudo dnf remove имя_пакета
```
В **Debian / Ubuntu** можно также запустить автоматическое удаление ненужных пакетов для очистки системы. Ненужным система посчитает пакет, установленный не самостоятельно, а как зависимость для другого пакета, который на данный момент уже удален.
```
sudo apt autoremove
```
В **CentOS / Bitrix** аналогичная очистка выполняется командой:
```bash
sudo dnf autoremove
```
# Установка графической оболочки XFCE на Ubuntu
Source: https://timeweb.cloud/docs/unix-guides/install-xfce-gui-ubuntu?utm_source=llms_txt&utm_medium=ai
Для удобства управления сервером на него можно установить какую-либо графическую оболочку. В этом случае вы сможете выполнять необходимые задачи (переключаться между директориями, работать с файлами и др.) не только из консоли, но и с помощью привычного интерфейса рабочего стола. Ниже мы рассмотрим установку интерфейса [XFCE](https://xfce.org/), достаточно легкого и не требовательного к ресурсам сервера.
> [!NOTE]
> Хотя XFCE запустится на сервере минимальной конфигурации, для корректной работы интерфейса и дополнительного ПО на сервере (например, браузера) мы рекомендуем устанавливать XFCE на серверы с объемом RAM от 2 ГБ и выше.
В процессе мы установим саму оболочку XFCE в русской локализации, а также установим и настроим апплет клавиатуры, чтобы на сервере можно было использовать кириллическую раскладку.
Данная инструкция подойдет для серверов с **ОС Ubuntu**, начиная с версии 16.04.
## Установка XFCE
1. [Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Последовательно выполните указанные ниже команды.
Установите необходимые пакеты: для работы графического окружения (`xfce4`), менеджера входа (`xdm`), апплет раскладки клавиатуры (`xfce4-xkb-plugin`) и пакет локализации.
```shell
apt update && apt install xfce4 xdm xfce4-xkb-plugin language-pack-ru -y
```
Разрешите всем пользователям (`anybody`) запускать X-сервер, а также укажите, что `xfce4-session` будет использоваться в качестве диспетчера сеансов при графическом запросе входа в систему:
```
sed -i 's/allowed_users=console/allowed_users=anybody/' /etc/X11/Xwrapper.config
```
```
echo "xfce4-session" | tee ~/.xsession
```
Включите менеджер входа в автозагрузку системы, чтобы он отображался при запуске сервера:
```shell
systemctl enable xdm.service
```
Установите русскую локализацию для системы по умолчанию:
```shell
update-locale LANG=ru_RU.UTF-8
```
```shell
echo 'FRAMEBUFFER=Y' >> /etc/initramfs-tools/initramfs.conf
```
```shell
update-initramfs -u -k `uname -r`
```
Добавьте русскую раскладку клавиатуры для апплета:
```shell
xkbO='grp:alt_shift_toggle' && sed -i 's/XKBOPTIONS=\"\w*"/XKBOPTIONS=\"'$xkbO'\"/g' /etc/default/keyboard
```
```shell
xkbL='us,ru' && sed -i 's/XKBLAYOUT=\"\w*"/XKBLAYOUT=\"'$xkbL'\"/g' /etc/default/keyboard
```
Переустановите пакет `locales` для пересоздания конфигурационных файлов:
```shell
apt install --reinstall locales -y
```
3. Перезагрузите сервер.
4. Перейдите на вкладку «Консоль» в панели управления. В ней отобразится менеджер входа.
5. Введите логин и пароль (символы пароля не будут отображаться при вводе) и нажмите Enter.

_Окно логина в интерфейс [XFCE](https://xfce.org/)_
6. После ввода реквизитов отобразится графический интерфейс и диалоговое окно, в котором необходимо выбрать стандартную настройку панели.

_Интерфейс [XFCE](https://xfce.org/)_
Готово, интерфейс установлен и вы уже можете с ним работать. Теперь необходимо добавить возможность использования русской раскладки на сервере.
7. Добавьте апплет клавиатуры на панель инструментов, чтобы переключаться между раскладками. Для этого кликните правой кнопкой на «Приложения» в левом верхнем углу и выберите «Панель» — «Добавить новые элементы»:

_Меню «Приложения» в интерфейсе [XFCE](https://xfce.org/)_
8. В открывшемся окне выберите «Раскладки клавиатуры» и нажмите «Add»:

_Добавление раскладки клавиатуры в интерфейсе [XFCE](https://xfce.org/)_
9. В правом верхнем углу появится значок флага. Кликните на него правой кнопкой и выберите «Настройки клавиатуры»:

_Языковое меню в интерфейсе [XFCE](https://xfce.org/)_
10. В новом окне перейдите на вкладку «Раскладка», растяните окно, чтобы стал виден переключатель, выключите «Использовать системные настройки по умолчанию» и нажмите «Добавить»:

_Окно «Клавиатура» в интерфейсе [XFCE](https://xfce.org/)_
11. В открывшемся списке выберите русскую раскладку и нажмите «ОК». Окно «Клавиатура» можно закрыть.
Теперь вы сможете переключаться между английской и русской раскладкой, кликнув на значок флага.

_Переключение между раскладками в интерфейсе [XFCE](https://xfce.org/)_
## Установка браузера
Иногда могут возникать проблемы с использованием браузера по умолчанию в XFCE. Мы рекомендуем дополнительно установить популярные браузеры (Chromium и/или Firefox) и пользоваться ими.
Для установки откройте SSH-консоль и выполните команду:
```shell
apt install firefox chromium-browser
```
## Управление сервером по RDP
После установки оболочки вы можете управлять сервером из консоли в панели управления либо же воспользоваться удаленным подключением по протоколу RDP.
Для того, чтобы такое подключение было возможно, на ваш VDS необходимо установить сервер xRDP:
```shell
apt-get install xrdp
```
И добавить его в автозагрузку:
```shell
systemctl enable xrdp
```
После установки вы сможете подключаться к серверу и работать с ним по RDP — аналогично [удаленному управлению Windows-серверами](https://timeweb.cloud/docs/windows-guides/connecting-to-the-server-via-rdp). Для работы у вас должен быть открыт порт 3389 (на наших облачных серверах он открыт по умолчанию).
## Устранение проблем
### Отключение после успешной авторизации
В Ubuntu новых версий (20.04 и далее) может возникать проблема с подключением по RDP, а именно отключение спустя 2-3 секунды после успешной авторизации. В этом случае необходимо в файл `/etc/xrdp/startwm.sh` добавить строки:
```shell
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
```
Их необходимо указать перед строкой, начинающейся с `test -x`:
```shell
if test -r /etc/profile; then
. /etc/profile
fi
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
```
После перезагрузите службу XRDP:
```shell
systemctl restart xrdp
```
### Пустой экран
Еще одна возможная проблема — когда при подключении по RDP вы получаете пустой экран. Мы зафиксировали на Ubuntu 18.04, но, возможно, может наблюдаться и в других версиях. Для решения воспользуйтесь способом, описанном [в предыдущем пункте](https://timeweb.cloud/docs/unix-guides/install-xfce-gui-ubuntu#otkluchenie-posle-uspeshnoj-avtorizacii).
### Отсутствие дисплея
Также может возникать проблема XRDP-сервера с отсутствием дисплея (может открываться и сразу же закрываться без вывода каких-либо ошибок). Для решения нужно внести правки в файл `/etc/xrdp/startwm.sh`.
Найдите и удалите в файле следующие строки:
```shell
test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession
```
Вместо них добавьте строку:
```shell
startxfce4
```
После перезагрузите службу XRDP:
```shell
systemctl restart xrdp
```
# Настройка iptables
Source: https://timeweb.cloud/docs/unix-guides/iptables-setup?utm_source=llms_txt&utm_medium=ai
Iptables — это межсетевой экран для операционных систем Linux, который позволяет управлять прохождением трафика. При попытке установке соединения с сервером (или при отправке запроса с сервера) Iptables проверяет цепочку правил для конкретного соединения и выполняет заданную настройку.
Iptables предустановлен во всех современных дистрибутивах Linux.
## Типы цепочек
Существует три типа цепочек iptables — input, forward и output.
- **INPUT** — эта цепочка используется для обработки входящих соединений.
- **OUTPUT** — используется для исходящих соединений.
- **FORWARD** — используется для обработки транзитного трафика, например, в случае маршрутизатора. Если вы не занимаетесь настройкой маршрутизации, то правила этого типа вам не потребуются.
Цепочка — это упорядоченная последовательность правил. Правило содержит в себе критерий (например, IP-адрес источника пакета) и действие, которое нужно применить к пакету с этим критерием (например, «заблокировать»). Если критерий отсутствует, правило применяется ко всем пакетам.
При определении, что нужно сделать с пакетом, iptables просматривает соответствующую цепочку с начала списка, перебирая правила, пока не найдет совпадение. Если совпадение не найдено (соединение не попадает ни под одно созданное правило), применяется правило по умолчанию.
При настройке правил iptables помните, что для многих портов при передаче данных требуется не только отправить запрос, но и получить на него ответ. Также будьте внимательны, чтобы случайно не запретить доступ для себя — удаленное подключение к серверу по SSH тоже является входящим соединением.
## Действия с соединениями
Есть три типа действий, выполняемых с соединениями:
**Accept** — разрешить соединение.
**Drop** — игнорировать (блокировать) соединение без сообщения источнику об отказе. Это рекомендуемый вариант для обработки трафика на портах, подключенных к интернету, так как в этом случае злоумышленники получают минимум информации при сканировании портов.
**Reject** — отказать в соединении, сообщив источнику запроса об отказе. По умолчанию отправляется ответный пакет «icmp-port-unreachable», но также возможна дополнительная настройка сообщения (например, «icmp-host-unreachable», «icmp-net-prohibited», «icmp-host-prohibited» и др.).
## Настройка правил
В рамках данной статьи общий формат для настройки правил будет следующим:
```shell
iptables действие цепочка правило
```
В нем пропущено указание _таблицы_ (она должна следовать сразу после _iptables_), так как мы рассматриваем настройки для основной таблицы фильтрации **filter**, которая подразумевается в командах iptables по умолчанию. Указывать ее дополнительно необязательно.
_Действие_ в данном случае — это действие, которое необходимо выполнить с правилом (например, добавить его или удалить).
Примеры доступных действий в iptables:
- \-A — добавить правило в цепочку;
- \-I — добавить правило в цепочку, указав номер;
- \-D — удалить правило;
- \-F — удалить все правила;
- \-L — вывести все правила в текущей цепочке;
- \-P — установить действие по умолчанию.
Дополнительные опции:
- \-p — указать протокол пакета;
- \-s — указать IP-адрес / источник пакета;
- \-j — указать, что нужно сделать с пакетом (разрешить / заблокировать и пр.).
### **Просмотр существующих правил**
Вывести все правила можно командой:
```shell
iptables -L
```
Либо:
```shell
iptables -L -n -v
```
Также можно вывести правила для конкретной цепочки, например:
```shell
iptables -L INPUT
```
### **Правила по умолчанию**
В случае, если ни одно из созданных правил не подходит для определенного пакета, к нему будет применено правило по умолчанию.
Просмотреть правила по умолчанию можно командой:
```shell
iptables -L | grep policy
```
Если вы не вносили изменений в policy, то изначально для всех цепочек будут установлены разрешающие правила по умолчанию.

Установить правило по умолчанию можно с помощью опции -P, например:
```shell
iptables -P FORWARD DROP
```
### **Примеры настроек**
Добавить правило к существующей цепочке можно командой:
```shell
iptables -A
```
Если правило нужно поместить не в конец списка, можно использовать следующий формат команды и указать номер правила в списке:
```shell
iptables -I цепочка номер правило
```
Например, это правило будет указано первым в цепочке INPUT:
```shell
iptables -I INPUT 1 --dport 80 -j ACCEPT
```
Запретить все входящие соединения с конкретного IP:
```shell
iptables -A INPUT -s 1.2.3.4 -j DROP
```
Запретить соединения из подсети:
```shell
iptables -A INPUT -s 1.2.3.4/24 -j DROP
```
В качестве источника может быть указан как IP-адрес, и хост. Например, так можно запретить все соединения с test.domain.ru:
```shell
iptables -A INPUT -s test.domain.ru -j DROP
```
Запретить все соединения с хостов, отличных от test.domain.ru:
```shell
iptables -A INPUT ! -s test.domain.ru -j DROP
```
Открыть доступ к порту 25 (SMTP) для всех:
```shell
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
```
Закрыть для всех (требуется просто заменить ACCEPT на DROP):
```shell
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j DROP
```
Открыть доступ к портам Apache для всех:
```shell
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
```
Открыть доступ к порту 3306 для конкретного IP:
```shell
iptables -A INPUT -s 1.2.3.4 -p tcp -m tcp --dport 3306 -j ACCEPT
```
Настройка логирования:
```shell
iptables -A INPUT -p tcp -m multiport --dports 22,53,8080,139,445 -j LOG --log-level INFO --log-prefix "New connection from 1.2.3.4/24:"
iptables -A INPUT -s 1.2.3.4/24 -m multiport --dports 22,8080,139,445 -j ACCEPT
```
При такой настройке при каждом новом соединении к серверу из подсети 1.2.3.4/24 в журнал будет добавляться соответствующая запись.
Для защиты от распространенных атак можно добавить такие настройки:
Запретить все «неопознанные» пакеты:
```shell
iptables -A INPUT -m state --state INVALID -j DROP
```
Запретить нулевые пакеты:
```shell
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
```
Защититься от атак типа syn-flood:
```shell
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
```
Запретить фрагментированные пакеты для защиты от ping flood:
```shell
iptables -A INPUT -p icmp --fragment -j LOG --log-prefix "ping flooding"
iptables -A INPUT -p icmp --fragment -j DROP
```
Запретить ping:
```shell
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
```
Разрешить ping с определенных адресов:
```shell
iptables -A INPUT -s 1.2.3.4 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -s 1.22.33.44 -p icmp --icmp-type echo-request -j ACCEPT
```
Установить лимит подключений (connlimit), равный 5, для 80 порта:
```shell
iptables -A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 5 --connlimit-mask 32 -j DROP
```
### **Сохранение изменений**
Для того, чтобы созданные правила были применялись в том числе после перезагрузки системы, их нужно сохранить.
CentOS:
```shell
/sbin/service iptables save
```
Для сохранения правил в Debian / Ubuntu можно использовать утилиту `iptables-persistent`. Установить ее можно командой:
```
apt install iptables-persistent
```
В процессе установки система запросит, необходимо ли сохранить существующие правила — нажмите «Да».
В дальнейшем, если вы внесете изменения в правила iptables, их можно будет сохранить командой:
```shell
netfilter-persistent save
```
### **Удаление правил**
Удалить конкретное правило можно с помощью опции -D, например:
```shell
iptables -D INPUT -s 1.2.3.4 -j DROP
```
Удаление **всех** правил выполняется командой:
```shell
iptables -F
```
Удаление правил для определенной цепочки:
```shell
iptables -F INPUT
```
# Установка произвольной ОС на сервер
Source: https://timeweb.cloud/docs/unix-guides/ustanovka-proizvolnoj-os-na-server?utm_source=llms_txt&utm_medium=ai
Большинство популярных ОС можно установить на сервер Timeweb Cloud автоматически, выбрав нужный вариант при создании сервера. Если же вам нужна операционная система, которой нет в готовых образах, ее можно установить на сервер вручную. В инструкции рассмотрим несколько примеров, как это можно сделать.
Варианты установки могут быть следующими:
- Установка ОС из ISO-образа установочного диска. Сейчас это также можно сделать через [Образы сервера](https://timeweb.cloud/docs/cloud-servers/manage-servers/server-images) в панели управления.
- Установка из сырого (raw) образа диска, обычно файл имеет расширение .img.
- Установка через подключение образа ядра ОС.
> [!NOTE]
> Прежде чем начинать установку, внимательно изучите сайт разработчика/поставщика ОС. Вероятно, у него уже есть инструкции по ручной установке системы.
## Перед началом работы
Что важно знать:
- Виртуализация аппаратная — QEMU/KVM.
- Все серверы работают с Legacy BIOS, поэтому не пытайтесь ставить UEFI.
- Со стороны клиента нет доступа к BIOS, пользователь ограничен функционалом панели управления.
Основная задача — запустить установщик ОС, для чего потребуется эмулировать загрузку с LiveCD. Так как нет способа инициализировать «пустой» сервер, то первоначально потребуется установить сервер с любой доступной к установке операционной системой. В этой статье в качестве примера «базовой системы» будет использован Debian 11.
Запуск установщика будем выполнять через **GRUB**, он есть в большинстве ОС. На установочных дисках обычно содержится собственный загрузчик для инициализации с диска программы установки.
Если ваш сервер был создан до мая 2025 года, диски будут иметь имена вида `vd*`. На серверах, созданных позже, диски будут называться `sd*`. Учитывайте это при выполнении действий из инструкции.
## Постнастройка
В Timeweb Cloud для многих операций с сервером через панель управления используется `qemu-guest-agent`. После установки операционной системы желательно установить и при необходимости сконфигурировать его. Обычно это несложно, и будет достаточно настроек по умолчанию.
## Установка ОС из ISO при помощи образа сервера
Самый простой способ установки произвольной операционной системы — через образы сервера.
Рассмотрим установку на примере Ubuntu Server 23.10. Для начала необходимо скачать ISO-образ liveCD. Сделать это можно [по этой ссылке](https://releases.ubuntu.com/23.10.1/) — выбираем «Server install image».
1. Перейдите на вкладку «[Образы](https://timeweb.cloud/my/images)», затем выберите «Загрузка образа», далее — «С компьютера» и загрузите скачанный образ liveCD.

2. После завершения загрузки образа создайте облачный сервер. В разделе «Образы» выберите «Мои образы» и найдите загруженный ранее ISO.

3. Запустите создание сервера и дождитесь окончания процесса.
> [!NOTE]
> Подключение к серверу по SSH будет недоступно, так как OpenSSH Server не установлен. Чтобы продолжить, необходимо подключиться по VNC: для этого перейдите во вкладку «Консоль».

4. Выполните стандартную установку Ubuntu Server. Рекомендуется перейти в полноэкранный режим для удобства. В процессе установки выберите опцию установки OpenSSH Server, чтобы в дальнейшем подключиться к серверу по SSH.

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

После перезагрузки установка будет полностью завершена. Для обеспечения работы некоторых функций панели управления установите `qemu-guest-agent` по [инструкции](https://timeweb.cloud/docs/unix-guides/installing-qemu-agent).
## Установка ОС из ISO с использованием дополнительного диска
Этим способом можно установить большинство операционных систем из ISO-образов.
Для работы потребуется:
- Сервер с установленной операционной системой. В нашем случае — Debian 11.
- Прямая ссылка на образ ISO.
- [Подключенный дополнительный диск](https://timeweb.cloud/docs/unix-guides/adding-removing-disk). Размечать или форматировать дополнительный диск не нужно, просто добавьте его.
Ниже будет показан пример установки системы [GNU Guix System](https://guix.gnu.org/).
### Запись ISO
**1.** Скачайте ISO на сервер:
```
wget https://ftp.gnu.org/gnu/guix/guix-system-install-1.3.0.x86_64-linux.iso
```
**2.** Добавьте в ПУ дополнительный диск. Он будет подключен к системе как устройство `/dev/sdb`.
**3.** Запишите ISO на этот диск:
```
dd if=guix-system-install-1.3.0.x86_64-linux.iso of=/dev/sdb
```
На `/dev/sdb` появится файловая система. Проверьте, что это так, командой:
```
fdisk -l
```
```
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5569f8be
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 20971519 20969472 10G 83 Linux
Disk /dev/vda: 1 MiB, 1048576 bytes, 2048 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 0 1247275 1247276 609M 0 Empty
/dev/sdb2 1247276 1253035 5760 2.8M ef EFI (FAT-12/16/32)
```
Как можно видеть, появились разделы `/dev/sdb1` и `/dev/sdb2`.
Какие и сколько разделов появятся на диске `sdb`, зависит от содержимого образа ISO.
### Загрузка и установка системы
Вся дальнейшая установка будет проходить через веб-консоль.
> [!NOTE]
> Если веб-консоль «залипла», можно воспользоваться функцией «Вставить из буфера» в правом углу над окном консоли.
**1.** Запустите сервер [с диска восстановления](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode).
**2.** Выберите пункт «Boot existing OS».

**3.** Нажмите Tab на клавиатуре.
**4.** Замените hd0 на hd2.
**5\.** Вы попадете в установочную программу. Выполните установку.
В процессе:
- Установщик предложит вам определить диск для установки ОС, выбирайте диск `/dev/sda`.
- Cогласитесь на установку SSH-сервера и DHCP-клиента. Последнее важно, поскольку иначе на сервере не будет работать сеть.
**6.** Когда программа установки сообщит о том, что все готово, выполните перезагрузку сервера.
**7.** Проверьте, что вы можете авторизоваться в свежеустановленной системе, что сеть и демон SSH работают. Если все хорошо, можно удалить дополнительный диск.
На этом установка завершена, однако вам может потребоваться [установка пакета](https://timeweb.cloud/docs/unix-guides/installing-qemu-agent) `qemu-guest-agent`.
## Установка OpenBSD через образ ядра
В этом случае не потребуется подключать к серверу дополнительный диск. Вместо этого установка ОС будет производиться через загрузку из GRUB образа ядра BSD.
Для работы будет нужен только сервер с установленной операционной системой, в нашем случае — Debian 11.
> [!NOTE]
> Обязательно внимательно прочитайте [гайд по установке OpenBSD](https://www.openbsd.org/faq/faq4.html).
**1.** Подключитесь к существующему серверу и скачайте образ ядра BSD:
```
wget https://mirror.yandex.ru/pub/OpenBSD/7.1/amd64/bsd.rd -O /boot/bsd.rd
```
Дальнейшие действия выполняются через VNC-консоль в ПУ.
**2.** Нажмите в ПУ кнопку перезагрузки сервера. Пока сервер перезагружается, в консоли воспользуйтесь функцией вставки текста и вставьте латинскую букву С.
**3.** Откроется консоль загрузчика GRUB. В нее надо последовательно ввести и выполнить следующие команды:
```
set root=(hd2,msdos1)
kopenbsd /boot/bsd.rd
boot
```
**4.** Начнется загрузка ядра и установщика OpenBSD. Далее внимательно читайте подсказки на экране и вводите ответы. Следуйте [инструкции](https://www.openbsd.org/faq/faq4.html).
На большинство вопросов установщика можно отвечать простым нажатием Enter.
- На вопросе настройке сети (the IPv4 settings) следует ответить `dhcp`.
- Согласиться на установку **sshd** (по умолчанию yes).
- Создание обычного пользователя можно пропустить. В таком случае необходимо ответить **yes** на вопрос о доступе root по ssh.
- По завершении согласиться на **reboot**.
Первый запуск сервера будет долгим из-за применения патчей (в консоли будет отображаться текст: Checking for available binary patches).
Дальнейшую настройку системы можно выполнить по SSH.
## Установка Mikrotik Cloud Hosted Router
Процесс установки пошагово описан в статье [про установку MikroTik Cloud Hosted Router](https://timeweb.cloud/docs/unix-guides/chr-install).
# Удаленный доступ к MySQL
Source: https://timeweb.cloud/docs/unix-guides/remote-access-to-mysql?utm_source=llms_txt&utm_medium=ai
По умолчанию сервер MySQL разрешает только локальные подключения, то есть выполняемые с сервера, на котором он работает.
Если же требуется подключаться к MySQL извне, со сторонних адресов, необходимо выполнить следующее:
1. Внести изменения в конфигурационный файл MySQL.
2. Разрешить пользователю или пользователям MySQL удаленные подключения.
## Шаг 1. Редактирование конфигурационного файла
В Ubuntu файл размещается, как правило, по пути `/etc/mysql/mysql.conf.d/mysqld.cnf`.
В CentOS это могут быть `/etc/mysql/my.cnf` или `/etc/my.cnf`.
Откройте файл для редактирования, указав нужный путь:
```shell
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
```
Найдите в нем следующие строки:
```shell
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
```
Параметр `bind-address` определяет, с каких адресов MySQL разрешает подключения. В данном случае оно возможно только с локального сервера (`localhost`, 127.0.0.1).
Укажите здесь нужные вам настройки:
- Чтобы разрешить доступ с конкретного IP-адреса, укажите его вместо 127.0.0.1.
- Чтобы разрешить доступ с любых IP-адресов, укажите здесь 0.0.0.0. Обратите внимание, что такая настройка может быть небезопасной.
Закройте файл, сохранив изменения (в nano это можно сделать с помощью клавиш Crtl X → Y → Enter).
После перезапустите MySQL:
```shell
sudo systemctl restart mysql
```
## Шаг 2. Создание пользователя MySQL
Все пользователи MySQL, имеющие доступ только к локальным подключениям, имеют учетную запись вида `user@localhost`. Чтобы разрешить пользователю подключаться удаленно, нужно добавить для него учетную запись `user@нужный_IP` (или `user@%`, тогда будет возможно подключение с любого IP).
Эту настройку можно выполнить через консоль или через phpMyAdmin.
### **Через консоль**
Подключитесь к MySQL:
```shell
sudo mysql
```
С помощью команд ниже создайте пользователя и выдайте ему необходимые привилегии. В примере используется `ALL PRIVILEGES`, но в зависимости от ваших задач вы можете выдавать только отдельные права доступа (например, `CREATE`, `INSERT`, `UPDATE` и т.д.).
Для того, чтобы создаваемый пользователь мог подключаться к конкретной базе с любого адреса, используйте команду:
```shell
mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO 'имя_пользователя'@'%' IDENTIFIED BY 'пароль';
```
Если нужно, чтобы пользователь мог подключаться только с определенного адреса, укажите его вместо `%`, например:
```shell
mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO 'имя_пользователя'@'123.45.67.8' IDENTIFIED BY 'пароль';
```
С помощью следующей команды можно разрешить пользователю подключение ко всем базам вместо одной конкретной:
```shell
mysql> GRANT ALL PRIVILEGES ON *.* TO 'имя_пользователя'@'123.45.67.8' IDENTIFIED BY 'пароль';
```
### **Через phpMyAdmin**
В phpMyAdmin перейдите в раздел «Учетные записи пользователей» → «Добавить новую учетную запись».
В пункте «Имя хоста» выберите «Любой хост» и укажите либо `%`, чтобы разрешить подключение с любого адреса, либо конкретный IP.
На следующем шаге задайте нужные привилегии для пользователя. Это может быть полный набор прав или с определенными ограничениями (например, вы можете запретить новой учетной записи удалять таблицы базы данных; таким образом удаление будет возможно только при локальном подключении).
## Ограничения файрвола
Удаленное подключение к MySQL может ограничиваться настройками файрвола. Например, на сервере с BitrixVM такое подключение вероятнее всего будет недоступно из-за ограничений iptables. Потребуется дополнительно внести изменения в правила — открыть порт 3306.
Можно открыть доступ к нему с любого адреса, но такая настройка является небезопасной. Рекомендуется разрешать доступ для конкретного IP.
В **iptables** это можно сделать командой:
```shell
sudo iptables -A INPUT -s 123.45.67.8 -p tcp --destination-port 3306 -j ACCEPT
```
Замените адрес из примера на нужный вам.
Если на сервере используется **UFW**, настройку можно выполнить с помощью:
```shell
sudo ufw allow from 123.45.67.8 to any port 3306
```
После завершения настройки проверьте, что пользователь может подключиться к MySQL удаленно.
```shell
mysql -u имя_пользователя -h адрес_хоста_mysql -p
```
# Установка QEMU-агента
Source: https://timeweb.cloud/docs/unix-guides/installing-qemu-agent?utm_source=llms_txt&utm_medium=ai
Для корректной работы на ваш сервер должна быть установлена программа-демон **QEMU Guest Agent**. Она запускается внутри виртуальной машины и обеспечивает полноценную работу с сервером в панели управления.
> [!NOTE]
> Эта инструкция описывает установку QEMU на машины Linux.
>
> Для Windows сервис QEMU можно установить с помощью специального ISO-образа, который можно [скачать здесь](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D). Также с его помощью можно установить virtio-драйверы, необходимые для поддержки виртуализированных устройств.
Если QEMU-агент отсутствует или отключен, в панели будут недоступны следующие действия:
- Создание бэкапа, в том числе автоматического
- Создание снапшота
- Добавление SSH-ключа
- Удаление SSH-ключа
- Сброс пароля root
- Клонирование сервера
- Создание образа сервера
- Открытие или закрытие доступа для поддержки
- Корректное отображение графиков дашборда
Если при создании сервера вы установили на него любое ПО из маркетплейса, QEMU-агент будет установлен автоматически. В остальных случаях вы можете установить его вручную по этой инструкции.
> [!NOTE]
> Хотя QEMU Guest Agent можно установить в BSD-системах (FreeBSD, OpenBSD, pfSense), он не поддерживает необходимые функции для управления виртуальной машиной и не будет работать корректно.
## Проверка наличия QEMU-агента
Чтобы проверить, установлен ли агент QEMU на вашем сервере:
1. Подключитесь к серверу через веб-консоль в панели или [по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Выполните команду:
```shell
systemctl status qemu-guest-agent
```
Подобный вывод означает, что агент не установлен:
```shell
Unit qemu-guest-agent.service could not be found.
```
А в данном случае агент есть, но отключен — нужно его перезапустить:
```shell
Active: inactive (dead) since ...
```
## Перезапуск qemu-guest-agent
Если вы уже устанавливали QEMU-агент, но описанный функционал панели недоступен, попробуйте перезапустить его — скорее всего, это решит проблему.
1. Подключитесь к серверу через веб-консоль в панели или [по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Выполните команду:
```shell
systemctl restart qemu-guest-agent.service
```
3. Проверьте, что все работает корректно, с помощью команды:
```shell
systemctl status qemu-guest-agent.service
```
Если все в порядке, вывод команды будет следующим:
```shell
qemu-guest-agent.service - QEMU Guest Agent
Loaded: loaded (/lib/systemd/system/qemu-guest-agent.service; static)
Active: active (running)
```
## Установка qemu-guest-agent
Чтобы установить QEMU-агент, [подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните в консоли приведенные ниже команды, выбрав вариант для вашей операционной системы.
Процесс установки зависит от используемого дистрибутива. Выберите подходящую вкладку:
- **Debian-based** — для Debian, Ubuntu, Astra Linux;
- **RHEL-based** — для CentOS, AlmaLinux, BitrixVM;
- **Arch-based** — для Arch Linux и производных.
Debian-based
Обновите репозитории:
```bash
sudo apt update
```
Установите QEMU Guest Agent:
```bash
sudo apt install qemu-guest-agent -y
```
RHEL-based
Обновите репозитории:
```bash
sudo yum update
```
Установите QEMU Guest Agent:
```bash
sudo yum install qemu-guest-agent -y
```
Arch-based
Обновите систему:
```bash
sudo pacman -Syu
```
Установите QEMU Guest Agent:
```bash
sudo pacman -S qemu-guest-agent
```
Запустите агент:
```bash
sudo systemctl start qemu-guest-agent
```
И добавьте его в автозапуск:
```bash
sudo systemctl enable qemu-guest-agent
```
# Установка Zabbix-агента
Source: https://timeweb.cloud/docs/unix-guides/installing-zabbix-agent?utm_source=llms_txt&utm_medium=ai
Zabbix — это универсальная система мониторинга, позволяющая отслеживать состояние сервера и статусы различных его параметров.
Мы используем Zabbix для сбора и вывода в панель управления данных о [потреблении сервером оперативной памяти и данных о нагрузке на диск](https://timeweb.cloud/docs/cloud-servers/manage-servers/resource-stats#pamyat).
Для того, чтобы эти графики были доступны, на сервере должен быть запущен Zabbix-агент. На новых VDS агент установлен по умолчанию; также он автоматически добавляется на сервер при переустановке операционной системы.
Вы также можете установить Zabbix-агент вручную, при помощи нашего скрипта.
Запускать скрипт нужно под пользователем root или под пользователем с правами sudo.
1. Подключитесь к серверу [по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Скачайте скрипт во временную папку:
```bash
wget -O /tmp/zabbix-install.sh http://zabbix.repo.timeweb.ru/zabbix-install.sh
```
3. Установите права на выполнение скрипта:
```bash
chmod +x /tmp/zabbix-install.sh
```
4. Запустите скрипт:
```bash
sudo /tmp/zabbix-install.sh
```
Скрипт автоматически определит операционную систему и выполнит установку Zabbix Agent из нашего репозитория.
На Ubuntu и Debian он:
- скачает GPG-ключ репозитория и сохранит его `/etc/apt/trusted.gpg.d/timeweb-zabbix.gpg`;
- добавит наш репозиторий в файл `/etc/apt/sources.list.d/timeweb-zabbix.list`;
- обновит список доступных пакетов;
- установит пакет `zabbix-agent-timeweb`;
- разрешит входящие TCP-подключения на порт `10050` при помощи UFW.
На CentOS, Fedora и других системах семейства Red Hat скрипт:
- создаст файл репозитория `/etc/yum.repos.d/timeweb-zabbix.repo`;
- подключит наш репозиторий и настроет его GPG-ключ;
- обновит кеш пакетов для подключенного репозитория;
- установит пакет `zabbix-agent-timeweb`;
- откроет TCP-порт `10050` с помощью `firewalld` или `iptables`.
После установки список разрешенных Zabbix-серверов можно проверить в файле `/etc/zabbix/zabbix_agentd.conf`.
# Установка и работа с PostgreSQL
Source: https://timeweb.cloud/docs/unix-guides/installing-and-using-postgresql?utm_source=llms_txt&utm_medium=ai
PostgreSQL — объектно-реляционная система управления базами данных. PostgreSQL базируется на языке SQL, отличается гибкостью и надежностью и поддерживает множество возможностей. Чаще всего PostgreSQL используется для сложных проектов, где требуется работа со сложными структурами данных, которые могут не поддерживаться обычными СУБД.
В статье мы рассмотрим установку PostgreSQL на VDS с **Ubuntu 24.04** и особенности работы с ней.
Для выполнения операций, описанных в инструкции, на сервере должен быть [создан пользователь](https://timeweb.cloud/docs/unix-guides/adding-users) с привилегиями sudo.
## Установка PostgreSQL
PostgreSQL присутствует в официальных репозиториях Ubuntu, поэтому для установки достаточно выполнить:
```shell
sudo apt update
sudo apt install postgresql postgresql-contrib
```
Таким образом вы обновите локальный индекс пакетов и установите PostgreSQL вместе с пакетом `contrib`, который содержит дополнительный функционал и утилиты для работы СУБД.
При установке будет автоматически создана роль и пользователь в системе Linux `postgres`, под которым можно будет начать работу с PostgreSQL.
## Пользователи (роли)
Вместо привычного понятия пользователей, PostgreSQL использует концепцию ролей. Несмотря на определенные отличия, в целом можно определять роли как пользователей базы данных.
В зависимости от настройки, роль можно рассматривать как пользователя базы данных или как группу пользователей. Роли могут владеть объектами базы данных (например, таблицами) и выдавать другим ролям разрешения на доступ к этим объектам. Также можно предоставить одной роли членство в другой роли (схоже с добавлением пользователя в группу), чтобы одна роль могла использовать привилегии другой роли.
Как отмечалось выше, во время установки была автоматически создана роль `postgres`. Вы можете работать с СУБД из-под нее. Для этого переключитесь на сессию данного пользователя:
```shell
sudo su - postgres
```
После чего запустите консоль Postgres:
```shell
psql
```
После завершения работы вы сможете выйти из консоли Postgres командой `\q`:
```shell
\q
```
Так как для каждой созданной роли Postgres предполагает наличие базы данных с таким же именем и по умолчанию подключается именно к ней, имеет смысл создавать новую роль для каждой базы. Кроме того, если имя роли совпадает с именем пользователя, созданного в системе Linux, подключение к БД также упрощается.
### **Создание новой роли**
Создать роль **из консоли системы** (не `psql`) можно с помощью команды:
```shell
createuser -P --interactive
```
Ключ `-P` позволит сразу задать пароль пользователю, а `--interactive` запустит интерактивный режим для указания дополнительных параметров.
Система поочередно запросит имя новой роли, ее пароль и повтор пароля, а также позволит указать привилегии: сделать ли роль суперпользователем, должны ли быть права на создание баз данных и создание других ролей. Нажимайте `y / n` и `Enter` для выбора.

Создать роль **из консоли Postgres** можно с помощью запроса `CREATE ROLE`.
При использовании этой команды без дополнительных опций пользователь будет создан без каких-либо привилегий, поэтому желательно сразу при создании роли указывать нужные привилегии. Полный список доступных опций можно просмотреть, выполнив:
```shell
\h CREATE ROLE
```
Чтобы создать новую роль выполните:
```shell
CREATE ROLE имя_роли WITH LOGIN CREATEDB CREATEROLE;
```
Далее задайте новому пользователю пароль:
```shell
\password имя_роли
```
### **Просмотр существующих ролей**
Чтобы просмотреть созданных пользователей и их привилегии, перейдите в консоль Postgres:
```shell
psql
```
И выполните команду:
```shell
\du
```
Пример вывода:
```shell
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
tmweb | Create role, Create DB | {}
tweb | Create role, Create DB | {}
```
Нажмите `q`, чтобы закрыть вывод, и `\q`, если нужно выйти из консоли Postgres.
### **Удаление роли**
Чтобы удалить роль, можно использовать команду в консоли системы:
```shell
dropuser имя_роли
```
Либо команду в консоли Postgres:
```shell
DROP ROLE имя_роли;
```
### **Смена пароля пользователя**
Для смены пароля одной из ролей подключитесь к Postgres от суперпользователя (`postgres` или другой роли с такими привилегиями), после чего выполните:
```shell
ALTER USER имя_роли WITH PASSWORD 'новый_пароль';
```
Обратите внимание, что эта операция сохранится в файле `.psql_history` вместе с паролем в открытом виде. Из соображений безопасности рекомендуется удалить соответствующую запись из файла.
Как правило, файл размещается в директории `/var/lib/postgresql`. Проверить его расположение можно в терминале системы с помощью:
```shell
grep postgres /etc/passwd | cut -d ':' -f 6
```
Откройте файл, указав корректный путь к нему:
```shell
sudo nano /var/lib/postgresql/.psql_history
```
Удалите запись с паролем и сохраните изменения.
## Создание базы данных
Создать базу из консоли системы можно следующим образом:
```shell
createdb имя_базы
```
Для создания базы из консоли Postgres, используйте:
```shell
CREATE DATABASE имя_базы;
```
Вывести список баз можно командой `\l` в консоли Postgres:
```shell
postgres=# \l
```
## Подключение к базе данных
1. По умолчанию (без дополнительных опций) Postgres пытается подключиться от имени текущего пользователя к одноименной базе. Поэтому, если имя пользователя Linux совпадает с именем роли, созданной в Postgres, а также с именем базы, достаточно выполнить:
```shell
psql
```
Например, если на сервере создан пользователь `timeweb`, а в Postgres — одноименная роль и база, подключиться можно с помощью данной команды:

После подключения можно выполнить команду `\conninfo`, чтобы посмотреть информацию о текущем соединении.
1.2. Если имя базы, к которой нужно подключиться, отличается, нужно указать его в команде:
```shell
psql -d имя_базы
```
2. Если имя роли не совпадает с именем пользователя Linux, необходимо указать дополнительные параметры в команде.
2.1. Если имя роли и имя базы совпадают, достаточно выполнить:
```shell
psql -U имя_роли -h localhost -W
```

Как видно из вывода `\conninfo`, мы подключены к базе `tmweb` от одноименной роли.
2.2. Если имя роли и базы отличаются, базу также нужно указать в команде:
```shell
psql -U имя_роли -d имя_базы -h localhost -W
```

3. Если вы подключаетесь к другой базе данных уже в консоли Postgres, используйте:
```shell
\c имя_базы
```

## Резервные копии (экспорт и импорт дампа)
При установке PostgreSQL на сервер устанавливаются утилиты `pg_dump` и `pg_restore`, с помощью которых вы сможете из консоли Linux создавать резервные копии базы данных (`pg_dump`) и восстанавливать данные из них (`pg_restore`).
### **Создание резервной копии**
Чтобы создать резервную копию базы и сохранить ее на сервере, необходимо выполнить команду:
```shell
pg_dump -h хост -U имя_роли -F формат_дампа -f путь_к_дампу имя_базы
```
Параметры:
- `хост` — сервер, на котором располагается база; может быть указан `localhost`, IP-адрес или домен;
- `имя_роли` — имя пользователя PostgreSQL, под которым вы подключаетесь к базе;
- `формат_дампа` — формат, в котором будет сохранен дамп; указывается буквами `c`, `t` или `p`: '`с`' (custom), '`t`' (tar — архив .tar), '`p`' (plain — текстовый файл без сжатия, как правило, `.sql`);
- `путь_к_дампу` — путь сохранения для файла дампа и имя файла;
- `имя_базы` — имя базы данных, для которой создается резервная копия.
Например:
```shell
pg_dump -h localhost -U tmweb -F c -f /home/user/backups/db.dump tmweb
```
После выполнения команды будет запрошен пароль пользователя Postgres, указанного в команде (в примере — `tmweb`).
### **Восстановление из дампа**
Импорт дампов выполняется с помощью `pg_restore`:
```shell
pg_restore -h хост -U имя_роли -F формат_дампа -d имя_базы путь_к_дампу
```
Параметры:
- `хост` — сервер, на котором располагается база; может быть указан `localhost`, IP-адрес или домен;
- `имя_роли` — имя пользователя PostgreSQL, под которым вы подключаетесь к базе;
- `формат_дампа` — формат, в котором был сохранен дамп (необязательный ключ);
- `имя_базы` — имя базы данных, в которую импортируется дамп;
- `путь_к_дампу` — путь к файлу дампа и имя файла.
Например:
```shell
pg_restore -h localhost -U tmweb -F c -d new_db /home/user/backups/db.dump
```
Для импорта дампов в формате `.sql` используется `cat`:
```shell
cat путь_к_дампу | psql -h хост -U имя_роли имя_базы
```
Параметры:
- `путь_к_дампу` — путь к файлу дампа и имя файла;
- `хост` — сервер, на котором располагается база; может быть указан `localhost`, IP-адрес или домен;
- `имя_роли` — имя пользователя PostgreSQL, под которым вы подключаетесь к базе;
- `имя_базы` — имя базы данных, в которую импортируется дамп.
Например:
```shell
cat /home/user/backups/dump.sql | psql -h localhost -U tmweb new_db
```
## Работа с шаблонами баз данных
При установке PostgreSQL по умолчанию создаются три базы данных: `postgres`, `template0`, `template1`.
`template0` и `template1` — это шаблоны баз данных, из которых в дальнейшем будут создаваться пользовательские БД.
Фактически, когда вы выполняете команду `CREATE DATABASE`, Postgres создает клон базы `template1`. Если внести изменения в `template1`, они будут наследоваться всеми новыми создаваемыми базами. Это позволяет, например, добавить в `template1` необходимые вам таблицы с данными или установить расширения, после чего не потребуется добавлять их для каждой новой базы.
Обратите внимание, что для установки расширений необходимо подключиться к `template1` от суперпользователя (`postgres` или другой роли, имеющей данные привилегии).
Подключитесь к шаблону `template1`:
```shell
\c template1
```
И установите расширение:
```shell
CREATE EXTENSION название_расширения;
```
Например, если вы установите в `template1` расширение `pgcrypto`, то в дальнейшем, при выполнении `CREATE DATABASE`, новые базы будут создаваться с уже установленным `pgcrypto`.

`template0` — это исходная база, которая используется, когда нужно создать новую базу без каких-либо изменений, внесенных в шаблон `template1`, или же вернуть `template1` в его изначальное состояние.
Чтобы создать «чистую базу на основе `template0`, нужно выполнить:
```shell
CREATE DATABASE имя_базы TEMPLATE template0;
```
Также `template0` необходима, если вам нужно внести изменения в кодировку или локаль создаваемой базы данных. По умолчанию (при использовании `template1`) эти изменения невозможны.
В этом случае нужно при создании базы указать template0 в качестве шаблона и указать требуемую кодировку и/или локаль, например:
```shell
CREATE DATABASE имя_базы TEMPLATE template0 ENCODING 'SQL_ASCII';
```
**Пересоздание template1**
С помощью `template0` вы также можете вернуть базу `template1` в исходный вид: для этого потребуется ее удалить, а после создать заново, на основе шаблона template0.
Сначала необходимо указать, что `template1` не является шаблоном, чтобы удаление стало возможно:
```shell
UPDATE pg_database SET datistemplate = false WHERE datname = 'template1';
```
Далее удалить `template1`:
```shell
DROP DATABASE template1;
```
И создать базу `template1` заново, указав, что она будет являться шаблоном:
```shell
CREATE DATABASE template1 OWNER postgres TEMPLATE template0 is_template true;
```
## Параметры и конфигурационные файлы
Узнать расположение конфигурационного файла (как правило, размещается по пути: `/etc/postgresql/версия/main/postgresql.conf`) можно с помощью:
```shell
SHOW config_file;
```

Узнать значение какого-либо параметра Postgres:
```shell
SHOW параметр;
```

Получить расширенную информацию о параметре можно из представления `pg_settings`: будет выведено не только установленное значение, но также файл, в котором он назначен, максимальные и минимальные значения.
```shell
SELECT * FROM pg_settings WHERE name = 'параметр';
```
Например:
```sql
SELECT * FROM pg_settings WHERE name = 'max_connections';
```
Чтобы вывести информацию в удобном для восприятия формате, можно сменить представление командой `\x`:

## Другие полезные команды для управления Postgres
Вывести все параметры терминального командного меню Postgres:
```shell
psql --help
```
Просмотр баз данных из командной строки Linux:
```shell
psql -l
```
Список команд `psql` выводится с помощью `\?`:
```shell
\?
```
Список SQL-команд (запросов):
```shell
\h
```
Справка по конкретному SQL- запросу:
```shell
\h запрос
# Например:
\h CREATE TABLE
```
Информация о подключении:
```shell
\conninfo
```

Выполнение shell-команд из командной строки Postgres:
```shell
\! команда_shell
```
Например, чтобы вывести директорию нахождения:
```shell
\! pwd
```

Подключение к базе данных:
```shell
\c имя_базы
```

# Установка почтового сервера iRedMail
Source: https://timeweb.cloud/docs/unix-guides/installing-iredmail?utm_source=llms_txt&utm_medium=ai
iRedMail — это многофункциональный почтовый сервер с открытым исходным кодом, который предназначен для дистрибутивов Linux. В инструкции рассмотрим, как установить iRedMail вручную и выполнить необходимые настройки.
> [!NOTE]
> Вы также можете установить iRedMail автоматически, выбрав сборку «iRedMail» при создании нового облачного сервера. В этом случае после установки воспользуйтесь [отдельной инструкцией](https://timeweb.cloud/docs/unix-guides/configuring-iredmail) по настройке.
## Требования к серверу
- ОЗУ: от 2 ГБ, рекомендуется 4 ГБ.
- ОС: Ubuntu 22.04; Debian 11; CentOS Stream 9.
Установку необходимо выполнять на «чистый» сервер.
## Установка на Debian / Ubuntu
**1\.** Установить FQDN hostname для сервера.
> [!NOTE]
> FQDN — Fully Qualified Domain Name, имя домена, не имеющее неоднозначностей в определении. Включает в себя имена всех родительских доменов иерархии DNS.
Проверить текущее значение hostname вы можете командой:
```shell
hostname -f
```
Ответом может быть:
```shell
mx.example.com
```
Значение hostname устанавливается в файлах `/etc/hostname` и `/etc/hosts`. В `/etc/hostname` нужно прописать короткий hostname — при mx.example.com в качестве FQDN следует указать:
```shell
mx
```
В файле `/etc/hosts` указываем FQDN hostname первым в списке:
```shell
127.0.0.1 mx.example.com mx localhost localhost.localdomain
```
Повторно проверяем значение FQDN hostname командой:
```shell
hostname -f
```
Если значение mx.example.com не было получено, необходимо перезагрузить сервер.
**2\.** Обновить Ubuntu:
```shell
apt-get update -y
```
**3\.** Изменить имя хоста сервера на домен электронной почты.
**4\.** Загрузить архив с актуальной версией iRedMail с [сайта проекта](https://www.iredmail.org/download.html).
**5\.** Разархивировать полученный архив командой:
```shell
tar -xvzf 1.6.0.tar.gz
```
**6\.** Перейти в каталог с файлами и запустить скрипт iRedMail.sh:
```shell
cd iRedMail-1.6.0
chmod +x iRedMail.sh
./iRedMail.sh
```
Далее запустится мастер установки, где будет возможность выбрать необходимые параметры либо оставить стандартные значения почтового сервера, а также установить дополнительное ПО в случае необходимости.
**7.** В первую очередь нужно согласиться с установкой:

**8\.** Выбрать место хранения почтовых ящиков пользователей:

**9\.** Выбрать бэкенд по своему усмотрению:

- Если вы выбираете OpenLDAP, будет запрошен LDAP-суффикс:

- При выборе MySQL, MariaDB или PostgreSQL будет создан надёжный пароль, который можно найти в файле `/root/iRedMail-x.y.z/iRedMail.tips`.
**10\.** В следующем окне появится мастер установки доменного имени электронной почты. Помните, что вы не можете установить имя хоста сервера в качестве домена электронной почты:

**11\.** Установить пароль для администратора:

Этот аккаунт будет администратором и почтовым пользователем, с его реквизитами вы сможете войти в почтовый ящик, а также в админ-панель iRedAdmin.
**12\.** Выбрать дополнительные компоненты:

**13.** Согласиться с предложенной для установки конфигурацией, введя `y`:

**14\.** После завершения установки выполнить перезагрузку сервера.
После установки вся необходимая информация (пароли пользователей, пути к конфигурационным файлам) доступна в файле `/root/iRedMail-x.y.z/iRedMail.tips`.
Дополнительные компоненты будут доступны по следующим адресам:
- Roundcube Webmail: https://адрес\_сервера/mail/
- SOGo Groupware: https://адрес\_сервера/SOGo
- Веб-интерфейс админ-панели iRedAdmin: https://адрес\_сервера/iredadmin/
Дополнительную информацию и помощь при проблемах можно получить на [форуме проекта](https://forum.iredmail.org/) или в [платной поддержке](https://www.iredmail.org/support.html) iRedMail.
## Установка на CentOS / RHEL
**1.** Установить FQDN hostname для сервера.
> [!NOTE]
> FQDN — Fully Qualified Domain Name, имя домена, не имеющее неоднозначностей в определении. Включает в себя имена всех родительских доменов иерархии DNS.
Проверить текущее значение hostname вы можете командой:
```shell
hostname -f
```
Ответом может быть:
```shell
mx.example.com
```
Значение hostname устанавливается в файлах `/etc/hostname` и `/etc/hosts`. В `/etc/hostname` нужно прописать короткий hostname — при mx.example.com в качестве FQDN следует указать:
```shell
mx
```
В файле `/etc/hosts` указываем FQDN hostname первым в списке:
```shell
127.0.0.1 mx.example.com mx localhost localhost.localdomain
```
Повторно проверяем значение FQDN hostname командой:
```shell
hostname -f
```
Если значение mx.example.com не было получено, необходимо перезагрузить сервер.
**2\.** Отключить SELINUX одним из следующих способов.
- Способ 1. В файле `/etc/selinux/config` необходимо указать `SELINUX=disabled`, после чего выполнить перезагрузку сервера.
- Способ 2. Выполнить в консоли команду ниже — она отключит SELINUX без перезагрузки сервера.
```shell
setenforce 0
```
**3\.** Подключить официальные репозитории, если в этом будет необходимость (epel, appstream, powertools).
**4\.** Следовать [инструкции для Ubuntu](https://timeweb.cloud/docs/unix-guides/installing-iredmail#ustanovka-na-debian--ubuntu), начиная с пункта 4.
# Настройка почтового сервера iRedMail
Source: https://timeweb.cloud/docs/unix-guides/configuring-iredmail?utm_source=llms_txt&utm_medium=ai
После установки iRedMail из **нашего маркетплейса** для завершения настройки выполните описанные ниже шаги.
## Проверка почтовых портов
Для предотвращения отправки спама почтовые порты на сервере могут быть заблокированы. В этом случае они будут указаны на Дашборде сервера в пункте «Закрытые порты».
Чтобы снять блокировку, привяжите к аккаунту номер телефона и нажмите на иконку замка.

## Настройка почтового домена
### Шаг 1. Добавьте домен и ящик в iRedMail
1. Авторизуйтесь в панели iRedMail. Реквизиты доступа можно найти на Дашборде сервера.
2. Нажмите «Добавить» → «Домен».
3. Введите имя домена или поддомена, на котором вы планируете создать почтовые ящики.
4. Нажмите «Добавить».
5. Нажмите «Добавить» → «Пользователи».
6. Введите имя ящика и пароль. Сохраните этот пароль — он понадобится в дальнейшем.
7. Нажмите «Добавить».
### Шаг 2. Сгенерируйте DKIM для домена
Во всех примерах ниже мы будем использовать почтовый домен `domain.ru`. Замените его в командах и настройках на ваш реальный домен.
1. [Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. Сгенерируйте DKIM для домена командой ниже:
```shell
amavisd genrsa /var/lib/dkim/domain.ru.pem 1024
```
При успешном выполнении вы увидите сообщение:
```shell
Private RSA key successfully written to file "/var/lib/dkim/domain.ru.pem" (1024 bits, PEM format)
```
### Шаг 3. Отредактируйте конфигурационный файл
1. Откройте конфигурационный файл:
```shell
nano /etc/amavis/conf.d/50-user
```
2. Найдите в нем блок «Add dkim\_key here». Он будет начинаться примерно так:
```shell
# Add dkim_key here.
dkim_key('mail.spb-3-vm-83ns.twc1.net', 'dkim', '/var/lib/dkim/mail.spb-3-vm-83ns.twc1.net.pem');
@dkim_signature_options_bysender_maps = ({
```
3. Перед `@dkim_signature_options_bysender_maps` добавьте следующую строку:
```shell
dkim_key('domain.ru', 'dkim', '/var/lib/dkim/domain.ru.pem');
```
4. Внутри блока `@dkim_signature_options_bysender_maps` добавьте строку:
```shell
"domain.ru" => { d => "domain.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
```
У вас должно получиться примерно следующее содержимое:
```shell
# Add dkim_key here.
dkim_key('mail.spb-3-vm-83ns.twc1.net', 'dkim', '/var/lib/dkim/mail.spb-3-vm-83ns.twc1.net.pem');
dkim_key('domain.ru', 'dkim', '/var/lib/dkim/domain.ru.pem');
@dkim_signature_options_bysender_maps = ({
# 'd' defaults to a domain of an author/sender address,
"domain.ru" => { d => "domain.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
# 's' defaults to whatever selector is offered by a matching key
# Per-domain dkim key
#"domain.com" => { d => "domain.com", a => 'rsa-sha256', ttl => 10*24*3600 },
# catch-all (one dkim key for all domains)
'.' => {d => 'mail.spb-3-vm-83ns.twc1.net',
a => 'rsa-sha256',
c => 'relaxed/simple',
ttl => 30*24*3600 },
});
```
5. Сохраните изменения и закройте файл, нажав CTRL + X, затем Y, затем Enter.
6. Настройте права к файлу с DKIM:
```shell
chown amavis:amavis /var/lib/dkim/domain.ru.pem
chmod 0400 /var/lib/dkim/domain.ru.pem
```
7. Перезапустите службу командой
```shell
systemctl restart amavis
```
## Настройка DNS-записей
Настройку необходимо выполнять **на стороне держателя NS-серверов**. Если домен делегирован на NS-серверы Timeweb Cloud, настроить DNS необходимо в разделе [«Домены и SSL»](https://timeweb.cloud/my/domains).
### DKIM
1. Получите значение открытого DKIM-ключа, выполнив на сервере:
```shell
amavisd showkeys domain.ru
```
Вы получите значение DKIM-ключа в формате:
```shell
dkim._domainkey.domain.ru. 3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXWvK9yuKyB7AUvEurr5hNMvGk"
"y+7m1nYP6UTA2SMjK+vid7+ElmpRczCgvSCONFOGIykZx4mLUUPAZnzl2hC1lffy"
"LjW41zi3+YKMAbQEtqA3zXvNxlSNvNEfLinKB5uqUmyhxVfaBIZSb5fEYpPodVBP"
"y3DDcfkKL1pw33QIuQIDAQAB")
```
2. Уберите все кавычки и переносы строк, чтобы получить запись вида:
```shell
v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXWvK9yuKyB7AUvEurr5hNMvGky+7m1nYP6UTA2SMjK+vid7+ElmpRczCgvSCONFOGIykZx4mLUUPAZnzl2hC1lffyLjW41zi3+YKMAbQEtqA3zXvNxlSNvNEfLinKB5uqUmyhxVfaBIZSb5fEYpPodVBPy3DDcfkKL1pw33QIuQIDAQAB
```
3. Перейдите в раздел [«Домены и SSL»](https://timeweb.cloud/my/domains) и кликните на ваш почтовый домен.
4. На вкладке «DNS» добавьте новую TXT-запись.
5. В пункте «Хост» кликните «Указать вручную» и введите:
```shell
dkim._domainkey.domain.ru
```
6. В поле «Значение» укажите ваш DKIM-ключ.
### SPF
Если для домена уже создана SPF, вы можете ее отредактировать, кликнув на нее. Для домена не должно быть создано больше одной SPF.
1. Перейдите в раздел [«Домены и SSL»](https://timeweb.cloud/my/domains) и кликните на ваш почтовый домен.
2. На вкладке «DNS» добавьте новую TXT-запись.
3. Пункт «Хост» оставьте без изменений.
4. В поле «Значение» укажите:
```shell
v=spf1 ip4:IP_адрес_сервера ~all
```
### MX
1. Перейдите в раздел [«Домены и SSL»](https://timeweb.cloud/my/domains) и кликните на ваш почтовый домен.
2. На вкладке «Поддомены» создайте поддомен, например, `mail.domain.ru`, и укажите в качестве его A-записи IP-адрес сервера iRedMail.
3. На вкладке «DNS» добавьте новую MX-запись.
4. В поле «Приоритет» укажите 10.
5. Пункт «Хост» оставьте без изменений.
6. В поле «Значение» укажите созданный поддомен.
### DMARC
1. Перейдите в раздел [«Домены и SSL»](https://timeweb.cloud/my/domains) и кликните на ваш почтовый домен.
2. На вкладке «DNS» добавьте новую TXT-запись.
3. В поле «Хост» укажите:
```shell
_dmarc.domain.ru
```
4. В поле «Значение» укажите:
```shell
v=DMARC1; p=none
```
### PTR и Hostname
Как и DMARC, эти записи необязательны для работы почтового домена, но многие почтовые сервисы проверяют их наличие по следующему принципу:
- Значения PTR и Hostname должны совпадать.
- В А-записи домена, указанного в качестве значения, должен быть указан IP-адрес вашего сервера.
Мы рекомендуем использовать для этих записей поддомен, который вы создали на этапе настройки MX. В нашем случае это `mail.domain.ru`. Замените его на нужное вам значение.
#### Настройка PTR
Чтобы настроить PTR:
1. Перейдите в раздел «Облачные серверы» и кликните на ваш сервер с iRedMail.
2. На вкладке «Сеть» наведите курсор на публичный IPv4 сервера и нажмите на иконку шестеренки.
3. В открывшемся окне укажите ваш поддомен в формате:
```shell
mail.domain.ru
```
#### Настройка Hostname
1. Задайте Hostname, выполнив на сервере команду:
```shell
hostnamectl set-hostname mail.domain.ru
```
2. Проверьте, что изменения применены:
```shell
hostnamectl
```
3. Настройте Hostname в Postfix командами:
```shell
postconf -e "myhostname = mail.domain.ru"
postfix reload
```
4. Проверьте, что изменения применены:
```shell
postconf myhostname
```
5. Настройте хостнейм в конфигурационном файле iRedMail. Для этого откройте файл:
```shell
nano /etc/amavis/conf.d/50-user
```
6. Найдите строку с параметром `$myhostname` (обычно, 12 строка).
7. Замените значение на нужный домен и сохраните изменения.
8. Перезапустите службу командой:
```shell
systemctl restart amavis
```
## Настройка SSL-сертификата
По этой инструкции вы сможете выпустить и установить бесплатный сертификат SSL Let’s Encrypt для вашего почтового поддомена.
### Шаг 1. Установите certbot
Для этого выполните команды:
```shell
apt install software-properties-common -y
add-apt-repository ppa:certbot/certbot -y
apt install certbot -y
```
### Шаг 2. Запросите сертификат
Это можно сделать с помощью команды:
```shell
certbot certonly --webroot --agree-tos --email ваш@email -w /opt/www/well_known -d mail.domain.ru
```
Замените `mail.domain.ru` на ваш почтовый домен, а `ваш@email` — на ваш контактный ящик.
В процессе система запросит, хотите ли вы получать новости — можно ответить отказом.
При успешном выполнении команда разместит файлы сертификата по пути `/etc/letsencrypt/live/mail.domain.ru/`.
Доступ к этому каталогу имеет только `root`. Для корректной работы почтовых служб и баз данных измените права командой:
```shell
chmod 0755 /etc/letsencrypt/{live,archive}
```
### Шаг 3. Настройте сертификат
Создайте символические ссылки на файлы сертификата Let's Encrypt, разместив их вместо файлов самоподписанного сертификата iRedMail.
Создайте резервную копию файла сертификата:
```shell
mv /etc/ssl/certs/iRedMail.crt{,.bak}
```
И файла ключа:
```shell
mv /etc/ssl/private/iRedMail.key{,.bak}
```
Создайте символические ссылки на файлы сертификата и ключа:
```shell
ln -s /etc/letsencrypt/live/mail.domain.ru/fullchain.pem /etc/ssl/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/mail.domain.ru/privkey.pem /etc/ssl/private/iRedMail.key
```
Перезапустите службы:
```shell
systemctl restart postfix dovecot nginx
```
### Шаг 4. Настройте автообновление
Чтобы сертификат автоматически продлевался при приближении срока истечения, можно создать cron-задачу.
Откройте файл планировщика задач в редакторе:
```shell
crontab -e
```
При первом запуске потребуется выбрать удобный текстовый редактор — мы рекомендуем использовать `nano`.
После вы увидите файл с cron-задачами iRedMail.
Вставьте в файл следующую строку, заменив `mail.domain.ru` на ваш поддомен для почты:
```shell
1 3 * * * certbot certificates; certbot renew --post-hook 'ln -sf /etc/letsencrypt/live/mail.domain.ru/privkey.pem /etc/ssl/private/iRedMail.key; /usr/bin/systemctl restart postfix dovecot nginx'
```
Задача будет запускаться ежедневно в 03:01 и автоматически продлевать сертификат, если до его истечения осталось менее 30 дней.
Сохраните изменения и закройте файл, нажав Ctrl + X, затем Y, затем Enter.
## Проверка работы
Настройка завершена. Теперь вы можете отправлять письма по защищенному протоколу и обращаться к iRedMail по вашему домену:
- Админ-панель: `https://mail.domain.ru/iredadmin/`
- Roundcube: `https://mail.domain.ru/mail/`
Авторизуйтесь в почтовом ящике по ссылке `https://mail.domain.ru/mail/`, используя логин и пароль от созданного ящика, и протестируйте работу почты:
- Проверьте отправку писем через [mail-tester](https://www.mail-tester.com/).
- Проверьте прием писем, отправив себе письмо на этот ящик.
Если что-то не работает — свяжитесь с поддержкой, мы поможем разобраться.
# Установка SSL на сервер с Keitaro
Source: https://timeweb.cloud/docs/unix-guides/installing-ssl-on-server-with-keitaro?utm_source=llms_txt&utm_medium=ai
Установить SSL-сертификат на сервер с ПО Keitaro проще всего по следующей инструкции. Она позволит выпустить и установить бесплатный SSL Let's Encrypt, который будет автоматически продлеваться каждые три месяца.
1. Укажите в качестве A-записи домена IP-адрес вашего сервера. Если домен размещается на NS-серверах Timeweb Cloud, это можно сделать в разделе «[Домены](https://timeweb.cloud/my/domains)». В остальных случаях настройку нужно выполнить на стороне держателя NS-серверов.
2. [Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните команду ниже, указав вместо mydomain.ru ваш домен:
```shell
kctl-enable-ssl -D mydomain.ru
```
Сертификат будет выпущен и установлен.
# Запуск Wordpress на сервере c Ubuntu
Source: https://timeweb.cloud/docs/unix-guides/wordpress-on-ubuntu?utm_source=llms_txt&utm_medium=ai
Для запуска Wordpress на сервере Timeweb Cloud вам не нужно выполнять никаких сложных настроек — установить CMS можно в несколько кликов.
### Установка Wordpress на новый сервер
1. [Зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если его еще нет.
2. В панели управления перейдите в раздел «Облачные серверы».
3. Нажмите «Создать» или «Добавить».
4. Перейдите на вкладку «Маркетплейс».
5. Выберите образ «Wordpress + Ubuntu 24.04».
6. Укажите остальные параметры и создайте сервер.
### Установка Wordpress на существующий сервер
Установку можно выполнить и на существующий сервер — при этом все имеющиеся данные на нем будут удалены.
1. В панели управления перейдите в раздел «Облачные серверы».
2. Кликните на нужный сервер.
3. Перейдите на вкладку «Конфигурация» и нажмите «Переустановить».
4. На следующей странице выберите вкладку «Маркетплейс» и найдите на ней образ «Wordpress + Ubuntu 24.04»
5. Укажите остальные параметры и переустановите сервер.

После установки сервера реквизиты придут на вашу почту, и вы сможете начать работу с CMS.
# Запуск бота в фоновом режиме
Source: https://timeweb.cloud/docs/unix-guides/zapusk-bota-v-fonovom-rezhime?utm_source=llms_txt&utm_medium=ai
Вы можете запустить на сервере бота, написанного на Python или любом другом языке программирования. Чтобы обеспечить постоянную и надежную работу скрипта, потребуется настроить автозапуск и перезагрузку.
## Подготовка
Загрузите файлы бота, например, в директорию `/home/me` и создайте виртуальное окружение:
```shell
python3 -m venv venv
```
Активируйте его:
```py
source ./venv/bin/activate
```
Далее установите все пакеты:
```py
pip install -r requirements.txt
```
Если файл `requirements.txt` со списком пакетов отсутствует, установите все расширения вручную.
## Screen — самый простой метод
Для простого запуска скрипта в фоне можно воспользоваться утилитой `screen`, которая позволяет создавать неограниченное количество сессий в терминале.
Ее необходимо установить из репозитория:
```shell
sudo apt install screen
```
Запустите новое окно командой:
```shell
screen
```
Активируйте виртуальное окружение и запустите бота:
```shell
source ./venv/bin/activate
python main.py
```
Осталось свернуть сессию. Для этого необходимо зажать сочетание клавиш Ctrl + A, после чего нажать D.
Список основных команд:
- `screen` — запуск новой сессии;
- `screen -ls` — просмотр всех сессий;
- `screen -r ` — открыть конкретную сессию (если сессия всего одна, то имя можно не указывать).
В сессии:
- Ctrl + A + D — свернуть сессию;
- Ctrl + A + K — завершить сессию.
Это простой метод, который не требует создания конфигурационных файлов. Однако если сервер будет перезагружен или во время работы скрипта возникнет ошибка, бота нужно будет запустить заново.
## Systemd
Рассмотрим запуск приложения в роли службы. [Systemd](https://timeweb.cloud/docs/unix-guides/service-management-in-systemd) — это менеджер системы и служб Linux. Он управляет службами, которые описаны в конфигурационных файлах, и запускает их.
Создайте новый юнит systemd:
```shell
sudo nano /etc/systemd/system/bot.service
```
Добавьте в него следующее содержимое:
```
[Unit]
Description=Timeweb Bot Service
After=network.target
[Service]
Type=idle
Restart=always
RestartSec=3
User=root
WorkingDirectory=/home/me/bot
ExecStart=/home/me/bot/venv/bin/python /home/me/bot/main.py
[Install]
WantedBy=multi-user.target
```
где:
- Description — название службы,
- ExecStart — путь до интерпретатора Python и скрипта,
- User — пользователь, от которого будет запущена служба,
- Restart=always — указание, что необходимо перезапустить бота после ошибки.
Осталось перезагрузить юниты, добавить службу в автозапуск и активировать бота:
```shell
sudo systemctl daemon-reload
sudo systemctl enable bot.service
sudo systemctl start bot.service
```
Теперь проверьте работу бота. Если бот не отвечает, попробуйте запустить его в терминале и посмотреть, нет ли ошибок
## **PM2**
Еще один способ запустить бота — использовать менеджер процессов PM2. О нем мы подробнее писали в [Community](https://timeweb.com/ru/community/articles/ispolzuem-process-menedzhment-na-maksimum-ustanovka-i-nastroyka-pm2-1). PM2 автоматически перезапускает бота и сохраняет логи.
Установите следующие пакеты:
```shell
sudo apt install nodejs
sudo apt install npm
```
Далее установите PM2:
```shell
npm install pm2 -g
```
Для запуска бота перейдите в директорию с ботом и запустите его командой:
```shell
pm2 start main.py --interpreter=python3
```
# Установка сертификатов Минцифры
Source: https://timeweb.cloud/docs/unix-guides/ustanovka-sertifikatov-mincifry?utm_source=llms_txt&utm_medium=ai
Сбербанк переводит свой эквайринг с международных сертификатов на сертификаты Минцифры. Если на вашем сайте используется оплата через Сбербанк, то для корректной работы платежного шлюза:
1. На ваш сайт или сервер должны быть установлены цепочки сертификатов Минцифры.
2. На устройство вашего клиента должны быть установлены сертификаты Минцифры, либо клиенту необходимо пользоваться браузерами Яндекс или Atom.
Своих клиентов вы можете ориентировать на [инструкцию по установке сертификатов](http://www.sberbank.ru/ru/certificates) на сайте Сбербанка.
Процесс установки цепочки сертификатов на сервер описан ниже.
## Установка цепочки сертификатов на сервер
### Установка на Ubuntu/Debian
1. Авторизуйтесь на сервере под `root` или пользователем с правами `sudo`.
2. Скачайте файлы цепочки сертификата:
```shell
wget https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt
```
```shell
wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
```
3. Скопируйте файлы сертификатов в хранилище сертификатов в каталог `/usr/local/share/ca-certificates/`:
```shell
cp russian_trusted_sub_ca_pem.crt /usr/local/share/ca-certificates/
```
```shell
cp russian_trusted_root_ca_pem.crt /usr/local/share/ca-certificates/
```
4. Обновите хранилище сертификатов командой:
```shell
update-ca-certificates
```
5. Выполните проверку доступа к Сбербанку:
```shell
openssl s_client -connect sberbank.ru:443 2>/dev/null | grep 'Verify return code'
```
Пример корректного ответа:
```shell
Verify return code: 0 (ok)
```
По другим вопросам, связанным с работой платежного шлюза, обращайтесь в поддержку Сбербанка. Дополнительную информацию о сертификатах можно получить в [документации Сбербанка](https://securepayments.sberbank.ru/wiki/doku.php/certificates:start).
### Установка на СentOS
1. Авторизуйтесь на сервере под `root` или пользователем с правами `sudo`.
2. Установите `wget`:
```shell
yum install wget
```
3. Скачайте файлы цепочки сертификата:
```shell
wget https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt
```
```shell
wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
```
3. Скопируйте файлы сертификатов в хранилище сертификатов в каталог `/etc/pki/ca-trust/source/anchors/`:
```shell
cp russian_trusted_sub_ca_pem.crt /etc/pki/ca-trust/source/anchors/
```
```shell
cp russian_trusted_root_ca_pem.crt /etc/pki/ca-trust/source/anchors/
```
4. Обновите хранилище сертификатов командой:
```shell
update-ca-trust
```
5. Выполните проверку доступа к Сбербанку:
```shell
openssl s_client -connect sberbank.ru:443 2>/dev/null | grep 'Verify return code'
```
Пример корректного ответа:
```shell
Verify return code: 0 (ok)
```
По другим вопросам, связанным с работой платежного шлюза, обращайтесь в поддержку Сбербанка. Дополнительную информацию о сертификатах можно получить в [документации Сбербанка](https://securepayments.sberbank.ru/wiki/doku.php/certificates:start).
# Создание образа виртуальной машины для облачного сервера
Source: https://timeweb.cloud/docs/unix-guides/sozdanie-obraza-virtualnoj-mashiny-dlya-oblachnogo-servera?utm_source=llms_txt&utm_medium=ai
В статье рассмотрим, как создать образ виртуальной машины, готовый для использования в облаке, с помощью QEMU и VirtualBox. На примере Ubuntu Server 23.10 вы узнаете, как настроить систему, создать и подготовить образ для его последующего развертывания в облачной среде.
## Создание образа виртуальной машины при помощи QEMU
Рассмотрим процесс создания образа виртуальной машины на Ubuntu, Windows и macOS с использованием QEMU. Создание образа рассмотрим на примере Ubuntu Server 23.10.
### Предварительная подготовка
**Скачивание ISO-образа Ubuntu**
Перед установкой QEMU потребуется загрузить ISO-образ Ubuntu. Скачайте его при помощи браузера по [ссылке](https://releases.ubuntu.com/23.10.1/ubuntu-23.10-live-server-amd64.iso) или выполните команду:
```shell
wget https://releases.ubuntu.com/23.10.1/ubuntu-23.10-live-server-amd64.iso -O ubuntu-23.10-live-server-amd64.iso
```
Эта команда сохранит образ Ubuntu 23.10 в текущую директорию под именем `ubuntu-23.10-live-server-amd64.iso`.
**Установка QEMU**
Ubuntu
Для установки QEMU и сопутствующих инструментов выполните команду:
```shell
sudo apt install qemu-kvm qemu virt-manager virt-viewer libvirt-daemon-system qemu-utils
```
Windows
Загрузите установщик QEMU с [официального сайта](https://www.qemu.org/download/#windows) и установите, оставив все параметры по умолчанию. После установки запустите `cmd` от имени администратора и перейдите в директорию, где установлен QEMU:
```shell
cd "C:\Program Files\qemu"
```
MacOS
Установите QEMU через Homebrew:
```shell
brew install qemu
```
### Создание виртуального диска
Создайте виртуальный диск с форматом qcow2 и размером 10 ГБ:
```shell
qemu-img create -f qcow2 tw.qcow2 10G
```
### Запуск виртуальной машины с ISO-образом
Теперь, когда диск готов, запустим виртуальную машину с использованием скачанного ISO-образа.
Используйте следующую команду для запуска виртуальной машины:
Ubuntu
```shell
qemu-system-x86_64 -enable-kvm -m 1024 -nic user,model=virtio -drive file=tw.qcow2,media=disk,if=virtio -cdrom ubuntu-23.10-live-server-amd64.iso
```
Windows
```shell
.\qemu-system-x86_64.exe -m 1024 -nic user,model=virtio -drive file=tw.qcow2,media=disk,if=virtio -cdrom C:\Users\User\Downloads\ubuntu-23.10-live-server-amd64.iso
```
MacOS
```shell
qemu-system-x86_64 -m 1024 -nic user,model=virtio -drive file=tw.qcow2,media=disk,if=virtio -cdrom /path/to/ubuntu-23.10-live-server-amd64.iso
```
Описание параметров:
- `-enable-kvm` — активирует аппаратное ускорение с помощью KVM для повышения производительности (доступно на Linux).
- `-m 1024` — выделяет 1 ГБ оперативной памяти для виртуальной машины.
- `-nic user,model=virtio` — добавляет виртуальный сетевой интерфейс с моделью `virtio`.
- `-drive file=tw.qcow2,media=disk,if=virtio` — подключает ранее созданный диск `tw.qcow2` с интерфейсом `virtio`.
- `-cdrom` — указывает путь до ISO-образа Ubuntu для установки системы.
В процессе установки оставьте параметры по умолчанию, но снимите галочку с опции «Set up this disk as an LVM group» при настройке диска. Это необходимо, поскольку при использовании LVM ресайз файловой системы будет невозможен при дальнейшем использовании образа в облаке. Когда установщик предложит выбор дополнительных компонентов, обязательно установите OpenSSH Server.
### Завершающие настройки после установки
После установки системы для обеспечения работы некоторых функций панели управления установите `qemu-guest-agent`:
```shell
sudo apt install qemu-guest-agent
sudo systemctl enable qemu-guest-agent.service
```
Также рекомендуем отключить файл подкачки. Для этого выполните команду:
```shell
swapoff -a
```
Все рекомендации по подготовке образа для создания облачного сервера доступны [тут](https://timeweb.cloud/docs/unix-guides/podgotovka-obraza-dlya-sozdaniya-oblachnogo-servera).
### Использование образа для работы в облаке
После установки всех необходимых пакетов можно завершить работу виртуальной машины и загрузить созданный образ `tw.qcow2` в панель управления.
1. Перейдите на вкладку «[Образы](https://timeweb.cloud/my/images)», выберите «Загрузка образа», затем «С компьютера» и загрузите файл `tw.qcow2`.

2. После завершения загрузки создайте облачный сервер, выбрав ранее загруженный образ в разделе «Мои образы».

3. Запустите создание сервера и дождитесь его завершения.
После создания сервера можно будет подключиться к нему с использованием данных доступа, заданных при установке.
## Создание образа виртуальной машины при помощи VirtualBox
Рассмотрим, как создать образ виртуальной машины с помощью VirtualBox на примере Ubuntu Server 23.10.
### Подготовка
Скачайте ISO-образ Ubuntu Server 23.10. Сделать это можно с помощью браузера по [ссылке](https://releases.ubuntu.com/23.10.1/ubuntu-23.10-live-server-amd64.iso) или выполните команду:
```shell
wget https://releases.ubuntu.com/23.10.1/ubuntu-23.10-live-server-amd64.iso -O ubuntu-23.10-live-server-amd64.iso
```
Эта команда сохранит образ Ubuntu 23.10 в текущую директорию под именем `ubuntu-23.10-live-server-amd64.iso`.
### Создание виртуальной машины
1. Откройте VirtualBox и нажмите кнопку «Создать» для создания новой виртуальной машины.
2. Введите имя виртуальной машины, укажите путь до скачанного ранее iso-файла и выберите папку, в которой будет создана виртуальная машина.

_Создание виртуальной машины в интерфейсе [VirtualBox](https://www.virtualbox.org/)_
3. Нажмите «Далее» и выберите объем оперативной памяти. Рекомендуется выделить 1024 МБ для комфортной работы.
4. На этапе создания виртуального диска выберите «Создать новый виртуальный диск», укажите желаемый размер (в нашем случае стоит указать 10 ГБ) и нажмите «Далее».

_Создание виртуальной машины в интерфейсе [VirtualBox](https://www.virtualbox.org/)_
5. Проверьте все данные и нажмите «Готово».
### Запуск виртуальной машины и установка Ubuntu
1. Запустите виртуальную машину, нажав «Запустить».
2. Начнется установка Ubuntu Server. Следуйте стандартным шагам установщика.
3. На этапе выбора диска снимите галочку с опции «Set up this disk as an LVM group». Это важно, так как использование LVM делает невозможным ресайз файловой системы при дальнейшем использовании образа в облаке.
4. Когда установщик предложит выбрать дополнительные компоненты, установите OpenSSH Server для последующего подключения по SSH.
### Настройки после установки
После установки системы выполните следующие команды для обеспечения работы некоторых функций панели управления:
```shell
sudo apt install qemu-guest-agent
sudo systemctl enable qemu-guest-agent.service
```
Также рекомендуем отключить файл подкачки. Для этого выполните команду:
```shell
swapoff -a
```
Все рекомендации по подготовке образа для создания облачного сервера доступны [тут](https://timeweb.cloud/docs/unix-guides/podgotovka-obraza-dlya-sozdaniya-oblachnogo-servera).
### Использование образа для создания сервера
1. Завершите работу виртуальной машины.
2. Чтобы найти файл образа, откройте настройки виртуальной машины в VirtualBox и перейдите в раздел «Носители». Путь к образу указан в информации о диске в графе «Расположение».

_Настройки виртуальной машины в интерфейсе [VirtualBox](https://www.virtualbox.org/)_
3. В панели управления облака перейдите на вкладку «[Образы](https://timeweb.cloud/my/images)», выберите «Загрузка образа», затем «С компьютера» и загрузите файл образа `.vdi`.

4. После завершения загрузки создайте облачный сервер, выбрав ранее загруженный образ в разделе «Мои образы».

5. Запустите создание сервера и дождитесь его завершения.
После создания сервера можно будет подключиться к нему, используя данные, заданные при установке.
# Подготовка образа для создания облачного сервера
Source: https://timeweb.cloud/docs/unix-guides/podgotovka-obraza-dlya-sozdaniya-oblachnogo-servera?utm_source=llms_txt&utm_medium=ai
Перед тем, как создать облачный сервер из образа, образ необходимо подготовить — это нужно для того, чтобы установка была выполнена корректно и полноценно работал функционал панели управления.
Ниже рассмотрим, какие проверки и настройки потребуется выполнить для успешного создания сервера.
В нашем [репозитории на GitHub](https://github.com/timeweb-cloud/image-build-examples) вы можете найти примеры конфигов сборочной системы Packer для автоматической сборки образов ВМ.
## Основные настройки
### Таблица разделов
Проверьте разбивку разделов на диске. Мы рекомендуем использовать для разбивки MBR или GPT; они обе поддерживаются большинством Linux-дистрибутивов командами `fdisk`, `gdisk` и аналогичными.
```shell
gdisk -l /dev/vda
```
Пример вывода:
```shell
GPT fdisk (gdisk) version 1.0.5
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
```
Если используется иная разметка, потребуется создать образ заново, с корректной разметкой.
### Разметка диска
Если на диске размечен всего один раздел (корневой) и он имеет файловую систему ext3 или ext4, то при установке сервера из образа будет выполнен ресайз файловой системы. ФС будет расширена до заданного в конфигурации сервера размера диска.
Например, если размер блочного устройства в образе 10 ГБ, то при установке сервера с диском 15 ГБ блочное устройство и ФС будут расширены до 15 ГБ.
Ресайз файловой системы не будет выполнен, если задействован LVM (Logical Volume Manager).
### Загрузчик ОС
Мы используем для запуска виртуальных машин SeaBIOS, поэтому в ОС должен быть установлен обычный загрузчик для BIOS. Если установлен UEFI-загрузчик, его необходимо удалить и установить загрузчик для BIOS.
Если вы используете GRUB2, cмотрите инструкции по установке и настройке [здесь](https://wiki.archlinux.org/title/GRUB_\(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9\)).
### Настройка /etc/fstab
Для стабильного запуска системы в файле `/etc/fstab` для корневого раздела указывайте монтирование по UUID, например:
```shell
UUID=f19002a1-6e7a-45ac-91cd-24b7cc0e4cd9 / ext4 defaults 0 1
```
Посмотреть UUID раздела можно, например, командой:
```shell
blkid
```
Пример вывода:
```shell
/dev/vda1: UUID="f19002a1-6e7a-45ac-91cd-24b7cc0e4cd9" TYPE="ext4" PARTUUID="f7a1fae1-01"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
```
### Наличие qemu-guest-agent
Убедитесь, что установлен и запущен сервис `qemu-guest-agent` — он необходим для выполнения определенных операций из панели, например, для создания бэкапов.
- Проверьте статус.
Systemd:
```shell
systemctl status qemu-guest-agent.service
```
OpenRC и init.d:
```shell
/etc/init.d/qemu-guest-agent status
```
или:
```shell
service qemu-guest-agent status
```
- Установите агент, если он отсутствует:
Debian/Ubuntu:
```shell
apt-get install qemu-guest-agent
```
CentOS / RHEL:
```shell
yum install qemu-guest-agent
```
Alpine Linux:
```shell
apk add qemu-guest-agent
```
- Добавьте в автозагрузку:
Systemd:
```shell
systemctl enable qemu-guest-agent.service
```
init.d:
```shell
chkconfig --add qemu-guest-agent
```
OpenRC:
```shell
rc-update add qemu-guest-agent
```
> [!NOTE]
> Для Windows сервис можно установить с помощью специального ISO-образа, который можно [скачать здесь](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D). Также с его помощью можно установить virtio-драйверы, необходимые для поддержки виртуализированных устройств.
Данных настроек достаточно для создания облачного сервера из образа. Остальные настройки рекомендуется выполнить для более удобной работы с сервером.
## Дополнительные настройки
### Установка Zabbix
Для сбора статистики с серверов мы используем агент Zabbix. Чтобы отображать статистику в панели, рекомендуем установить Zabbix с помощью скрипта командой:
```shell
wget -O - http://zabbix.repo.timeweb.ru/zabbix-install.sh | bash
```
### Сетевые настройки
После запуска сервера необходимо обеспечить его доступность по сети. Для этого потребуется настроить DHCP-клиент для автоматического получения IP- и IPv6-адресов.
В большинстве систем клиент DHCP установлен по умолчанию, мы рекомендуем использовать утилиту dhclient с таким файлом конфигурации:
```shell
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
option dhcp6.next-hop code 242 = ip6-address;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers, dhcp6.next-hop;
timeout 300;
```
### Доступ по SSH
Так как для доступа к серверу, как правило, используется протокол SSH, проверьте, что он установлен и запускается при загрузке сервера.
- Проверьте статус:
Systemd:
```shell
systemctl status ssh.service
```
OpenRC и init.d:
```shell
/etc/init.d/ssh status
```
или:
```shell
service ssh status
```
- Установите SSH, если он отсутствует:
Debian/Ubuntu:
```shell
apt-get install openssh-server
```
CentOS / RHEL:
```shell
yum -y install openssh-server openssh-clients
```
Alpine Linux:
```shell
apk add openssh
```
- Добавьте в автозагрузку:
Systemd:
```shell
systemctl enable ssh.service
```
Init.d:
```shell
chkconfig --add ssh
```
OpenRC:
```shell
rc-update add sshd
```
- Также убедитесь, что в используемом файрволе открыт доступ к порту SSH (по умолчанию — 22).
### Отключение swap
Рекомендуем отключить файл подкачки.
- Проверьте информацию о включенном swap:
```shell
swapon --show
```
Пример вывода:
```shell
NAME TYPE SIZE USED PRIO
/swap.img file 685M 0B -2
```
- Отключите swap:
```shell
swapoff -a
```
# Создание и развертывание образа диска с помощью утилиты dd
Source: https://timeweb.cloud/docs/unix-guides/creating-images-with-dd?utm_source=llms_txt&utm_medium=ai
В статье рассмотрим, как создать образ сервера Timeweb Cloud и развернуть его на другом сервере Timeweb Cloud с помощью утилиты `dd`.
Инструкция будет полезна для серверов в локациях, которые в данный момент не поддерживают работу с [образами](https://timeweb.cloud/docs/cloud-servers/manage-servers/server-images).
Вам понадобятся:
- «Отдающий» сервер, с которого будем снимать образ.
- Новый сервер — с таким же размером диска. ОС и ПО на сервере могут стоять любые.
- Наличие SSH на каждом из серверов.
Последовательность действий:
1. Загрузите новый сервер с диска восстановления (вкладка «Доступ» на странице сервера → изменить режим загрузки).
2. Выполните команды ниже, чтобы в дальнейшем можно было подключаться к серверу по SSH:
```shell
systemctl stop iptables
passwd root
```
3. Зайдите в панель управления с отдающим сервером и создайте бэкап диска (вкладка «Бэкапы» на странице сервера).
4. Смонтируйте бэкап в панели управления.

5. Подключитесь к отдающему серверу по SSH и выполните команду ниже, чтобы определить имя нового добавленного устройства:
```shell
dmesg
```
Далее в инструкции мы будем использовать имя устройства `/dev/vdc`.
6. Убедитесь, что размеры дисков на серверах идентичны, выполнив на каждом сервере команду:
```shell
fdisk -l
```
7. Если размеры совпадают, выполните на отдающем сервере команду:
```shell
ssh root@IP_нового_сервера "cat > /dev/vda" < /dev/vdc
```
Также можно использовать команду ниже, чтобы отобразить прогресс-бар, но это замедлит процесс копирования:
```shell
dd if=/dev/vdc | pv -s [размер образа] | ssh root@IP_нового_сервера "cat > /dev/vda"
```
8. После завершения процесса проверьте, что все скопировалось без повреждений. Для этого выполните команду ниже, указав корректное имя диска:
- - В команде на отдающем сервере укажите диск, копию которого создавали:
```shell
sha256sum /dev/vdc
```
- - На новом сервере — диск, на который копировали:
```shell
sha256sum /dev/vda
```
9. Сравните полученные хеши. Если они совпадают, копирование было выполнено успешно.
Бэкап на отдающем сервере можно отмонтировать и удалить. Новый сервер — загрузить в обычном режиме.
# Установка Minecraft на Ubuntu
Source: https://timeweb.cloud/docs/unix-guides/ustanovka-minecraft-na-ubuntu?utm_source=llms_txt&utm_medium=ai
В этой статье рассмотрим, как выполнить установку и запуск Minecraft на сервере с Ubuntu.
> [!NOTE]
> Вы также можете [установить Minecraft автоматически](https://timeweb.cloud/docs/unix-guides/zapusk-servera-minecraft), выбрав готовую сборку в панели управления.
## Создание сервера и выбор конфигурации
1. [Зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если его еще нет.
2. В панели управления перейдите в раздел [«Облачные серверы»](https://timeweb.cloud/my/servers).
3. Кликните «Создать» или «Добавить».
4. Выберите операционную систему Ubuntu.
5. Выберите регион с минимальным пингом.
6. Выберите подходящую конфигурацию сервера. Учитывайте количество игроков в режиме онлайн: при одновременной игре от 15-25 пользователей свободной оперативной памяти у сервера должно быть не менее 1,5 ГБ, а места на жестком диске — не менее 15 ГБ.
7. Настройте остальные параметры в форме заказа сервера (их можно оставить без изменений).
8. Нажмите «Заказать».
Мы рассмотрим установку Minecraft на облачный сервер с операционной системой Ubuntu, 2 процессорными ядрами и 4 ГБ оперативной памяти.
## Подготовка сервера
В первую очередь мы установим утилиту `screen`, чтобы запускать процессы в фоновом режиме и иметь возможность дальше пользоваться терминалом. Мы также создадим пользователя без доступа к `root`, чтобы безопасно запускать сервер от его имени.
### Обновление и установка пакетов
Обновите список пакетов:
```shell
sudo apt update && sudo apt upgrade -y
```
Установите необходимые инструменты:
```shell
sudo apt install net-tools screen -y
```
Для работы Minecraft необходима Java, поэтому установите Java Development Kit:
```shell
sudo apt install openjdk-21-jdk
```
### Создание пользователя
Командой ниже мы создадим пользователя `minecraft` (вы можете задать любое имя по своему усмотрению).
```shell
sudo useradd -r -U -d /usr/local/minecraft/server/ -s /sbin/nologin minecraft
```
Аргумент `-s` задает оболочку входа для нового пользователя. Указывая `/sbin/nologin`, мы запрещаем пользователю интерактивного входа на сервер. Это гарантирует, что пользователь сможет только запускать сервера Minecraft, и снизит риски атак.
### Создание директории
Создайте директории для размещения файлов Minecraft:
```shell
sudo mkdir -p /usr/local/minecraft/server/Java
```
Опция `-p` позволяет создать все недостающие каталоги.
### Настройка прав
Сделайте владельцем директории пользователя и группу `minecraft`:
```shell
sudo chown -R minecraft: /usr/local/minecraft/server/
```
Опция `-R` назначает права рекурсивно ко всем файлам и поддиректориям.
### Скачивание сервера Minecraft
Переключитесь на пользоватeля `minecraft`:
```shell
sudo su - minecraft -s /bin/bash
```
Перейдите в директорию для файлов Minecraft:
```shell
cd /usr/local/minecraft/server/Java
```
Скачайте файл `.jar` с официального сайта:
```shell
wget https://piston-data.mojang.com/v1/objects/4707d00eb834b446575d89a61a11b5d548d8c001/server.jar
```
Найти ссылку на актуальную версию можно на сайте [minecraft.net](https://www.minecraft.net/ru-ru/download/server).
### Запуск сервера
Запустите сервер командой:
```shell
java -Xmx1024M -Xms1024M -jar server.jar nogui
```
Эта команда выделяет 1 ГБ памяти для сервера (`-Xmx` — максимальный объем, `-Xms` — начальное выделение). Опция `nogui` отключает графический интерфейс, чтобы использовать меньше ресурсов.
При первом запуске вы можете столкнуться с ошибкой, связанной с лицензионным соглашением (EULA):

Чтобы принять лицензионное соглашение, откройте файл `eula.txt` в редакторе:
```shell
nano eula.txt
```
Замените строку `eula=false` на `eula=true`, после чего сохраните изменения и закройте файл.
Теперь можно снова запустить сервер. Используйте утилиту `screen`, чтобы выполнить запуск в фонов режиме:
```shell
screen -S mc_Java_server -dm java -Xmx1024M -Xms1024M -jar server.jar nogui
```
Команда создаст сессию с именем `mc_Java_server`. Нажав **CTRL + a**, а затем **d**, вы сможете отключиться от текущего сеанса `screen`, при этом сервер Minecraft продолжить работать. Чтобы вернуться к запущенному процессу, выполните:
```shell
screen -r
```
Готово! Ваш Minecraft-сервер запущен и доступен по IP-адресу сервера и порту 25565.
## Проверка сервера
Чтобы подключиться к серверу, запустите клиент Minecraft и добавьте новый сервер и его адрес в формате:
```shell
:25565
```
Например:
```shell
94.228.123.76:25565
```

_Добавление сервера в интерфейсе клиента [Minecraft](https://www.minecraft.net/)_
После установки соединения вы можете присоединиться к серверу.

_Отображение сервера в интерфейсе клиента [Minecraft](https://www.minecraft.net/)_
Вы можете проверить статус своего Minecraft-сервера с помощью онлайн-инструментов, таких как [mcsrvstat.us](https://mcsrvstat.us). Так можно убедиться, что сервер активен, а также увидеть дополнительные детали, например, версию Minecraft или количество игроков.

_Просмотр параметров сервера на сайте [mcsrvstat.us](https://mcsrvstat.us)_
# Установка Bareos
Source: https://timeweb.cloud/docs/unix-guides/bareos-install?utm_source=llms_txt&utm_medium=ai
Bareos — это система резервного копирования с открытым исходным кодом, позволяющая создавать, управлять и восстанавливать бэкапы для серверов. В этой статье рассмотрим процесс установки и настройки Bareos для автоматизированного резервного копирования данных как на выделенном, так и на облачном сервере, используя S3-хранилище для размещения бэкапов.
Для начала работы [зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если у вас его еще нет. Вы получите доступ [в панель управления](https://timeweb.cloud/my/), где сможете создать необходимые ресурсы: сервер и бакет S3.
## Создание ресурсов
Для начала [создадим облачный сервер](https://timeweb.cloud/docs/cloud-servers/manage-servers/create-server), на котором будет работать Bareos.
Так как на сервере будут работать несколько ресурсоемких служб, включая базу данных и Bareos Storage Director, оптимальная конфигурация будет следующей:
- **vCPU**: 2
- **RAM**: 4 ГБ
- **Диск**: 50 ГБ SSD
- **ОС**: Ubuntu 22.04 Jammy
Однако вы можете выбрать другую конфигурацию в зависимости от ваших потребностей, объема данных и частоты резервного копирования.
Если вы настраиваете резервное копирование для выделенного сервера, ему потребуется внешний IP-адрес, так как передача данных будет выполняться через интернет.
Если же Bareos будет использоваться для создания бэкапов облачных серверов, можно добавить сервер в существующую локальную сеть и во всей инструкции использовать его локальный IP-адрес.
Далее [создадим S3-бакет](https://timeweb.cloud/docs/s3-storage/manage-storage/create-bucket). Для наших целей идеально подойдет холодный класс хранилища. Учтите, что даже если используется инкрементное резервное копирование, в хранилище должен помещаться как минимум один полный бэкап всего сервера, а также ежедневные изменения, умноженные на количество дней размещения данных.
## Настройка сервера
Bareos использует PostgreSQL для размещения конфигурации и информации о бэкапах. Чтобы упростить установку, мы воспользуемся Docker Compose. В результате установим саму СУБД и Adminer — веб-интерфейс для работы с базой.
### Создание СУБД
Сначала установим Docker и Docker Compose:
```shell
apt install -y docker.io docker-compose
```
Создадим манифест `docker-compose.yml`:
```yml
version: '3.8'
networks:
bareos_network:
driver: bridge
services:
postgres:
image: public.ecr.aws/docker/library/postgres:14-alpine
container_name: postgres_db
restart: unless-stopped
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: <ваш_пароль_администратора_бд>
networks:
- bareos_network
ports:
- "127.0.0.1:5432:5432"
volumes:
- ~/bareos_database:/var/lib/postgresql/data
adminer:
image: public.ecr.aws/docker/library/adminer:4
container_name: adminer_ui
restart: unless-stopped
environment:
ADMINER_DEFAULT_SERVER: postgres_db
ADMINER_DEFAULT_DB: bareos
ADMINER_DEFAULT_USER: bareos
ADMINER_DEFAULT_DBTYPE: postgres
networks:
- bareos_network
ports:
- "8080:8080"
depends_on:
- postgres
volumes:
postgres_data:
driver: local
```
Укажите вместо `<ваш_пароль_администратора_бд>` пароль администратора базы данных.
Выполните команду для запуска контейнеров:
```shell
docker-compose up -d
```
После загрузки образов и запуска контейнеров убедитесь, что они работают:
```shell
docker ps
```
Вы должны увидеть примерно такой вывод:
```shell
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6fe992e70b4 public.ecr.aws/docker/library/adminer:4 "entrypoint.sh php -…" 1 minutes ago Up 1 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp adminer_ui
fe683271e380 public.ecr.aws/docker/library/postgres:14-alpine "docker-entrypoint.s…" 1 minutes ago Up 1 minutes 127.0.0.1:5432->5432/tcp postgres_db
```
### Установка Bareos
Добавим репозитории Bareos с помощью официального скрипта:
```shell
wget -qO- https://download.bareos.org/current/xUbuntu_22.04/add_bareos_repositories.sh | sh
```
Обновим список пакетов и установим необходимые компоненты:
```shell
apt update && apt install -y bareos bareos-webui bareos-storage-droplet
```
Во время установки появится запрос на настройку Postfix. Выберите `No configuration`.

_Запрос на настройку Postfix в установщике [Bareos](https://www.bareos.com/)_
Затем будет предложено настроить подключение к базе данных. Выберите `No`.

_Запрос на настройку базы данных в установщике [Bareos](https://www.bareos.com/)_
### Настройка подключения к базе данных
Запустим инструмент для настройки подключения к базе данных:
```shell
dpkg-reconfigure bareos-database-common
```
В первом окне выберите `Yes`.

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_
В качестве типа подключения укажите `TCP/IP`.

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_
Так как база данных запущена на `localhost`, выберите его.

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_
Если вы не меняли порт в `docker-compose.yml`, укажите `5432`.

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_
В качестве метода аутентификации администратора выберите `password`.

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_
Для пользователя базы данных также выберите `password`.

_Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_
Bareos использует базу данных с именем `bareos` и пользователя `bareos`.
Создадим базу данных.

_Создание базы данных в установщике [Bareos](https://www.bareos.com/)_
Затем создадим пользователя.

_Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_
Установим пароль пользователя.

_Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_
Подтвердим пароль.

_Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_
Теперь необходимо ввести данные администратора PostgreSQL, которые мы задавали в `docker-compose.yml`.
Имя пользователя: `admin`.

_Настройка базы данных в установщике [Bareos](https://www.bareos.com/)_
Введите пароль администратора PostgreSQL.

_Настройка базы данных в установщике [Bareos](https://www.bareos.com/)_
> [!NOTE]
> Пароль администратора потребуется ввести несколько раз в процессе настройки.
Чтобы убедиться, что база создана и работает, откройте браузер и перейдите по адресу `http://:8080`.
Залогиньтесь, используя имя пользователя `bareos` и ранее заданный пароль.

_Подключение к базе данных в интерфейсе [Adminer](https://www.adminer.org/)_
После авторизации должны отобразиться таблицы базы данных Bareos.

_Просмотр базы данных в интерфейсе [Adminer](https://www.adminer.org/)_
Теперь запустим службы:
```shell
systemctl enable --now bareos-director.service bareos-storage.service
```
Проверим, что службы работают, подключены к базе данных и не содержат ошибок:
```shell
bareos-dir -t -d100
```
### Настройка веб-интерфейса Bareos WebUI
Для работы веб-интерфейса Bareos необходимо включить `php8-fpm` в Apache2.
Включите модули Apache для работы с PHP-FPM:
```shell
a2enmod proxy_fcgi setenvif
```
Активируйте конфигурацию PHP 8.1 FPM:
```shell
a2enconf php8.1-fpm
```
Перезагрузите Apache, чтобы изменения вступили в силу:
```shell
systemctl reload apache2
```
В Ubuntu AppArmor может блокировать доступ `php-fpm` к файлам веб-интерфейса. Разрешим необходимые пути:
```shell
cat > /etc/apparmor.d/local/php-fpm <<<"# Site-specific additions and overrides for 'php-fpm'
# bareos-webui
/usr/share/bareos-webui/** r,
/etc/bareos-webui/directors.ini r,
/etc/bareos-webui/configuration.ini r,
/var/lib/php8/sessions/** w,
"
```
Применим новые политики безопасности:
```shell
systemctl reload apparmor.service
```
Теперь необходимо создать пользователя `bareos`. Для его создания, воспользуемся утилитой `bconsole`:
```shell
bconsole
```
Создадим учетную запись `admin` для веб-интерфейса:
```shell
configure add console name=admin password=<пароль_пользователя> profile=webui-admin tlsenable=false
```
Вместо `<пароль_пользователя>` укажите желаемый пароль.
Применим изменения:
```shell
reload
```
Выйти из `bconsole` можно сочетанием клавиш `Ctrl + D`.
Теперь можно открыть браузер и перейти по адресу `http:///bareos-webui`. Войти в систему можно, используя ранее созданные учетные данные.

_Окно логина в веб-интерфейс [Bareos](https://www.bareos.com/)_
### Подключение S3-хранилища к Bareos Storage Director
Создадим файл с параметрами подключения:
```shell
nano /etc/bareos/bareos-sd.d/device/droplet/timeweb-ru-1.profile
```
Добавим в него следующую конфигурацию:
```shell
host = s3.twcstorage.ru
use_https = false
access_key =
secret_key =
pricing_dir = ""
backend = s3
aws_auth_sign_version = 2
aws_region = ru-1
```
Данные для заполнения (`` и ``) можно найти в информации о бакете в панели управления.

### Конфигурация бэкапного устройства
Создадим файл:
```shell
nano /etc/bareos/bareos-sd.d/device/S3_ObjectStorage.conf
```
Запишем в него информацию об устройстве. Укажите имя своего бакета в Device Options:
```shell
Device {
Name = S3_ObjectStorage
Media Type = S3_Object1
Archive Device = S3 Object Storage
Device Type = droplet
Device Options = "profile=/etc/bareos/bareos-sd.d/device/droplet/timeweb-ru-1.profile,bucket=<имя_бакета>,chunksize=100M"
Label Media = yes
Random Access = yes
Automatic Mount = yes
Removable Media = no
Always Open = no
Maximum Concurrent Jobs = 1
}
```
Дадим пользователю Bareos доступ к этим файлам:
```shell
chown -R bareos:bareos /etc/bareos/bareos-sd.d/device
```
Bareos может не подключаться к хранилищу, если включен TLS. Отключим его, добавив `TlsEnable=no` и `TlsRequire=no` в следующие файлы.
Откроем файл `bareos-sd.conf`:
```shell
nano /etc/bareos/bareos-sd.d/storage/bareos-sd.conf
```
Изменим содержимое:
```shell
Storage {
Name = bareos-sd
Maximum Concurrent Jobs = 20
TlsEnable = no
TlsRequire = no
}
```
Откроем файл `bareos-dir.conf`:
```shell
nano /etc/bareos/bareos-sd.d/director/bareos-dir.conf
```
Изменим содержимое:
```shell
Director {
Name = bareos-dir
TlsEnable = no
TlsRequire = no
Password = "" # Этот пароль генерируется при установке и не требует изменений
Description = "Director, who is permitted to contact this storage daemon."
}
```
Запомните или сохраните пароль, указанный в `Password` из `bareos-dir.conf`, он понадобится на следующем шаге.
### Подключение Bareos Storage Daemon к Bareos Director
В `bconsole` подключим `bareos-storage-daemon` к `bareos-director`, используя ранее сохраненный пароль:
```shell
bconsole
```
Выполним команду:
```shell
configure add storage name=S3_Object Address= Password= Device=S3_ObjectStorage MediaType=S3_Object1
```
В команде укажите `` и ``.
Примените конфигурацию:
```shell
reload
```
Для применения изменений перезапустим службы:
```
systemctl restart bareos-storage.service && systemctl reload bareos-director.service
```
Обратите внимание, что Bareos читает файлы конфигурации только в ASCII-кодировке. Если вы редактировали файлы способом, отличным от указанного в инструкции, может возникнуть ошибка. Чтобы это исправить, необходимо изменить кодировку файлов. Сделать это можно при помощи команды:
```shell
iconv -f utf-8 -t ascii//TRANSLIT /path/to/my/file.conf -o /path/to/my/file.conf
```
## Настройка бэкапов
### Создание пользователя для соединения
Сначала необходимо создать пользователя, через которого основной сервер будет соединяться с сервером бэкапов.
Войдем в bconsole:
```shell
bconsole
```
Выполним команду:
```shell
configure add client name=BackupUser address= password= TlsEnable=no TlsRequire=no
```
В команде укажите два параметра:
- `` — внешний IP-адрес сервера, для которого будут создаваться бэкапы.
- `` — пароль для подключения. Его нужно придумать.
Примените изменения:
```shell
reload
```
После выполнения команды в консоли появится подобный вывод:

Это сформированный конфигурационный файл с паролем пользователя. Сохраните значение из поля `Password`, оно понадобится для подключения сервера. Если пароль будет утерян, его можно найти с помощью команды:
```shell
grep -r Password /etc/bareos/bareos-dir-export/client/
```
### Настройка пулов и вольюмов
Для размещения данных Bareos использует `pool` и `volume`:
- **Pool** — хранилище резервных копий, ограниченное размером S3-бакета.
- **Volume** — единица хранения данных, изначально предназначенная для сменных носителей, таких как ленты.
В нашем случае:
- **Размер volume (``)** — должен быть равен полному объему информации сервера, который мы собираемся бэкапить.
- **Количество volumes (``)** — определяет, сколько копий данных должно быть доступно.
- **VolumeRetention (``)** — время размещения резервной копии в днях, после которого она будет помечена для перезаписи.
Данные из `volume` не удаляются, а только помечаются как стертые и подготовленные к перезаписи.
### Настройка пула для полных бэкапов
Откроем файл конфигурации:
```shell
nano /etc/bareos/bareos-dir.d/pool/Full.conf
```
Отредактируйте, приведя к виду:
```shell
Pool {
Name = Full
Pool Type = Backup
Recycle = yes # Bareos может автоматически перераспределять объемы
AutoPrune = yes # Удалять устаревшие объемы
Volume Retention = days # Срок размещения полных бэкапов
Maximum Volume Bytes = G # Максимальный размер volume
Maximum Volumes = # Максимальное количество volume в пуле
Label Format = "Full-" # Метка volume, например "Full-001"
}
```
### Настройка пула для инкрементальных бэкапов
Откроем файл:
```shell
nano /etc/bareos/bareos-dir.d/pool/Incremental.conf
```
Приведем к виду:
```shell
Pool {
Name = Incremental
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = days
Maximum Volume Bytes = G
Maximum Volumes =
Label Format = "Incremental-"
}
```
### Создание FileSet
FileSet — это конфигурационный файл, в котором указывается, какие именно файлы или базы данных необходимо включить в бэкап, а также какие параметры будут использоваться при их копировании (например, уровень сжатия или метод проверки целостности данных).
#### FileSet для резервного копирования файлов в /home
Этот файлсет используется для бэкапа пользовательских данных, размещенных в `/home`.
Создадим файл:
```shell
nano /etc/bareos/bareos-dir.d/fileset/HomeFileset.conf
```
Добавим следующий конфиг:
```shell
FileSet {
Name = "HomeFileset"
Include {
Options {
Signature = MD5
Compression = LZ4
}
File = "/home"
}
}
```
Здесь:
- `Signature = MD5` — включает проверку целостности данных.
- `Compression = LZ4` — используется быстрый алгоритм сжатия, который снижает нагрузку на CPU.
- `File = "/home"` — указывает, что резервное копирование будет выполняться для `/home`.
#### FileSet для резервного копирования баз данных MySQL
Для бэкапа MySQL необходимо использовать специальный плагин, позволяющий корректно копировать базы без прерывания работы сервера.
Создадим файл:
```shell
nano /etc/bareos/bareos-dir.d/fileset/MysqlFileset.conf
```
Добавим конфигурацию:
```shell
FileSet {
Name = "MysqlFileset"
Include {
Options {
Signature = MD5
Compression = LZ4
}
Plugin = "python3"
":module_name=bareos-fd-percona-xtrabackup"
":mycnf=/root/.my.cnf"
}
}
```
Здесь:
- `Plugin = "python3"` — указывает, что для создания бэкапа будет использоваться плагин на Python.
- `":module_name=bareos-fd-percona-xtrabackup"` — использует Percona XtraBackup для создания бэкапа без остановки MySQL.
- `":mycnf=/root/.my.cnf"` — указывает путь к файлу конфигурации MySQL, содержащему учетные данные.
#### FileSet для резервного копирования баз данных PostgreSQL
Для PostgreSQL также используется специальный плагин, позволяющий создавать бэкапы без прерывания работы сервера.
Создадим файл:
```shell
nano /etc/bareos/bareos-dir.d/fileset/PsqlFileset.conf
```
Добавим:
```shell
FileSet {
Name = "PostgresUserDBSet"
Include {
Options {
Signature = MD5
Compression = LZ4
}
Plugin = "python3"
":module_name=bareos-fd-postgresql"
":db_host=/run/postgresql/"
":wal_archive_dir=/var/lib/pgsql/wal_archive/"
":db_user="
":db_password="
}
}
```
Замените:
- `` — на имя пользователя PostgreSQL.
- `` — на пароль от базы данных.
Параметры:
- `":db_host=/run/postgresql/"` — указывает, что PostgreSQL работает через Unix-сокеты.
- `":wal_archive_dir=/var/lib/pgsql/wal_archive/"` — включает копирование WAL-журналов.
### Установка прав для пользователя
Чтобы Bareos мог прочитать созданные файлы, дадим пользователю `bareos` необходимые права:
```shell
chown -R bareos:bareos /etc/bareos/bareos-dir.d/fileset
```
И обновить конфигурацию сервера `bareos` чтобы прочитать новые файлсеты:
```shell
systemctl reload bareos-director.service
```
### Создание расписания бэкапов
Bareos позволяет задать расписание резервного копирования через параметр `Schedule`.
Запустим `bconsole`:
```shell
bconsole
```
Создадим правило:
```shell
configure add schedule name=BackupSchedule Run="Level=Full 3/3 at 00:00" Run="Level=Incremental daily at 01:00"
```
Применим изменение:
```shell
reload
```
Мы задали расписание:
- Полный бэкап (`Level=Full`) выполняется раз в 3 дня в 00:00.
- Инкрементальный бэкап (`Level=Incremental`) выполняется ежедневно в 01:00.
### Настройка заданий резервного копирования
Bareos использует два типа конфигурационных файлов для бэкапов:
- **JobDefs** — содержит общие настройки, которые могут использоваться в нескольких заданиях.
- **Job** — конкретное задание резервного копирования с указанием клиентских данных.
#### Создание общих правил для заданий (JobDefs)
Открываем `bconsole`:
```shell
bconsole
```
Добавляем правило:
```shell
configure add jobdefs name=DefaultBackupJob Storage=S3_Object Type=Backup Level=Incremental Pool=Incremental FullBackupPool=Full IncrementalBackupPool=Incremental Schedule=BackupSchedule Messages=Standard Priority=10
```
Применим изменение:
```shell
reload
```
Описание параметров:
- `Storage=S3_Object` — указывает, что бэкапы будут размещаться в S3.
- `Level=Incremental` — по умолчанию бэкап выполняется как инкрементальный.
- `Pool=Incremental` — используется пул для инкрементальных копий.
- `FullBackupPool=Full` — полные копии отправляются в пул Full.
- `Schedule=BackupSchedule` — задает расписание.
- `Messages=Standard` — формат логирования.
#### Создание задания для резервного копирования /home
Добавляем задачу:
```shell
configure add job name=BackupJob Client=BackupUser JobDefs=DefaultBackupJob FileSet=HomeFileset
```
Применим изменение:
```shell
reload
```
Здесь:
- `Client=BackupUser` — указывает, что бэкап выполняется для клиента `BackupUser`.
- `FileSet=HomeFileset` — задает файловый набор с путями к данным.
#### Создание задания для восстановления данных
Чтобы можно было восстановить файлы, создадим задание RestoreJob:
```shell
configure add job name=RestoreJob Type=Restore Client=BackupUser FileSet=HomeFileset Storage=S3_Object Pool=Incremental Messages=Standard Where="/" MaximumConcurrentJobs=10
```
Применим изменение:
```shell
reload
```
Параметры:
- `Type=Restore` — задает, что это задание восстановления.
- `Storage=S3_Object` — указывает хранилище.
- `Pool=Incremental` — используется пул инкрементальных бэкапов.
- `Where="/"` — файлы восстанавливаются в корневую директорию.
### Очистка ненужных конфигурационных файлов
Bareos по умолчанию создает демонстрационные конфигурации, которые не используются в продакшен-среде. Их необходимо удалить:
```shell
rm -f /etc/bareos/bareos-dir.d/jobdefs/DefaultJob.conf \
/etc/bareos/bareos-dir.d/job/BackupCatalog.conf \
/etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf \
/etc/bareos/bareos-dir.d/job/RestoreFiles.conf
```
Очистим базу данных от неиспользуемых записей:
```shell
bareos-dbcheck -b -f
```
## Настройка сервера, который будем бэкапить
### Установка Bareos File Daemon
Bareos использует службу `bareos-filedaemon`, которая должна быть установлена на сервере, с которого будут создаваться резервные копии.
**Установка в Ubuntu**
Добавим репозиторий Bareos:
```shell
wget -qO- https://download.bareos.org/current/xUbuntu_22.04/add_bareos_repositories.sh | sh
```
Обновим список пакетов и установим Bareos File Daemon:
```shell
apt update && apt install bareos-filedaemon -y
```
Включим и запустим Bareos File Daemon:
```shell
systemctl enable --now bareos-filedaemon.service
```
**Установка в RHEL**
Добавим правила для файрвола, открыв необходимые порты:
```shell
firewall-cmd --permanent --add-port={80,443,9101,9102,9103}/tcp && firewall-cmd --reload
```
Добавим репозиторий Bareos:
```shell
wget https://download.bareos.org/current/EL_9/bareos.repo -O /etc/yum.repos.d/bareos_EL_9.repo
```
Обновим кеш пакетов и установим Bareos File Daemon:
```shell
yum makecache && yum install bareos-filedaemon -y
```
Включим и запустим Bareos File Daemon:
```shell
systemctl enable --now bareos-filedaemon.service
```
### Подключение к серверу бэкапов
Теперь необходимо настроить подключение к Bareos Director, используя пароль, который был получен на этапе [создания пользователя](https://timeweb.cloud/docs/unix-guides/bareos-install#sozdanie-polzovatelya-dlya-soedineniya).
Открываем конфигурационный файл:
```shell
nano /etc/bareos/bareos-fd.d/director/bareos-dir.conf
```
Указываем следующие параметры:
```shell
Director {
Name = "bareos-dir"
Password = "[md5]fcbb587d250fc823c9b6445891a2acd8"
TlsEnable = no
TlsRequire = no
}
```
> [!NOTE]
> Обязательно добавьте параметры `TlsEnable=no` и `TlsRequire=no`, иначе сервер бэкапов не сможет подключиться.
Перезапускаем службу, чтобы применить изменения:
```shell
systemctl restart bareos-filedaemon.service
```
### Включение поддержки плагинов на клиенте
Для резервного копирования баз данных необходимо включить поддержку плагинов в конфигурации клиента.
Открываем файл:
```shell
nano /etc/bareos/bareos-fd.d/client/myself.conf
```
Приводим его к следующему виду:
```shell
Client {
Name = name
TLS Enable = no
TLS Require = no
Plugin Directory = "/usr/lib64/bareos/plugins"
Plugin Names = "python3"
}
```
Применяем изменения:
```shell
systemctl restart bareos-filedaemon.service
```
### Установка пакетов для резервного копирования баз данных
#### MySQL
Для создания резервных копий MySQL потребуется `Percona XtraBackup`, а также два плагина: `bareos-filedaemon-python3-plugin` и `bareos-filedaemon-percona-xtrabackup-python-plugin`.
**Установка в Ubuntu**
Скачаем пакет Percona XtraBackup:
```shell
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-26/binary/debian/jammy/x86_64/percona-xtrabackup-80_8.0.32-26-1.jammy_amd64.deb
```
Установим пакет:
```shell
dpkg -i percona-xtrabackup-80_8.0.32-26-1.jammy_amd64.deb
```
Установим плагины Bareos для работы с Percona XtraBackup:
```shell
apt install bareos-filedaemon-python3-plugin bareos-filedaemon-percona-xtrabackup-python-plugin -y
```
**Установка в RHEL**
Скачаем пакет Percona XtraBackup:
```shell
wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.32-26/binary/redhat/9/x86_64/percona-xtrabackup-80-8.0.32-26.1.el9.x86_64.rpm
```
Установим пакет:
```shell
yum localinstall percona-xtrabackup-80-8.0.32-26.1.el9.x86_64.rpm
```
Установим плагины Bareos для работы с Percona XtraBackup:
```shell
yum install bareos-filedaemon-python3-plugin bareos-filedaemon-percona-xtrabackup-python-plugin -y
```
#### PostgreSQL
Для резервного копирования PostgreSQL необходимо установить пакеты `bareos-filedaemon-python3-plugin`, `bareos-filedaemon-postgresql-python-plugin` и `pg8000` — драйвер Python для подключения к PostgreSQL.
**Установка в Ubuntu**
Установим плагины Bareos для PostgreSQL:
```shell
apt install bareos-filedaemon-python3-plugin bareos-filedaemon-postgresql-python-plugin -y
```
Установим `pip` для управления пакетами Python:
```shell
apt install python3-pip -y
```
Установим библиотеку `pg8000` для работы с PostgreSQL:
```shell
pip3 install pg8000
```
**Установка в RHEL**
Установим плагины Bareos для PostgreSQL:
```shell
yum install bareos-filedaemon-python3-plugin bareos-filedaemon-postgresql-python-plugin -y
```
Установим `pip` для управления пакетами Python:
```shell
yum install python3-pip -y
```
Установим библиотеку `pg8000` для работы с PostgreSQL:
```shell
pip3 install pg8000
```
### Настройка WAL-архивации в PostgreSQL
Для корректного резервного копирования PostgreSQL необходимо включить WAL-архивацию.
Открываем конфигурацию PostgreSQL:
```shell
nano /etc/postgresql/14/main/postgresql.conf
```
Приводим параметры к виду:
```shell
...
max_wal_size = 10GB
min_wal_size = 100MB
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/wal_archive/%f'
archive_timeout = 60
...
```
Здесь:
- `archive_mode = on` — включает архивирование WAL.
- `archive_command = 'cp %p /var/lib/pgsql/wal_archive/%f'` — копирует WAL-журналы в /var/lib/pgsql/wal\_archive/.
- `archive_timeout = 60` — задаёт интервал в 60 секунд для принудительного сохранения WAL.
Создадим директорию для размещения архивных WAL-файлов:
```shell
mkdir -p /var/lib/pgsql/wal_archive
```
Настроим права доступа:
```shell
chown postgres:postgres /var/lib/pgsql/wal_archive && chmod 700 /var/lib/pgsql/wal_archive
```
Применим изменения:
```shell
systemctl reload postgresql
```
Если к базе данных ограничен внешний доступ, необходимо настроить доступ к базе с сервера бэкапов. Для этого отредактируйте файл:
```shell
nano /etc/postgresql/14/main/pg_hba.conf
```
Добавляем строку с IP-адресом сервера бэкапов:
```shell
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all /32 md5
```
Где `` — IP-адрес сервера бэкапов.
Перезапускаем PostgreSQL:
```shell
systemctl restart postgresql
```
На этом настройка Bareos завершена. Мы установили и настроили сервер бэкапов, подключили клиентский сервер, настроили файловые наборы, расписание и S3-хранилище. Теперь система автоматически создает резервные копии и позволяет восстанавливать данные в случае необходимости.
## Ручное создание резервной копии
Для проверки можно запустить тестовый бэкап вручную из консоли bconsole или через веб-интерфейс.
### Создание бэкапа из консоли
1. Открываем консоль управления Bareos:
```shell
bconsole
```
2. Запускаем задание:
```shell
run
```
3. Выбираем нужное задание (например, `BackupJob`) и подтверждаем запуск, введя `yes`.
4. Дожидаемся завершения бэкапа и проверяем его статус:
```shell
status job
```
5. Чтобы посмотреть логи последнего задания, используем:
```shell
messages
```
### **Создание бэкапа через веб-интерфейс**
1. Открываем Bareos WebUI — `http:///bareos-webui`.
2. В меню переходим в «Jobs» → «Run».
3. Выбираем нужное задание, клиент и подтверждаем запуск.

_Раздел «Jobs» → «Run» в веб-интерфейсе [Bareos](https://www.bareos.com/)_
4. Ожидаем завершения выполнения задания и проверяем его статус во вкладке «Jobs» → «Show».
# Настройка bastion-хоста
Source: https://timeweb.cloud/docs/unix-guides/configuring-bastion-host?utm_source=llms_txt&utm_medium=ai
Bastion-хост — это облачный сервер, через который можно подключаться по SSH к серверам без публичных IP-адресов. Bastion имеет публичный и приватный IP, а внутренние серверы подключены только к приватной сети.
В результате внешний SSH-доступ будет открыт только к одному серверу. Подключение к остальным серверам будет выполняться через bastion по их приватным IP-адресам.
В примере используются:
- приватная сеть `192.168.0.0/24`;
- bastion-хост с приватным IP `192.168.0.10` и публичным IP;
- внутренний сервер с приватным IP `192.168.0.20` без публичного IP;
- отдельные файрволы для bastion-хоста и внутреннего сервера.
## Создание SSH-ключа
Если у вас уже есть подходящая пара SSH-ключей, используйте ее и перейдите к созданию приватной сети.
Чтобы создать новый ключ, выполните на локальном компьютере:
```bash
ssh-keygen -t ed25519 -f ~/.ssh/timeweb-bastion -C "bastion"
```
Будут созданы два файла:
- `~/.ssh/timeweb-bastion` — приватный ключ;
- `~/.ssh/timeweb-bastion.pub` — публичный ключ.
Приватный ключ должен храниться только на локальном компьютере. Не загружайте его на bastion-хост или внутренний сервер.
Добавьте публичный ключ в панель управления:
1. Перейдите в раздел «Облачные серверы» → «[SSH-ключи](https://timeweb.cloud/my/sshkeys)».
2. Нажмите «Добавить».
3. Укажите имя, например bastion-key.
4. Вставьте содержимое файла `~/.ssh/timeweb-bastion.pub`.
5. Сохраните ключ.
## Создание приватной сети
Приватная сеть объединяет bastion-хост и внутренние серверы в изолированный сетевой сегмент.
Чтобы создать сеть:
1. Перейдите в раздел «Сети» → «[Приватные сети](https://timeweb.cloud/my/vpc)».
2. Нажмите «Создать» или «Добавить».
3. Укажите имя сети, например `Bastion`.
4. Выберите локацию, в которой будут созданы серверы.
5. Укажите диапазон адресов, например `192.168.0.0/24`.
6. Завершите создание сети.
> [!NOTE]
> Серверы и приватная сеть должны находиться в одной локации. Перед выбором диапазона убедитесь, что он не пересекается с другими сетями, которые планируется объединить с этой сетью.
## Создание bastion-хоста
Bastion-хост должен быть доступен из интернета по публичному IP и подключен к приватной сети внутренних серверов.
1. Перейдите в раздел «[Облачные серверы](https://timeweb.cloud/my/servers)» и нажмите «Создать».
2. Выберите образ и подходящую конфигурацию сервера. Для небольшого количества SSH-соединений достаточно минимальной конфигурации.
3. Выберите ту же локацию, в которой создана приватная сеть.
4. Подключите публичный IP.
5. Подключите сервер к сети Bastion.
6. Выберите SSH-ключ bastion-key.
7. Укажите имя bastion-host и создайте сервер.
После создания обратите внимание на:
- публичный IP bastion-хоста;
- приватный IP bastion-хоста, например `192.168.0.10`.
Эти адреса будут использоваться дальше для настройки подключения.
## Создание внутреннего сервера
Внутреннему серверу не требуется публичный IP. Он будет доступен только из приватной сети.
1. Перейдите в раздел «[Облачные серверы](https://timeweb.cloud/my/servers)» и нажмите «Создать».
2. Выберите образ и конфигурацию сервера.
3. Выберите ту же локацию, что у bastion-хоста.
4. Отключите публичный IP.
5. Подключите сервер к сети `Bastion`.
6. Выберите SSH-ключ `bastion-key`.
7. Укажите имя `internal-server` и создайте сервер.
После создания запишите приватный IP сервера, например `192.168.0.20`.
> [!NOTE]
> Один публичный ключ используется в примере для упрощения настройки. Для production-окружения можно использовать разные ключи для bastion-хоста и внутренних серверов.
## Настройка файрвола
Для bastion-хоста и внутренних серверов рекомендуется использовать отдельные файрволы. Это позволяет независимо управлять правилами внешнего и внутреннего доступа.
### Файрвол bastion-хоста
Разрешите подключение к порту SSH только с доверенного публичного IP:
1. Перейдите в раздел «Сети» → «[Firewall](https://timeweb.cloud/my/firewalls)» и нажмите «Добавить».
2. Выберите разрешающий тип правил.
3. Укажите имя `bastion-fw`.
4. Добавьте входящее правило:
- протокол — `TCP`;
- порт — `22`;
- источник — публичный IP администратора с маской `/32`, например `203.0.113.10/32`.
6. Привяжите файрвол к серверу `bastion-host`.
Узнать текущий публичный IP можно с помощью любого сервиса проверки IP-адреса. Если адрес изменится, обновите правило файрвола.
> [!NOTE]
> Не используйте источник `0.0.0.0/0`, если в этом нет необходимости. Такое правило разрешит попытки подключения к SSH со всего интернета.
### Файрвол внутреннего сервера
Разрешите SSH-подключения только с приватного IP bastion-хоста:
1. Создайте разрешающий файрвол с именем `internal-fw`.
2. Добавьте входящее правило:
- протокол — `TCP`;
- порт — `22`;
- источник — приватный IP bastion-хоста с маской `/32`, например `192.168.0.10/32`.
4. Привяжите файрвол к серверу `internal-server`.
Если исходящий трафик также ограничен, разрешите на bastion-хосте исходящее TCP-соединение к приватному IP внутреннего сервера на порт `22`.
При использовании разрешающих правил файрвола настройте правила DHCP на сервере. Без них сервер может потерять приватный IP после окончания срока аренды.
## Проверка подключения к bastion-хосту
Подключитесь к bastion-хосту по публичному IP:
```bash
ssh -i ~/.ssh/timeweb-bastion root@
```
При первом подключении SSH предложит сохранить ключ хоста. После успешного входа завершите сеанс командой:
```bash
exit
```
Если подключение завершается по тайм-ауту, проверьте публичный IP сервера и правила файрвола. Если появляется ошибка `Permission denied`, проверьте имя пользователя и SSH-ключ.
## Подключение к внутреннему серверу
Для подключения через bastion используйте механизм `ProxyJump`:
```bash
ssh -i ~/.ssh/timeweb-bastion -J root@ root@192.168.0.20
```
SSH-клиент установит соединение с bastion-хостом, а затем подключится к приватному IP внутреннего сервера. Приватный ключ при этом остается на локальном компьютере.
Для старых версий OpenSSH без поддержки `ProxyJump` используйте `ProxyCommand`:
```bash
ssh -i ~/.ssh/timeweb-bastion -o ProxyCommand="ssh -i ~/.ssh/timeweb-bastion -W %h:%p root@" root@192.168.0.20
```
## Настройка SSH-конфигурации
Чтобы не указывать параметры подключения вручную, добавьте хосты в файл `~/.ssh/config` на локальном компьютере:
```bash
Host twc-bastion
HostName
User root
IdentityFile ~/.ssh/timeweb-bastion
IdentitiesOnly yes
Host twc-internal
HostName 192.168.0.20
User root
IdentityFile ~/.ssh/timeweb-bastion
IdentitiesOnly yes
ProxyJump twc-bastion
```
Ограничьте доступ к файлу конфигурации:
```bash
chmod 600 ~/.ssh/config
```
Теперь для подключения к внутреннему серверу достаточно выполнить:
```bash
ssh twc-internal
```
## Доступ к сервисам во внутренней сети
Через bastion можно открыть локальный SSH-туннель к сервису на внутреннем сервере. Например, следующая команда перенаправит локальный порт `8080` на порт `80` сервера `192.168.0.20`:
```bash
ssh -N -L 8080:192.168.0.20:80 twc-bastion
```
Пока соединение активно, сервис будет доступен на локальном компьютере по адресу:
```bash
http://127.0.0.1:8080
```
Порт сервиса не требуется открывать в интернет. Он должен быть доступен с приватного IP bastion-хоста.
## Передача файлов
Для передачи файлов через bastion используйте scp с настроенной SSH-конфигурацией:
```bash
scp ./localfile.txt twc-internal:/root/
```
Для копирования файла с внутреннего сервера:
```bash
scp twc-internal:/root/remotefile.txt ./
```
## Удаление ресурсов
Если bastion-хост и внутренний сервер больше не нужны:
1. Удалите облачные серверы bastion-host и internal-server.
2. Удалите файрволы bastion-fw и internal-fw.
3. Удалите приватную сеть Bastion.
Перед удалением приватной сети убедитесь, что к ней не подключены другие серверы или сервисы.
# Запуск сервера Minecraft
Source: https://timeweb.cloud/docs/unix-guides/zapusk-servera-minecraft?utm_source=llms_txt&utm_medium=ai
В Timeweb Cloud вы можете запустить сервер Minecraft за пару кликов. Мы предлагаем готовые сборки с разными версиями Minecraft:
- Minecraft JE (Java Edition) — классическая версия Minecraft со множеством бесплатных модов и сборок и возможностью гибкой настройки.
- Minecraft BE (Bedrock Edition) — оптимизированная версия Minecraft с поддержкой кроссплатформенности, простым и удобным подключением к друзьям и большим выбором карт, текстур и скинов для покупки. В отличие от JE, не имеет хардкорного режима и режима наблюдения.
> [!NOTE]
> Если по каким-то причинам вы хотите установить Minecraft вручную, можно воспользоваться [нашей инструкцией](https://timeweb.cloud/docs/unix-guides/ustanovka-minecraft-na-ubuntu).
## Запуск Minecraft-сервера
1. [Зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если его еще нет.
2. В панели управления перейдите в раздел [«Облачные серверы»](https://timeweb.cloud/my/servers).
3. Кликните «Создать» или «Добавить».
4. На вкладке «Маркетплейс» выберите нужную версию Minecraft.

5. Выберите конфигурацию. Для игровых серверов мы рекомендуем выбирать мощные серверы с дисками NVMe и процессорами Intel Gold (линейка Premium NVMe) или производительные конфигурации HighCPU 5ГГц.
Минимальный рекомендуемый тариф — Cloud 40: 2 x 3.3 ГГц CPU, 2 ГБ RAM, 40 ГБ NVMe.
Более стабильный вариант, который подойдет для мультиплеерной игры на 5-10 человек — High 1: 1 x 5 ГГц CPU, 1 ГБ RAM, 15 ГБ NVMe.

6. После выбора необходимых настроек кликните «Заказать» и оплатите сервер, чтобы запустить его.
7. После завершения установки на ваш контактный емейл придет письмо с реквизитами доступа к серверу.
После установки игровой сервер будет сразу запущен, и вы сможете подключиться к нему из клиента Minecraft, указав IP-адрес сервера и порт.
Файлы Minecraft будут размещены в `/opt/minecraft`, параметры запуска можно найти в `/etc/systemd/system/minecraft@.service`.
## Подключение к серверу
Версия игрового сервера — 1.17. Убедитесь, что в клиенте выбрана именно эта версия.
Для подключения используются порты:
- 25565 — для Minecraft JE
- 19132 — для Minecraft BE
Чтобы подключиться к игровому серверу:
1. Запустите Minecraft на своем компьютере
2. Нажмите Play.
3. Выберите Multiplayer.
4. Нажмите Add Server.
5. В строку Server Address введите IP-адрес вашего сервера и порт.
6. Нажмите Done.
7. Кликните на добавленный сервер и нажмите Join Server.
Например, для подключения к нашему серверу с Minecraft JE:

будет нужно указать:
```shell
94.228.123.76:25565
```
## Открытие портов
Для работы Minecraft необходимо, чтобы на сервере были открыты порты 25565 или 19132 (в зависимости от версии Minecraft).
Если у вас возникает проблема с подключением к серверу Minecraft, попробуйте открыть порты вручную, [подключившись к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
Ubuntu / Debian
На серверах с Ubuntu/Debian это можно сделать командой:
```shell
ufw allow номер_порта
```
Например:
```shell
ufw allow 25565
```
После проверьте, что порт открыт:
```shell
ufw status
```
CentOS
На серверах с CentOS используйте:
```shell
firewall-cmd --add-port=номер_порта/tcp --permanent
```
Например:
```shell
firewall-cmd --add-port=25565/tcp --permanent
```
После перезагрузите файрвол для применения изменений:
```shell
firewall-cmd --reload
```
И проверьте, что порт открыт:
```shell
firewall-cmd --list-all
```
## Offline mode
Задать Offline mode можно в файле `/opt/minecraft/survival/server.properties`, указав вместо `online-mode=true` значение `online-mode=false`.
1. [Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
2. После подключения откройте файл на редактирование:
```shell
nano /opt/minecraft/survival/server.properties
```
3. Найдите строку `online-mode=true` и замените значение `true` на `false`.
4. Сохраните изменения: Ctrl X, затем Y и Enter.
## Полезные ссылки
- Если вы только начинаете работать с собственным игровым сервером, рекомендуем посмотреть [наш вебинар по установке Minecraft-сервера и управлению им](https://www.youtube.com/watch?v=DBTuqVHExrk). Расскажем, как создать сервер и подключиться к нему, как управлять сервером и его настройками.
- Полезную информацию для управления сервером можно найти в статье [Основные команды для сервера Minecraft](https://timeweb.com/ru/community/articles/komandy-dlya-servera-minecraft) в нашем Community.
- Также вам может пригодиться информация из [wiki Minecraft по настройке игровых параметров сервера](https://minecraft.fandom.com/wiki/Server.properties).
# Настройка сети Outline
Source: https://timeweb.cloud/docs/unix-guides/nastrojka-outline?utm_source=llms_txt&utm_medium=ai
Outline — это бесплатное ПО с открытым исходным кодом, с помощью которого можно развернуть собственную персональную сеть для безопасного доступа в Интернет. Outline использует протокол _shadowsocks_.
В инструкции рассмотрим, как развернуть Outline на сервере Timeweb Cloud.
> [!NOTE]
> Даже если всё настроено правильно, сеть может не работать из-за ограничений со стороны вашего интернет-провайдера.
>
> Поддержка Timeweb Cloud не сможет помочь в настройке Outline или устранении неполадок в его работе.
## Шаг 1. Заказ сервера
1. [Зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если его еще нет.
2. В панели управления перейдите в раздел [«Облачные серверы»](https://timeweb.cloud/my/servers).
3. Кликните «Создать» или «Добавить».
4. Выберите ОС. Outline можно установить на любую Linux-систему, но мы тестировали эту инструкцию для Ubuntu 24.04, поэтому установим ее.

5. Выберите регион размещения сервера. В примере мы выбираем Нидерланды, но Outline будет работать в том числе на сервере в России.

6. Выберите конфигурацию. Для работы Outline достаточно минимальной конфигурации с 1 CPU, 1 ГБ RAM и 15 ГБ диска. Мы установим самый простой конфиг из доступных в Нидерландах.

7. В следующем блоке можно отключить бэкапы, если они вам не нужны; остальные параметры можно оставить без изменений.
8. Нажмите «Заказать» — сервер будет установлен в течение нескольких минут.
Реквизиты подключения, в том числе пароль root, вы найдете на дашборде сервера.

## Шаг 2. Установка Outline Manager
Для управления подключениями вам потребуется Outline Manager, который необходимо установить на свой компьютер.
1. Скачайте версию для своей ОС с [официального сайта](https://getoutline.org/get-started/) и установите приложение.

_Скриншот официального сайта [Outline](https://getoutline.org/get-started/)_
2. Запустите приложение и примите условия использования, кликнув ОК.
3. Кликните на опцию «Настройте Outline где угодно».

_Интерфейс [Outline Manager](https://getoutline.org/)_
Outline предложит вам простую инструкцию:

_Инструкция по установке сервиса в интерфейсе [Outline Manager](https://getoutline.org/)_
Ниже мы опишем, как ее использовать.
## Шаг 3. Настройка сервера
1. Подключитесь к своему серверу Timeweb Cloud [по SSH](https://timeweb.cloud/docs/unix-guides/ssh) с помощью терминала, PowerShell или Putty. Не используйте для настройки консоль в панели управления — вы не сможете скопировать из нее необходимые данные.
2. Cкопируйте команду из Outline Manager и выполните ее на сервере.

_Инструкция по установке сервиса в интерфейсе [Outline Manager](https://getoutline.org/)_
На момент написания инструкции команда выглядит так:
```shell
sudo bash -c "$(wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh)"
```
При выполнении команды будет выполнена проверка — установлен ли на сервер Docker. Если сервер новый, Docker установлен не будет. На вопрос _«Would you like to install Docker? This will run 'curl https://get.docker.com/ | sh'. \[Y/n\]»_ ответьте `y` и нажмите `Enter`. После этого начнется установка Docker, а затем установка Outline продолжится.
> [!NOTE]
> На этом этапе может возникнуть ошибка:
>
> _Last error: curl: (7) Failed to connect to localhost port 29046 after 0 ms: Connection refused_
> _Error response from daemon: Container b1c133cd1b... is restarting, wait until the container is running_
>
> Для ее устранения:
>
> 1. Откройте файл /etc/hosts:
> `nano /etc/hosts`
> 2. Добавьте в него строку:
> `127.0.0.1 localhost`
> 3. Сохраните изменения (Ctrl + X, затем Y и Enter).
>
> После снова выполните команду установки Outline, скопированную из Outline Manager.
3. Скопируйте строку из вывода команды, выделенную зеленым.

4. Вставьте ее в окно Outline Manager и нажмите «Готово»:

_Инструкция по установке сервиса в интерфейсе [Outline Manager](https://getoutline.org/)_
На этом настройка серверной части закончена.
## Шаг 4. Создание ключей доступа
Для установки подключения на устройствах будут необходимы ключи доступа. Они создаются в Outline Manager.
1. Кликните «Добавить новый ключ». При необходимости задайте ключу удобное имя.

_Раздел «Подключения» в интерфейсе [Outline Manager](https://getoutline.org/)_
2. Кликните на значок «Поделиться» у созданного ключа.

_Раздел «Подключения» в интерфейсе [Outline Manager](https://getoutline.org/)_
3. В открывшемся окне нажмите «Копировать ключ доступа» и «Готово».

_Окно «Поделитесь доступом» в интерфейсе [Outline Manager](https://getoutline.org/)_
Скопированный ключ понадобится на следующем шаге для настройки клиента Outline. Если вы настраиваете клиент на другом устройстве, ключ можно переслать в любом мессенджере.
## Шаг 5. Настройка клиента Outline
1. Скачайте приложение Outline для своего устройства. Ссылки на скачивание можно найти на [официальном сайте проекта](https://getoutline.org/ru/get-started/#step-3).

_Скриншот официального сайта [Outline](https://getoutline.org/)_
2. Установите и запустите скачанное приложение.
3. Нажмите «Добавить сервер», укажите ключ доступа, скопированный из Outline Manager, и нажмите «Добавить сервер».

_Добавление ключа доступа в интерфейсе приложения [Outline](https://getoutline.org/)_
Готово, сервер добавлен. Теперь вы можете подключиться к сети, нажав на кнопку «Подключить».

_Отображение сервера в интерфейсе приложения [Outline](https://getoutline.org/)_
Отключить соединение можно будет здесь же.
## Устранение проблем
### Проблема в работе shadowbox
Иногда может некорректно работать один из двух Docker-контейнеров Outline под названием `shadowbox`, из-за чего не работает персональная сеть.
Проверить можно командой ниже, [подключившись к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh):
```shell
docker ps
```
В выводе обратите внимание на статус `shadowbox`. В примере ниже видим, что первый контейнер работает корректно уже 17 часов (статус: _Up 17 hours_), в то время как второй постоянно перезапускается (статус: _Restarting (1) 15 seconds ago_):
```shell
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3008f164751f containrrr/watchtower "/watchtower --clean…" 17 hours ago Up 17 hours 8080/tcp watchtower
040aac1265a0 quay.io/outline/shadowbox:stable "docker-entrypoint.s…" 17 hours ago Restarting (1) 15 seconds ago shadowbox
```
Для устранения проблемы отредактируйте файл `/etc/hosts`, открыв его в редакторе:
```shell
nano /etc/hosts
```
И добавьте в файл строку:
```shell
127.0.0.1 localhost
```
Сохраните изменения (Ctrl + X, затем Y и Enter).
После контейнер будет работать корректно, и у вас появится доступ к сети.
### Проблема со скачиванием образа из Docker Hub
На этапе настройки сервера, после установки Docker, может возникнуть ошибка:
```shell
Starting Watchtower ......................... FAILED
Unable to find image 'containrrr/watchtower:latest' locally
latest: Pulling from containrrr/watchtower
docker: toomanyrequests: You have reached your unauthenticated pull rate limit.
https://www.docker.com/increase-rate-limit
```
Ошибка возникает из-за превышения лимитов запросов к Docker Hub с IP-адреса сервера.
Для решения проблемы вы можете воспользоваться [нашим зеркалом Docker Hub](https://dockerhub.timeweb.cloud/).
Для этого:
Откройте файл:
```shell
nano /etc/docker/daemon.json
```
Добавьте строку:
```shell
{ "registry-mirrors": ["https://dockerhub.timeweb.cloud"] }
```
Сохраните изменения при помощи сочетания клавиш `Ctrl + X`, затем `Y` и `Enter`.
Перезапустите Docker:
```shell
systemctl reload docker
```
После этого вернитесь к пункту 3 шага 3 и выполните установку повторно.
# Изменение настроек DNS-серверов
Source: https://timeweb.cloud/docs/unix-guides/izmenenie-nastroek-dns-serverov?utm_source=llms_txt&utm_medium=ai
В инструкции рассказываем, как изменить настройки DNS-серверов в операционных системах семейства **Linux**. Для сервера с ОС Windows [воспользуйтесь этой статьей](https://timeweb.cloud/docs/windows-guides/nastrojka-dns-serverov-v-windows-server).
В инструкции ниже мы будем прописывать публичные DNS-серверы Google: `8.8.8.8` и `8.8.4.4`, но вы можете указывать любые нужные вам DNS (например, DNS Cloudflare: `1.1.1.1` и `1.0.0.1` и др.).
Если вы используете IPv6, вы можете дополнительно указать DNS-серверы для этого протокола. Это необязательно — настройка нужна только в том случае, если ваш сервер работает с IPv6. Примеры IPv6 DNS от Google: `2001:4860:4860::8888`, `2001:4860:4860::8844`.
## Проверка текущих DNS
Перед тем, как менять настройки, вы можете просмотреть, какие DNS-серверы используются сейчас. Это можно сделать, подключившись к серверу [по SSH](https://timeweb.cloud/docs/unix-guides/ssh) (или через веб-консоль в панели управления) и далее выполнив команду для вашей операционной системы.
**Ubuntu 18.04:**
```shell
systemd-resolve --status | grep 'DNS Servers' -A2
```
**Ubuntu 20.04 и выше, Debian 12 и выше:**
```shell
resolvectl status
```
**Debian 11:**
```shell
cat /etc/resolv.conf
```
**CentOS Stream 9**
```
nmcli device show ens3
```
В выводе будут указаны текущие DNS-серверы. Для серверов Timeweb Cloud, размещенных в Санкт-Петербурге, по умолчанию используются:
```shell
nameserver 92.53.116.13
nameserver 92.53.116.104
```
## Изменение DNS-серверов
### Ubuntu 18.04
Чтобы изменить DNS-серверы, выполните следующее:
Перейдите в директорию `/etc/netplan`:
```shell
cd /etc/netplan
```
Откройте файл конфигурации службы для редактирования. Файл, как правило, называется `01-netcfg.yaml`:
```shell
nano 01-netcfg.yaml
```
На серверах Timeweb Cloud его содержимое будет следующим:
```bash
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: yes
```
Добавьте в конец файла блок:
```bash
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
```
При необходимости вы можете добавить DNS для IPv6:
```shell
addresses: [8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844]
```
и включить `dhcp6`:
```shell
dhcp6: yes
```
У вас должно получиться следующее:
```bash
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: yes
dhcp6: yes
nameservers:
addresses: [8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844]
```
> [!NOTE]
> Обязательно соблюдайте иерархичность структуры; каждый новый уровень директив должен начинаться с двух пробелов (не отступов Tab).
Сохраните изменения в файле (Ctrl +X, затем Y и Enter).
Примените новую конфигурацию командой:
```shell
netplan try
```
Программа запросит у вас подтверждение — нажмите Enter, чтобы применить новые настройки.
> [!NOTE]
> На этом этапе, если в конфигурации сети были допущены какие-то ошибки, подключение по SSH будет разорвано. Конфигурация автоматически вернется к исходным настройкам через 2 минуты, и вы сможете снова подключиться к серверу.
Проверьте, что DNS-серверы обновились, с помощью команд:
```shell
systemd-resolve --status | grep 'DNS Servers' -A2
```
### Ubuntu 20.04 и выше, Debian 12 и выше
Для изменения DNS-серверов в Debian 12, Ubuntu 20.04 и более новых версиях, выполните следующее:
Откройте файл настроек `systemd-resolved` в текстовом редакторе:
```shell
sudo nano /etc/systemd/resolved.conf
```
Раскомментируйте секцию `[Resolve]` и укажите в ней желаемые DNS-серверы. Например:
```shell
[Resolve]
DNS=8.8.8.8
FallbackDNS=8.8.4.4
```
Сохраните изменения (Ctrl + X, затем Y и Enter).
Чтобы указать DNS для IPv6, добавьте их в тот же файл вместе с IPv4:
```shell
[Resolve]
DNS=8.8.8.8 2001:4860:4860::8888
FallbackDNS=8.8.4.4 2001:4860:4860::8844
```
Перезапустите службу `systemd-resolved`:
```shell
systemctl restart systemd-resolved
```
Убедитесь, что служба запущена и работает корректно:
```shell
systemctl status systemd-resolved
```
Проверьте, что новые DNS-серверы применились:
```shell
resolvectl status
```
### Debian 11
Чтобы изменить DNS-серверы:
Откройте файл конфигурации `dhclient` в текстовом редакторе:
```shell
nano /etc/dhcp/dhclient.conf
```
В самый конец файла добавьте строку:
```shell
supersede domain-name-servers 8.8.8.8, 8.8.4.4;
```
Чтобы указать DNS для IPv6, добавьте их в тот же файл вместе с IPv4:
```shell
supersede domain-name-servers 8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844;
```
Сохраните изменения в файле (Ctrl +X, затем Y и Enter).
Запросите сетевые настройки командой:
```shell
dhclient
```
Проверьте, что DNS обновились:
```shell
cat /etc/resolv.conf
```
В выводе должны отобразиться указанные вами серверы.
### CentOS
Чтобы изменить DNS-серверы, выполните следующее:
Выполните команду ниже, чтобы просмотреть сетевые адаптеры в системе:
```shell
ip a
```
В выводе отобразятся три адаптера: `lo`, `ens3` и `ens8`:
```shell
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether ce:46:76:13:67:4a brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 83.222.10.200/24 brd 83.222.10.255 scope global dynamic noprefixroute ens3
valid_lft 86369sec preferred_lft 86369sec
inet6 2a03:6f01:1:2::c374/128 scope global dynamic noprefixroute
valid_lft 2591972sec preferred_lft 604772sec
inet6 fe80::cc46:76ff:fe13:674a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens8: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 54:52:00:b1:4e:8d brd ff:ff:ff:ff:ff:ff
altname enp0s8
inet 192.168.0.12/24 brd 192.168.0.255 scope global noprefixroute ens8
valid_lft forever preferred_lft forever
inet6 fe80::5652:ff:feb1:4e8d/64 scope link
valid_lft forever preferred_lft forever
```
Нам нужно настроить адаптер `ens3`.
Проверьте текущие настройки DNS для интерфейса:
```shell
nmcli con show ens3 | grep dns
```
Задайте новые DNS-серверы:
```shell
sudo nmcli connection modify ens3 ipv4.dns "8.8.8.8,8.8.4.4"
```
Если в системе используется IPv6, можно указать DNS и для него:
```shell
sudo nmcli connection modify ens3 ipv6.dns "2001:4860:4860::8888,2001:4860:4860::8844"
```
Чтобы использовать только эти серверы и игнорировать получаемые от DHCP, можно добавить опцию:
```shell
sudo nmcli connection modify ens3 ipv4.ignore-auto-dns yes
```
Отключите соединение:
```shell
sudo nmcli connection down ens3
```
Включите соединение снова:
```shell
sudo nmcli connection up ens3
```
Убедитесь, что изменения применились:
```shell
nmcli con show ens3 | grep dns
```
Вы увидите такую строку:
```shell
ipv4.dns: 8.8.8.8,8.8.4.4
```
И если настраивали IPv6:
```shell
ipv6.dns: 2001:4860:4860::8888,2001:4860:4860::8844
```
# Перенос сервера с большим диском на меньший с помощью rsync
Source: https://timeweb.cloud/docs/unix-guides/perenos-servera-s-bolsim-diskom-na-mensii-s-pomoshhiu-rsync?utm_source=llms_txt&utm_medium=ai
Главный критерий данного переноса — чтобы размер файлов на отдающем сервере не превышал размер диска принимающего.
Предположим у нас есть два сервера — отдающий и принимающий со следующими дисками:
- Сервер 1 (отдающий) имеет диск в 40 ГБ и суммарный объем файлов в 24 ГБ
- Сервер 2 (принимающий) имеет диск в 30 ГБ
Для переноса мы:
1. [Загружаем](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode) оба сервера с диска восстановления.
Для подключения по SSH потребуется отключить firewall и установить пароль для пользователя root:
```bash
systemctl stop iptables
```
```bash
passwd #дважды укажите новый пароль для root
```
2. Монтируем диски серверов в каталог `mnt`:
```bash
mount /dev/sda1 /mnt
```
Команда выполняется на двух серверах.
Диск может обозначаться как `/dev/sda`, так и `/dev/vda`. Перед выполнением команды монтирования определите фактическое имя диска.
Для этого выполните команду:
```bash
lsblk
```
В выводе будет указан основной диск и его разделы, например:
```shell
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 885M 1 loop /run/archiso/sfs/airootfs
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 49G 0 part
├─sda14 8:14 0 4M 0 part
├─sda15 8:15 0 106M 0 part
└─sda16 259:0 0 913M 0 part
sr0 11:0 1 1019M 0 rom /run/archiso/bootmnt
vda 254:0 0 1M 1 disk
```
В этом случае для монтирования используется команда:
```bash
mount /dev/sda1 /mnt
```
3. Удаляем файлы на диске **принимающего** сервера:
```bash
rm -rf /mnt/*
```
4. Копируем файлы с отдающего на принимающий:
```bash
rsync -azvhP /mnt/ root@IP_ПРИНИМАЮЩЕГО:/mnt/
```
5. По окончанию копирования выполняем команды на принимающем сервере:
Ubuntu
Войдем в окружение `chroot` на смонтированном разделе:
```shell
arch-chroot /mnt
```
Удалим привязку к статическому MAC-адресу
```shell
nano /etc/netplan/50-cloud-init.yaml
```
Найдем и закомментируем строки с привязкой к MAC-адресу, например:
```shell
match:
macaddress: 54:52:00:6e:6d:ba
```
После редактирования применяем изменения:
```shell
netplan apply
```
Проверьте, запущена ли служба ssh:
```shell
systemctl status ssh
```
Если служба не запущена, запустите ее:
```shell
systemctl enable ssh && systemctl start ssh
```
Выполним команды:
```shell
update-initramfs -u
```
```shell
grub-install /dev/sda
```
```shell
update-grub
```
```shell
exit
```
Centos
Войдем в окружение `chroot` на смонтированном разделе:
```shell
arch-chroot /mnt
```
Установим GRUB на основной диск:
```shell
grub2-install /dev/sda
```
Создадим конфигурацию загрузчика:
```shell
grub2-mkconfig -o /boot/grub2/grub.cfg
```
Проверим UUID корневого раздела:
```shell
blkid /dev/sda1
```
Вы увидите примерно такой вывод:
```shell
/dev/sda1: UUID="90c1eed9-cfb3-4676-bcc9-fbf85f391246" TYPE="xfs"
```
Скопируйте UUID без кавычек — в нашем примере это:
```shell
90c1eed9-cfb3-4676-bcc9-fbf85f391246
```
Найдем файл загрузки ядра:
```shell
ls /boot/loader/entries
```
Пример вывода:
```shell
ff03bff452ba47cda441b4fde3632ef4-5.14.0-585.el9.x86_64.conf
```
Отредактируем найденный файл и укажем актуальный UUID:
```shell
vi /boot/loader/entries/ff03bff452ba47cda441b4fde3632ef4-5.14.0-585.el9.x86_64.conf
```
Найдите строку, начинающуюся с `options root=UUID=...` и замените UUID на актуальный.
Выходим из `chroot`:
```shell
exit
```
6. Запускаем принимающий сервер в стандартном режиме. Обратите внимание: для входа необходимо использовать учетные данные (имя пользователя и пароль) от исходного сервера, с которого выполнялся перенос. Пароль, указанный в панели управления для нового сервера, работать не будет.
# Установка n8n
Source: https://timeweb.cloud/docs/unix-guides/installing-n8n?utm_source=llms_txt&utm_medium=ai
n8n — инструмент для автоматизации рабочих процессов с открытым исходным кодом. Он позволяет создавать интеграции между различными сервисами, используя GUI.
## Установка через маркетплейс
Самый простой способ развернуть n8n — использовать готовый образ из маркетплейса. Для этого:
1. [Зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если его еще нет.
2. В панели управления перейдите в раздел [«Облачные серверы»](https://timeweb.cloud/my/servers).
3. Кликните «Создать» или «Добавить».
4. На вкладке «Маркетплейс» выберите n8n.

5. Выберите конфигурацию. Для запуска n8n подойдет минимальная конфигурация сервера. Ее будет достаточно для тестирования. В будущем, если нагрузка на сервис возрастет, вы сможете изменить параметры сервера и увеличить ресурсы сервера.
6. Настройте остальные параметры (их можно оставить без изменений).
7. Завершите создание сервера, нажав на кнопку «Заказать».
После запуска сервер будет доступен в панели управления. Перейдите во вкладку «Дашборд», чтобы увидеть технический домен, по которому открывается интерфейс n8n.

### Настройка SSL-сертификата
При первом обращении к n8n через браузер вы можете столкнуться с предупреждением о небезопасном соединении. Это связано с отсутствием SSL-сертификата.
Для выпуска сертификата необходимо указать ваш email в настройках `docker-compose.yml`. Для этого подключитесь к серверу по SSH.
Перейдите в рабочую директорию n8n:
```shell
cd /home/n8n
```
Отредактируйте файл `.env`:
```shell
nano .env
```
Найдите строку с переменной `SSL_EMAIL` и укажите ваш email:
```shell
SSL_EMAIL=user@example.com
```
Email будет использоваться сервисом Let's Encrypt для выпуска сертификата.
Сохраните изменения и перезапустите контейнеры:
```shell
docker compose down
docker compose up -d
```
Процесс выпуска сертификата может занять несколько минут. После этого доступ к n8n будет выполняться по HTTPS.
### Изменение домена
Если вы хотите использовать собственный домен, вы можете изменить настройки в файле `.env`.
Перед внесением изменений убедитесь, что домен и поддомен указывают на IP-адрес вашего сервера через A-записи в DNS.
Перейдите в директорию n8n:
```shell
cd /home/n8n
```
Откройте файл `.env`:
```shell
nano .env
```
Найдите и измените строки:
```shell
DOMAIN_NAME=
SUBDOMAIN=
```
Например, если вы хотите использовать домен `n8n.example.com`, значения должны быть следующими:
```shell
DOMAIN_NAME=example.com
SUBDOMAIN=n8n
```
Если вы хотите использовать домен второго уровня (без поддомена), укажите только `DOMAIN_NAME`, а все упоминания `${SUBDOMAIN}` в файле `docker-compose.yml` удалите.
Сохраните файл и перезапустите контейнеры:
```shell
docker compose down
docker compose up -d
```
После этого n8n будет доступен по вашему домену.
## Установка вручную с помощью Docker Compose
Вы также можете установить n8n вручную на любой сервер при помощи Docker Compose.
Перед настройкой установим Docker и Docker Compose. Для этого выполните следующие команды:
```shell
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
```
Создайте отдельную директорию для проекта:
```shell
mkdir n8n-compose
```
И перейдите в нее
```shell
cd n8n-compose
```
Создайте файл `docker-compose.yml` со следующим содержимым:
```yaml
services:
traefik:
image: "traefik"
restart: always
command:
- "--api=true"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
- "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- traefik_data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.entrypoints=web,websecure
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge
- traefik.http.middlewares.n8n.headers.SSLRedirect=true
- traefik.http.middlewares.n8n.headers.STSSeconds=315360000
- traefik.http.middlewares.n8n.headers.browserXSSFilter=true
- traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
- traefik.http.middlewares.n8n.headers.forceSTSHeader=true
- traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
- traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
- traefik.http.middlewares.n8n.headers.STSPreload=true
- traefik.http.routers.n8n.middlewares=n8n@docker
environment:
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:
traefik_data:
```
Создайте файл `.env` и добавьте следующее:
```shell
# The top level domain to serve from
DOMAIN_NAME=example.com
# The subdomain to serve from
SUBDOMAIN=n8n
# The timezone to use inside the container
GENERIC_TIMEZONE=Europe/Moscow
# The email address used for certificate issuance
SSL_EMAIL=user@example.com
```
Измените значения `DOMAIN_NAME`, `SUBDOMAIN` и `SSL_EMAIL` на ваши данные.
После настройки всех файлов, запустите контейнеры:
```shell
docker compose up -d
```
Через несколько минут n8n будет доступен по адресу, который вы указали в `.env`.
## Создание резервной копии
Для создания копии подключитесь к серверу по SSH. Перейдите в директорию n8n:
```bash
cd /home/n8n
```
Остановите контейнеры:
```bash
docker compose down
```
Создайте директорию для хранения резервных копий:
```bash
mkdir backups
```
Создайте архив с данными n8n:
```bash
docker run --rm \
-v n8n_data:/data \
-v "$(pwd)/backups:/backup" \
alpine \
tar czf /backup/n8n_data_$(date +%F_%H-%M-%S).tar.gz -C /data .
```
После выполнения команды архив будет сохранен в директории `/home/n8n/backups`.
Проверить, что архив был создан можно командой:
```bash
ls ./backups
```
После создания резервной копии запустите контейнеры снова:
```bash
docker compose up -d
```
## Восстановление из резервной копии
Подключитесь к серверу по SSH и перейдите в директорию n8n:
```bash
cd /home/n8n
```
Остановите контейнеры:
```bash
docker compose down
```
Очистите вольюм со старыми данными:
```bash
docker run --rm -v n8n_data:/data alpine sh -c 'rm -rf /data/* /data/.[!.]* /data/..?* 2>/dev/null || true'
```
Выполните восстановление из архива:
```bash
docker run --rm \
-v n8n_data:/data \
-v "$(pwd)/backups:/backup" \
alpine \
sh -c 'tar xzf /backup/ИМЯ_АРХИВА.tar.gz -C /data'
```
Замените `ИМЯ_АРХИВА.tar.gz` на имя нужного файла резервной копии.
После завершения восстановления запустите контейнеры:
```bash
docker compose up -d
```
## Обновление
> [!NOTE]
> Процесс обновления ниже описан для версии, установленной через маркетплейс. При ручной установке путь к директории и отдельные параметры могут отличаться.
Проверить текущую версию n8n можно через веб-интерфейс. Для этого на главной странице нажмите значок вопроса в левом нижнем углу и выберите пункт «About n8n». В открывшемся окне будет указана версия приложения.

Также проверить версию можно при помощи команды:
```bash
docker exec n8n-n8n-1 n8n --version
```
Где `n8n-n8n-1` — имя контейнера n8n.
Получить имя контейнера можно командой:
```bash
docker ps
```
Перед обновлением рекомендуем [создать резервную копию данных](https://timeweb.cloud/docs/unix-guides/installing-n8n#sozdanie-rezervnoj-kopii), чтобы при необходимости можно было выполнить восстановление.
Подключитесь к серверу по SSH и перейдите в директорию n8n:
```bash
cd /home/n8n
```
Остановите контейнеры:
```bash
docker compose down
```
Скачайте новый образ:
```bash
docker compose pull
```
Обратите внимание, если вы редактировали `.env` или `docker-compose.yml`, могла быть указана фиксированная версия образа. Проверьте используемые значения.
Для установки через маркетплейс строка в `.env` должна выглядеть так:
```bash
IMAGE2=dockerhub.timeweb.cloud/n8nio/n8n
```
При ручной установке в `docker-compose.yml` строка должна быть следующей:
```bash
image: docker.n8n.io/n8nio/n8n
```
После загрузки нового образа запустите n8n:
```bash
docker compose up -d
```
Немного подождите, после чего n8n снова будет доступен по прежнему адресу. Затем проверьте, что версия приложения обновилась.
# Установка OpenClaw
Source: https://timeweb.cloud/docs/unix-guides/openclaw?utm_source=llms_txt&utm_medium=ai
[OpenClaw](https://openclaw.ai/) — это self-hosted AI-ассистент, который можно развернуть на облачном сервере. В отличие от обычных чат-ботов, OpenClaw не только отвечает на запросы, но и может взаимодействовать с миром: отправлять сообщения, обрабатывать данные, работать с файлами и внешними сервисами. С OpenClaw можно взаимодействовать через мессенджеры (например, Телеграм), а также напрямую через API или командную строку.
## Создание сервера
Для запуска OpenClaw создайте сервер с подходящей конфигурацией через панель управления.
1. [Зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если его еще нет.
2. В панели управления перейдите в раздел [«Облачные серверы»](https://timeweb.cloud/my/servers).
3. Кликните «Создать» или «Добавить».
4. На вкладке «Маркетплейс» выберите образ «OpenClaw».

5. Укажите регион, в котором будет размещен сервер.
6. Выберите конфигурацию сервера. Мы рекомендуем следующие параметры:
- 4 ядра CPU
- 8 ГБ RAM
- 80 ГБ NVMe
8. Остальные параметры можно оставить без изменений.
9. Нажмите «Заказать», чтобы создать сервер.
## Настройка сервера
После создания сервера выполните первоначальную настройку OpenClaw.
Подключитесь к серверу по SSH с вашего компьютера.
Если используете macOS или Linux, запустите терминал, на Windows — PowerShell.
В панели управления откройте вкладку «Дашборд» и скопируйте строку из блока «Подключение по SSH».

Вставьте эту команду в терминал и нажмите `Enter`.
При первом подключении появится запрос на добавление сервера в список доверенных:
```bash
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```
Введите `yes` и нажмите `Enter`.
Введите пароль из поля «Root-пароль» на вкладке «Дашборд» панели управления.
Обратите внимание, что при вводе пароль не отображается — это нормальное поведение терминала.
### Базовая настройка
> [!NOTE]
> При настройке может возникнуть ошибка «_Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service_». Она связана с ошибкой в установщике OpenClaw. Причина и временное решение описаны [в разделе ниже](https://timeweb.cloud/docs/unix-guides/openclaw#oshibka-pri-nastrojke).
При первом входе в систему автоматически запустится мастер настройки OpenClaw. Если он не запустился или был закрыт, его можно вызвать вручную командой:
```bash
openclaw onboard
```
Далее выполните следующие шаги:
1. Ознакомьтесь с дисклеймером и согласитесь с условиями, выбрав «Yes».
2. В разделе «Onboarding mode» выберите «QuickStart».
3. На шаге «Model/auth provider»:
- Если у вас есть API-ключ от внешнего провайдера, выберите его.
- Если вы планируете использовать наших AI-агентов, выберите «Skip for now».

_Мастер настройки [OpenClaw](https://openclaw.ai/)_
4. В «Filter models by provider» укажите «All providers».
5. Параметр «Default model» оставьте без изменений.
6. На шаге «Select channel (QuickStart)» можно настроить мессенджер. Для подключения Телеграма [воспользуйтесь инструкцией ниже](https://timeweb.cloud/docs/unix-guides/openclaw#podkluchenie-k-telegramu).
7. Шаг «Configure skills now?» можно пропустить, выбрав «No».
8. На этапе «Enable hooks?» выберите «Skip for now», нажав пробел и Enter.
9. В разделе «How do you want to hatch your bot?» выберите «Do this later».

_Мастер настройки [OpenClaw](https://openclaw.ai/)_
### Подключение AI-агентов
Если вы планируете использовать [наших AI-агентов](https://timeweb.cloud/docs/ai-agents), выполните команду для запуска скрипта подключения:
```bash
curl -fsSL https://st.timeweb.com/cloud-static/twc-openclaw-autoinstall.sh -o /tmp/twc-openclaw-autoinstall.sh && bash /tmp/twc-openclaw-autoinstall.sh
```
Скрипт потребует:
1. **Указать базовый URL** — он отображается в панели управления агентом, во вкладке «Дашборд».

2. **Ввести API-ключ**. Получить его можно во вкладке в панели управления:
- Перейдите во вкладку «Управление»
- Нажмите «Изменить» в строке «Доступность».
- В открывшемся окне нажмите «Добавить новый ключ».

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

_Консольный интерфейс [OpenClaw](https://openclaw.ai/)_
Если потребуется изменить настройки позже — повторно запустите мастер настройки командой:
```bash
openclaw onboard
```
Для взаимодействия с OpenClaw в терминале доступен текстовый интерфейс. Чтобы запустить его, выполните команду:
```bash
openclaw tui
```
После запуска откроется интерактивная консоль, в которой можно отправлять сообщения агенту, просматривать ответы и отслеживать активность.
## Подключение к Телеграму
Для взаимодействия с OpenClaw через Телеграм необходимо создать собственного бота и получить API-ключ. Это можно сделать с помощью официального бота [@BotFather](https://t.me/BotFather).
Откройте Телеграм и выполните действия:
1. Перейдите в [@BotFather](https://t.me/BotFather) и начните диалог.
2. Выполните команду `/newbot`.
3. Укажите имя бота — оно будет отображаться в списке чатов.
4. Укажите логин бота. Он должен быть уникальным и обязательно заканчиваться на `bot` (например, `openclaw_tw_bot`).
После выполнения всех шагов BotFather сгенерирует API-ключ. Этот ключ будет использоваться для интеграции Телеграм-бота с OpenClaw.

_Получение API-ключа в интерфейсе [Telegram](https://telegram.org/)_
В мастере настройки OpenClaw, на этапе «Select channel (QuickStart)», выберите «Telegram» и вставьте полученный API-ключ.
Полностью завершите настройку OpenClaw и запустите диалог с ботом, отправив команду:
```bash
/start
```
В ответ бот пришлет сообщение с кодом сопряжения.

_Получение кода сопряжения в интерфейсе [Telegram](https://telegram.org/)_
На сервере выполните команду:
```bash
openclaw pairing approve telegram
```
Где `` — это код, полученный от бота в Телеграм.
После этого бот будет готов к работе: вы сможете отправлять команды и взаимодействовать с агентом напрямую через Телеграм.
Сопряжение нужно будет повторить для каждого нового клиента.
## Веб-интерфейс
Веб-интерфейс можно использовать для взаимодействия с агентом и управления его работой. Через него можно общаться с ботом, проверять активные сессии и их состояние, управлять токенами доступа, а также выполнить базовую настройку. Интерфейс предназначен для администрирования и отладки и не рассчитан на публикацию в открытый интернет.

_Раздел «Chat» в веб-интерфейсе [OpenClaw](https://openclaw.ai/)_
Для получения доступа к веб-интерфейсу выполните команду, подключившись к серверу по SSH:
```bash
openclaw dashboard
```
В ответ вы получите подобный вывод:
```bash
🦞 OpenClaw 2026.2.3-1 (d84eb46) — I keep secrets like a vault... unless you print them in debug logs again.
Dashboard URL: http://127.0.0.1:18789/?token=c6aaee5ae1fd9a7925892f4738f37deb01d2bd13d0c11199
Copy to clipboard unavailable.
No GUI detected. Open from your computer:
ssh -N -L 18789:127.0.0.1:18789 root@147.45.148.206
Then open:
http://localhost:18789/
http://localhost:18789/?token=c6aaee5ae1fd9a7925892f4738f37deb01d2bd13d0c11199
Docs:
https://docs.openclaw.ai/gateway/remote
https://docs.openclaw.ai/web/control-ui
```
Команда используется для генерации токена. Далее понадобится значение из строки Dashboard URL.
По умолчанию веб-интерфейс доступен только локально на сервере и недоступен извне. Для удаленного доступа рекомендуется использовать SSH-туннель. На своем компьютере выполните:
```bash
ssh -N -L 18789:127.0.0.1:18789 root@IP_сервера
```
После установки соединения откройте в браузере URL, полученный ранее:
```bash
http://127.0.0.1:18789/?token=c6aaee5ae1fd9a7925892f4738f37deb01d2bd13d0c11199
```
## Обновление OpenClaw
Для обновления OpenClaw выполните команду:
```bash
openclaw update
```
Команда обновит OpenClaw и установленные плагины.
Проверить текущую версию можно командой:
```bash
openclaw --version
```
## Ошибка при настройке
Сейчас при установке OpenClaw может появиться ошибка:
_Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service._
Она возникает из-за ошибки в установщике OpenClaw. Временное решение описано [в issues официального репозитория](https://github.com/openclaw/openclaw/issues/36008).
Если вы получили эту ошибку, выполните следующие команды на сервере.
Сначала задайте переменные окружения для пользовательского `systemd`:
```bash
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
```
Создайте временный сервис:
```bash
cat > ~/.config/systemd/user/openclaw-gateway.service <<'EOF'
[Unit]
Description=OpenClaw Gateway (bootstrap placeholder)
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
[Install]
WantedBy=default.target
EOF
```
Активируйте сервис.
Сначала обновите конфигурацию пользовательских сервисов `systemd`:
```bash
systemctl --user daemon-reload
```
Затем включите сервис и запустите его:
```bash
systemctl --user enable --now openclaw-gateway.service
```
После этого убедитесь, что сервис включен:
```bash
systemctl --user is-enabled openclaw-gateway.service
```
После этого повторно запустите настройку:
```bash
openclaw onboard
```
И выполните [шаги инструкции](https://timeweb.cloud/docs/unix-guides/openclaw#bazovaya-nastrojka) еще раз.
На этапе «Config handling» выберите «Update values».
# Установка Paperclip
Source: https://timeweb.cloud/docs/unix-guides/paperclip?utm_source=llms_txt&utm_medium=ai
[Paperclip](https://github.com/paperclipai/paperclip) — это open-source-платформа для управления командой AI-агентов. Она позволяет объединять агентов и модели в одной системе, распределять между ними роли и задачи, отслеживать выполнение работы, расходы и управлять процессами через веб-интерфейс. Проект подходит для сценариев, где требуется координация нескольких AI-инструментов в рамках одного рабочего процесса.
## Установка
При создании облачного сервера на этапе «Образ» перейдите во вкладку «Маркетплейс», в ней выберите раздел «AI» и выберите сборку Paperclip.

После этого выберите регион размещения и конфигурацию сервера. Остальные параметры можно оставить по умолчанию. Подробное описание всех этапов доступно [в инструкции по созданию облачного сервера](https://timeweb.cloud/docs/cloud-servers/manage-servers/create-server).
Закажите сервер, нажав кнопку «Заказать», и дождитесь завершения создания. После этого на вашу электронную почту будет отправлено письмо со ссылкой на скрипт автоматической настройки сервера.
После создания сервера доступны два варианта настройки:
- автоматическая настройка;
- ручная настройка.
## Автоматическая настройка
Автоматическая настройка выполняется с помощью готового скрипта. Он устанавливает и настраивает Paperclip, а также OpenCode для работы с AI-моделями.
Такой способ предполагает использование [наших AI-агентов](https://timeweb.cloud/docs/ai-agents) или [AI Gateway](https://timeweb.cloud/docs/ai-agents/api-usage/ai-gateway) в качестве провайдера OpenAI-совместимого API. Перед началом настройки убедитесь, что у вас [создан AI-агент](https://timeweb.cloud/docs/ai-agents/manage-agents/create) или выпущен [токен для использования AI Gateway](https://timeweb.cloud/docs/ai-agents/api-usage/ai-gateway#sozdanie-api-klucha).
Для запуска настройки подключитесь к серверу по SSH и выполните команду:
```bash
curl -fsSL "https://st.timeweb.com/cloud-static/twc-paperclip-autoinstall.sh" -o /tmp/twc-paperclip-autoinstall.sh && chmod +x /tmp/twc-paperclip-autoinstall.sh && sudo /tmp/twc-paperclip-autoinstall.sh
```
После запуска скрипт последовательно запросит необходимые параметры.
Укажите URL OpenAI API.
Если планируется использование AI Gateway, введите:
```bash
https://api.timeweb.ai/v1
```
Если используется AI-агент, [URL можно найти](https://timeweb.cloud/docs/ai-agents/api-usage/openai-compatible-api#bazovyj-url) на вкладке «Дашборд» выбранного агента.
Введите токен для выбранного способа подключения. Во время ввода символы отображаться не будут.
Укажите модель в формате:
```bash
вендор/имя_модели
```
Например:
```bash
openai/gpt-5-mini
```
После ввода параметров скрипт:
- проверит и установит зависимости;
- создаст отдельного системного пользователя;
- настроит OpenCode;
- создаст пользователя администратора;
- создаст проект в Paperclip.
По завершении установки будет выведена ссылка на веб-интерфейс Paperclip, а также данные для входа под учетной записью администратора.
## Ручная настройка
Рассмотрим ручную настройку Paperclip: создадим отдельного пользователя, зададим параметры сервера, настроим автозапуск сервиса и создадим учетную запись администратора.
### Создание пользователя
Подключитесь к серверу по SSH и создайте отдельного пользователя, под которым будет запускаться Paperclip:
```bash
sudo adduser paperclip
```
Добавьте пользователя в группу `sudo`:
```bash
sudo usermod -aG sudo paperclip
```
Переключитесь на созданного пользователя:
```bash
su paperclip
```
### Первичная настройка Paperclip
Запустите настройку Paperclip:
```bash
paperclipai onboard
```
В процессе настройки:
- выберите пункт «Quickstart»;
- на вопрос «Start Paperclip now?» ответьте «No».
После этого откройте настройку параметров сервера:
```bash
paperclipai configure --section server
```
Укажите следующие значения:
- Reachability — Custom;
- Server port — `3100` (значение по умолчанию);
- Auth mode — Authenticated;
- Exposure profile — Public internet;
- Bind host — `0.0.0.0`;
- Public base URL — домен, который будет использоваться для доступа к сервису, либо `http://IP_сервера`, если домен не требуется.
После завершения настройки проверьте, что Paperclip запускается корректно. Выполните:
```bash
paperclipai run
```
Откройте в браузере адрес `http://ip_сервера:3100/`.
Если появилось сообщение о необходимости создать учетную запись администратора, значит сервис работает корректно.
Вернитесь в терминал и остановите процесс сочетанием клавиш `Ctrl + C`.
### Настройка автозапуска через systemd
Чтобы Paperclip запускался автоматически после перезагрузки сервера, создайте systemd-сервис.
Создайте файл конфигурации:
```bash
sudo nano /etc/systemd/system/paperclip.service
```
Добавьте в него:
```bash
[Unit]
Description=Paperclip
After=network.target
[Service]
User=paperclip
WorkingDirectory=/home/paperclip
ExecStart=/usr/bin/paperclipai run
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
Сохраните файл, затем выполните следующие команды.
Перечитайте конфигурацию `systemd` после создания нового сервиса:
```bash
sudo systemctl daemon-reload
```
Добавьте сервис в автозагрузку, чтобы он запускался автоматически после перезагрузки сервера:
```bash
sudo systemctl enable paperclip
```
Запустите Paperclip:
```bash
sudo systemctl start paperclip
```
После этого снова откройте в браузере страницу по адресу `http://IP_сервера:3100`. Должно отображаться то же сообщение о необходимости создать администратора.
### Создание администратора
Для создания первого администратора выполните команду:
```bash
paperclipai auth bootstrap-ceo --force --base-url http://IP_сервера:3100
```
Команда создаст одноразовую ссылку-приглашение для регистрации администратора. Пример ссылки:
```bash
http://IP_сервера:3100/invite/pcp_bootstrap_523d3256ea12afbb5e1f9d7f805233e9aecce5db58c85b17
```
Перейдите по полученной ссылке и нажмите кнопку «Sign in / create account».

_Страница авторизации в [Paperclip](https://paperclip.ing/)_
На следующем экране нажмите «Create one», чтобы создать нового пользователя.
> [!NOTE]
> Адрес электронной почты используется только как логин. Письма на него отправляться не будут.
Заполните поля формы и нажмите «Create account».
Если после создания аккаунта вы снова попали на страницу приглашения, откройте вручную адрес `http://IP_сервера:3100`.
После входа откроется страница создания компании. Завершите первоначальную настройку и укажите параметры подключения к нужному провайдеру агентов.
После завершения настройки откроется дашборд Paperclip.

_Интерфейс [Paperclip](https://paperclip.ing/)_
На этом ручная настройка Paperclip завершена.
# Установка Hermes Agent
Source: https://timeweb.cloud/docs/unix-guides/hermes?utm_source=llms_txt&utm_medium=ai
[Hermes Agent](https://hermes-agent.nousresearch.com/) — это self-hosted AI-агент от Nous Research. Он работает на вашем сервере, взаимодействует с файлами и инструментами, выполняет команды в терминале и сохраняет историю сессий. Общаться с агентом можно через текстовый интерфейс в терминале.
В Timeweb Cloud доступен готовый образ с установленным Hermes. После создания сервера останется подключить к нему AI-агента или AI Gateway.
## Создание сервера
1. В панели управления перейдите в раздел «[Облачные серверы](https://timeweb.cloud/my/cloud/servers)».
2. Нажмите «Создать» или «Добавить».
3. На вкладке «Маркетплейс» перейдите в раздел «AI» и выберите образ «Hermes».
4. Выберите регион и конфигурацию сервера, настройте остальные параметры.
5. Нажмите «Заказать», чтобы создать сервер.

Hermes и необходимые для его работы компоненты будут установлены автоматически при создании сервера.
## Выбор способа подключения
К Hermes вы можете подключить AI-агента или AI Gateway.
Если подключить AI-агента, можно использовать [базу знаний](https://timeweb.cloud/docs/ai-agents/manage-knowledge-bases). Hermes будет работать с одной моделью — той, которая выбрана в настройках агента. Чтобы сменить ее, измените модель в панели управления Timeweb Cloud.
Если подключить AI Gateway, использовать базы знаний AI-агентов не получится. Зато в Hermes можно выбрать любую доступную в AI Gateway модель и переключать модели во время работы.
Перед началом настройки подготовьте параметры подключения.
### Для AI-агента
Понадобятся:
- [Базовый URL агента](https://timeweb.cloud/docs/ai-agents/api-usage/openai-compatible-api#bazovyj-url). Он отображается на вкладке «Дашборд» в панели управления агентом.
- [Ключ доступа](https://timeweb.cloud/docs/ai-agents/manage-agents/api-access-key).
Если AI-агент еще не создан, воспользуйтесь [инструкцией](https://timeweb.cloud/docs/ai-agents/manage-agents/create).
### Для AI Gateway
Понадобятся:
- Базовый URL: `https://api.timeweb.ai/v1`.
- [API-ключ AI Gateway](https://timeweb.cloud/docs/ai-agents/api-usage/ai-gateway#sozdanie-api-klucha).
AI Gateway использует отдельные ключи, не связанные с ключами AI-агентов.
## Настройка подключения
Подключитесь к серверу по SSH с вашего компьютера.
Если используете macOS или Linux, откройте терминал, на Windows — PowerShell. В панели управления сервером перейдите на вкладку «Дашборд» и скопируйте команду из блока «Подключение по SSH». Вставьте ее в терминал и нажмите `Enter`.

При первом подключении появится запрос на добавление сервера в список доверенных:
```bash
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```
Введите `yes` и нажмите `Enter`, затем введите root-пароль из панели управления. При вводе пароль не отображается — это нормальное поведение терминала.
После подключения автоматически откроется текстовый интерфейс Hermes. Вернитесь в командную строку, нажав `Ctrl+C`.
Запустите скрипт настройки:
```bash
curl -fsSL https://st.timeweb.com/cloud-static/twc-hermes-autoinstall.sh -o /tmp/twc-hermes-autoinstall.sh && bash /tmp/twc-hermes-autoinstall.sh
```
Скрипт запросит:
1. `Base URL` — базовый URL AI-агента или AI Gateway.
2. `API Key` — соответствующий ключ доступа.
После ввода параметров скрипт проверит подключение и выведет выбранную конфигурацию. Проверьте значения. Если все указано правильно, введите `y` и нажмите `Enter`.

Скрипт добавит провайдера `twc-agent` и откроет интерфейс чата.
## Выбор модели в AI Gateway
Этот шаг требуется только при подключении через AI Gateway. При использовании AI-агента Hermes обращается к модели, выбранной в настройках агента.
В интерфейсе Hermes выполните команду:
```bash
/model
```
Откроется окно выбора модели. Выберите провайдера `twc-agent`, затем — модель, которую хотите использовать.

_Интерфейс [Hermes Agent](https://hermes-agent.nousresearch.com/)_
Модель можно изменить во время работы той же командой `/model`.
## Работа с Hermes
Чтобы вручную запустить текстовый интерфейс Hermes, выполните:
```bash
hermes --tui
```
В интерфейсе можно отправлять запросы агенту, просматривать ответы и отслеживать выполнение инструментов.
Полезные команды:
| **Команда** | **Действие** |
| --- | --- |
| `/help` | Открыть список команд |
| `/model` | Выбрать модель |
| `/sessions` | Переключиться между открытыми сессиями или создать новую |
| `/usage` | Посмотреть расход токенов и заполнение контекста |
| `/new` | Начать новый диалог |
| `/details` | Включить или скрыть подробности вызовов инструментов |
Чтобы продолжить последнюю сессию после выхода, запустите:
```bash
hermes --tui --continue
```
Чтобы открыть конкретную сохраненную сессию по идентификатору или названию, используйте:
```bash
hermes --tui --resume "<идентификатор_или_название>"
```
Основные сочетания клавиш:
| **Сочетание** | **Действие** |
| --- | --- |
| `Enter` | Отправить сообщение |
| `Alt+Enter` или `Ctrl+J` | Добавить новую строку |
| `Ctrl+C` | Прервать текущую операцию; повторное нажатие завершает Hermes |
| `Ctrl+D` | Выйти из Hermes |
После настройки отправьте агенту произвольный запрос и убедитесь, что он отвечает. Если используется AI Gateway, перед проверкой выберите модель командой `/model`.
Другие команды и возможности интерфейса описаны в [официальной документации Hermes](https://hermes-agent.nousresearch.com/docs/user-guide/tui).
# Установка Cloud Hosted Router
Source: https://timeweb.cloud/docs/unix-guides/chr-install?utm_source=llms_txt&utm_medium=ai
Cloud Hosted Router (CHR) — это версия операционной системы RouterOS от Mikrotik, предназначенная для работы в виртуализированной среде. CHR используется для создания виртуальных маршрутизаторов, балансировщиков нагрузки и VPN-шлюзов в облачных инфраструктурах.
Для начала работы [зарегистрируйте аккаунт](https://timeweb.cloud/docs?auth=registrationAccount) в Timeweb Cloud, если у вас его еще нет. Вы получите доступ [в панель управления](https://timeweb.cloud/my/), где далее сможете создать виртуальный сервер.
В качестве операционной системы можно выбрать любой Linux-дистрибутив, так как он будет использоваться только на этапе записи образа.
В нашем примере используется Ubuntu 22.04. Минимальные системные требования CHR — 256 МБ оперативной памяти и 128 МБ дискового пространства, поэтому достаточно минимальной конфигурации. Остальные параметры сервера можно оставить по умолчанию.
После создания сервера загрузите его [с диска восстановления](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode). Когда система загрузится в режиме восстановления, откройте вкладку «Консоль». Для открытия доступа по SSH сначала отключите файрвол командой:
```shell
systemctl stop iptables
```
Затем установите пароль для пользователя `root`:
```shell
passwd
```
Введите новый пароль дважды. После этого можно подключиться к серверу по SSH с использованием заданного пароля.
Подключившись по SSH, примонтируйте `tmpfs` в `/tmp`:
```shell
mount -t tmpfs tmpfs /tmp/
```
Перейдите в директорию `/tmp`:
```shell
cd /tmp
```
Скачайте образ CHR:
```shell
wget https://download.mikrotik.com/routeros/7.20.8/chr-7.20.8.img.zip
```
Актуальные версии образа вы можете скачать [с официального сайта](https://mikrotik.com/download).
Распакуйте архив:
```shell
unzip chr-7.20.8.img.zip
```
Запишите образ на диск:
```shell
dd if=chr-7.20.8.img of=/dev/sda bs=4M oflag=sync
```
На этом установка завершена. Перезагрузите сервер в обычном режиме. После загрузки откройте вкладку «Консоль» и авторизуйтесь с логином `admin`, оставив поле пароля пустым. Система предложит задать новый пароль. После этого можно подключаться к серверу по SSH, используя логин `admin` и установленный пароль.
# Диагностика и решение проблем
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix?utm_source=llms_txt&utm_medium=ai
Инструкции по базовой диагностике и устранению неполадок на серверах с системами Unix.
- [Базовая диагностика при проблемах в работе сайта](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/basic-diagnostics)
- [Проблемы с базой данных](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/database-issues)
- [Анализ дискового пространства: ncdu, du](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-space-analysis-ncdu-du)
- [Данные о дисках: df, lsblk, parted, fdisk](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-data-df-lsblk-parted-fdisk)
- [Контроль нагрузки и процессов: top, htop, atop](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/load-and-process-control-top-htop-atop)
- [Завершение процессов OOM Killer](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/ending-processes-oom-killer)
- [Переполнение inodes](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/inodes-overflow)
- [Проверка файловой системы](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/file-system-check)
- [Ускорение работы сайта: перенос MySQL в tmpfs](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/improving-site-performance-mysql-to-tmpfs)
- [Устранение ошибки «Could not get lock /var/lib/dpkg/lock»](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/ustranenie-oshibki-could-not-get-lock-var-lib-dpkg-lock)
- [Другие возможные проблемы](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/other-issues)
# Базовая диагностика при проблемах в работе сайта
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/basic-diagnostics?utm_source=llms_txt&utm_medium=ai
Если в работе вашего сайта, размещенного на VDS, возникли неполадки (недоступность сайта, ошибки 500, 502, 504, ошибки базы данных и др.), рекомендуем перед обращением в службу технической поддержки выполнить базовую диагностику по инструкции ниже. Полученная информация поможет либо решить проблему самостоятельно, либо ускорить обработку обращения нашими специалистами.
## Доступен ли сервер из внешней сети?
Проверить доступность сервера проще всего с помощью любого сервиса в сети, предоставляющего такую возможность: найти подобные сайты можно по запросам «ping online», «проверка доступности», «сервис ping» и так далее; их очень много и они бесплатны.
Также проверку можно выполнить из командной строки вашего компьютера.
В командной строке выполните:
```shell
ping IP_адрес_сервера
```
Если сервер доступен, в выводе сразу начнет отображаться информация об отправке пакетов и получении ответов от сервера. Это выглядит примерно следующим образом:

Для остановки выполнения команды нажмите Ctrl+C.
Если обмен пакетами не происходит — сервер недоступен.
В этом случае попробуйте проверить сетевые настройки на сервере. Для этого необходимо [подключиться по SSH](https://timeweb.cloud/docs/unix-guides/ssh) или использовать веб-консоль в панели управления.
Выполните команду:
```shell
ifconfig
```
Пример вывода с корректными настройками:

Если строка`inet addr` пустая, есть проблема с сетевыми настройками, которую можно попробовать решить [настройкой статического IP-адреса](https://timeweb.cloud/docs/unix-guides/adding-ip-addresses).
## Запущены ли службы для работы сайтов?
Для проверки работы служб [подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) или используйте веб-консоль в панели управления.
Проверки выполняются командой вида:
```shell
service имя_службы status
```
Например, для Apache это будет команда:
```shell
service apache2 status
```
или:
```shell
service httpd status
```
Для Nginx:
```shell
service nginx status
```
Для MySQL:
```shell
service mysql status
```
```shell
service mysqld status
```
Для MariaDB:
```shell
service mariadb status
```
Примеры запущенных служб:

Если в выводе не фигурирует слово `running`, служба не запущена.
В этом случае в первую очередь необходимо попытаться запустить службу. Это выполняется командой вида:
```shell
service имя_службы start
```
Например, для Apache2:
```shell
service apache2 start
```
Или:
```shell
service httpd start
```
Nginx:
```shell
service nginx start
```
MySQL:
```shell
service mysql start
```
```shell
service mysqld start
```
MariaDB:
```shell
service mariadb start
```
После запуска службы повторно проверьте работу сайтов. Если проблема сохраняется, переходите к следующим проверкам.
## Состояние дискового пространства
Общую информацию можно получить командой:
```bash
df -h
```
В выводе будут данные о размере диска и доступном объеме.
Если дисковое пространство исчерпано, необходимо принять меры: [расширить диск](https://timeweb.cloud/docs/unix-guides/disk-resizing) или удалить ненужные файлы.
Для работы с дисковым пространством можно использовать утилиты `ncdu` и `du`. Подробнее о работе с ними — в статье [Анализ дискового пространства: ncdu, du](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-space-analysis-ncdu-du).
## Состояние inodes
Если индексные дескрипторы — inodes — исчерпаны, это тоже может быть причиной неполадок. В работе сервера начнут возникать ошибки и появляться уведомления о недостаточном дисковом пространстве.
Подробнее о диагностике и устранении проблемы см. в статье [Переполнение inodes](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/inodes-overflow).
## Наличие необходимых прав для директорий с логами
Необходимо проверить, назначены ли права на запись для директорий, в которые пишутся логи основных служб сервера.
Это директории:
```shell
/var/log/mysql/
/var/log/nginx/
/var/log/apache2/ или /var/log/httpd/
```
Проверить наличие нужных прав можно командой:
```shell
ls -l /var/log/
```
Пример вывода:
Здесь мы видим, что у интересующих нас каталогов установлены корректные права, а именно — у владельца есть права на запись, чтение и исполнение (rwx):
```shell
drwxr-x--- 2 root adm 4096 Aug 16 09:26 apache2
drwxrwxr-x 2 mysql adm 4096 Aug 16 09:26 mysql
drwxr-xr-x 2 root adm 4096 Aug 16 09:27 nginx
```
Если у каталога нет нужных прав, их можно установить командой `chmod`:
```shell
chmod -R 755 /путь/к/каталогу/
```
Например:
```shell
chmod -R 755 /var/log/nginx/
```
В данном случае будут установлены права 755, т.е. rwxr-xr-x, то есть полный набор прав для владельца и права на чтение и исполнение — для остальных.
Если при проверке вы видите, что директория с логами той или иной службы отсутствует, ее необходимо создать командой mkdir и установить нужные права, например:
```shell
mkdir /var/log/mysql/
chmod -R 775 /var/log/mysql/
```
После того, как выполнены проверки дискового пространства, inodes и прав, повторно запустите службы и проверьте работу сайта.
Если часть служб по-прежнему не запускается или сохраняются проблемы в работе сайта, создайте обращение в техническую поддержку и сообщите в нем полученную в ходе диагностики информацию.
# Проблемы с базой данных
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/database-issues?utm_source=llms_txt&utm_medium=ai
В статье рассказываем про возможные неполадки в работе базы данных и способы их устранения.
## Недоступность базы данных
[Подключитесь к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) и выполните следующие проверки.
1. Проверьте, запущена ли служба MySQL:
```shell
service mysql status
```
Пример вывода для запущенной службы:

Если в выводе отсутствует слово running, служба не запущена. В этом случае необходимо попытаться ее запустить:
```shell
service mysql start
```
После проверьте работу сайта.
Если проблема сохраняется, переходите к следующей проверке.
2. Проверьте состояние дискового пространства.
В первую очередь выполните команду ниже, чтобы просмотреть общий и занятый объем на диске:
```shell
df -h
```
Важно, чтобы доступное пространство было именно на основном разделе. Если пространство исчерпано, необходимо [расширить диск](https://timeweb.cloud/docs/unix-guides/disk-resizing) или освободить место на нем. Для работы с дисковым пространством рекомендуем использовать [утилиты ncdu или du](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-space-analysis-ncdu-du).
Если на диске достаточно свободного места, но проблема сохраняется, [проверьте состояние inodes](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/inodes-overflow).
[Свяжитесь с нами](https://timeweb.cloud/my/support/help-problem), если вам не удается решить проблему самостоятельно.
## Повреждены таблицы БД (Table is marked as crashed)
При возникновении ошибок вида «Warning: Table ... is marked as crashed» необходимо выполнить восстановление таблиц.
Если на сервере установлен phpMyAdmin, можно выполнить восстановление с его помощью. Для этого перейдите в интерфейс PMA и кликните на нужную базу данных в меню слева. Отметьте в списке те таблицы, которые нужно восстановить (то есть таблицы, имена которых фигурируют в ошибках). В самом низу страницы нажмите на выпадающее меню «С отмеченными» и выберите вариант «Восстановить».
Можно обойтись и без phpMyAdmin, выполнив необходимые действия при [подключении по SSH](https://timeweb.cloud/docs/unix-guides/ssh).
Для восстановления одной таблицы выполните команду:
```shell
mysqlcheck -r имя_базы имя_таблицы -uroot -p
```
Для восстановления всех таблиц в базе используйте:
```shell
mysqlcheck -r имя_базы -uroot -p
```
Вы также можете выполнить проверку всех таблиц в базе с помощью команды:
```shell
mysqlcheck -r -A -uroot -p
```
## Ошибка 2006: MySQL server has gone away
Ошибка MySQL server has gone away означает, что сервер закрыл соединение, что происходит, как правило, в двух случаях: превышение таймаута ожидания или получение сервером слишком большого пакета.
В обоих случаях для решения проблемы потребуется внести правки в конфигурационный файл MySQL. Это можно сделать при [подключении к серверу по SSH](https://timeweb.cloud/docs/unix-guides/ssh) или с помощью веб-консоли в панели управления.
Конфигурационный файл может располагаться по различным путям, например:
```shell
/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
```
Чтобы определить, в какой файл необходимо вносить изменения, можно использовать команду вида:
```shell
grep -Rl 'имя_параметра' /etc/*
```
Например:
```shell
grep -Rl 'wait_timeout' /etc/*
grep -Rl 'max_allowed_packet' /etc/*
```
С ее помощью можно выяснить, в каких файлах прописан интересующий нас параметр, и изменить в них его значение.
### **Таймаут**
Чтобы увеличить таймаут ожидания, необходимо скорректировать значение параметра `wait_timeout`.
Откройте конфигурационный файл с помощью редактора (укажите корректный путь к файлу):
```shell
nano /etc/mysql/my.cnf
```
Измените значение параметра `wait_timeout` на более высокое. Значение указывается в секундах, т.е. чтобы увеличить время ожидания, например, до 10 минут, необходимо указать 600:
```shell
wait_timeout = 600
```
После перезапустите службу MySQL. В Debian/Ubuntu:
```shell
service mysql restart
```
В CentOS:
```shell
service mysqld restart
```
### **Размер пакетов**
В этом случае можно скорректировать максимально допустимый размер пакетов, увеличив параметр `max_allowed_packet`.
Откройте файл конфигурации (укажите корректный путь к файлу):
```shell
nano /etc/mysql/my.cnf
```
Измените значение параметра `max_allowed_packet` на более высокое (значение указывается в мегабайтах):
```shell
max_allowed_packet = 64M
```
И перезапустите службу:
В Debian / Ubuntu:
```shell
service mysql restart
```
В CentOS:
```shell
service mysqld restart
```
## Ошибка 1040: Too many connections
Появление ошибки «Too many connections» говорит о том, что исчерпан лимит подключений к базе данных. Как правило, проблема либо в медленных запросах, которые выполняются слишком долго (в этом случае требуется оптимизация кода), либо в числе одновременных подключений. В этом случае можно попробовать решить проблему увеличением лимита подключений (параметр `max_connections`) в конфигурационном файле MySQL.
В пункте выше было описано, как определить расположение файла `my.cnf`.
После откройте файл в редакторе, указав корректный путь:
```shell
nano /etc/mysql/my.cnf
```
И замените значение параметра на более высокое, например:
```shell
max_connections = 200
```
После перезапустите службу:
В Debian / Ubuntu:
```shell
service mysql restart
```
В CentOS:
```shell
service mysqld restart
```
## Ошибка 1292: Incorrect date value
При попытке добавить данные в таблицу MySQL:
```shell
ERROR 1292 (22007): Incorrect date value: '0000-00-00' for column 'columnname' at row 1
```
Из-за этой ошибки **может нарушаться работа импорта в 1С**.
Для решения проблемы необходимо:
1. Открыть файл `/etc/mysql/my.cnf`:
```shell
nano /etc/mysql/my.cnf
```
2. В строке, начинающейся с `sql-mode=`, удалить следующие значения:
```shell
NO_ZERO_IN_DATE
NO_ZERO_DATE
STRICT_ALL_TABLES
```
3. Выполнить перезагрузку mysql-сервера:
```shell
sudo service mysql restart
```
**Примечание:**
Если строка вида `sql-mode=` **отсутствует**, необходимо:
1. В файл `/etc/mysql/my.cnf` после параметра `[mysqld]` добавить строку:
```shell
sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
```
2. Выполнить перезагрузку mysql-сервера:
```shell
sudo service mysql restart
```
# Анализ дискового пространства: ncdu, du
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-space-analysis-ncdu-du?utm_source=llms_txt&utm_medium=ai
При работе с сервером важно контролировать занятый объем на диске. Если дисковое пространство окажется занято полностью, в работе VDS начнут возникать ошибки (ошибка 502, удаление файлов при их редактировании, повреждение базы данных). Чтобы этого избежать, необходимо своевременно увеличивать доступный объем, удаляя ненужные файлы или [расширяя сам диск](https://timeweb.cloud/docs/unix-guides/disk-resizing).
Для того, чтобы проверить, чем занято дисковое пространство на сервере, можно воспользоваться такими утилитами, как `ncdu` и `du`. Работать с ними достаточно просто. При анализе также может потребоваться проверить данные о файловой системе и inodes (подробнее об этом в последнем разделе этой статьи).
## ncdu
Утилита `ncdu` — один из самых удобных инструментов для анализа дискового пространства. Она имеет псевдографический интерфейс, что значительно упрощает работу с ней.
`ncdu` не предустановлена в дистрибутивах Unix по умолчанию, но ее легко можно установить командами ниже.
Для Debian / Ubuntu:
```shell
apt install ncdu
```
Для CentOS:
```shell
yum install ncdu
```
> [!NOTE]
> Если дисковое пространство уже переполнено и установить `ncdu` невозможно, можно сначала воспользоваться утилитой `du` (см. [ниже](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-space-analysis-ncdu-du#du)), удалить несколько файлов, чтобы освободить немного места, после чего поставить `ncdu` и дальше продолжить работать с ней.
Для того, чтобы просканировать и вывести данные о конкретной директории, воспользуйтесь командой:
```shell
ncdu имя_каталога
```
Например, чтобы вывести информацию о корневом каталоге, выполните:
```shell
sudo ncdu /
```
Формат вывода
Количество символов `#` помогает определить, какие файлы и каталоги занимают больше всего места.
Крайний левый столбец может содержать дополнительные обозначения (например, на скриншоте выше — пометки `e`):
- `!` — ошибка при чтении каталога;
- `.` — ошибка при чтении подкаталога, т.е. указанный размер может быть некорректным;
- `<` — объект исключен из подсчета (с помощью опции `--exclude`);
- `>` — объект из другой файловой системы;
- `@` — объект не является файлом или каталогом (символическая ссылка, сокет);
- `H` — объект уже был учтен (жесткая ссылка);
- `e` — пустой каталог.
### **Навигация**
Для перемещения по директориям используются клавиши со стрелками (вверх и вниз).
Стрелка вправо или Enter — войти в выбранную директорию.
Стрелка влево — вернуться в предыдущую директорию.
### **Доступные функции интерфейса**
С помощью следующих клавиш можно управлять полученным выводом:
`n` — упорядочить элементы по имени (в прямом и обратном порядке);
`s` — упорядочить элементы по размеру (в прямом и обратном порядке);
`g` — переключение между отображением «графика» (####) и объёма в процентах:

`a` — переключение между отображением реального размера файлов и объемом занимаемого пространства на диске;
`e` — скрыть/показать скрытые файлы и папки;
`?` — вызвать краткую справку;
`d` — удалить выбранный элемент (перед удалением будет запрошено подтверждение действия);
`i` — вывести информацию о выбранном элементе:

`q` — выйти.
### **Ключи ncdu**
Также при запуске утилиты можно использовать дополнительные ключи для `ncdu`:
`-h` (т.е. команда вида `ncdu -h`) — вывод краткой справки;
`-q` — «тихий режим», с обновлением данных каждые 2 секунды. Тихий режим позволяет снизить объем передачи данных при удаленных подключениях;
`-x` — учет при сканировании только файлов и директорий одной и той же файловой системы. Например, если есть директория `home/user/site.com`, и пространство с файлами и директориями внутри нее примонтировано из директории на другом диске (`/mnt/disk2/site.com`), то по умолчанию `ncdu` посчитает, что директория `/home/user/site.com` занимает пространство на основном диске, хотя на самом деле — на диске `disk2`. Использование ключа `-x` позволит отразить действительное положение дел на основном диске.
`-r` — режим «только для чтения», в данном режиме невозможно удаление файлов;
`--exclude` — исключение файла или типа файлов. `ncdu` отобразит эти файлы в общем списке, но не будет учитывать их при подсчете занятого пространства:
```shell
ncdu --exclude=/путь/к/каталогу/*что_исключаем*
```
Например:
```
ncdu --exclude=/home/user/*.html*
```
`-о` — сохранить результаты в файл:
```shell
ncdu / -o путь/к/файлу.txt
```
## du
Утилита `du` (от англ. disk usage) присутствует во всех UNIX-дистрибутивах по умолчанию и позволяет получить общую информацию о занятом месте.
При выполнении команды она выводит объем пространства, занимаемого каждым файлом и каталогом в текущем каталоге:

### **Ключи du**
Для вывода занятого объема в читаемом виде (в килобайтах, мегабайтах и т.д.) требуется ключ `-h`, мы будем использовать его во всех командах ниже.
- Например, можно начать с оценки размера всех директорий в корневой файловой системе. Для этого добавим ключи `-s` (для вывода итогового размера указанной директории) и `-c` (для вывода «итого»):
```shell
du -shc /*
```

- Полезный и удобный способ подсчета и сортировки:
```shell
du -sch ./*|sort -hr
```

- Чтобы узнать размер конкретной директории, используйте ключ `-s` и указывайте путь к нужной директории:
```shell
du -sh /путь/к/директории
```

- Для вывода размера всех файлов и подкаталогов в каталоге используйте ключ `-a`.
```shell
du -ah /путь/к/директории
```

- Для вывода суммарного объема всех показанных в выводе элементов используется ключ `-c`:
```shell
du -ch /путь/к/директории
```

- Можно использовать опцию `--exclude`**,** чтобы исключить из вывода конкретный тип файлов.
```shell
du -ah --exclude="*что_исключаем*"
```
Например:
```shell
du -ah --exclude="*.html*"
```

- Еще одна полезная опция — вывод времени последнего изменения файла. Для этого используется `--time`:
```shell
du -ah --time /путь/к/директории
```
## Нюансы
### Несоответствие данных du, ncdu и ПО
1. Иногда можно столкнуться с ситуацией, когда утилиты `du` и `ncdu` показывают меньший объем, чем выводится в панели управления; либо же вы удаляете файлы, но ваше ПО сообщает, что свободного пространства по-прежнему недостаточно.
В этом случае для проверки стоит воспользоваться командой `df`, которая позволит получить данные именно о файловой системе (в то время как `du` и `ncdu` показывают именно физический объем на диске):
```shell
df -h
```
Вероятнее всего, в выводе будет информация о занятости 100% пространства.
Это связано с тем, что иногда при удалении файла он остается доступен какому-либо запущенному процессу, из-за чего файловая система по-прежнему учитывает его в общем объеме занятого пространства.
Чтобы решить проблему, нужно определить, какими процессами все еще используются удаленные файлы:
```shell
lsof | grep '(deleted)'
```
После чего перезапустить эти процессы:
```
systemctl restart имя_сервиса
```
Например, в выводе ниже этот процесс — httpd, и именно его нужно перезапустить:

2. Если по данным панели управления и утилит `du` и `df` свободное место в наличии, однако ваше ПО или CMS по-прежнему сообщают о недостаточном объеме пространства, необходимо проверить [наличие свободных inodes](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/inodes-overflow).
# Данные о дисках: df, lsblk, parted, fdisk
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/disk-data-df-lsblk-parted-fdisk?utm_source=llms_txt&utm_medium=ai
Имена дисков на виртуальных серверах имеют вид `vd*` или `sd*`, где вместо символа `*` идет буква от `a` до `z`. Буква зависит от номера диска в системе.
На основном (первом) диске всегда установлена операционная система, и он имеет имя `vda` или `sda`. Дополнительный диск может быть добавлен в любой момент, и на нем могут располагаться любые данные.
Просмотреть имена дисков, а также дополнительную информацию о них, можно с помощью различных команд, например, `df -h`, `lsblk`, `parted -l`, `fdisk -l`.
## df -h
Данная команда позволяет вывести информацию только о примонтированных файловых системах, включая те, которые не являются дисковыми разделами.
В выводе отображается общий размер, использованный и доступный объем (в т.ч. в процентах), точка монтирования.
```shell
df -h
```
```shell
Filesystem Size Used Avail Use% Mounted on
udev 210M 0 210M 0% /dev
tmpfs 51M 1.2M 50M 3% /run
/dev/vda1 3.9G 1.2G 2.6G 32% /
tmpfs 255M 0 255M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 255M 0 255M 0% /sys/fs/cgroup
/dev/vdb1 4.8G 10M 4.6G 1% /mnt/disk2
tmpfs 51M 0 51M 0% /run/user/0
```
## lsblk
Выводит информацию о дисках и созданных на них разделах, их размерах, точке монтирования.
```shell
lsblk
```
```shell
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 202:0 0 5G 0 disk
|-vda1 202:1 0 4G 0 part /
|-vda2 202:2 0 1K 0 part
`-vda5 202:5 0 1022M 0 part [SWAP]
vdb 202:16 0 5G 0 disk
`-vdb1 202:17 0 5G 0 part /mnt/disk2
```
## parted -l
Позволяет получить сведения о дисках, разделах, их размерах в легко читаемом формате, файловой системе. Также является удобным инструментом для поиска примонтированного снапшота: в примере ниже снапшот выводится как диск `/dev/vdc` и имеет структуру, аналогичную диску `/dev/vda`.
```shell
parted -l
```
```shell
Model: Xen Virtual Block Device (vd)
Disk /dev/vda: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 4295MB 4294MB primary ext4
2 4296MB 5368MB 1072MB extended
2 4296MB 5368MB 1072MB extended
2 4296MB 5368MB 1072MB extended
Model: Xen Virtual Block Device (vd)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 5369MB 5368MB primary ext4
Model: Xen Virtual Block Device (vd)
Disk /dev/vdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 4295MB 4294MB primary ext4
2 4296MB 5368MB 1072MB extended
5 4296MB 5368MB 1072MB logical linux-swap(v1)
```
## fdisk -l
Команда, близкая по функциональности к `parted -l`, однако, предоставляющая более обширный вывод разделов (с дисками `/dev/ram*`), что может затруднять восприятие. В целом также позволяет просмотреть размеры дисков и разделов.
```shell
fdisk -l
```
```shell
Disk /dev/vda: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfb148422
Device Boot Start End Sectors Size Id Type
/dev/vda1 2048 8388607 8386560 4G 83 Linux
/dev/vda2 8390654 10483711 2093058 1022M 5 Extended
/dev/vda5 8390656 10483711 2093056 1022M 82 Linux swap / Solaris
Disk /dev/vdb: 5 GiB, 5368709120 bytes, 10485760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6b14d070
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 10485759 10483712 5G 83 Linux
```
# Контроль нагрузки и процессов: top, htop, atop
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/load-and-process-control-top-htop-atop?utm_source=llms_txt&utm_medium=ai
Каждый запущенный на сервере процесс оказывает нагрузку, и если ресурсов сервера становится недостаточно, могут возникать проблемы: медленная работа сайта, задержки в выполнении скриптов и так далее.
Проанализировать, что именно нагружает сервер, можно с помощью специальных утилит. Их довольно много; в статье мы рассмотрим три из них:
В целом они довольно похожи; работа с `htop` может быть немного удобнее за счет интерактивности; при этом `top` предустановлена во всех дистрибутивах Linux и не требует отдельной установки; `atop` отличается возможностью ведения логов.
При медленной работе сайта дополнительно рекомендуем воспользоваться сервисом [PageSpeed Insights](https://pagespeed.web.dev/) от Google, который анализирует скорость загрузки страниц и сообщает, каким образом можно оптимизировать работу сайта. Также можно попытаться оптимизировать работу сайта за счет переноса каталога [временных файлов MySQL в tmpfs](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/improving-site-performance-mysql-to-tmpfs).
## top
Как было сказано выше, утилита `top` предустановлена в UNIX-системах, поэтому для запуска вам достаточно подключиться к серверу по SSH и выполнить команду `top`.
Вывод утилиты выглядит следующим образом:

В верхней части выводится информация о системе, ниже — список процессов. Вывод обновляется каждые 2 секунды. Самые «жадные» до ресурсов процессы, оказывающие самую большую нагрузку на процессор, будут выведены вверху списка.
### **Сведения о системе**
Слева вверху указано текущее время системы, далее:
`Up` — время работы системы с последнего запуска.
`User` — количество текущих пользователей.
`Load average` — средняя нагрузка на сервер: отображаются значения за одну, пять и 15 минут назад.
`Tasks` — общее количество запущенных процессов в разных статусах (`running` — выполняемые; `sleeping` — в ожидании; `stopped` — остановленные; `zombie` — «зомби», дочерние процессы, ожидающие завершения родительского процесса).
`Cpu(s)` — процент времени процессора, затраченного на выполнение процессов, в том числе:
`us` — пользовательские процессы (высокое значение данного показателя может указывать, в том числе, на проблемы в коде сайта, необходимость его оптимизации);
`sy` — процессы ядра;
`id` — неиспользуемые ресурсы (чем выше этот показатель, тем лучше);
`wa` — операции ввода/вывода, т.е. дисковые операции.
`Mem`, `Swap` — сведения об использовании оперативной памяти (`total` — общий объем, `free` — объем свободной памяти, `used` — объем использованной памяти).
### **Сведения о процессах**
По умолчанию процессы выстроены в таблице по размеру нагрузки на процессор, от большего значения к меньшему.
Обозначения столбцов:
`PID` — идентификатор процесса;
`USER` — пользователь, запустивший процесс;
`PR` — приоритет процесса;
`NI` — измененный приоритет (присвоенный пользователем с помощью команды `nice`);
`VIRT` — объем используемой виртуальной памяти (здесь выводится тот объем памяти, который был запрошен процессом, даже если фактически используется меньше);
`RES` — объем используемой оперативной памяти (в данном случае, если процесс запросил 50Мб памяти, а использует 10Мб, будет выведено 10Мб);
`SHR` — объем памяти, разделяемой с другими процессами (т.е. память, которая может быть использована другими процессами);
`S` — статус процесса (`running` — запущен; `sleeping` — в ожидании; `zombie` — процесс-«зомби»);
`%CPU` — процент использования процессорного времени;
`%MEM` — процент использования оперативной памяти;
`TIME` — общее время работы процесса;
`COMMAND` — имя процесса (команда, которой был запущен процесс).
### **Управление**
Для работы с утилитой `top` используются следующие клавиши:
**Пробел** — обновить вывод
**M** — сортировка по используемой памяти
**P** — сортировка по нагрузке на процессор (используется по умолчанию)
**T** — сортировка по времени работы процесса
**A** — сортировка по максимальному потреблению различных ресурсов
**u** — сортировка по имени пользователя (потребуется ввести имя пользователя)
**k** — завершить процесс (потребуется указать его идентификатор, PID)
**n** — изменить количество процессов в выводе (потребуется указать нужное количество)
**c** — вывести полный путь запущенного процесса (столбец COMMAND)
**h** — вывод справки
**q** — выход из программы
## htop
В отличие от `top`, утилиту `htop` сначала необходимо установить на сервер:
**Ubuntu / Debian:**
```shell
apt install htop
```
**CentOS:**
```shell
dnf install htop
```
И после запустить:
```shell
htop
```
Вывод команды выглядит следующим образом:

Аналогично выводу `top`, в верхней части представлена информация о системе, ниже — список процессов. Значения столбцов в `htop` те же, что в `top` (они описаны выше).
Сверху слева вы можете видеть данные о нагрузке каждого ядра процессора, объем занятой памяти, сведения о количестве процессов, значения load avearage (средней нагрузки) за последние 1, 5 и 15 минут и аптайм системы.
По умолчанию процессы отсортированы по уровню нагрузки на процессор, от большего к меньшему.
Чтобы отсортировать их по занятой памяти (или любому другому параметру), просто кликните на название нужного столбца, например MEM. Для обратной сортировки (от меньшего к большему) достаточно кликнуть на тот же столбец еще раз. Также для управления сортировкой можно использовать клавиши **M** (сортировка по памяти), **P** (по процессору), **T** (по времени), аналогично утилите top.
Дополнительно используются:
**Пробел** — отметить процесс (таким образом можно помечать процессы для групповой операции с ними, например, завершения).
**u** — вывести процессы конкретного пользователя.
Для управления используются клавиши F1 – F10:
**F1** — вывод справки
**F2** — настройка вывода (добавление, удаление столбцов, отображение расширенной информации в верхнем блоке и пр.)
**F3** — поиск процессов
**F4** — фильтрация процессов (вывод процессов, имеющих в названии указанное слово)
**F5** — вывод дерева процессов (родительские и дочерние процессы)
**F6** — изменить тип сортировки
**F7 / F8** — повышение / понижение приоритета
**F9** — завершение процесса (в отличие от `top`, не требуется указание PID — просто выделите с помощью мыши или клавиатуры нужный процесс и нажмите F9. Для подтверждения завершения процесса нажмите Enter, для отмены — Esc).
**F10** — выход из программы
Функции для каждой клавиши могут изменяться, в зависимости от того, в каком меню программы вы находитесь, при этом доступные действия по соответствующим клавишам будут отображаться внизу окна, что упрощает работу с утилитой.
## atop
Основным преимуществом утилиты `atop` является функция ведения логов. Благодаря этому можно не только контролировать нагрузку в текущий момент, но и отслеживать работу процессов за прошедшие дни, чтобы диагностировать плавающие ошибки, которые сложно «поймать» при мониторинге в реальном времени.
Утилиту необходимо установить на сервер:
**Ubuntu / Debian:**
```shell
apt install atop -y
```
**CentOS:**
```shell
dnf install atop -y
```
Также рекомендуем добавить `atop` в автозагрузку:
```shell
systemctl enable atop
```
Запустите утилиту:
```shell
atop
```
Вывод выглядит примерно следующим образом:

В верхней части отображается информация о системе и нагрузке на ключевые компоненты: процессор, ядра, память, сеть. Ниже выводится список процессов.
Для управления выводом можно использовать:
**m** — сортировка по используемой памяти
**d** — сортировка по нагрузке на диск
**u** — нагрузка по пользователям
**v** — подробная информация по процессам
**i** — изменение интервала обновления данных (по умолчанию 10 секунд)
**g** — вернуть вывод по умолчанию
**n** — сортировка процессов по нагрузке на сеть (доступна при наличии установленного патча ядра)
Сочетания клавиш с Shift выстроят текущий список процессов по соответствующим параметрам:
- **Shift + m** — сортировка процессов памяти
- **Shift + с** — сортировка по потреблению CPU (по умолчанию)
- **Shift + d** — сортировка по использованию диска
- **Shift + n** — сортировка по использованию сети
### **Логи atop**
По умолчанию atop собирает сведения о состоянии системы каждые 10 минут и сохраняет их в файл лога, располагающийся в директории `/var/log/atop`.
Чтобы просмотреть лог за сегодня, выполните:
```shell
atop -r
```
Полезные клавиши:
- **t** — перейти вперед по времени
- **Shift + t** — перейти назад по времени
Файл за конкретный день имеет имя `atop_ГГГГММДД`. Чтобы просмотреть лог за нужный день, используйте команду `atop -r` и укажите путь к файлу, например:
```shell
atop -r /var/log/atop/atop_20250227
```
Изменить настройки ведения лога можно в конфигурационном файле `atop`, который размещается по пути `/etc/default/atop` или `/etc/sysconfig/atop` — в CentOS.
```shell
# Интервал создания снимка нагрузки сервера, в секундах:
INTERVAL=600
# Путь к директории с логами:
LOGPATH="/var/log/atop"
# Имя файла логов
OUTFILE="$LOGPATH/daily.log"
```
Например, для того, чтобы `atop` делал снимок нагрузки раз в минуту, а не раз в 10 минут, укажите интервал 60.
После внесения изменений перезапустите `atop`:
```shell
systemctl restart atop.service
```
# Завершение процессов OOM Killer
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/ending-processes-oom-killer?utm_source=llms_txt&utm_medium=ai
OOM Killer — механизм ядра Linux, который при исчерпании доступной памяти принудительно завершает отдельные процессы на сервере для освобождения RAM. Освободившаяся память передается ядру ОС, а после перенаправляется тому процессу, которому ее было недостаточно.
OOM Killer использует определенный набор правил для выбора процесса, который нужно «убить». В целом, в первую очередь будут завершены недавно запущенные пользовательские процессы, которые требуют большого объема памяти и/или имеют множество дочерних процессов; в последнюю очередь будут завершаться системные процессы пользователя root, запущенные значительное время назад.
В связи с тем, что OOM killer «убивает» процессы с помощью `SIGKILL`, что не дает возможности корректного завершения процессов, сохранения данных и пр., частое срабатывание этого механизма может приводить к серьезным последствиям в работе системе.
## Что делать при срабатывании OOM killer
- Если вы замечаете такое поведение только при больших нагрузках, например, при проведении работ по оптимизации сервера и др., можно временно отключить антивирусное ПО. Это позволит освободить до нескольких сотен мегабайт оперативной памяти, чтобы необходимые процессы были успешно выполнены. Разумеется, это снижает безопасность вашего сервера, поэтому рекомендуется использовать этот вариант только в качестве временной меры.
- Если OOM killer срабатывает регулярно, необходимо проанализировать работу сервера, баз данных, сайтов и провести оптимизацию, чтобы устранить причину проблемы.
- Если сервер оптимизирован, но памяти постоянно не хватает, увеличьте ее объем или перейдите на тариф с большим количеством RAM (см. [Тариф и конфигурация](https://timeweb.cloud/docs/cloud-servers/manage-servers/server-configuration)).
- Также есть возможность установить приоритет определенному процессу, чтобы запретить OOM killer его завершать. Значение приоритета хранится в файле `/proc/$PID/oom_adj`, который создается при запуске каждого процесса. Для установки приоритета необходимо узнать PID конкретного процесса, после чего воспользоваться командой:
```shell
echo -17 > /proc/PID_процесса/oom_adj
```
Можно использовать название процесса; на примере sshd:
```shell
pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done
```
Устанавливаемый приоритет в данном случае — -17. Более безопасный вариант — использовать приоритет -15. В этом случае процесс будет одним из последних, которые OOM killer завершит, но при этом отсутствует полный запрет на завершение, который в критических ситуациях может привести к kernel panic.
# Переполнение inodes
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/inodes-overflow?utm_source=llms_txt&utm_medium=ai
Inodes, или индексные дескрипторы («описатели») — это структуры данных в системах Unix, используемые для хранения информации о файлах и каталогах. Так как дескрипторы являются, по сути, данными о данных, их также называют метаданными.
Inodes хранят такие свойства файла, как его размер, информацию о владельце, группу, к которой принадлежит файл, права доступа, счетчик жестких ссылок, место, где на данный момент располагается содержимое файла, временные отметки (время последней модификации файла, последнее время доступа к файлу и т.д.) и пр. Другими словами, дескриптор содержит в себе всю информацию о файле, кроме его имени и содержимого.
Чем больше создано файлов, тем больше индексных дескрипторов занято. Чрезмерное количество файлов (например, файлы кэша или почтовая очередь) может привести к отсутствию свободных inodes и, как следствие, к ошибкам в работе сервера и сообщениям о недостаточном дисковом пространстве, несмотря на его фактическое наличие. Решать проблему потребуется удалением ненужных файлов или директорий.
Получить информацию о количестве использованных и занятых дескрипторов можно при [подключении по SSH](https://timeweb.cloud/docs/unix-guides/ssh), с помощью следующей команды:
```shell
df -hTi
```
Значения в выводе команды:
- **Inodes** — объем доступного пространства для индексных дескрипторов;
- **IUsed** — объем, занятый дескрипторами;
- **IFree** — свободный объем;
- **IUse%** — объем, занятый дескрипторами, в процентах.
``
Для решения проблемы с недостатком свободных inodes необходимо удалить достаточное число файлов или каталоги с большим числом файлов.
Найти директории, содержащие в себе большое количество файлов, можно с помощью команды ниже.
Ее можно использовать, например, в корневой директории ОС или корневой директории сайта, а дальше при необходимости спускаться ниже и ниже по структуре.
```shell
echo "Detailed Inode usage for: $(pwd)" ; for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n"
```
Команда подойдет для серверов с операционными системами Ubuntu, Debian или CentOS. Если вы используете другую ОС и команда не срабатывает — свяжитесь с [поддержкой](https://timeweb.cloud/my/support/help-problem/other), постараемся помочь.
Удалить ненужные файлы и директории можно с помощью команды `rm`. Будьте внимательны при ее использовании.
# Проверка файловой системы
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/file-system-check?utm_source=llms_txt&utm_medium=ai
Некоторые ваши действия или сбои в работе сервера могут привести к повреждению файловой системы на дисках. Поэтому в случае любой внештатной ситуации мы рекомендуем выполнить проверку диска.
Диски, как правило, имеют имена `vd*` или `sd*`; ниже в командах для примера используются `vda1` и `vdb1`. Замените их при необходимости на реальные имена дисков и разделов в вашей системе.
1. Загрузите систему с диска восстановления ([инструкция](https://timeweb.cloud/docs/cloud-servers/manage-servers/boot-mode)).
2. Просмотрите, какие разделы есть в системе, с помощью следующей команды:
```plain
lsblk -lp | grep part
```
Вывод команды будет примерно таким:
```shell
/dev/vda1 252:1 0 5G 0 part
/dev/vdb1 252:17 0 5G 0 part
```
3. Для проверки системного раздела — `vda1` — выполните команду:
```plain
e2fsck -yf /dev/vda1
```
Если нужно проверить какой-либо другой раздел, например, `vdb1`, укажите в команде именно его:
```plain
e2fsck -yf /dev/vdb1
```
4. По окончании операции вернитесь в настройку загрузки системы и выберите «Стандартный режим загрузки системы». После сохранения настроек и перезагрузки сервера можно продолжать работу.
# Ускорение работы сайта: перенос MySQL в tmpfs
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/improving-site-performance-mysql-to-tmpfs?utm_source=llms_txt&utm_medium=ai
Один из самых несложных способов повышения производительности сайта, который в большинстве случаев позволяет заметно ускорить его работу — это перенос временных файлов MySQL на RAM-диск. Благодаря этому работа с временными таблицами БД будет будет производиться через оперативную память вместо жесткого диска, за счет чего MySQL будет работать быстрее.
Настройка выполняется следующим образом.
1. Создайте папку для размещения временных файлов, например, `/var/lib/mysql/tmp`:
```shell
mkdir /var/lib/mysql/tmp
```
2. Измените владельца папки и группу на `mysql`:
```shell
chown mysql:mysql /var/lib/mysql/tmp
```
3. Определите идентификатор пользователя (uid) и группы (gid) MySQL:
```shell
id mysql
```
4. Откройте файл `/etc/fstab`:
```shell
nano /etc/fstab
```
Добавьте в него строку с указанием полученных выше значений:
```shell
tmpfs /var/lib/mysql/tmp tmpfs rw,gid=27,uid=27,size=1G,nr_inodes=10k,mode=0700 0 0
```
В параметре size указывается объем памяти, который будет отдан под временные файлы MySQL. Его необходимо установить в зависимости от количества имеющейся оперативной памяти на сервере.
5. Примонтируйте новый tmpfs-раздел:
```shell
mount /var/lib/mysql/tmp
```
6. Откройте файл конфигурации MySQL `/etc/mysql/my.cnf` (если вы используете BitrixVM, обратите внимание, что путь к файлу конфигурации отличается):
```shell
nano /etc/mysql/my.cnf
```
```shell
# Для BitrixVM:
nano /etc/mysql/conf.d/bvat.cnf
```
В сегмент `[mysqld]` (если сегмента нет, добавьте его) добавьте строку:
```shell
[mysqld]
tmpdir=/var/lib/mysql/tmp
```
7. Перезапустите MySQL:
```shell
systemctl restart mysqld
```
# Устранение ошибки «Could not get lock /var/lib/dpkg/lock»
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/ustranenie-oshibki-could-not-get-lock-var-lib-dpkg-lock?utm_source=llms_txt&utm_medium=ai
Иногда при запуске утилиты `apt` или `apt-get` вы можете получить ошибку в терминале:
```shell
E: Could not get lock /var/lib/dpkg/lock – open (11: Resource temporarily unavailable)
```
Формулировка ошибки и путь к lock-файлу могут отличаться в зависимости от конкретного случая, но если речь идет о невозможности заблокировать файл `dpkg`, все они будут устраняться схожими методами.
В целом, ошибка связана с тем, что файл менеджера пакетов `dpkg` уже заблокирован — то есть, уже выполняется какой-то процесс, который его задействует, либо же выполнение процесса было завершено некорректно, из-за чего мы сейчас получаем ошибку.
В первую очередь рекомендуем подождать несколько минут и попробовать запустить `apt` снова. Вполне возможно, что выполняемый процесс через пару минут автоматически завершится, и вы сможете продолжить работу.
Если же проблема сохраняется, ее можно решить следующими способами.
### Способ 1. Завершить процесс принудительно
Выполните команду ниже, чтобы найти все запущенные экземпляры утилиты `apt`:
```shell
ps aux | grep -i apt
```
В выводе отобразятся активные процессы, а также их ID (второй столбец).
> [!NOTE]
> Если в выводе будет `apt.systemd.daily update`, рекомендуем не завершать такой процесс. Это утилита автоматической проверки и установки обновлений — просто дождитесь завершения ее работы.
Завершить ненужный процесс можно командой:
```shell
sudo kill -9 ID_процесса
```
Другой вариант — завершить все процессы утилит `apt` и `apt-get` сразу, не проверяя конкретные процессы. Это можно сделать командой:
```shell
sudo killall apt apt-get
```
### Способ 2. Удалить файлы блокировки
Если предыдущий способ не помог, вероятнее всего, проблема связана не с активными процессами `apt` или `apt-get`, а с некорректным завершением одного из процессов ранее.
Сначала воспользуемся командой `lsof`, чтобы посмотреть, каким процессом используется lock-файл.
Последовательно выполните команды:
```shell
sudo lsof /var/lib/dpkg/lock
```
```shell
sudo lsof /var/lib/dpkg/lock-frontend
```
```shell
sudo lsof /var/lib/apt/lists/lock
```
```shell
sudo lsof /var/cache/apt/archives/lock
```
В ответ команда может не выдать ничего или выдать одно или несколько чисел — это ID процессов. Завершите их, указывая полученные ID:
```shell
sudo kill -9 ID_процесса
```
Затем удалите lock-файлы:
```shell
sudo rm /var/lib/dpkg/lock
```
```shell
sudo rm /var/lib/dpkg/lock-frontend
```
```shell
sudo rm /var/lib/apt/lists/lock
```
```shell
sudo rm /var/cache/apt/archives/lock
```
При удалении вы можете получать ошибки вида «Нет такого файла или каталога» — их можно просто проигнорировать.
В завершение переконфигурируйте пакеты с помощью команды:
```shell
sudo dpkg --configure -a
```
Попробуйте снова запустить `apt` или `apt-get` — все должно работать корректно.
# Другие возможные проблемы
Source: https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/other-issues?utm_source=llms_txt&utm_medium=ai
В статье приведены способы устранения возможных неполадок в работе виртуальных серверов. Данные инструкции подскажут, как можно попытаться решить проблему самостоятельно, а также получить необходимую диагностическую информацию, которая позволит более оперативно решить вопрос с нашей стороны.
## Не увеличился размер диска
Расширение разделов после увеличения размера диска выполняется автоматически во всех случаях, кроме ситуации, когда вы ранее самостоятельно меняли разметку диска и в результате на нем создано два логических раздела и больше.
В данном случае необходимо произвести переразметку вручную по нашей [инструкции](https://timeweb.cloud/docs/unix-guides/disk-resizing).
Если после выполнения указанных действий проблема сохранится, для диагностики выполните (от пользователя root) следующие команды:
```shell
df -h
```
```shell
fdisk -l
```
Первая позволит просмотреть размер разделов, вторая — вывести список существующих разделов и дисков.
Создайте [обращение в службу поддержки](https://timeweb.cloud/my/support/help-problem) и приложите к нему вывод данных команд — наши специалисты проведут необходимую диагностику.
В зависимости от предоставленной вами информации, для устранения проблемы может потребоваться отключить сервер на 15-20 минут. Уточните в обращении период времени, когда это можно сделать.
## Не увеличился размер оперативной памяти
Если после изменения размера оперативной памяти вы видите, что ее объем фактически не увеличился, создайте [обращение](https://timeweb.cloud/my/support/help-problem) в службу поддержки, приложив к нему результат вывода команды:
```shell
free -m
```
Команду необходимо выполнить от пользователя root; она позволит просмотреть количество использованной и неиспользованной памяти в мегабайтах.
В зависимости от предоставленной вами информации, для устранения проблемы может потребоваться отключить сервер на 15-20 минут. Уточните в обращении период времени, когда это можно сделать.
## Не загружается операционная система
Для устранения проблемы загрузите ОС в режиме загрузки с диска восстановления, после чего вернитесь в стандартный режим работы.
Если в результате проблема не будет решена, [напишите нам](https://timeweb.cloud/my/support/help-problem) для проведения диагностики.
## Сервер работает нестабильно, зависает
Чаще всего причиной подобного поведения является повышенная нагрузка. Проверьте графики нагрузки на главной странице панели управления, и в случае наличия превышений примите меры для ее снижения. Также проанализировать нагрузку на сервер можно [утилитами `top` или `htop`](https://timeweb.cloud/docs/unix-guides/troubleshooting-unix/load-and-process-control-top-htop-atop).
Если превышения нагрузки не зафиксировано, [напишите нам](https://timeweb.cloud/my/support/help-problem) для проведения диагностики.
## Сайт недоступен даже после перезагрузки сервера
Если вы столкнулись с недоступностью ресурса (например, с ошибкой «Не удается получить доступ к сайту. Соединение сброшено»), которая не решилась в том числе и перезагрузкой сервера, возможной причиной может быть kernel panic — критическая ошибка ядра операционной системы. При этом также может наблюдаться невозможность произведения каких-либо действий в консоли сервера в панели управления.
Для решения проблемы запустите перезагрузку сервера, после чего нажмите на кнопку «Перезагрузить принудительно». Принудительная перезагрузка позволит перезапустить виртуальную машину и восстановить работу.