Развертывание и настройка Linux-сервера для разработки и хостинга в 2026: пошаговый гайд | AdminWiki

Развертывание и настройка Linux-сервера для разработки и хостинга в 2026: пошаговый гайд

07 мая 2026 10 мин. чтения
Содержание статьи

Подготовка: выбор дистрибутива и базовая установка (Ubuntu/Debian 2026)

Для этого сценария подойдёт Ubuntu 24.04 LTS; Debian 12 называется Bookworm, а Debian 13 — Trixie. Выбирай дистрибутив по сроку поддержки, совместимости приложений и опыту команды: оба применяются в production. Перед созданием VPS можно сравнить Timeweb Cloud (партнёрская ссылка) с другими провайдерами по ресурсам, бэкапам и стоимости.

После выбора дистрибутива выполните минимальную установку. Ниже лишь пример планирования диска, не обязательная разметка. На готовом VPS сначала проверь текущую схему и не переразмечай диск с данными. Размер /var особенно зависит от Docker, БД и логов:

  • / (root): 20-30 GB
  • /var: 10-20 GB (для логов и данных приложений)
  • /home: 10 GB (для пользовательских данных)
  • /opt: 10 GB (для сторонних приложений, например, Docker)
  • swap: подбирается по нагрузке, доступной RAM и требованиям приложений; универсального соотношения нет.

На VPS обычно нужно сохранить сеть, выданную провайдером. Следующий Netplan — пример для собственной сети: замени интерфейс, адрес, шлюз и DNS фактическими значениями. Сохрани исходные файлы и доступ к консоли. Проверь netplan generate, затем используй netplan try с автоматическим откатом; перед подтверждением проверь второй SSH-сеанс. После отмены проверь, что откат действительно произошёл:

network:
  version: 2
  ethernets:
    eth0:
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

В Debian сначала установи, кто управляет сетью: ifupdown, systemd-networkd или NetworkManager. /etc/network/interfaces применим только для ifupdown; не создавай конкурирующие конфигурации. Проверьте связь: ping -c 4 8.8.8.8. После установки сразу выполните:

sudo apt update && sudo apt upgrade -y
sudo apt install -y openssh-server ufw

Это обновит систему и установит базовые инструменты для дальнейшей работы.

Ubuntu 24.04 LTS vs Debian 12/13: что выбрать для сервера в 2026?

Критерии сравнения:

КритерийUbuntu 24.04 LTSDebian 12/13
Выбор пакетовПроверь версии в репозитории релиза и поддержку приложения.Проверь версии именно выбранного релиза: Bookworm и Trixie различаются.
DockerЕсть официальный apt-репозиторий Docker для Ubuntu.Есть официальный apt-репозиторий Docker для Debian; возможны пакеты дистрибутива.
ЭксплуатацияНужны обновления, тестирование и бэкапы.Нужны обновления, тестирование и бэкапы.

Не выбирай дистрибутив только по противопоставлению «разработка или production»; проверь поддержку конкретного стека.

Минимальная установка: настройка разделов и сетевых интерфейсов

Схему разделов выше нужно адаптировать к объёму данных. По умолчанию значительная часть данных Docker находится в /var/lib/docker, а не /opt. Отдельный /var предотвращает заполнение корневого раздела логами приложений. /opt изолирует сторонние приложения. Для настройки статического IP в Ubuntu 24.04 используйте Netplan, как показано ранее. В Debian конфигурация в /etc/network/interfaces выглядит так:

auto eth0
iface eth0 inet static
    address 192.168.1.100/24
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 1.1.1.1

После настройки сети проверьте её: ip a покажет назначенные адреса, ping -c 4 8.8.8.8 подтвердит связь с интернетом. Ping проверяет лишь один аспект связности; отдельно проверь маршрут, DNS и новое SSH-подключение, сохранив консоль восстановления.

Фундамент безопасности: от базовой настройки к проактивной защите

Начни с проверенного SSH-доступа, минимального firewall и обновлений. Threat Intelligence может дополнять анализ журналов, но не заменяет базовую конфигурацию и не гарантирует блокировку атак заранее.

