Обложка статьи «Настройка сервера для сайта — инструкция от Tproger»

Настройка сервера для сайта — инструкция от Tproger

В этой статье расскажем о настройке сервера для сайта или любого другого проекта на базе Linux своими руками. Будем использовать DigitalOcean хостинг и операционную систему Ubuntu 20.04 LTS — это последняя стабильная версия с долгим сроком поддержки (как минимум до 2025 года можно спокойно пользоваться).

Почему именно наша инструкция? В ней мы делимся своим опытом и рассказываем о неочевидных моментах, которых нет в стандартных инструкциях по настройке сервера с нуля. Любые вопросы вы можете задать в комментариях — постараемся ответить.

Создание дроплета (виртуального сервера)

Идём на DigitalOcean, регистрируемся. Ссылка реферальная, по ней вам дадут кредит на 100 $ на 60 дней. Хватит на 2 месяца бесплатных экспериментов, а затем 5 $ в месяц — точно не выше средней цены по рынку за VPS аналогичной мощности и возможностей.

Настойка веб-сервера начинается с регистрации в DigitalOcean

Страница регистрации DigitalOcean, сверху должна быть надпись про 100 $

После регистрации в окне «What are you trying to build?» жмём на «Go to Control Panel», далее выбираем Create — Droplet. Выбираем Ubuntu 20.04, самый дешёвый дроплет за 5 $. Бэкапы на ваше усмотрение. Любое размещение, которое вам нравится (лучше что-то ближе к вам или вашему VPN географически, чтобы пинг был меньше — Амстердам или Франкфурт, если вы в Москве). Из опций включаем IPv6, чтобы поддерживать последние стандарты, остальное нам пока не нужно. SSH-ключ можете добавить, чтобы сразу логиниться на сервер с ним — это безопаснее, чем обычный пароль. Но мы всё равно сразу настроим новый аккаунт и отключим доступ суперпользователю по SSH, так что если у вас нет ключа, можете не добавлять. В этом случае пароль root генерируем случайный и сохраняем в любимом менеджере паролей. Выбираем любой hostname, лучше исходя из назначения сервера. Например, wordpress-blog.

Настройка веб-сервера: выбор параметров

Выбор настроек при создании дроплета — вашего виртуального сервера

Готово! Теперь у вас уже есть свой хостинг, в котором вы можете менять любые настройки и открывать любые проекты. Но сначала немного настроек для удобства и безопасности.

Обновление сервера и настройка доступа

После создания открываем наш дроплет в DigitalOcean и копируем его ipv4. Запускаем программу для доступа по SSH. Для Windows рекомендуем PuTTY, для Linux или Mac ничего не нужно — просто командная строка и утилита SSH.

В PuTTY вбиваем IP-адрес в поле Host Name, а если вы использовали SSH-ключ, то указываем его в разделе SSH — Auth. Затем жмём Open. При первом подключении к новому серверу PuTTY спросит, можно ли ему доверять. Соглашайтесь, это же ваш сервер. Далее будет запрос логина и пароля — пишем логин root и пароль, который вы задали ранее. Для новичков — пароль при вводе не будет отображаться, как будто ничего не работает. Это нормально. Просто скопируйте пароль и нажмите правой кнопкой мыши в окне PuTTY — он добавится из буфера, потом нажмите Enter.

Пример настроек PuTTY для подключения к серверу, если вам выдали ip-адрес 46.101.211.182

Пример окна PuTTY после подключения к серверу и ввода логина и пароля

Далее сразу обновим все пакеты и защитимся от возможных уязвимостей в старых версиях: apt-get update && apt-get upgrade.

Далее открываем инструкцию по начальной настройке сервера и выполняем всё по  шагам. Имя пользователя пишем строчными буквами на латинице без точек, дефисов и любых других разделителей.

Настраиваем доступ по SSH. Для Windows генерируем ключ в PuTTYgen (должен был установиться вместе с PuTTY, если нет, то скачиваем), для Linux и Mac достаточно вбить в консоли ssh-keygen, как сказано в инструкции.

