Универсальный скрипт для первоначальной настройки и диагностики сервера Ubuntu 24.04 LTS.
Версия 3.3
Выполняет полную настройку сети, установку необходимого ПО, hardening и предоставляет встроенный набор тестов для проверки производительности.
wget https://raw.githubusercontent.com/Balbuto/Setup-and-Test-Server-Ubuntu-24/refs/heads/main/server-setup.sh
chmod +x server-setup.sh
sudo ./server-setup.shSHA256: 82c409a0af074cc2d62c0f4fcf38f483e5234a0cf236c77b4d29b6ab2f7e9195
хеш актуален для этой версии server-setup.sh из этого репозитория — после любого обновления файла пересчитайте сами: sha256sum server-setup.sh
Требования: Ubuntu 24.04 LTS, root.
- Исправлен Docker GPG keyring — при сбое сети/curl во время получения ключа Docker скрипт мог
оставить битый 0-байтовый
/etc/apt/keyrings/docker.gpgи молча пропускать повторную загрузку при следующих запусках. Теперь ошибка обрабатывается явно, битый файл удаляется,install_docker_aptкорректно возвращает код ошибки - Устранена гонка в
wait_apt_lock()— конструкция((i++))приi=0могла подset -eпривести к незаметному аварийному завершению скрипта без единого сообщения об ошибке readвезде переведён наread -r, чтобы бэкслеши во вводе не искажались- В главном меню убраны шаблоны
A && B || C(не эквивалентныif/then/else), заменены на явныеif - Скрипт проходит
shellcheckбез единого замечания
- APT полностью переписан:
APT_OPTSмассив вместо строки, IFS-safe вывод пакетов - apt-lock wait — ждёт освобождения
/var/lib/dpkg/lock, не падает на свежей системе с unattended-upgrades - Стоп при ошибке apt — базовая настройка прерывается, если
apt update/upgrade/installупал, с показом хвоста лога в консоль docker --versionsafe — не валит лог если docker не поставился- Все apt-вызовы через
"${APT_OPTS[@]}", вывод пакетов черезIFS=' ' need_cmd, тесты,read— везде|| true, меню не падает
| v2 | v3 |
|---|---|
| IPv6 отключается всегда | IPv6 не трогается. Отдельное меню с бэкапом и /root/restore-ipv6.sh |
nofile 1M+, conntrack 2M сразу |
SAFE профиль по умолчанию: nofile 65k, conntrack 65k. HIGHLOAD опционально |
curl | bash без проверки |
Все внешние скрипты HTTPS + SHA256 + подтверждение |
Docker через get.docker.com | sh |
Docker через официальный apt-репозиторий с GPG |
Перезапись /etc без бэкапа |
Автобэкап в /root/server-setup-backups/ |
| Логи с ANSI-мусором | Чистые логи |
| Весь вывод apt в консоль | Тихая установка: прогресс в 1 строку, полный лог в файл |
| UFW-manager: blind wget | git clone + git diff перед запуском |
| Базовый софт: mc, net-tools | + ncdu, iftop |
Интерактивно, каждый шаг отключаемый:
- Обновление системы -
update / upgrade / dist-upgrade / autoremove / autoclean - Базовый софт -
mc, net-tools, ncdu, iftop, curl, wget, git - Docker + Docker Compose - официальный apt-репозиторий, GPG
- BBR - TCP congestion control
- Hardening - на выбор SAFE / HIGHLOAD / none
- irqbalance
При ошибке apt — настройка прерывается, в консоль выводится хвост лога.
- Посмотреть статус
- Отключить с автобэкапом +
/root/restore-ipv6.sh - Включить обратно
Обертка над Balbuto/ufw-manager:
git clone, показgit log,git diffперед запуском
14 тестов, все через верифицированную загрузку:
| # | Тест | Источник |
|---|---|---|
| 1 | IP Region | ipregion.vrnt.xyz |
| 2 | Censorcheck — геоблок | vernette/censorcheck |
| 3 | Censorcheck — DPI | vernette/censorcheck |
| 4 | iPerf3 — RU | itdoginfo/russian-iperf3-servers |
| 5 | YABS | yabs.sh |
| 6 | IP Check Place | IP.Check.Place |
| 7 | bench.sh | bench.sh |
| 8 | IPQuality | Check.Place |
| 9 | sysbench CPU | |
| 10 | sysbench Memory | |
| 11 | Network Bench | |
| 12 | SSL/TLS check | |
| 13 | Traceroute yandex.ru | |
| 14 | Ping yandex.ru |
Пункт 99 - Запустить ВСЕ.
Подробно: docs/SYSCTL.md
SAFE (по умолчанию):
nofile = 65535
conntrack_max = 65536
somaxconn = 4096
rmem/wmem_max = 16 MB
HIGHLOAD (XRAY/VPN):
nofile = 1048576
conntrack_max = 2097152
somaxconn = 1048576
rmem/wmem_max = 128 MB
Оба с BBR, FastOpen, syncookies, anti-spoof.
Конфиг: /etc/sysctl.d/99-server.conf
Limits: /etc/security/limits.d/99-server.conf
Каждый тест-скрипт: HTTPS-only, TLS 1.2+, SHA256, ручное подтверждение если хэш не зашит.
Хэши в run_multitest() пустые по умолчанию - заполните после первого прогона, см. docs/TESTS.md
server-setup.sh # v3.3
README.md
CHANGELOG.md
LICENSE
CONTRIBUTING.md
SECURITY.md
docs/
USAGE.md
SYSCTL.md
TESTS.md
Логи: /var/log/server-setup.log → /tmp/server-setup.log → ~/server-setup.log
Бэкапы: /root/server-setup-backups/YYYYMMDD-HHMMSS/
MIT
- Авторы yabs.sh, bench.sh, censorcheck, ipregion, IP.Check.Place и др.