Не меняй SSH-порт и не отключай пароль до проверки ключа. Если образ даёт только root, сначала создай обычного пользователя с sudo по инструкции Ubuntu/провайдера. В примерах замени yourusername фактическим именем,22 — текущим портом. Оставь исходный SSH-сеанс открытым и проверь консоль провайдера. На клиенте создай ключ и скопируй его через действующий вход:

ssh-keygen -t ed25519
ssh-copy-id -p 22 yourusername@server_ip
ssh -p 22 -o PreferredAuthentications=publickey -o PasswordAuthentication=no yourusername@server_ip
# В новом сеансе проверь: sudo -v

Только после успешной проверки ключа и sudo сохрани копию sshd_config и изменяемых drop-in файлов. Измени эффективные настройки, учитывая Include и Match:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers yourusername

Проверь sudo sshd -t и эффективные значения sudo sshd -T (для Match учти параметры соединения). При успехе выполни sudo systemctl reload ssh и проверь ещё одно новое подключение ключом. Если оно не работает, из сохранённого сеанса верни копии файлов, снова проверь sshd -t и reload. Не закрывай старый сеанс до успешного теста. Порт в этом сценарии остаётся прежним.

Теперь настрой UFW. Следующий пример предполагает SSH22: если у тебя другой порт, сначала замени правило и проверь соответствующее разрешение в firewall провайдера.

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw status verbose
# Только при проверенном SSH-правиле и доступной консоли:
sudo ufw enable
sudo ufw status verbose

Снова проверь отдельное SSH-подключение. При ошибке восстанови правила через сохранённый сеанс или консоль; временный ufw disable используй только для возврата доступа с последующим исправлением. Docker-публикации могут обходить обычные UFW-правила, поэтому не открывай порты контейнеров без проверки.

Установите и настроите fail2ban для защиты от bruteforce:

sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.d/sshd.local

Создай только необходимые jail-настройки в /etc/fail2ban/jail.d/sshd.local. Fail2ban реагирует на события в журнале; внешние списки IP требуют отдельного проверенного механизма, срока актуальности и контроля ложных блокировок.

Настройка SSH: проверяем ключи и сохраняем доступ

Смена порта может уменьшить шум сканирования, но не заменяет аутентификацию и обновления. В этом сценарии она не нужна. Для ключа Ed25519 используй парольную фразу и безопасно храни закрытую часть; RSA достаточной длины также может быть допустим по требованиям системы.

Брандмауэр UFW: минимальный набор правил для сервера разработки

Команды UFW предоставляют быструю базовую защиту. После ufw enable брандмауэр начинает работать. Статус verbose показывает все активные правила. Для сервера разработки, где могут потребоваться дополнительные порты (например, для Docker или специфичных приложений), сначала рассмотрите loopback и HTTPS reverse proxy вместо прямого открытия порта Node.js. Публикуемые Docker-порты дополнительно проверьте с внешнего узла. Но начинайте с минимального набор - это снижает риски.

Fail2ban: проверяем журнал и блокировки SSH

Для Ubuntu/Debian с SSH-журналом в journald можно использовать этот минимальный override. Укажи фактический SSH-порт; не включай Nginx jail до установки сервера и проверки соответствующего logpath.

[sshd]
enabled = true
backend = systemd
port = 22
maxretry = 3
bantime = 3600

Проверь sudo fail2ban-client -t, затем sudo systemctl restart fail2ban и sudo fail2ban-client status sshd. Сначала убедись, что фильтр видит реальные события. Для возврата ошибочно заблокированного адреса используй консоль и fail2ban-client set sshd unbanip с конкретным IP. Файл action.d/ip-blacklist.conf со списком IP сам по себе не создаёт рабочую интеграцию Threat Intelligence.

Рабочая среда: Docker, веб-сервер и файловое хранилище

После обеспечения безопасности разверните рабочую среду. Docker позволяет изолировать приложения, веб-сервер (Nginx или Apache) обслуживает контент, а организованное файловое хранилище помогает управлять данными, но не заменяет резервные копии.

Установите Docker и Docker Compose:

