# Инструкции для 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-адрес и пароль) можно найти на Дашборде сервера.  ![B906317a C89c 4ec6 B219 C262c3c3c56b](https://content.timeweb.com/assets/1b0e76da-5509-4174-84de-af89558d0516.png?width=1533&height=1185) Работать с сервером по 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. ![Aaa24ffa C04e 4f66 896b Ca3f52a15db8](https://content.timeweb.com/assets/3095350e-928a-40f7-8c4c-fafb4f5acb27.png?width=1533&height=1185) 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. Обратите внимание, что если вы зададите кодовую фразу, ее потребуется вводить при каждой авторизации по ключу. ![Group 1321314118](https://content.timeweb.com/assets/af7e836d-13f1-45fb-9f7a-87bd23de4184?width=869&height=444) Процедура создания ключей завершена, ключи сохранены в директории `~/.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 ``` ![Image 127](https://content.timeweb.com/assets/445a5a6b-15ed-4bdb-ad86-e75d7549b4cc?width=1072&height=643) Если вам не удается подключиться с использованием ключа, проверьте логи 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 ``` Должно получиться примерно так: ![Mysqld](https://content.timeweb.com/assets/a9532fa4-464a-49f4-bcd8-f1efe1d346db?width=439&height=238) **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 при вводе. ![Adduser1](https://content.timeweb.com/assets/a6fc6b5c-4baa-45d6-aded-ee0f94642684?width=492&height=128) В **CentOS** для установки пароля выполните команду: ```shell sudo passwd username ``` После введите пароль и повторите его. 3\. Далее в **Ubuntu / Debian** будет запрошен ввод дополнительной информации о пользователе (имя, номер телефона и пр.). Вы можете указать данные или нажимать Enter, чтобы оставить значения по умолчанию (т.е. пустые). После нажмите Y для подтверждения. ![Adduser2](https://content.timeweb.com/assets/c640b5e2-3bd8-4d7b-9994-7cf7f3de8d6d?width=413&height=129) В **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. Сохраните изменения. ![Rwxfz2](https://content.timeweb.com/assets/13debfd4-d78c-4df6-ba9b-e7fbf0cd355c?width=345&height=489) _Настройка атрибутов файла в интерфейсе в [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 ``` ![Ipt](https://content.timeweb.com/assets/1a364790-7564-4e2a-ab28-39223309eb57?width=774&height=302) Также, можно вывести логи работы Fail2ban: ```shell sudo tail /var/log/fail2ban.log ``` ![Fb Log](https://content.timeweb.com/assets/145f66fa-6960-432e-b356-321d9c5da7f2?width=931&height=176) Информацию можно получить и из интерфейса Fail2ban: ```shell sudo fail2ban-client status sshd ``` ![Fb Status](https://content.timeweb.com/assets/a54dcccf-e07e-4944-9f2c-baafb7931613?width=1025&height=161) # Настройка подключения через 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. ![Screenshot 12 03 24 12:12:46](https://content.timeweb.com/assets/d9b64fd8-8e67-4bc8-b877-b49b20ef2fec.png?width=1373&height=718) _Расширение «Remote - SSH» в интерфейсе [VS Code](https://code.visualstudio.com/)_ ## Настройка подключения к удаленному серверу После установки расширения, перейдем к настройке подключения.  1. Нажмите на иконку «Open a Remote Window» в левом нижнем углу. 2. В открывшемся меню выберите пункт «Connect to Host». ![Selection 121](https://content.timeweb.com/assets/1f171702-c0bd-4a0a-8314-40e202abfa49.png?width=1382&height=723) _Опция «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. Нажмите кнопку «Вперед», и файл дампа базы данных сохранится на локальный компьютер. ![179](https://content.timeweb.com/assets/e76f2cc3-752f-4f99-afba-03cdc646c57d?width=617&height=356) _Опция «Экспорт» в интерфейсе [phpMyAdmin](https://www.phpmyadmin.net/)_ ### Экспорт отдельных таблиц Если требуется выполнить экспорт только отдельных таблиц, войдите в phpMyAdmin и выполните следующее. 1. В области слева выберите необходимую базу данных (должен раскрыться список таблиц базы данных). 2. Отметьте галочками нужные таблицы для экспорта. 3. Внизу страницы в выпадающем списке «С отмеченными:» выберите пункт «Экспорт». 4. На следующей странице убедитесь, что выбран формат SQL, и нажмите на кнопку «Вперед». Дамп будет сохранен на ваш компьютер. ## Создание дампа базы через консоль Подключитесь к серверу по SSH и выполните команду, указав корректные данные: ```shell mysqldump -u'имя_пользователя' база_данных -p'пароль_базы_данных' > имя_дампа.sql ``` ## Восстановление данных через PMA Импортирование базы данных — это загрузка сохраненной на локальном компьютере базы данных на сервер. Чтобы осуществить импорт базы данных, необходимо выполнить следующие действия: 1. В области слева выберите необходимую базу данных (должен раскрыться список таблиц базы данных). 2. Перейдите на закладку «Импорт» в меню PMA. 3. Загрузите импортируемый файл (дамп базы данных), нажав на кнопку «Выберите файл» и указав файл на локальном компьютере. 4. Выберите кодировку, формат и проверьте другие настройки импорта (можно оставить по умолчанию). 5. Нажмите кнопку «Вперед», и дамп будет импортирован в базу данных. ![180](https://content.timeweb.com/assets/5983ad5a-d382-42be-879a-4ef5d16b4a84?width=746&height=626) _Опция «Импорт» в интерфейсе [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://content.timeweb.com/assets/bc117f53-357c-464c-b43d-7b16a040cf5b?width=599&height=507) _Стандартное приветственное окно веб-сервера [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. ![Scr 20260413 Lvfk](https://content.timeweb.com/assets/629cb36b-4aae-4a51-99b6-6e72b1eef5ca.png?width=2138&height=1668) _Страница с параметрами [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: ![PHP](https://content.timeweb.com/assets/d86186f4-4214-4a5f-84ef-6ab16165c4ad?width=732&height=438) _Окно выбора веб-сервера при настройке PMA в интерфейсе [Ubuntu](https://ubuntu.com/)_ - Нажмите Enter, чтобы выбрать `Yes`: ![Pma2](https://content.timeweb.com/assets/75e290c8-4f2d-41ba-a139-8e3d8a9fa3e4?width=732&height=438) _Подтверждение автоматической конфигурации PMA в интерфейсе [Ubuntu](https://ubuntu.com/)_ - Задайте пароль для регистрации PMA на сервере баз данных и нажмите Enter; после повторите ввод пароля: ![Pma3](https://content.timeweb.com/assets/6eb6dea9-cc71-4711-8355-519577dc86aa?width=732&height=438) _Окно указания пароля при настройке 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-сертификаты». ![Cc46ef08 C38e 4cab B644 28d04b7982a1](https://content.timeweb.com/assets/d12a772d-e525-42d6-8e19-c2631789c396?width=1418&height=862) Если вы покупали 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`: ![Centos1](https://content.timeweb.com/assets/d7b15a4c-a6f3-4133-b703-c1408e862396?width=937&height=31) _Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_ Перейдите в указанную директорию: ```shell cd /usr/lib64/php/modules ``` Проверьте, есть ли в ней установленная библиотека: ```shell ls ``` Можно указать часть имени пакета в названии, чтобы упростить вывод, например: ```shell ls ima* ``` Если библиотека присутствует, она будет выведена в консоли: ![Centos2](https://content.timeweb.com/assets/3704f259-7f4a-48ca-8e09-ca67b9848cba?width=293&height=37) 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` и найдите установленный модуль, чтобы убедиться, что все в порядке: ![Centos3](https://content.timeweb.com/assets/79ed78e5-8811-4282-97c7-15774f033d37?width=936&height=341) _Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_ ### **Подключение внешних библиотек** Если вам требуется подключить библиотеку, скачанную не из репозитория, необходимо: 1\. Загрузить файл с расширением `.so` в директорию с остальными библиотеками (см. значение параметра `extension_dir` на странице `http://вашдомен/phpinfo.php`; в нашем примере это директория `/usr/lib64/php/modules/`). ![Centos1](https://content.timeweb.com/assets/a7f28231-78c0-4fa0-ad67-a6977385f803?width=937&height=31) _Страница 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 ``` Вывод команды выглядит примерно следующим образом: ![11](https://content.timeweb.com/assets/447e8596-a0ec-4bb7-8f35-4214d0c032db?width=655&height=87) В данном случае нам будет нужен пакет `php-imagick`. 2\. Обновите информацию из репозиториев: ```shell apt update ``` 3\. Установите библиотеку: ```shell apt install имя_пакета ``` Например: ```shell apt install php-imagick ``` 4\. Проверьте, какая директория задана для расширений. Для этого нужно на странице `http://вашдомен/phpinfo.php` найти параметр «extension\_dir»: ![22](https://content.timeweb.com/assets/1bcc55bc-534b-4646-a9ca-0620d6ad4314?width=940&height=51) _Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_ Перейдите в указанную директорию: ```shell cd /нужная/директория ``` В нашем случае: ```shell cd /usr/lib/php/20170718 ``` Проверьте, есть ли в ней установленная библиотека: ```shell ls ``` Можно указать часть имени библиотеки, чтобы упростить вывод, например: ```shell ls ima* ``` Если библиотека присутствует, она будет выведена в консоли: ![33](https://content.timeweb.com/assets/ac3386a9-8890-4ac3-bdd4-6a4f92d68f64?width=403&height=33) 5\. Проверьте, какая директория используется для дополнительных конфигурационных файлов. Для этого нужно на странице `http://вашдомен/phpinfo.php` найти параметр «Scan this dir for additional .ini files»: ![44](https://content.timeweb.com/assets/aae4b9d1-4391-41a7-880e-cb2e6c5a138a?width=941&height=29) _Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_ Перейдите в указанную директорию и просмотрите ее содержимое: ```shell cd /нужная/директория ls ``` В нашем случае: ```shell cd /etc/php/7.2/apache2/conf.d ``` ```shell ls ``` Можно указать часть имени библиотеки, чтобы упростить вывод, например: ```shell ls *imag* ``` Если конфигурационный файл с директивой, подключающей библиотеку, успешно создан, он будет выведен в консоли:  ![55](https://content.timeweb.com/assets/76e9952c-5e7c-433c-b802-381c519dffe0?width=458&height=36) Если файл отсутствует, воспользуйтесь командой ниже, чтобы его создать: ```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` и найдите установленный модуль, чтобы убедиться, что все в порядке: ![66](https://content.timeweb.com/assets/ff7e1dd2-0a97-44b5-a8f5-01ae812eb0f7?width=941&height=434) ** _Страница phpinfo() с информацией о конфигурации [PHP](https://www.php.net/) на сервере_ ** ### **Подключение внешних библиотек** Если вам требуется подключить библиотеку, скачанную не из репозитория, необходимо: 1\. Загрузить файл с расширением `.so` в директорию с остальными библиотеками (см. значение параметра `extension_dir` на странице `http://вашдомен/phpinfo.php`; в нашем примере это директория `/usr/lib/php/20170718`). ![22](https://content.timeweb.com/assets/105949a3-37c5-4a23-bda8-6140e736691d?width=940&height=51) _Страница 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`: ![111](https://content.timeweb.com/assets/8ff03b66-91b1-40cc-b8c8-b43273db8ba3?width=911&height=182) _Страница 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` покажет, в какой строке расположена директива, чтобы можно было перейти сразу к ней. ![222](https://content.timeweb.com/assets/30c5a46c-65c7-427e-a264-b2325a720fe8?width=619&height=59) В данном случае номер строки — 1714. 2\. Откройте файл в текстовом редакторе, указав номер нужной строки:  ```shell nano +номер_строки путь/до/php.ini ``` Например: ```shell nano +1714 /etc/php.ini ``` 3\. Отредактируйте строку: уберите знак комментария (`;`) и измените значение параметра на нужное вам: ![333](https://content.timeweb.com/assets/fab3a5fe-4c90-46e9-9960-97d04376a748?width=597&height=189) В данном случае мы указываем 2. ![444](https://content.timeweb.com/assets/c92e6343-39a8-4b3c-aed6-c3ecd1c5c9e4?width=269&height=23) 4\. Сохраните изменения (нажмите Ctrl+x для выхода из `nano`, далее Y для сохранения изменений и Enter). 5\. Перезагрузите веб-сервер Apache: ```shell service apache2 restart ``` 6\. Для проверки обновите страницу `http://вашдомен/phpinfo.php` и найдите текущее значение нужной директивы: ![555](https://content.timeweb.com/assets/0259532b-bea6-4f9e-a1cd-0fe80284f39b?width=936&height=31) _Страница 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`: ![1](https://content.timeweb.com/assets/e168aad3-f787-4eb9-8b07-091e94b4f0c7?width=935&height=578) _Страница 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` покажет, в какой строке расположена директива, чтобы можно было перейти сразу к ней. ![2](https://content.timeweb.com/assets/0e7cac47-7437-4105-ad5f-78e07c2e9130?width=874&height=39) В данном случае номер строки — 1704. 2\. Откройте файл в текстовом редакторе, указав номер нужной строки: ```shell nano +номер_строки путь/до/php.ini ``` Например: ```shell nano +1704 /etc/php/7.2/apache2/php.ini ``` 3\. Отредактируйте строку: уберите знак комментария (`;`) и измените значение на нужное вам: ![4](https://content.timeweb.com/assets/88d3f044-0e4a-4762-a5fe-adc046d5b8a8?width=621&height=182) В данном случае мы указываем 2: ![5](https://content.timeweb.com/assets/f76f297a-2717-48ce-b495-42cb09b35ac4?width=251&height=21) 4\. Сохраните изменения: нажмите Ctrl+x для выхода из `nano`, далее Y для сохранения изменений и Enter. 5\. Перезапустите веб-сервер Apache командой: ```shell service apache2 restart ``` 6\. Для проверки обновите страницу `http://вашдомен/phpinfo.php` и найдите текущее значение нужной директивы:  ![6](https://content.timeweb.com/assets/26d07de7-8d1c-4667-8308-e97149bf22d5?width=939&height=262) _Страница 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` не будет работать. ![5cf7458e 8ad6 47e4 9236 B4792686e8f0](https://content.timeweb.com/assets/1a58399c-76ca-4c6c-9917-a7f607a0a237?width=1100&height=745) Если ваш сайт размещен по другому пути (не `/var/www/.../`), исправьте путь на верный или добавьте еще один блок `` с нужным путем. Меняем значение на `Allow Override All`: ![A7f3c1e5 394e 42e7 Aafc E8df8cd7a6a3](https://content.timeweb.com/assets/63e7ec92-b72a-4662-9e93-280d03d584a2?width=1102&height=745) Сохраняем изменения (Ctrl + X, затем Y, затем Enter). И перезагружаем веб-сервер: ```shell systemctl restart apache2 ``` Теперь мы можем прописывать директивы для сайта в файле `.htaccess`. ## Как проверить, что mod\_rewrite включен? Во-первых, убедитесь, что у вас включен модуль `mod_rewrite`. Для этого выполните команду: ```shell apache2ctl -M | grep rewrite ``` В выводе должно быть `rewrite_module (shared)`: ![Powershell Gt D Ja T Xgn B](https://content.timeweb.com/assets/c5eff03c-8a8a-4af1-8eb8-5de48d22b15d?width=522&height=69) Если вывод отличается — включите 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] ``` ![Powershell J5 Vf Uji Bjw](https://content.timeweb.com/assets/29d68a8e-11aa-4368-9ad1-242aad520f56?width=1086&height=748) ## Настройка перенаправлений ### Перенаправление на другой домен В примере ниже выполняется редирект с 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 ``` ![Status](https://content.timeweb.com/assets/c9088a66-0bc7-46c4-8ccc-485b6d41255b?width=749&height=149) Далее добавьте `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`. ![Scr 20250619 Pult](https://content.timeweb.com/assets/29f60c65-51a8-4924-926b-ad026c3771dd.png?width=1400&height=810) Повторно выполните команду, чтобы убедиться, что раздел был создан: ```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` вы увидите список разделов: ![Scr 20260219 Plxo](https://content.timeweb.com/assets/7ed673b6-a2a5-4f0b-a475-087f9c353782.png?width=1018&height=366)   Если вы хотите расширить последний раздел на всю свободную область диска — переходите к пункту **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 ``` Вывод команды: ![Scr 20260219 Pmay](https://content.timeweb.com/assets/8911ee46-9e12-4eb7-93c5-244c770e98c7.png?width=1138&height=242) **6**. После проверки выполните изменение размера файловой системы: ```bash resize2fs /dev/sda2 ``` ![Scr 20260219 Pmej](https://content.timeweb.com/assets/c23460ae-8147-4d94-a083-3ae7ccbecfd3.png?width=998&height=134) ### Проверка файловой системы после расширения Теперь необходимо примонтировать раздел, в который вносились изменения (`/dev/sda2`, `/dev/sda3` и т.д.): ```bash mount /dev/sda2 /mnt ``` И проверить, что размер был успешно изменен: ```bash df -h ``` ![Scr 20260219 Pmgo](https://content.timeweb.com/assets/00a7e938-2874-48cc-b717-6393bb5cea6c.png?width=924&height=322) Если вы видите, что размер диска остался прежним, рекомендуем вернуться к первому шагу и повторить процедуру пересоздания разделов, уделив внимание каждому этапу. Если же размер диска изменился, отмонтируйте системный диск командой ниже, после чего вернитесь в стандартный режим загрузки. ```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. Подтвердите действие. ![8f70c017 2983 4196 946b F323feaaa8d4](https://content.timeweb.com/assets/0efdc680-f6bb-432a-94c6-d544ec168e51.png?width=1386&height=869) 3. Примонтируйте бэкап внутри ОС. Сделать это можно в консоли при помощи команды `mount`. Пример использования команды: ```shell mount /dev/vdc1 /mnt ``` ## Отмонтировать бэкап Для отключения диска сначала отмонтируйте его внутри операционной системы командой `umount`: ```shell umount /dev/vdc1 ``` После нажмите «Отмонтировать» в панели управления сервером.  ![B64ee95a 363a 44da 938e 349371fcf225](https://content.timeweb.com/assets/0615923e-a0e9-4927-b1c4-38b968ae76be.png?width=1391&height=869) > [!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. ![1](https://content.timeweb.com/assets/83eb105c-7c99-4b19-941a-4cefccac2bcf?width=872&height=610) _Окно логина в интерфейс [XFCE](https://xfce.org/)_ 6. После ввода реквизитов отобразится графический интерфейс и диалоговое окно, в котором необходимо выбрать стандартную настройку панели. ![2](https://content.timeweb.com/assets/b4fd3328-a73d-41c5-87c2-d030cb435a9b?width=1222&height=854) _Интерфейс [XFCE](https://xfce.org/)_ Готово, интерфейс установлен и вы уже можете с ним работать. Теперь необходимо добавить возможность использования русской раскладки на сервере. 7. Добавьте апплет клавиатуры на панель инструментов, чтобы переключаться между раскладками. Для этого кликните правой кнопкой на «Приложения» в левом верхнем углу и выберите «Панель» — «Добавить новые элементы»: ![3](https://content.timeweb.com/assets/16d77947-7965-4e88-9bbc-414fc492e6cd?width=1224&height=852) _Меню «Приложения» в интерфейсе [XFCE](https://xfce.org/)_ 8. В открывшемся окне выберите «Раскладки клавиатуры» и нажмите «Add»: ![4](https://content.timeweb.com/assets/4625a427-b86d-48a3-a2d0-9fab3b07e8f4?width=1221&height=848) _Добавление раскладки клавиатуры в интерфейсе [XFCE](https://xfce.org/)_ 9. В правом верхнем углу появится значок флага. Кликните на него правой кнопкой и выберите «Настройки клавиатуры»: ![5](https://content.timeweb.com/assets/14469bb6-89e2-4f24-80b2-36dc392bf046?width=1222&height=845) _Языковое меню в интерфейсе [XFCE](https://xfce.org/)_ 10. В новом окне перейдите на вкладку «Раскладка», растяните окно, чтобы стал виден переключатель, выключите «Использовать системные настройки по умолчанию» и нажмите «Добавить»: ![Selection 082](https://content.timeweb.com/assets/2e7ecff8-a85f-4e28-9ac2-5fecac139cb8.png?width=744&height=674) _Окно «Клавиатура» в интерфейсе [XFCE](https://xfce.org/)_ 11. В открывшемся списке выберите русскую раскладку и нажмите «ОК». Окно «Клавиатура» можно закрыть. Теперь вы сможете переключаться между английской и русской раскладкой, кликнув на значок флага. ![7](https://content.timeweb.com/assets/76507020-f76b-4be2-8e10-ff0efa80c3ea?width=1222&height=850) _Переключение между раскладками в интерфейсе [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, то изначально для всех цепочек будут установлены разрешающие правила по умолчанию. ![Putty Q Ckhask2v Q](https://content.timeweb.com/assets/d91f7faf-f820-4187-b003-bbb96b2926d7?width=402&height=64) Установить правило по умолчанию можно с помощью опции -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. ![Image1](https://content.timeweb.com/assets/0dae53ba-7f71-46e1-9d46-9eebb7873314.png?width=1065&height=755) 2. После завершения загрузки образа создайте облачный сервер. В разделе «Образы» выберите «Мои образы» и найдите загруженный ранее ISO. ![Image4](https://content.timeweb.com/assets/4cee95a8-d223-48d0-aef9-dc50435e4012.png?width=1022&height=739) 3. Запустите создание сервера и дождитесь окончания процесса. > [!NOTE] > Подключение к серверу по SSH будет недоступно, так как OpenSSH Server не установлен. Чтобы продолжить, необходимо подключиться по VNC: для этого перейдите во вкладку «Консоль». ![Image5](https://content.timeweb.com/assets/95c686c3-e1cf-4a76-b564-241c4212ca9f.png?width=1034&height=926) 4. Выполните стандартную установку Ubuntu Server. Рекомендуется перейти в полноэкранный режим для удобства. В процессе установки выберите опцию установки OpenSSH Server, чтобы в дальнейшем подключиться к серверу по SSH. ![Image3](https://content.timeweb.com/assets/18d919d8-9b07-479f-b688-dbff00c9f04b.png?width=1277&height=942) 5. После завершения установки сервер автоматически перезагрузится. Теперь нужно отмонтировать образ, воспользовавшись кнопкой в панели управления. ![Image2](https://content.timeweb.com/assets/40805a0c-3545-4cdf-ae11-6225fd28ecb9.png?width=1294&height=945) После перезагрузки установка будет полностью завершена. Для обеспечения работы некоторых функций панели управления установите `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». ![Clipboard June 8, 2023 10 20 Am](https://content.timeweb.com/assets/374685b8-9fef-4428-8cf2-e6406b74f205?width=933&height=712) **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` для выбора. ![Db1](https://content.timeweb.com/assets/7f2c589a-e486-41da-abab-3e88db6a43d3?width=513&height=114) Создать роль **из консоли 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 — одноименная роль и база, подключиться можно с помощью данной команды: ![Db5](https://content.timeweb.com/assets/5b088c16-2eec-46b8-8329-46e154a59b34?width=890&height=113) После подключения можно выполнить команду `\conninfo`, чтобы посмотреть информацию о текущем соединении. 1.2. Если имя базы, к которой нужно подключиться, отличается, нужно указать его в команде: ```shell psql -d имя_базы ``` 2. Если имя роли не совпадает с именем пользователя Linux, необходимо указать дополнительные параметры в команде. 2.1. Если имя роли и имя базы совпадают, достаточно выполнить: ```shell psql -U имя_роли -h localhost -W ``` ![Db2](https://content.timeweb.com/assets/8bba70a7-6ce6-47d9-8eb3-37e36587f1ed?width=777&height=158) Как видно из вывода `\conninfo`, мы подключены к базе `tmweb` от одноименной роли. 2.2. Если имя роли и базы отличаются, базу также нужно указать в команде: ```shell psql -U имя_роли -d имя_базы -h localhost -W ``` ![Db3](https://content.timeweb.com/assets/73d9964d-9707-4bc8-a3a0-60f4dfa8a56a?width=765&height=161) 3. Если вы подключаетесь к другой базе данных уже в консоли Postgres, используйте: ```shell \c имя_базы ``` ![DB C2](https://content.timeweb.com/assets/775b2b0e-ebc7-4bcd-a3b8-501117d3ef3b?width=518&height=112) ## Резервные копии (экспорт и импорт дампа) При установке 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`. ![DB Ext](https://content.timeweb.com/assets/185aac81-ef24-44aa-b981-4771a169b404?width=535&height=67) `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; ``` ![DB Config](https://content.timeweb.com/assets/9755952c-a515-463f-9721-7370dc78a272?width=359&height=88) Узнать значение какого-либо параметра Postgres: ```shell SHOW параметр; ``` ![DB Show](https://content.timeweb.com/assets/3ff9d885-90e7-4f70-8795-b1b06cf0f9e9?width=293&height=87) Получить расширенную информацию о параметре можно из представления `pg_settings`: будет выведено не только установленное значение, но также файл, в котором он назначен, максимальные и минимальные значения. ```shell SELECT * FROM pg_settings WHERE name = 'параметр'; ``` Например: ```sql SELECT * FROM pg_settings WHERE name = 'max_connections'; ``` Чтобы вывести информацию в удобном для восприятия формате, можно сменить представление командой `\x`: ![DB X](https://content.timeweb.com/assets/32f9efc2-0849-4e19-9dc0-ea5d97ec7b5b?width=597&height=340) ## Другие полезные команды для управления Postgres Вывести все параметры терминального командного меню Postgres: ```shell psql --help ``` Просмотр баз данных из командной строки Linux: ```shell psql -l ``` Список команд `psql` выводится с помощью `\?`: ```shell \? ``` Список SQL-команд (запросов): ```shell \h ``` Справка по конкретному SQL- запросу: ```shell \h запрос # Например: \h CREATE TABLE ```  Информация о подключении: ```shell \conninfo ``` ![DB Conn](https://content.timeweb.com/assets/d960c00a-e967-48ca-a209-3fca693cc09d?width=766&height=49) Выполнение shell-команд из командной строки Postgres:  ```shell \! команда_shell ``` Например, чтобы вывести директорию нахождения: ```shell \! pwd ```  ![DB Shell](https://content.timeweb.com/assets/ce99c53c-d690-49dd-94ee-7199a0d74c66?width=295&height=34) Подключение к базе данных: ```shell \c имя_базы ``` ![DB C](https://content.timeweb.com/assets/f9459ef6-5ff1-468f-a1e5-ec616ae3a2ce?width=764&height=79) # Установка почтового сервера 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.** В первую очередь нужно согласиться с установкой: ![0ogimage](https://content.timeweb.com/assets/ea82a3db-04a8-4aff-b22b-bedf48428f9c?width=1504&height=938) **8\.** Выбрать место хранения почтовых ящиков пользователей: ![Iu6image](https://content.timeweb.com/assets/26bf000f-589a-43be-b1b4-472949bd0806?width=1494&height=938) **9\.** Выбрать бэкенд по своему усмотрению:  ![H5aimage](https://content.timeweb.com/assets/3726a06d-e060-47a3-bb87-cf4bf0c408d6?width=1500&height=944) - Если вы выбираете OpenLDAP, будет запрошен LDAP-суффикс: ![S Bfimage](https://content.timeweb.com/assets/73e8fc23-6438-4137-9621-acb4d51b404e?width=1442&height=934) - При выборе MySQL, MariaDB или PostgreSQL будет создан надёжный пароль, который можно найти в файле `/root/iRedMail-x.y.z/iRedMail.tips`. **10\.** В следующем окне появится мастер установки доменного имени электронной почты. Помните, что вы не можете установить имя хоста сервера в качестве домена электронной почты: ![Lm Himage](https://content.timeweb.com/assets/ec7e0dff-269c-4b42-81f4-8d62a2cbfe10?width=1494&height=936) **11\.** Установить пароль для администратора: ![Nu Yimage](https://content.timeweb.com/assets/29816f77-c579-4143-9173-f66801f5870c?width=1490&height=942) Этот аккаунт будет администратором и почтовым пользователем, с его реквизитами вы сможете войти в почтовый ящик, а также в админ-панель iRedAdmin. **12\.** Выбрать дополнительные компоненты: ![O P Limage](https://content.timeweb.com/assets/8f429646-3027-4ff2-9695-c36400c71918?width=1502&height=946)  **13.** Согласиться с предложенной для установки конфигурацией, введя `y`: ![58eimage](https://content.timeweb.com/assets/5d0fac28-566f-4066-b2df-ed76acab4bf5?width=1540&height=924) **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 из **нашего маркетплейса** для завершения настройки выполните описанные ниже шаги. ## Проверка почтовых портов Для предотвращения отправки спама почтовые порты на сервере могут быть заблокированы. В этом случае они будут указаны на Дашборде сервера в пункте «Закрытые порты». Чтобы снять блокировку, привяжите к аккаунту номер телефона и нажмите на иконку замка. ![E04dd52a B33c 4c8b A4ea 4d48a6b57e31](https://content.timeweb.com/assets/bb88ee2f-966a-431e-978b-cc66ae54b164.png?width=1570&height=1128) ## Настройка почтового домена ### Шаг 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. Укажите остальные параметры и переустановите сервер. ![Scr 20260522 Nzed](https://content.timeweb.com/assets/3c48bbf8-7aae-46e2-b1a6-ffd5ff59c9bb.png?width=2262&height=1586) После установки сервера реквизиты придут на вашу почту, и вы сможете начать работу с 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`. ![Image2](https://content.timeweb.com/assets/405e0060-b297-4a07-a414-bf3015e239e8.png?width=1025&height=757) 2. После завершения загрузки создайте облачный сервер, выбрав ранее загруженный образ в разделе «Мои образы». ![Image7](https://content.timeweb.com/assets/54fe9f5e-8521-4205-b985-e4a1691c4ca2.png?width=1048&height=747) 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-файла и выберите папку, в которой будет создана виртуальная машина. ![Image3](https://content.timeweb.com/assets/0ffc146a-00bd-4322-b5ea-9e0c3166b574.png?width=827&height=470) _Создание виртуальной машины в интерфейсе [VirtualBox](https://www.virtualbox.org/)_ 3. Нажмите «Далее» и выберите объем оперативной памяти. Рекомендуется выделить 1024 МБ для комфортной работы. 4. На этапе создания виртуального диска выберите «Создать новый виртуальный диск», укажите желаемый размер (в нашем случае стоит указать 10 ГБ) и нажмите «Далее». ![Image1](https://content.timeweb.com/assets/ffd2d6a8-c95e-476e-82dd-9f700fde1403.png?width=830&height=471) _Создание виртуальной машины в интерфейсе [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 и перейдите в раздел «Носители». Путь к образу указан в информации о диске в графе «Расположение». ![Image6](https://content.timeweb.com/assets/bac1d186-4010-4c57-a8bf-4feec2c81fd2.png?width=1252&height=537) _Настройки виртуальной машины в интерфейсе [VirtualBox](https://www.virtualbox.org/)_ 3. В панели управления облака перейдите на вкладку «[Образы](https://timeweb.cloud/my/images)», выберите «Загрузка образа», затем «С компьютера» и загрузите файл образа `.vdi`. ![Image5](https://content.timeweb.com/assets/d1e4a52e-683f-4224-8460-c0f83fad5652.png?width=1083&height=751) 4. После завершения загрузки создайте облачный сервер, выбрав ранее загруженный образ в разделе «Мои образы». ![Image4](https://content.timeweb.com/assets/a455bbaf-7076-48fc-b27c-cc657a457642.png?width=1023&height=746) 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. Смонтируйте бэкап в панели управления.  ![Image1](https://content.timeweb.com/assets/2159cdeb-22c0-4679-8051-4331b6481bf0?width=1110&height=285) 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): ![72d800c8 93da 428e 88b6 5905884515ce.png](https://content.timeweb.com/assets/1f46d569-53c1-4b95-8be6-b57b843d2f02.png?width=1237&height=402) Чтобы принять лицензионное соглашение, откройте файл `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 ``` ![52b298de 8165 47d8 Bd03 Ad52f3c79f13.png](https://content.timeweb.com/assets/d88df6c3-c79a-4b4d-b1fb-0291316614f1.png?width=1556&height=1172) _Добавление сервера в интерфейсе клиента [Minecraft](https://www.minecraft.net/)_ После установки соединения вы можете присоединиться к серверу.  ![A01ad3af Bddb 4810 97cf 0540cd765ae0.png](https://content.timeweb.com/assets/b7413ea1-9eb8-4c1d-8ace-b3cd940ba940.png?width=1600&height=807) _Отображение сервера в интерфейсе клиента [Minecraft](https://www.minecraft.net/)_ Вы можете проверить статус своего Minecraft-сервера с помощью онлайн-инструментов, таких как [mcsrvstat.us](https://mcsrvstat.us). Так можно убедиться, что сервер активен, а также увидеть дополнительные детали, например, версию Minecraft или количество игроков. ![4c8ca854 67f5 45ba 841d 4a2170c6f9a8.png](https://content.timeweb.com/assets/76d07328-2b43-4d97-a7f4-dc5a08fcb090.png?width=1999&height=846) _Просмотр параметров сервера на сайте [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`. ![Screenshot 02 24 25 16:06:24](https://content.timeweb.com/assets/a0cd5fb5-61f1-4530-8a65-297996fec65d.png?width=812&height=517) _Запрос на настройку Postfix в установщике [Bareos](https://www.bareos.com/)_ Затем будет предложено настроить подключение к базе данных. Выберите `No`. ![Screenshot 02 24 25 16:07:15](https://content.timeweb.com/assets/756af81d-e1cf-4e59-be20-72eff1060c15.png?width=1906&height=410) _Запрос на настройку базы данных в установщике [Bareos](https://www.bareos.com/)_ ### Настройка подключения к базе данных Запустим инструмент для настройки подключения к базе данных: ```shell dpkg-reconfigure bareos-database-common ``` В первом окне выберите `Yes`. ![Screenshot 02 24 25 16:07:53](https://content.timeweb.com/assets/ed2981c9-5c76-49d5-ad56-845cc90a1a5a.png?width=1904&height=428) _Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_ В качестве типа подключения укажите `TCP/IP`. ![Screenshot 02 24 25 16:08:10](https://content.timeweb.com/assets/51d177b5-fe42-4c57-8a38-820d14869161.png?width=1899&height=381) _Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_ Так как база данных запущена на `localhost`, выберите его. ![Screenshot 02 24 25 16:08:26](https://content.timeweb.com/assets/7ea4ae1f-0eb9-42be-bfb3-34dd7449b4a6.png?width=971&height=346) _Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_ Если вы не меняли порт в `docker-compose.yml`, укажите `5432`. ![Screenshot 02 24 25 16:08:49](https://content.timeweb.com/assets/1a36eca5-f274-4cc0-afba-5afdc59d0163.png?width=1425&height=294) _Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_ В качестве метода аутентификации администратора выберите `password`. ![Screenshot 02 24 25 16:09:04](https://content.timeweb.com/assets/d03b7f94-2ab0-411e-baf5-41add2eb3a9a.png?width=1896&height=483) _Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_ Для пользователя базы данных также выберите `password`. ![Screenshot 02 24 25 16:09:20](https://content.timeweb.com/assets/e62c979f-701e-437d-9a99-34106118f9cd.png?width=1900&height=460) _Настройка подключения к базе данных в установщике [Bareos](https://www.bareos.com/)_ Bareos использует базу данных с именем `bareos` и пользователя `bareos`. Создадим базу данных. ![Screenshot 02 24 25 16:09:44](https://content.timeweb.com/assets/3526dd6a-31f5-4fc3-9555-efcb50eabb23.png?width=994&height=295) _Создание базы данных в установщике [Bareos](https://www.bareos.com/)_ Затем создадим пользователя. ![Screenshot 02 24 25 16:10:02](https://content.timeweb.com/assets/63ca5c03-5322-4441-b2cd-0b79ca937e85.png?width=1895&height=399) _Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_ Установим пароль пользователя. ![Screenshot 02 24 25 16:10:24](https://content.timeweb.com/assets/2a05508f-5379-4025-9eea-c3081d9a7976.png?width=1808&height=343) _Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_ Подтвердим пароль. ![Screenshot 02 24 25 16:10:40](https://content.timeweb.com/assets/76918c12-99b8-4276-8521-c27346ce1ea7.png?width=572&height=271) _Создание пользователя базы данных в установщике [Bareos](https://www.bareos.com/)_ Теперь необходимо ввести данные администратора PostgreSQL, которые мы задавали в `docker-compose.yml`. Имя пользователя: `admin`. ![Screenshot 02 24 25 16:11:10](https://content.timeweb.com/assets/ad48a56d-93de-40b1-828a-260217caccc4.png?width=1783&height=282) _Настройка базы данных в установщике [Bareos](https://www.bareos.com/)_ Введите пароль администратора PostgreSQL. ![Screenshot 02 24 25 16:11:29](https://content.timeweb.com/assets/37bc9e17-5028-476e-8d1a-ddca49a68c59.png?width=1425&height=381) _Настройка базы данных в установщике [Bareos](https://www.bareos.com/)_ > [!NOTE] > Пароль администратора потребуется ввести несколько раз в процессе настройки. Чтобы убедиться, что база создана и работает, откройте браузер и перейдите по адресу `http://:8080`. Залогиньтесь, используя имя пользователя `bareos` и ранее заданный пароль. ![Screenshot 02 24 25 16:12:28](https://content.timeweb.com/assets/7b3765e1-f27c-4b30-bf79-f4fec33db758.png?width=602&height=333) _Подключение к базе данных в интерфейсе [Adminer](https://www.adminer.org/)_ После авторизации должны отобразиться таблицы базы данных Bareos. ![Screenshot 02 24 25 16:12:46](https://content.timeweb.com/assets/0118813d-0a03-46d7-839e-948119463933.png?width=1133&height=956) _Просмотр базы данных в интерфейсе [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`. Войти в систему можно, используя ранее созданные учетные данные. ![Screenshot 02 24 25 16:14:50](https://content.timeweb.com/assets/01ffd4c5-b2b8-4f1b-bb1b-81aafab9d72b.png?width=600&height=688) _Окно логина в веб-интерфейс [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 ``` Данные для заполнения (`` и ``) можно найти в информации о бакете в панели управления. ![Selection 184](https://content.timeweb.com/assets/1264c5c0-0953-49dd-a2b1-3fc3f0afacd5.png?width=1041&height=943) ### Конфигурация бэкапного устройства Создадим файл: ```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 ``` После выполнения команды в консоли появится подобный вывод: ![Selection 185](https://content.timeweb.com/assets/70af68cb-2f44-4852-8b63-c4b5bf455d5f.png?width=1118&height=354) Это сформированный конфигурационный файл с паролем пользователя. Сохраните значение из поля `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. Выбираем нужное задание, клиент и подтверждаем запуск. ![Screenshot 02 25 25 13:17:04](https://content.timeweb.com/assets/aa52359c-8650-48b3-8969-7e5df54b0005.png?width=1062&height=763) _Раздел «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. ![Создать Сервер 06 24 2026 04 46 Pm](https://content.timeweb.com/assets/e8fca339-d811-42d6-baad-d5a9e9ca31b7.png?width=1567&height=1008) 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. ![Создать Сервер 06 24 2026 04 49 Pm](https://content.timeweb.com/assets/72e33895-9f4c-4670-9e31-8445ffb0e51f.png?width=761&height=702) 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: ![A6e4947c 1d6d 4aac 8ca0 047ffd813734](https://content.timeweb.com/assets/45417b8c-fbf5-4aa7-9342-19a6d3ed9ad3?width=1439&height=356) будет нужно указать: ```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, поэтому установим ее. ![Scr 20260225 Llgp](https://content.timeweb.com/assets/fb3a8126-948f-45c6-8d73-8a513b988026.png?width=1054&height=922) 5. Выберите регион размещения сервера. В примере мы выбираем Нидерланды, но Outline будет работать в том числе на сервере в России. ![Scr 20260225 Llib](https://content.timeweb.com/assets/19fb512b-efe6-4f41-861e-7c3ddd1c6de5.png?width=1046&height=944) 6. Выберите конфигурацию. Для работы Outline достаточно минимальной конфигурации с 1 CPU, 1 ГБ RAM и 15 ГБ диска. Мы установим самый простой конфиг из доступных в Нидерландах. ![Scr 20260225 Lplk](https://content.timeweb.com/assets/c9a7d75d-3be9-4ba0-b4ff-20bf38257305.png?width=1056&height=982) 7. В следующем блоке можно отключить бэкапы, если они вам не нужны; остальные параметры можно оставить без изменений. 8. Нажмите «Заказать» — сервер будет установлен в течение нескольких минут. Реквизиты подключения, в том числе пароль root, вы найдете на дашборде сервера. ![06f14d57 8f5a 41c3 8679 539a08795935](https://content.timeweb.com/assets/48589da8-6ef5-4c98-9dc4-ba880586bc8c?width=1449&height=1003) ## Шаг 2. Установка Outline Manager Для управления подключениями вам потребуется Outline Manager, который необходимо установить на свой компьютер.  1. Скачайте версию для своей ОС с [официального сайта](https://getoutline.org/get-started/) и установите приложение. ![Ddf571d0 03b1 4861 A97d Eec8517b7fc6](https://content.timeweb.com/assets/5a4e30ee-0b49-4e93-9fac-81832910ddec?width=1511&height=871) _Скриншот официального сайта [Outline](https://getoutline.org/get-started/)_ 2. Запустите приложение и примите условия использования, кликнув ОК. 3. Кликните на опцию «Настройте Outline где угодно». ![Без Названия](https://content.timeweb.com/assets/a9688cb2-97e9-47e9-9cee-c91ccf2adb04?width=984&height=1012) _Интерфейс [Outline Manager](https://getoutline.org/)_ Outline предложит вам простую инструкцию: ![Image8](https://content.timeweb.com/assets/2f879c49-e979-4020-b0ea-32101c1a77c3?width=984&height=1012) _Инструкция по установке сервиса в интерфейсе [Outline Manager](https://getoutline.org/)_ Ниже мы опишем, как ее использовать. ## Шаг 3. Настройка сервера 1. Подключитесь к своему серверу Timeweb Cloud [по SSH](https://timeweb.cloud/docs/unix-guides/ssh) с помощью терминала, PowerShell или Putty. Не используйте для настройки консоль в панели управления — вы не сможете скопировать из нее необходимые данные.  2. Cкопируйте команду из Outline Manager и выполните ее на сервере. ![Scr 20260225 Lpzc](https://content.timeweb.com/assets/4487fc94-e2ff-4c5c-b943-9c678f0c012c.png?width=2692&height=1692) _Инструкция по установке сервиса в интерфейсе [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. Скопируйте строку из вывода команды, выделенную зеленым. ![Scr 20260225 Lnsg](https://content.timeweb.com/assets/d4968251-f609-46a7-9332-8f815cea2ee2.png?width=1787&height=1058) 4. Вставьте ее в окно Outline Manager и нажмите «Готово»: ![B59db17b 11e1 4611 9693 Cb0b06dcf1fc](https://content.timeweb.com/assets/a3845e78-eab3-4e46-826e-9636ae1c33f5?width=984&height=1012) _Инструкция по установке сервиса в интерфейсе [Outline Manager](https://getoutline.org/)_ На этом настройка серверной части закончена.  ## Шаг 4. Создание ключей доступа Для установки подключения на устройствах будут необходимы ключи доступа. Они создаются в Outline Manager. 1. Кликните «Добавить новый ключ». При необходимости задайте ключу удобное имя. ![24f7ef95 313f 402a 8594 A59ee6680a3c](https://content.timeweb.com/assets/170fe9ad-8c02-4e47-bc00-ceb3f5551e23?width=984&height=1012) _Раздел «Подключения» в интерфейсе [Outline Manager](https://getoutline.org/)_ 2. Кликните на значок «Поделиться» у созданного ключа. ![45476339 3725 4774 Ac1c 62530a43c2a9](https://content.timeweb.com/assets/bb94f461-73e3-49a4-8127-8eaf7c26f1d3?width=984&height=1012) _Раздел «Подключения» в интерфейсе [Outline Manager](https://getoutline.org/)_ 3. В открывшемся окне нажмите «Копировать ключ доступа» и «Готово». ![Image9](https://content.timeweb.com/assets/6f6b496f-e78e-423a-81e4-7b616434c345?width=984&height=1012) _Окно «Поделитесь доступом» в интерфейсе [Outline Manager](https://getoutline.org/)_ Скопированный ключ понадобится на следующем шаге для настройки клиента Outline. Если вы настраиваете клиент на другом устройстве, ключ можно переслать в любом мессенджере. ## Шаг 5. Настройка клиента Outline 1. Скачайте приложение Outline для своего устройства. Ссылки на скачивание можно найти на [официальном сайте проекта](https://getoutline.org/ru/get-started/#step-3). ![Image14](https://content.timeweb.com/assets/7cf05350-2a80-4540-bd29-5eb736854996?width=1395&height=866) _Скриншот официального сайта [Outline](https://getoutline.org/)_ 2. Установите и запустите скачанное приложение. 3. Нажмите «Добавить сервер», укажите ключ доступа, скопированный из Outline Manager, и нажмите «Добавить сервер». ![Image3](https://content.timeweb.com/assets/e8746cc8-2231-4f30-a84a-902eb0e38097?width=446&height=798) _Добавление ключа доступа в интерфейсе приложения [Outline](https://getoutline.org/)_ Готово, сервер добавлен. Теперь вы можете подключиться к сети, нажав на кнопку «Подключить». ![Image6](https://content.timeweb.com/assets/6530e419-36f1-4d08-b20c-afab59c91e88?width=446&height=798) _Отображение сервера в интерфейсе приложения [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. ![Selection 287](https://content.timeweb.com/assets/58efe1cd-5033-4255-9575-50b627d64437.png?width=1012&height=860) 5. Выберите конфигурацию. Для запуска n8n подойдет минимальная конфигурация сервера. Ее будет достаточно для тестирования. В будущем, если нагрузка на сервис возрастет, вы сможете изменить параметры сервера и увеличить ресурсы сервера. 6. Настройте остальные параметры (их можно оставить без изменений). 7. Завершите создание сервера, нажав на кнопку «Заказать». После запуска сервер будет доступен в панели управления. Перейдите во вкладку «Дашборд», чтобы увидеть технический домен, по которому открывается интерфейс n8n. ![Selection 290](https://content.timeweb.com/assets/81201419-174c-447c-a356-f602d9ee6389.png?width=772&height=770) ### Настройка 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». В открывшемся окне будет указана версия приложения. ![Scr 20260423 Kxxb](https://content.timeweb.com/assets/700c1795-c46a-4b58-8f28-d9de43e6f8e3.png?width=2250&height=1288) Также проверить версию можно при помощи команды: ```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». ![Создать Сервер 06 24 2026 04 55 Pm](https://content.timeweb.com/assets/41440ce9-7927-4eb2-bf5e-c527e9da1d7a.png?width=1565&height=950) 5. Укажите регион, в котором будет размещен сервер. 6. Выберите конфигурацию сервера. Мы рекомендуем следующие параметры: - 4 ядра CPU - 8 ГБ RAM - 80 ГБ NVMe 8. Остальные параметры можно оставить без изменений. 9. Нажмите «Заказать», чтобы создать сервер. ## Настройка сервера После создания сервера выполните первоначальную настройку OpenClaw. Подключитесь к серверу по SSH с вашего компьютера. Если используете macOS или Linux, запустите терминал, на Windows — PowerShell. В панели управления откройте вкладку «Дашборд» и скопируйте строку из блока «Подключение по SSH». ![Scr 20260428 Qfst](https://content.timeweb.com/assets/8d233123-a8b5-4093-b720-da4f41f36c98.png?width=2080&height=1658) Вставьте эту команду в терминал и нажмите `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». ![Scr 20260130 Pjtw](https://content.timeweb.com/assets/4a0aefa3-71c3-4668-9adc-3602b60f19d9.png?width=1466&height=1270) _Мастер настройки [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». ![Scr 20260130 Pnho](https://content.timeweb.com/assets/6ed980ec-12a2-42b2-b6cf-e8b92e9027fb.png?width=1502&height=1376) _Мастер настройки [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** — он отображается в панели управления агентом, во вкладке «Дашборд». ![Scr 20260130 Qesd](https://content.timeweb.com/assets/bf3a6441-182d-4682-be12-e4e7bce8e4ca.png?width=1786&height=1654) 2. **Ввести API-ключ**. Получить его можно во вкладке в панели управления:  - Перейдите во вкладку «Управление» - Нажмите «Изменить» в строке «Доступность». - В открывшемся окне нажмите «Добавить новый ключ». ![Scr 20260130 Qfpq](https://content.timeweb.com/assets/7b5a459e-2b30-42b6-a7db-a9f0ad0bed37.png?width=2532&height=1660) 3. Подтвердите введенные данные, нажав «Y». После этого запустится консольный интерфейс OpenClaw. Вы можете проверить корректность подключения, отправив любое сообщение. ![Scr 20260130 Qggk](https://content.timeweb.com/assets/02ea176a-ee5d-4431-9fb3-1d2576201899.png?width=2500&height=1068) _Консольный интерфейс [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. ![Scr 20260130 Oyjw](https://content.timeweb.com/assets/03591b38-6013-44f4-93b6-2c082e9998ea.png?width=1684&height=1200) _Получение API-ключа в интерфейсе [Telegram](https://telegram.org/)_ В мастере настройки OpenClaw, на этапе «Select channel (QuickStart)», выберите «Telegram» и вставьте полученный API-ключ. Полностью завершите настройку OpenClaw и запустите диалог с ботом, отправив команду: ```bash /start ``` В ответ бот пришлет сообщение с кодом сопряжения. ![Scr 20260130 Qiol](https://content.timeweb.com/assets/35fd125e-6138-473c-a1e7-f30343850283.png?width=1678&height=604) _Получение кода сопряжения в интерфейсе [Telegram](https://telegram.org/)_ На сервере выполните команду: ```bash openclaw pairing approve telegram ``` Где `` — это код, полученный от бота в Телеграм. После этого бот будет готов к работе: вы сможете отправлять команды и взаимодействовать с агентом напрямую через Телеграм. Сопряжение нужно будет повторить для каждого нового клиента. ## Веб-интерфейс Веб-интерфейс можно использовать для взаимодействия с агентом и управления его работой. Через него можно общаться с ботом, проверять активные сессии и их состояние, управлять токенами доступа, а также выполнить базовую настройку. Интерфейс предназначен для администрирования и отладки и не рассчитан на публикацию в открытый интернет. ![Scr 20260206 Ltsb](https://content.timeweb.com/assets/e2ff4978-9e94-4f86-966b-013eb583c9f0.png?width=2934&height=1670) _Раздел «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. ![Scr 20260420 Mome](https://content.timeweb.com/assets/054c05ef-4b55-41b1-b432-e0aacd1558dd.png?width=2080&height=1644) После этого выберите регион размещения и конфигурацию сервера. Остальные параметры можно оставить по умолчанию. Подробное описание всех этапов доступно [в инструкции по созданию облачного сервера](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». ![Scr 20260421 Mpwj](https://content.timeweb.com/assets/14bbcf4b-236a-403d-9adb-829881b83b43.png?width=1856&height=1014) _Страница авторизации в [Paperclip](https://paperclip.ing/)_ На следующем экране нажмите «Create one», чтобы создать нового пользователя. > [!NOTE] > Адрес электронной почты используется только как логин. Письма на него отправляться не будут. Заполните поля формы и нажмите «Create account». Если после создания аккаунта вы снова попали на страницу приглашения, откройте вручную адрес `http://IP_сервера:3100`. После входа откроется страница создания компании. Завершите первоначальную настройку и укажите параметры подключения к нужному провайдеру агентов. После завершения настройки откроется дашборд Paperclip. ![Scr 20260421 Mrue](https://content.timeweb.com/assets/386a84e3-fca1-410f-af33-0724e088fe77.png?width=2938&height=1672) _Интерфейс [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](https://content.timeweb.com/assets/e31c92a8-2096-4f65-8cf8-89d38b09502d.png?width=2126&height=1600) 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`. ![Данные для подключения к серверу](https://content.timeweb.com/assets/3c2b9758-9ed4-4040-ab5a-718271544b4b.png?width=2172&height=1952) При первом подключении появится запрос на добавление сервера в список доверенных: ```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`. ![Настройка провайдера в Hermes](https://content.timeweb.com/assets/a0c621d2-c5ea-4aea-9a19-1c368e83acff.png?width=1642&height=544) Скрипт добавит провайдера `twc-agent` и откроет интерфейс чата. ## Выбор модели в AI Gateway Этот шаг требуется только при подключении через AI Gateway. При использовании AI-агента Hermes обращается к модели, выбранной в настройках агента. В интерфейсе Hermes выполните команду: ```bash /model ``` Откроется окно выбора модели. Выберите провайдера `twc-agent`, затем — модель, которую хотите использовать. ![Выбор модели в Hermes](https://content.timeweb.com/assets/184cd3b6-1c65-42b2-8f37-caf431a7412a.png?width=2326&height=1202) _Интерфейс [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_адрес_сервера ``` Если сервер доступен, в выводе сразу начнет отображаться информация об отправке пакетов и получении ответов от сервера. Это выглядит примерно следующим образом: ![Ping](https://content.timeweb.com/assets/b2c9a78a-4662-40fc-9086-04a9f15bc6e6?width=499&height=169) Для остановки выполнения команды нажмите Ctrl+C. Если обмен пакетами не происходит — сервер недоступен. В этом случае попробуйте проверить сетевые настройки на сервере. Для этого необходимо [подключиться по SSH](https://timeweb.cloud/docs/unix-guides/ssh) или использовать веб-консоль в панели управления. Выполните команду: ```shell ifconfig ``` Пример вывода с корректными настройками: ![Ifconfig](https://content.timeweb.com/assets/d14f19f0-1723-43f5-8244-e4f000ce9e25?width=627&height=275) Если строка`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](https://content.timeweb.com/assets/918768de-0aeb-4ddf-a0d5-4b98eec7abdd?width=652&height=512) Если в выводе не фигурирует слово `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 (1)](https://content.timeweb.com/assets/a5901850-3163-472f-9a8e-407f553db4f6?width=650&height=196) Если в выводе отсутствует слово 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 / ``` ![Ncdu1](https://content.timeweb.com/assets/f0c235a1-f156-44d6-aa3c-1177ea2761a7?width=732&height=409)Формат вывода Количество символов `#` помогает определить, какие файлы и каталоги занимают больше всего места. Крайний левый столбец может содержать дополнительные обозначения (например, на скриншоте выше — пометки `e`): - `!` — ошибка при чтении каталога; - `.` — ошибка при чтении подкаталога, т.е. указанный размер может быть некорректным; - `<` — объект исключен из подсчета (с помощью опции `--exclude`); - `>` — объект из другой файловой системы; - `@` — объект не является файлом или каталогом (символическая ссылка, сокет); - `H` — объект уже был учтен (жесткая ссылка); - `e` — пустой каталог. ### **Навигация** Для перемещения по директориям используются клавиши со стрелками (вверх и вниз). Стрелка вправо или Enter — войти в выбранную директорию. Стрелка влево — вернуться в предыдущую директорию. ### **Доступные функции интерфейса** С помощью следующих клавиш можно управлять полученным выводом: `n` — упорядочить элементы по имени (в прямом и обратном порядке); `s` — упорядочить элементы по размеру (в прямом и обратном порядке); `g` — переключение между отображением «графика» (####) и объёма в процентах: ![Ncdu3](https://content.timeweb.com/assets/fd6a5e94-6af4-4804-97b1-007567a21da2?width=728&height=410) `a` — переключение между отображением реального размера файлов и объемом занимаемого пространства на диске; `e` — скрыть/показать скрытые файлы и папки; `?` — вызвать краткую справку; `d` — удалить выбранный элемент (перед удалением будет запрошено подтверждение действия); `i` — вывести информацию о выбранном элементе: ![Ncdu2](https://content.timeweb.com/assets/22c495c6-ed3f-430b-8032-21bc5d6cca0c?width=732&height=410) `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-дистрибутивах по умолчанию и позволяет получить общую информацию о занятом месте. При выполнении команды она выводит объем пространства, занимаемого каждым файлом и каталогом в текущем каталоге: ![Du11](https://content.timeweb.com/assets/3f7acdf6-3447-4c05-a076-57a236ef2839?width=373&height=137) ### **Ключи du** Для вывода занятого объема в читаемом виде (в килобайтах, мегабайтах и т.д.) требуется ключ `-h`, мы будем использовать его во всех командах ниже. - Например, можно начать с оценки размера всех директорий в корневой файловой системе. Для этого добавим ключи `-s` (для вывода итогового размера указанной директории) и `-c` (для вывода «итого»): ```shell du -shc /* ``` ![Du22](https://content.timeweb.com/assets/b9abc3cb-bbe9-40ab-87e0-e55b2688434c?width=739&height=545) - Полезный и удобный способ подсчета и сортировки: ```shell du -sch ./*|sort -hr ``` ![Du8](https://content.timeweb.com/assets/d0e20f6e-5c62-43a3-b9fb-5332ea40a56d?width=427&height=124) - Чтобы узнать размер конкретной директории, используйте ключ `-s` и указывайте путь к нужной директории: ```shell du -sh /путь/к/директории ``` ![Du33](https://content.timeweb.com/assets/27381acf-d326-49d6-80c0-c3fe8614775c?width=381&height=38) - Для вывода размера всех файлов и подкаталогов в каталоге используйте ключ `-a`. ```shell du -ah /путь/к/директории ``` ![Du44](https://content.timeweb.com/assets/1c1a9d36-8833-4d8c-ad7d-8d9f0c437c70?width=594&height=392) - Для вывода суммарного объема всех показанных в выводе элементов используется ключ `-c`: ```shell du -ch /путь/к/директории ``` ![Du55](https://content.timeweb.com/assets/ce7cf186-8309-418e-bd4c-0a9c18a8fad2?width=513&height=258) - Можно использовать опцию `--exclude`**,** чтобы исключить из вывода конкретный тип файлов. ```shell du -ah --exclude="*что_исключаем*" ``` Например: ```shell du -ah --exclude="*.html*" ```   ![Du9](https://content.timeweb.com/assets/1d8ccea3-bfc8-4a57-b010-a09d488bbe38?width=581&height=308) - Еще одна полезная опция — вывод времени последнего изменения файла. Для этого используется `--time`: ```shell du -ah --time /путь/к/директории ``` ## Нюансы ### Несоответствие данных du, ncdu и ПО 1. Иногда можно столкнуться с ситуацией, когда утилиты `du` и `ncdu` показывают меньший объем, чем выводится в панели управления; либо же вы удаляете файлы, но ваше ПО сообщает, что свободного пространства по-прежнему недостаточно. В этом случае для проверки стоит воспользоваться командой `df`, которая позволит получить данные именно о файловой системе (в то время как `du` и `ncdu` показывают именно физический объем на диске): ```shell df -h ``` Вероятнее всего, в выводе будет информация о занятости 100% пространства. Это связано с тем, что иногда при удалении файла он остается доступен какому-либо запущенному процессу, из-за чего файловая система по-прежнему учитывает его в общем объеме занятого пространства. Чтобы решить проблему, нужно определить, какими процессами все еще используются удаленные файлы: ```shell lsof | grep '(deleted)' ``` После чего перезапустить эти процессы:  ``` systemctl restart имя_сервиса ``` Например, в выводе ниже этот процесс — httpd, и именно его нужно перезапустить: ![Deleted](https://content.timeweb.com/assets/eeccd7fa-c458-4229-86ad-9172a2316b50?width=470&height=81) 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`. Вывод утилиты выглядит следующим образом: ![Top](https://content.timeweb.com/assets/f1701b00-1856-4486-8a53-29d267b35408?width=646&height=630) В верхней части выводится информация о системе, ниже — список процессов. Вывод обновляется каждые 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 ``` Вывод команды выглядит следующим образом: ![Htop](https://content.timeweb.com/assets/825bf9e7-e21e-447c-a2e5-9da079dc8644?width=1366&height=737) Аналогично выводу `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 ``` Вывод выглядит примерно следующим образом: ![Atop](https://content.timeweb.com/assets/c1072556-299e-4a07-8c13-f002af0ed032?width=894&height=583) В верхней части отображается информация о системе и нагрузке на ключевые компоненты: процессор, ядра, память, сеть. Ниже выводится список процессов.  Для управления выводом можно использовать: **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](https://content.timeweb.com/assets/3dca5c28-9386-4603-b7df-9d4ce14b4aa0?width=592&height=189)` Для решения проблемы с недостатком свободных 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 — критическая ошибка ядра операционной системы. При этом также может наблюдаться невозможность произведения каких-либо действий в консоли сервера в панели управления. Для решения проблемы запустите перезагрузку сервера, после чего нажмите на кнопку «Перезагрузить принудительно». Принудительная перезагрузка позволит перезапустить виртуальную машину и восстановить работу.