🇷🇺 Русский · 🇬🇧 English
Каждый раз, когда поднимаешь новый VPS, повторяется одно и то же: поставить нормальный ls, накатить Docker, разобраться со свопом на маленьком сервере, включить SSH только по ключу и не забыть про UFW. Чтобы не повторять регулярно одно и то же — написал скрипт с меню на 12 пунктов, который делает это всё сам, спрашивая только там, где решение реально важно принять тебе, а не ему.
Ubuntu 24.04 или 26.04, root-доступ, исходящий интернет.
curl -fsSL https://raw.githubusercontent.com/SkyDeaD/UbuntuServer-Fast-Configuration/main/install.sh | sudo bash && source ~/.bashrcСтавится как команда usfc, сразу тихо делает apt update и открывает меню. Функция usfc() (не alias) добавляется в .bashrc сама при первом запуске — дальше просто usfc, sudo руками писать не нужно, а когда меню закрывается, она сама подтягивает .bashrc в твою же сессию, так что новые алиасы/промпт видны сразу, без ручного source или переподключения (подробнее — в FAQ).
В меню — номер пункта (5, можно несколько сразу: 1 3 5 или 1,3,5), раздел целиком (B/S/P), всё сразу (A), можно сочетать (B,S). На пачку из нескольких пунктов вопрос один, дальше каждый идёт по своим дефолтным ответам без остановок. H — справка по алиасам, R — команды отката, U — снести сам usfc.
Не доверяешь curl | sudo bash и хочешь применить то же самое руками, пункт за пунктом? — держи ручную инструкцию.
База, сервисы, защита — по порядку
Базовые пакеты — micro, curl, wget, git, nano, certbot + python3-certbot-nginx, unzip, htop, jq, rsync и ещё несколько вещей, которые обычно ставишь в первую же минуту на любом сервере — в том числе software-properties-common, без которого не заработает add-apt-repository, нужный дальше для PPA fastfetch. Специально идёт первым пунктом.
CLI-утилиты + starship — современные замены классических утилит (eza вместо ls с иконками, bat/batcat вместо cat с подсветкой, fd/fdfind вместо find, ripgrep, zoxide — «умный» cd, ncdu для разбора места на диске) и starship-промпт — всё вместе, потому что это один и тот же слой "как выглядит и ощущается терминал". Алиасы в .bashrc (ls/ll/la/lt/cat/catp/scat/fd) и eval-строки для zoxide/starship пишутся сразу тем же пунктом, а не отдельным шагом позже.
fastfetch — показывает информацию о сервере (ОС, ядро, память, диск, IP) при каждом заходе по SSH. Версия не ниже 2.64.0 (более старые не умеют выравнивание в format-строках, которое использует прилагаемый config.jsonc). Конфиг и автозапуск пишутся в .bashrc сразу тем же пунктом.
tmux — мультиплексор терминала: держит сессию живой при обрыве связи (просто переподключаешься по SSH — и всё, что запускал, на месте, включая несколько окон/панелей). Ставится с минимальным конфигом (мышь, история на 10000 строк).
Docker + Compose — CE + Compose plugin из официального репозитория Docker (не пакет docker.io из репов Ubuntu — он старый).
nginx-full — веб-сервер/реверс-прокси.
Docker log rotation — ограничивает логи контейнеров (лимит 10 МБ на файл): без этого логи Docker по умолчанию ничем не ограничены и со временем могут забить всё место на диске.
fail2ban — банит IP после нескольких неудачных попыток входа по SSH (защита от перебора паролей). Настраивается на реальный SSH-порт сервера, не хардкожен 22.
unattended-upgrades — сам ставит security-обновления системы, без твоего участия.
ZRAM + swap + earlyoom — zram (сжатая память прямо в оперативке; сколько % RAM под неё отдать — теперь спрашивается при установке, по умолчанию 75%) плюс резервный swap-файл на диске (размер тоже спрашивается — скрипт сам предлагает разумный вариант по объёму свободного места, не жёстко 1 ГБ на все случаи) с более низким приоритетом, чтобы использовался только если не хватило zram. Плюс vm.swappiness=80/vm.vfs_cache_pressure=50 и опционально earlyoom — защита от полного зависания сервера при нехватке памяти.
SSH hardening — переводит вход только на ключ, выключает вход по паролю и вход под root. Самый рискованный пункт меню, поэтому единственный с самопроверкой перед применением: перед тем как выключить пароль, скрипт заводит одноразовый ключ и реально проверяет вход по нему — если проверка не прошла, автоматически откатывает конфиг и оставляет пароль включённым.
UFW — файрвол: закрывает все порты, кроме нужных (SSH-порт и то, что сервер уже реально слушает на момент включения).
Раздел «защита» идёт последним осознанно: UFW при включении сканирует реально слушающие порты, и если Docker/nginx уже подняты, фаервол сразу увидит их порты, а не только 22-й.
src/config.jsonc для fastfetch — редактируешь и коммитишь, src/setup.sh тянет его по сырой ссылке при каждом запуске.
Свой форк — меняешь REPO_RAW_BASE в начале install.sh и src/setup.sh. Версия проверяется через отдельный файл src/VERSION — если правишь src/setup.sh, не забудь его поднять.
Иконки/шрифты в терминале выглядят как квадратики или кракозябры
Это шрифт твоего локального терминала (клиента), не сервера — Nerd Font для иконок eza/starship/fastfetch ставится и настраивается в приложении, через которое ты подключаешься по SSH, скрипт на это никак повлиять не может.
Docker не ставится, ошибка про кодовое имя дистрибутива
Официальный репозиторий Docker иногда отстаёт от свежих релизов Ubuntu — скрипт сам это ловит и переключается на совместимый noble.
Хочу пересмотреть SSH hardening или UFW без пересоздания сервера
usfc ещё раз — на уже настроенных пунктах меню покажет текущее состояние и спросит, менять ли.
Делался в первую очередь под свои сервера, так что часть решений — это то, что удобно мне. Баги и пожелания приветствуются — открывай issue.






