Администрирование VPS: от базовой настройки Linux до развертывания веб-приложений и ИИ-агентов

Курс предназначен для системного освоения навыков работы с виртуальными серверами. Вы пройдете путь от первичной настройки безопасности и конфигурации Nginx до запуска сложных стеков с базами данных и современными ИИ-инструментами.

1. Основы Linux и первичная настройка безопасности VPS

Основы Linux и первичная настройка безопасности VPS

Представьте, что вы арендовали пустую квартиру в незнакомом городе. Вам выдали ключи, но внутри нет ни мебели, ни охраны, а замки на дверях — самые простые. Оставить всё как есть — значит пригласить грабителей. Аренда VPS (Virtual Private Server) — это ровно та же ситуация. Как только ваш сервер получает публичный IP-адрес, боты-сканеры начинают простукивать его порты в поисках стандартных паролей. Ваша задача в первые 15 минут — превратить эту «пустую квартиру» в цифровую крепость.

Анатомия Linux и философия терминала

В мире Windows мы привыкли к графическому интерфейсу, где ошибка часто исправляется «перезагрузкой». В Linux, особенно на серверах без графической оболочки (Headless), терминал — это ваш единственный и самый мощный инструмент. Здесь всё является файлом: конфигурация сети, драйвер видеокарты и даже текст, который вы сейчас читаете, если бы он лежал в системе.

Основное различие между домашним ПК и VPS заключается в распределении ресурсов. На виртуальном сервере работает гипервизор — программное обеспечение, которое делит физическое железо на изолированные части. Вы получаете гарантированный объем RAM и CPU, но операционная система (чаще всего дистрибутивы семейства Debian или Ubuntu) оптимизирована под производительность, а не под красоту иконок.

> Linux — это не просто ОС, это иерархия прав. Главный пользователь в системе — root. Он обладает абсолютной властью: может удалить всю файловую систему одной командой. Именно поэтому работа под root в повседневном режиме считается «плохим тоном» и огромным риском для безопасности.

Когда вы вводите команду ls /, вы видите корень системы. Здесь /etc хранит настройки, /var — логи и данные сайтов, а /home — личные папки пользователей. Понимание этой структуры критично: если вы случайно измените права на /etc, сервер может просто не загрузиться после обновления.

Первый вход и создание безопасного окружения

Обычно хостинг-провайдер присылает вам IP-адрес и пароль от пользователя root. Первое, что нужно сделать — создать обычного пользователя и наделить его правами администратора через механизм sudo (superuser do). Это позволяет выполнять опасные команды только тогда, когда это действительно нужно, подтверждая действие паролем.