# Установи Docker Engine и Compose plugin из официального
# apt-репозитория для своего дистрибутива:
# docs.docker.com/engine/install/ubuntu/ или /debian/
sudo docker version
sudo docker compose version

Проверьте установку: sudo docker run --rm hello-world и sudo docker compose version.

Выберите веб-сервер. Nginx и Apache подходят для разных конфигураций; выбор зависит от модулей, .htaccess, привычного инструментария и измерений. Установите Nginx: sudo apt install -y nginx. Базовая конфигурация для простого сайта в /etc/nginx/sites-available/default:

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.html;
}

Организуйте файловое хранилище. Создайте структуру:

sudo mkdir -p /srv/docker/app-data
sudo install -d -o root -g root -m 0700 /srv/backups
sudo chown -R $USER:$USER /srv/docker/app-data

Это обеспечит отдельное место для данных приложений и бэкапов.

Docker и Docker Compose: установка и настройка для production

Используй официальный репозиторий Docker для своего релиза и архитектуры, затем проверь версии. Группа docker даёт привилегии уровня root; в примере используется sudo. Перед обновлением контейнеров фиксируй версии, проверяй release notes и восстановление данных.

Nginx vs Apache в 2026: выбор и базовая конфигурация для хостинга

Сравнение для задач хостинга:

  • Nginx: часто используется для статики и reverse proxy; результат зависит от настройки и нагрузки.
  • Apache: поддерживает .htaccess и mod_rewrite; это может быть важно для совместимости приложения.

В примере выбран Nginx. Для PHP сначала установи подходящий PHP-FPM, проверь его службу, пользователя и сокет; php8.2 ниже характерен для Debian12, а в Ubuntu24.04 обычно php8.3. Замени путь на фактический, проверь nginx -t перед reload. Для публичного приложения с авторизацией сначала настрой HTTPS. Пример FastCGI:

server {
    listen 80;
    server_name app.yourdomain.com;
    root /var/www/app;
    index index.php;
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}

Файловое хранилище: структура каталогов и монтирование для Docker

Структура /srv/docker/app-data и /srv/backups отделяет данные приложений от системы. Это упрощает управление, бэкапы и восстановление. Для монтирования в Docker Compose используйте volumes. Пример в docker-compose.yml:

services:
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set a unique password}
    volumes:
      - postgres_data:/var/lib/postgresql/data
  app:
    image: ${APP_IMAGE:?Set your tested image tag}
    volumes:
      - /srv/docker/app-data/app:/app/data
volumes:
  postgres_data:

Перед запуском задай уникальный POSTGRES_PASSWORD и проверенный APP_IMAGE в защищённом .env. Пароль инициализирует только новую базу. Создай каталог app/data с UID/GID, который нужен приложению. Volume переживает пересоздание контейнера, но удаление volume или дисковый сбой уничтожит данные; нужен отдельный бэкап. Не используй down -v для сохранения данных.

Автоматизация, мониторинг и поддержка актуальности

Настройте автоматические обновления безопасности, мониторинг и стратегию бэкапов. Это минимизирует ручную работу и снижает риски сбоев.

Для автоматических обновлений в Ubuntu/Debian используйте unattended-upgrades:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Сначала изучи штатные Allowed-Origins/Origins-Pattern именно своего релиза в /etc/apt/apt.conf.d/50unattended-upgrades. Не заменяй их одним Ubuntu-подобным шаблоном для Debian и не исключай ядро без плана ручных security-обновлений. Проверь результат через sudo unattended-upgrade --dry-run --debug; согласуй перезагрузки и наблюдение после обновлений.

Для мониторинга установите Prometheus Node Exporter:

sudo apt install -y prometheus-node-exporter
sudo systemctl stop prometheus-node-exporter
# До внешнего доступа настрой listener127.0.0.1:9100
# в конфигурации пакета/override unit, сохранив прочие аргументы.
sudo systemctl cat prometheus-node-exporter