В PuTTYgen копируем строку из поля с публичным ключом

Этот ключ необходимо будет поместить в файл /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.authorized_keys на сервере. Об этом написано в инструкции, но можете просто выполнить команды:

mkdir ~/.ssh
nano ~/.ssh/authorized_keys

Вставляем наш ключ (Shift+Insert или правая кнопка мыши для Windows), сохраняем (Ctrl+O, Enter), выходим (Ctrl+X).

Выставляем корректные права на директорию и файл:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Disclaimer Необходимо убедиться, что весь ключ в файле представляет собой одну длинную строку, разрывы и переносы на другие строки не допускаются.

Пробуем залогиниться с ключом из PuTTY. Для этого надо выйти из текущей сессии, набрав в консоли exit. Потом снова запускаем PuTTY (для Windows) — добавляем перед адресом сервера своё имя, затем @. В настройках на SSH — Auth указываем путь к приватному ключу (поле Private key file for authentication). Затем возвращаемся в окно Session, пишем какое-нибудь понятное вам имя в поле Saved Sessions и сохраняем всё кнопкой Save справа.

На этом основная настройка сервера сайта (или не сайта, мы не знаем, зачем вам этот сервер) закончилась. Дальше поработаем над безопасностью и дополнительными удобствами.

Обеспечение безопасности

Если вы не очень переживаете о безопасности и не хотите вбивать пароль каждый раз, когда нужно выполнить команду от имени суперпользователя, то вот инструкция, как сделать так, чтобы sudo каждый раз не просил пароль. Но мы не рекомендуем вам это делать, потому что тогда теряется вообще весь смысл создания отдельного пользователя без прав root — любой, кто завладел вашим SSH-ключом, автоматически получает все права в системе.

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

PermitRootLogin no

Затем перезапускаем SSH, чтобы настройки применились:

sudo service ssh restart

Добавим ещё немного безопасности. Меняем порт для SSH в /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Редактируем строку #Port 22 — заменяем на Port 3399 (тут любое четырёхзначное число, которое вы придумаете, не берите из нашего примера).

Не забываем обновить правила в firewall:

ufw allow 3399/tcp

Здесь также замените номер на тот, что выбрали.

Удаляем предыдущее правило для порта по умолчанию:

sudo ufw delete allow OpenSSH

Перезапускаем SSH командой sudo service ssh restart, проверяем.

И устанавливаем защиту от перебора паролей. Обратите внимание, что в инструкции по ссылке используется порт 22 для защиты. Вам нужно указать другой номер — тот, который вы выбрали для доступа по SSH.

Дополнительные настройки сервера

Настроим ротацию логов (опционально), чтобы сохранять больше истории и сжимать старые логи.

Настраиваем таймзону: взяли из этого мануала — хорошее полное руководство по настройке Ubuntu в целом. Настраиваем синхронизацию времени.

Настраиваем DNS, ибо сервер, используемый по умолчанию, не работает корректно для некоторых имён. Рекомендуем добавить сервер 1.1.1.1.

И бонус: раскрашиваем консоль bash и добавляем подсветку синтаксиса в nano.

Выключаем сервер sudo poweroff и создаём снимок с начальной настройкой, чтобы потом можно было легко вернуться к нему в случае необходимости. Затем для включения заходим в админку DigitalOcean и щёлкаем по тумблеру On.

Создание снапшота с начальной настройкой вашего сервера

Поздравляем, вы настроили свой первый сервер! Пользы от него пока что никакой, просто удалённый Linux, в котором можно изучать устройство ОС и вбивать разные команды. Дальше вам нужна другая инструкция, например по настройке веб-сервера.

Пишите в комментарии, если на каких-то этапах у вас возникли трудности — дополним инструкцию. Какие ещё статьи вы хотели бы видеть по дальнейшей работе с сервером?