Рассмотрим процесс создания пользователя deploy:

  • Создание: adduser deploy. Система попросит задать надежный пароль.
  • Делегирование прав: usermod -aG sudo deploy. Теперь этот пользователь может «превращаться» в администратора.
  • Почему это важно? Если злоумышленник подберет пароль к обычному пользователю, он всё равно будет ограничен в действиях. Ему придется взламывать еще и механизм sudo. Но пароли — это прошлый век. Настоящая безопасность начинается с SSH-ключей.

    SSH-ключ состоит из двух частей: приватной (хранится у вас на ПК) и публичной (лежит на сервере). Это работает как замок и ключ: сервер просит ваш ПК «подписать» случайную строку данных. Если подпись верна, доступ разрешен. Взломать 2048-битный или 4096-битный RSA-ключ перебором практически невозможно, в отличие от пароля «123456».

    | Метод аутентификации | Уровень защиты | Удобство | Риски | | :--- | :--- | :--- | :--- | | Пароль | Низкий | Высокое (запоминается) | Brute-force атаки, фишинг | | SSH-ключ (RSA/Ed25519) | Высокий | Среднее (нужен файл) | Потеря приватного ключа | | 2FA (Google Auth) | Очень высокий | Низкое (нужен телефон) | Потеря устройства |

    Настройка SSH-демона и закрытие «парадного входа»

    После того как вы проверили, что можете зайти под новым пользователем с помощью ключа, пора редактировать файл /etc/ssh/sshd_config. Это главная панель управления доступом к вашему серверу.

    Основные параметры, которые нужно изменить:

  • PermitRootLogin no: запрещает вход под root. Теперь хакеру нужно угадать не только пароль, но и имя вашего пользователя.
  • PasswordAuthentication no: отключает вход по паролю. Только ключи. Это отсекает 99% автоматических атак.
  • Port 2222 (опционально): смена стандартного порта 22 на любой другой (например, 2222) снижает «шум» в логах, так как боты в основном сканируют стандартный порт.
  • После внесения изменений обязательно выполните sudo systemctl restart ssh, но не закрывайте текущую сессию, пока не убедитесь в соседнем окне терминала, что новый вход работает. Ошибка в конфиге может привести к потере доступа к серверу.

    Firewall: настройка UFW

    Даже если SSH защищен, другие порты могут быть открыты. Для управления сетевым экраном в Ubuntu используется UFW (Uncomplicated Firewall). Его логика проста: запрещено всё, что не разрешено явно.

    Пошаговый алгоритм настройки:

  • Разрешаем SSH: sudo ufw allow 22/tcp (или ваш кастомный порт).
  • Разрешаем веб-трафик: sudo ufw allow 80/tcp и sudo ufw allow 443/tcp.
  • Включаем защиту: sudo ufw enable.
  • Теперь сервер будет игнорировать любые запросы на порты, которые вы не открыли. Это базовая гигиена, которая предотвращает эксплуатацию уязвимостей в сервисах, которые вы могли запустить случайно или для тестов (например, базы данных Redis или базы данных без пароля).

    Автоматизация защиты с Fail2Ban

    Даже если пароли отключены, боты будут продолжать попытки соединения, нагружая процессор и забивая логи. Утилита Fail2Ban отслеживает файлы логов (например, /var/log/auth.log) на предмет подозрительной активности. Если с одного IP-адреса произошло 5 неудачных попыток входа за минуту, Fail2Ban дает команду файрволу заблокировать этот IP на час или сутки.

    Это работает как «вышибала» в клубе: если кто-то слишком настойчиво дергает ручку закрытой двери, его просто выводят из очереди. Установка проста: sudo apt install fail2ban. Базовые настройки в файле jail.local уже защищают SSH «из коробки».

    > Исследования показывают, что новый сервер в сети атакуется ботами в среднем каждые 30-40 секунд. Без Fail2Ban ваш файл логов за неделю может вырасти до сотен мегабайт только из-за записей о неудачных попытках входа.

    Обновление системы и автоматические патчи

    В Linux безопасность — это процесс, а не состояние. Уязвимости находят ежедневно. Команда sudo apt update && sudo apt upgrade должна стать вашей привычкой. Однако для критических обновлений безопасности лучше настроить пакет unattended-upgrades. Он будет автоматически скачивать и устанавливать патчи ядра и системных библиотек без вашего участия.

    Важно понимать разницу между update (обновление списка доступных пакетов) и upgrade (физическая установка новых версий). Если вы выполнили только первую команду, ваша система осталась старой.

    2. Установка и конфигурация веб-сервера Nginx и SSL-сертификации

    Установка и конфигурация веб-сервера Nginx и SSL-сертификации

    Если операционная система — это фундамент вашего дома, то веб-сервер — это его фасад и входная дверь. Nginx (произносится как «Engine-X») — это самый популярный в мире веб-сервер для высоконагруженных проектов. Его ценят за невероятную скорость, низкое потребление памяти и гибкость. В отличие от старого доброго Apache, Nginx использует событийно-ориентированную архитектуру, что позволяет ему обрабатывать десятки тысяч одновременных соединений на скромном VPS с 1 ГБ оперативной памяти.

    Почему именно Nginx?

    В современной веб-разработке Nginx редко используется просто как «отдатчик файлов». Чаще всего он выступает в роли Reverse Proxy (обратного прокси). Это означает, что Nginx принимает запрос от пользователя из интернета, а затем передает его «вглубь» сервера — вашему приложению на Python, Node.js или ИИ-агенту.

    Преимущества такой схемы:

  • Безопасность: ваше приложение не «светит» своим портом (например, 3000 или 8000) наружу.
  • Буферизация: Nginx может медленно принимать тяжелые данные от клиента и быстро отдавать их приложению, экономя ресурсы последнего.
  • Статика: Nginx отдает картинки, CSS и JS-файлы в десятки раз быстрее, чем любой программный код.
  • > Представьте Nginx как опытного администратора на ресепшене отеля. Он проверяет документы (SSL), распределяет гостей по номерам (балансировка нагрузки) и выдает рекламные буклеты (статика), не отвлекая поваров на кухне (ваше приложение).

    Установка и базовая структура конфигурации

    Установка в Ubuntu тривиальна: sudo apt update && sudo apt install nginx. Сразу после этого веб-сервер готов к работе. Если вы перейдете по IP-адресу вашего сервера в браузере, вы увидите "Welcome to nginx".

    Конфигурация Nginx в Linux организована очень логично. Не стоит редактировать основной файл /etc/nginx/nginx.conf без крайней необходимости. Вместо этого используется система «модульных» конфигов:

  • /etc/nginx/sites-available/: здесь лежат файлы настроек для каждого вашего сайта.
  • /etc/nginx/sites-enabled/: здесь лежат символические ссылки на файлы из первой папки. Только те сайты, чьи ссылки есть в этой папке, будут работать.
  • Это позволяет мгновенно отключать сайты, не удаляя их настройки: просто удалите ссылку из sites-enabled.

    Создание первого Virtual Host (Server Block)

    Допустим, у нас есть домен example.com. Нам нужно создать файл /etc/nginx/sites-available/example.com.

    Типичный блок конфигурации выглядит так:

    Здесь listen 80 означает, что сервер слушает обычный HTTP-трафик. Директива location / определяет, как обрабатывать запросы: сначала искать файл по точному адресу (uri/), и если ничего не найдено — выдать ошибку 404.

    После создания конфига нужно создать ссылку: sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ И проверить конфиг на ошибки: sudo nginx -t. Если всё ок — sudo systemctl reload nginx.

    Переход на HTTPS: Let's Encrypt и Certbot

    В 2024 году сайт без HTTPS — это моветон и угроза безопасности. Данные (пароли, личные сообщения) передаются в открытом виде и могут быть перехвачены. Раньше SSL-сертификаты стоили сотни долларов, но проект Let's Encrypt сделал их бесплатными и автоматизированными.

    Для работы мы используем утилиту Certbot. Она сама договорится с серверами Let's Encrypt, подтвердит, что домен принадлежит вам, и перепишет конфиг Nginx.

  • Установка: sudo apt install certbot python3-certbot-nginx.
  • Запуск: sudo certbot --nginx -d example.com -d www.example.com.
  • Certbot спросит ваш e-mail и предложит автоматически настроить редирект с HTTP на HTTPS. Соглашайтесь — это добавит в ваш конфиг правила, которые будут перекидывать всех пользователей на защищенную версию сайта.

    > Важный нюанс: сертификаты Let's Encrypt действуют всего 90 дней. Но Certbot автоматически добавляет задачу в планировщик (cron), которая проверяет и обновляет сертификаты за 30 дней до истечения. Вам больше никогда не придется настраивать это вручную.

    Оптимизация и безопасность Nginx

    После настройки SSL стоит внести пару правок для усиления защиты. В блоке server стоит добавить заголовки безопасности, которые запрещают открывать ваш сайт во фреймах (защита от кликджекинга) и заставляют браузер использовать только HTTPS.

    Также полезно настроить Gzip-сжатие. Это уменьшит размер передаваемых текстовых файлов (HTML, JS) в 3-5 раз, что значительно ускорит загрузку сайта для пользователей с медленным интернетом.

    Пример настройки Gzip в nginx.conf:

    Разбор по шагам: проксирование запросов к приложению

    Предположим, ваш ИИ-агент или веб-приложение запущено на порту 5000 (например, это Flask или FastAPI). Вы не хотите, чтобы пользователи заходили на example.com:5000. Вы хотите example.com.

    Шаг 1: В конфиге Nginx меняем блок location /. Шаг 2: Используем директиву proxy_pass http://localhost:5000;. Шаг 3: Передаем реальный IP пользователя приложению с помощью заголовков:

  • proxy_set_header Host remote_addr;
  • Шаг 4: Проверяем конфиг sudo nginx -t. Шаг 5: Перезагружаем Nginx.

    Теперь Nginx принимает удар на себя, шифрует трафик по SSL и передает его «чистым» вашему приложению внутри сервера.

    3. Управление базами данных и подготовка программного окружения

    Управление базами данных и подготовка программного окружения

    Когда сервер защищен, а веб-сервер готов принимать гостей, пора заняться «мозгами» и «памятью» вашего проекта. Любое современное приложение — будь то ИИ-агент, сохраняющий историю диалогов, или блог на WordPress — требует места для хранения структурированных данных и правильной среды для исполнения кода. В этой главе мы разберем установку PostgreSQL, работу с Python/Node.js окружениями и концепцию изоляции зависимостей.

    Выбор СУБД: Почему PostgreSQL?

    В мире Linux есть два титана: MySQL (и его клон MariaDB) и PostgreSQL. Хотя MySQL долгое время был стандартом для веба, PostgreSQL (или просто Postgres) сегодня считается более продвинутым выбором, особенно для сложных приложений и ИИ-проектов.

    Почему Postgres?

  • Надежность: Строгое соблюдение принципов ACID (атомарность, согласованность, изоляция, долговечность). Ваши данные не «протухнут» при внезапном отключении питания.
  • Типы данных: Postgres из коробки умеет работать с JSONB. Это позволяет хранить неструктурированные данные (как в MongoDB), сохраняя при этом мощь SQL-запросов. Для ИИ-агентов, работающих с динамическими метаданными, это бесценно.
  • Расширяемость: Например, расширение pgvector превращает Postgres в векторную базу данных, необходимую для поиска по семантическому сходству в задачах машинного обучения.
  • Установка в Ubuntu: sudo apt install postgresql postgresql-contrib. После установки Postgres создает в системе пользователя postgres. Чтобы попасть в консоль управления базой, используйте: sudo -u postgres psql.

    Безопасность базы данных на VPS

    Главное правило: никогда не открывайте порт базы данных (5432 для Postgres) наружу. Ваше приложение и база данных находятся на одном сервере, поэтому они могут общаться через localhost.

    В файле /etc/postgresql/14/main/pg_hba.conf (путь зависит от версии) настраиваются права доступа. По умолчанию Postgres разрешает подключения только локально, и это правильно. Если вам нужно подключиться к базе с домашнего компьютера для аналитики, используйте SSH-туннель, а не открытие портов в UFW.

    > SSH-туннель — это «проброс» порта. Вы подключаетесь по SSH к серверу, и ваш ПК начинает думать, что порт 5432 сервера — это его собственный локальный порт. Это безопасно, так как трафик зашифрован внутри SSH-сессии.

    Подготовка программного стека: Python и Node.js

    Большинство современных ИИ-инструментов написаны на Python, а фронтенд-приложения — на Node.js. Главная ловушка здесь — конфликт версий. Системный Python в Ubuntu нужен самой операционной системе. Если вы установите туда свои библиотеки через pip, вы можете сломать системные утилиты.

    Python: Виртуальные окружения (venv)

    Для каждого проекта создавайте отдельную «песочницу»:
  • Установка: sudo apt install python3-venv.
  • Создание: python3 -m venv my_app_env.
  • Активация: source my_app_env/bin/activate.
  • Теперь все библиотеки, установленные через pip install, будут жить только внутри папки my_app_env.

    Node.js: Использование NVM

    Не устанавливайте Node.js через apt. Версия там обычно древняя. Используйте NVM (Node Version Manager). Он позволяет устанавливать любую версию Node.js одной командой и переключаться между ними. Это критично, если один ваш проект требует Node 16, а новый ИИ-интерфейс — Node 20.

    Работа с переменными окружения (.env)

    Никогда не пишите пароли от базы данных или API-ключи (например, от OpenAI) прямо в коде. Если вы выложите такой код на GitHub, ваши деньги и данные украдут за считанные минуты.

    Стандарт индустрии — файлы .env. Пример содержания:

    Ваше приложение считывает эти данные при запуске. Добавьте .env в файл .gitignore, чтобы он никогда не покинул пределы вашего сервера.

    Пошаговый разбор: Создание БД и пользователя

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

    Шаг 1: Заходим под системным пользователем Postgres: sudo -u postgres psql. Шаг 2: Создаем пользователя: CREATE USER ai_user WITH PASSWORD 'very_strong_password';. Шаг 3: Создаем базу: CREATE DATABASE ai_project;. Шаг 4: Даем права: GRANT ALL PRIVILEGES ON DATABASE ai_project TO ai_user;. Шаг 5: Выходим: \q.

    Теперь в вашем приложении строка подключения будет выглядеть так: postgresql://ai_user:very_strong_password@localhost/ai_project. Это гораздо безопаснее, чем использовать суперпользователя postgres.

    Менеджеры процессов: PM2 и Systemd

    Ваше приложение не должно запускаться просто командой python main.py. Что если сервер перезагрузится? Что если программа упадет с ошибкой? Она должна подняться автоматически.

    Для Node.js и даже для Python-скриптов отлично подходит PM2.

  • Запуск: pm2 start app.js или pm2 start "python main.py" --name ai-bot.
  • Автозапуск при рестарте сервера: pm2 startup и pm2 save.
  • Мониторинг: pm2 monit.
  • Альтернатива — создание системного юнита в Systemd. Это более «нативный» путь для Linux, где вы описываете сервис в текстовом файле в /etc/systemd/system/. Systemd будет следить за процессом, перезапускать его и писать логи в системный журнал journalctl.

    | Инструмент | Для чего нужен | Главная фишка | | :--- | :--- | :--- | | PostgreSQL | Хранение данных | Надежность и JSONB | | Venv / NVM | Изоляция окружения | Отсутствие конфликтов версий | | .env файлы | Конфигурация | Безопасность секретных ключей | | PM2 / Systemd | Управление процессами | Живучесть приложения 24/7 |

    4. Развертывание веб-сайтов и интеграция ИИ-агентов на сервере

    Развертывание веб-сайтов и интеграция ИИ-агентов на сервере

    Мы подошли к моменту, когда разрозненные компоненты — безопасность, веб-сервер и база данных — должны превратиться в работающий продукт. Развертывание (деплой) — это не просто копирование файлов. Это процесс создания воспроизводимой среды, где ваш код работает так же стабильно, как на компьютере разработчика. В этой главе мы разберем «чистый» деплой Python-приложения и специфику работы с ИИ-агентами, требующими долгоживущих соединений и больших вычислительных ресурсов.

    Архитектура современного веб-приложения

    Типичный стек для ИИ-проекта выглядит так:

  • Frontend: React/Next.js или простая HTML-страница (отдается Nginx).
  • Backend API: FastAPI или Flask (Python), который общается с моделями ИИ.
  • Worker: Фоновый процесс для тяжелых задач (например, генерация длинного текста или обработка видео).
  • Message Broker: Redis, если нужно передавать задачи между API и Worker.
  • Для начала рассмотрим деплой API на базе FastAPI. Это современный фреймворк, который идеально подходит для ИИ-агентов благодаря своей асинхронности (). Асинхронность позволяет серверу не «зависать», пока он ждет ответа от API OpenAI или локальной нейросети.

    Пошаговый разбор: Деплой Python API

    Шаг 1: Подготовка кода. Клонируем репозиторий: git clone https://github.com/user/ai-agent.git. Переходим в папку и создаем окружение: python3 -m venv venv && source venv/bin/activate. Устанавливаем зависимости: pip install -r requirements.txt.

    Шаг 2: Настройка Gunicorn/Uvicorn. В разработке вы запускаете сервер командой uvicorn main:app. Но для продакшена нужен «надсмотрщик». Gunicorn — это сервер, который запускает несколько рабочих процессов (workers) вашего приложения. Если один процесс упадет, остальные продолжат работать. Команда запуска: gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app. Здесь -w 4 означает создание 4-х рабочих процессов (оптимально: ).

    Шаг 3: Настройка Systemd. Создаем файл /etc/systemd/system/ai-agent.service:

    Запускаем: sudo systemctl start ai-agent && sudo systemctl enable ai-agent.

    Интеграция ИИ-агентов: Особенности

    ИИ-агенты отличаются от обычных сайтов двумя вещами: длительностью запросов и потреблением памяти.

  • Таймауты Nginx: Обычный HTTP-запрос длится доли секунды. Ответ от LLM (Large Language Model) может идти 30-60 секунд. Nginx по умолчанию может оборвать соединение через 60 секунд. В конфиге Nginx в блоке location нужно увеличить таймауты:
  • - proxy_read_timeout 300s; - proxy_connect_timeout 300s;

  • Потоковая передача (Streaming): Чтобы пользователь не смотрел в пустой экран 30 секунд, ИИ-агенты отдают текст по словам (Server-Sent Events). Для этого в Nginx нужно отключить буферизацию: proxy_buffering off;. Тогда Nginx будет пробрасывать каждое слово клиенту мгновенно.
  • Локальные модели vs API: Если вы запускаете модель (например, Llama 3) прямо на своем VPS, вам потребуется минимум 8-16 ГБ RAM и, желательно, GPU. На обычном дешевом VPS лучше использовать API (OpenAI, Anthropic), а сервер использовать только как посредника.
  • Работа со статикой и фронтендом

    Если у вас есть скомпилированный фронтенд (папка dist или build), не заставляйте Python отдавать эти файлы. Это работа для Nginx.

    Пример комбинированного конфига:

    Теперь всё, что начинается с /api, уходит на Python, а всё остальное — это быстрые статические файлы.

    Обновление приложения (CI/CD на минималках)

    Как обновлять код без остановки сайта? Можно написать простой bash-скрипт deploy.sh:

    Для небольших проектов этого достаточно. Для крупных — используются GitHub Actions, которые сами заходят на сервер по SSH и выполняют эти команды при каждом пуше в ветку main.

    > Ошибка новичка: забыть выполнить pip install после добавления новой библиотеки в код. Приложение упадет при перезагрузке, так как не найдет нужный модуль. Всегда проверяйте зависимости перед рестартом сервиса.

    Мониторинг «здоровья» агента

    ИИ-агенты могут потреблять много памяти (особенно при обработке длинных контекстов). Полезно использовать команду htop, чтобы видеть нагрузку в реальном времени. Если ваше приложение начинает «отъедать» всю RAM, Linux может прийти с OOM Killer (Out Of Memory Killer) и просто убить процесс вашего агента. Чтобы этого избежать, настройте Swap-файл (подкачку на диске) — это даст серверу «запасной парашют», если оперативная память закончится.

    5. Мониторинг, техническое обслуживание и продвинутая сетевая безопасность

    Мониторинг, техническое обслуживание и продвинутая сетевая безопасность

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

    Мониторинг ресурсов: Когда серверу плохо?

    Первое, что должен уметь администратор — быстро диагностировать проблему.

  • top или htop: Показывает, какой процесс потребляет CPU и RAM. Если вы видите, что python занимает 99% CPU в течение часа — возможно, ваш ИИ-агент зациклился.
  • df -h: Проверка свободного места. Если место на диске (особенно в /var/log) закончится, база данных перестанет записывать данные, и сервер «встанет».
  • iostat: Показывает нагрузку на диск. Если диск медленный (HDD или дешевый SSD), база данных будет тормозить всю систему.
  • > Лайфхак: установите утилиту netdata. Она запускает красивый веб-интерфейс на порту 19999, где в реальном времени рисуются графики всего: от температуры процессора до входящего трафика. Это «пульс» вашего сервера.

    Обслуживание логов и ротация

    Логи — это золото при отладке, но яд для дискового пространства. Если ваше приложение активно пишет логи, файл access.log может вырасти до гигабайтов за неделю. Для решения этой проблемы в Linux есть Logrotate. Он автоматически:

  • Раз в день/неделю переименовывает текущий лог в log.1.
  • Сжимает старые логи в .gz.
  • Удаляет логи старше, например, 30 дней.
  • Настройки лежат в /etc/logrotate.d/nginx. Убедитесь, что для вашего самописного ИИ-агента тоже настроена ротация, если он пишет логи в отдельный файл.

    Настройка Swap (подкачки)

    Если у вас VPS с 1-2 ГБ оперативной памяти, запуск ИИ-модели или даже тяжелого билда фронтенда может привести к падению системы. Swap-файл — это область на диске, которую Linux использует как «медленную оперативку».

    Как создать Swap на 2 ГБ:

  • sudo fallocate -l 2G /swapfile
  • sudo chmod 600 /swapfile (только root должен иметь доступ)
  • sudo mkswap /swapfile
  • sudo swapon /swapfile
  • Чтобы настройка не слетела после перезагрузки, добавьте строку /swapfile none swap sw 0 0 в файл /etc/fstab.
  • Теперь, если RAM закончится, сервер не упадет, а просто начнет работать чуть медленнее.

    Продвинутая безопасность: Защита на уровне сети

    Мы уже настроили UFW и Fail2Ban, но против направленной DDoS-атаки или умного сканера этого мало.

    Port Knocking (Стук по портам)

    Это техника «скрытого порта». Ваш SSH-порт 22 закрыт для всех. Но если вы отправите три пустых пакета на порты 1111, 2222 и 3333 в строгой последовательности, файрвол на 10 секунд откроет для вашего IP порт 22. Это делает ваш сервер невидимым для 99.9% сканеров.

    Использование Cloudflare

    Лучший способ защитить веб-сайт — спрятать его за прокси-сервис вроде Cloudflare.
  • Вы меняете DNS-серверы вашего домена на Cloudflare.
  • Весь трафик идет через их фильтры. Они отсекают ботов, блокируют SQL-инъекции и кэшируют статику.
  • Ваш сервер в конфиге Nginx теперь должен принимать запросы только от IP-адресов Cloudflare. Все остальные попытки зайти по IP сервера напрямую должны блокироваться в UFW.
  • Резервное копирование (Backup)

    Запомните: администраторы делятся на тех, кто еще не делает бэкапы, и тех, кто уже делает. Для VPS нужно два типа бэкапов:

  • Snapshot (Снимок) всей системы: Делается в панели хостинга. Позволяет откатить сервер целиком, если вы случайно удалили /etc.
  • Бэкап базы данных: Делается скриптом по расписанию.
  • Команда: pg_dump -U ai_user ai_project > backup_$(date +%F).sql.

    Храните бэкапы на другом сервере или в облачном хранилище (S3). Хранить бэкап на том же диске, что и сервер — бессмысленно: если сгорит диск, вы потеряете и данные, и копию.

    Итоговый чек-лист стабильности

    Если вы хотите, чтобы ваш сервер работал годами без вмешательства, проверьте следующие пункты:

  • [ ] Настроен unattended-upgrades для патчей безопасности.
  • [ ] SSH-вход по паролю отключен, root-вход запрещен.
  • [ ] База данных доступна только локально.
  • [ ] Установлен лимит памяти для Docker-контейнеров или процессов (через Systemd).
  • [ ] Настроены уведомления (например, в Telegram) о падении сервисов.
  • Администрирование — это не магия, а дисциплина. Правильно настроенный стек Nginx + PostgreSQL + FastAPI на базе Linux — это фундамент, на котором можно строить проекты любой сложности, от маленького чат-бота до огромной экосистемы ИИ-сервисов.