Пакет уже содержит systemd-сервис. Посмотри его ExecStart и EnvironmentFile; добавь --web.listen-address=127.0.0.1:9100 штатным способом пакета, затем запусти службу и проверь ss -ltnp и curl http://127.0.0.1:9100/metrics. До установки пакет может автоматически запуститься: внешний9100 должен быть заранее закрыт firewall. Для удалённого Prometheus используй закрытую сеть и ограничение доступа. Grafana показывает данные из источника вроде Prometheus; один exporter не настраивает сбор и алерты.

Установи rsync. Ниже скрипт для запуска от root: он создаёт отдельную полную копию /etc, а не цепочку инкрементных снимков. Защищай копии, поскольку в них есть секреты; настрой срок хранения и копию вне сервера:

#!/bin/bash
set -euo pipefail
umask 077
BACKUP_DIR=/srv/backups/configs
DEST="$BACKUP_DIR/$(date +%Y-%m-%d_%H-%M-%S)"
install -d -m 0700 "$DEST"
rsync -aHAX --numeric-ids /etc/ "$DEST/etc/"

Запланируйте его выполнение через cron. Перед восстановлением сравни файлы и выбери только необходимые; не перезаписывай весь /etc вслепую. Проверь конфигурацию службы до её перезапуска и сохрани текущие файлы для обратного отката.

Автоматические обновления и управление пакетами

Unattended-upgrades устанавливает обновления из разрешённых источников: проверь их сухим прогоном. Не считай блокировку двух meta-пакетов полноценной стратегией обновления ядра. Для ручных изменений сначала изучи список пакетов и план отката; dist-upgrade может удалять пакеты для разрешения зависимостей.

Базовый мониторинг и алерты: следим за здоровьем сервера

Node Exporter собирает метрики системы. Grafana визуализирует их. Для алертов на высокую загрузку CPU или диска можно использовать простые скрипты, проверяющие метрики через API Prometheus, или настроить более сложные системы like Alertmanager. Пример простого алерта для диска:

#!/bin/bash
THRESHOLD=90
USAGE=$(df / | awk 'END{print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
    echo "Disk usage превышает $THRESHOLD%" | mail -s "Alert: Disk Usage" admin@yourdomain.com
fi

Для этого примера нужны настроенные mail/MTA и доставка на реальный адрес; протестируй уведомление. Один порог диска не обеспечивает полный мониторинг: добавь доступность, ошибки, память и контроль самого сбора.

Стратегия бэкапов и отката изменений

Сохраняй конфигурации, данные приложений, секреты и список пакетов. Для работающей PostgreSQL нужна согласованная копия средствами БД, например pg_dump, а не rsync живого data-каталога. Проверяй восстановление вне рабочего сервера. Скрипт выше делает независимые копии /etc.

apt install --reinstall переустанавливает пакет и не означает откат на прежнюю версию. Откат требует доступного пакета конкретной версии, совместимых зависимостей и, при миграциях, согласованного восстановления данных; сначала проверяй план на копии. После изменений проверь службу и новое SSH-подключение, прежде чем закрывать резервный доступ.

Этот сценарий даёт базу для дальнейшей эксплуатации Linux-сервера. Готовность определяют проверки доступа, HTTPS, приложений, мониторинга и восстановления, а не только успешное выполнение команд.

Для дальнейшего погружения в безопасность сервера ознакомьтесь с пошаговым руководством по защите Linux-сервера, которое включает hardening, аудит и готовые конфигурации для firewalld и iptables. Если вам нужно быстро освоить основы администрирования, практическое руководство по Linux для IT-специалистов предоставляет проверенные команды для работы в bash, настройки сетей и VPN. Для комплексной защиты веб-серверов используйте готовые конфиги для HTTPS, HSTS, WAF и противодействия атакам на Nginx и Apache. А полное руководство по аудиту и защите серверов содержит скрипты и инструкции для автоматизации проверок Linux и Windows Server.

Когда ваш сервер готов, для агрегации API различных моделей ИИ, включая GPT, Gemini и Claude, без необходимости использования VPN и с оплатой в рублях, рассмотрите сервис AiTunnel. Он предоставляет единый интерфейс для управления бюджетами и ключами, интеграции через библиотеки OpenAI или использования встроенного чата.

Поделиться: