Практическое руководство / Первое развёртывание

Настройка VPS Ubuntu: первая страница с HTTPS

Настройте новый VPS с Ubuntu 24.04 LTS и опубликуйте небольшую статическую страницу через Nginx и HTTPS. Подготовьте ключ SSH, отдельного администратора, продление сертификата и проверку после перезагрузки. Для работающего сервера сначала нужен разбор существующих сайтов и доступа.

Содержание

Подготовьте сервер, домен и аварийный доступ

Пример рассчитан на свежий Ubuntu 24.04, публичный IPv4, SSH на порту 22, начальную учётную запись с sudo и домен под вашим управлением. Создайте ключ в следующем разделе до заказа VM. Для уже созданного пустого сервера предусмотрен отдельный путь через работающий доступ.

Команды компьютера выполняются в Bash на Linux, macOS или WSL; серверные — внутри SSH. Замените 203.0.113.10 адресом VPS, app.example.com своим именем сайта, ubuntu начальным пользователем провайдера. Если пути примера заняты действующим проектом, остановитесь и выберите другие.

Откройте аварийную консоль до изменения доступа и firewall. Уточните поддержку UFW для своего образа. Для Oracle Ubuntu ниже предусмотрен другой порядок.

Создайте ключ или добавьте его через работающий доступ

На своём компьютере создайте отдельный ключ с парольной фразой. Если файл уже существует, выберите другое имя во всех командах. .pub — публичный файл; закрытый ключ остаётся у вас.

mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pub

Для нового VPS теперь создайте Ubuntu 24.04 и передайте публичный ключ через поле SSH-ключа провайдера. Уточните имя первого пользователя и пропустите команды для уже созданного сервера.

Для уже созданного пустого VPS оставьте рабочую SSH-сессию открытой. В другом локальном терминале скопируйте новый публичный ключ через действующую авторизацию. existing_vps_key замените своим текущим ключом; при рабочем пароле или SSH-agent опустите -i ~/.ssh/existing_vps_key, не меняя политику сервера.

scp -i ~/.ssh/existing_vps_key ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

В уже открытой серверной сессии проверьте загруженный ключ и добавьте его в authorized_keys своего начального пользователя. Добавление сохраняет существующие записи и учитывает отсутствие перевода строки в конце файла. Если работающего доступа нет, сначала восстановите его через провайдера.

if ssh-keygen -lf ~/ubuntu-vps-admin.pub; then
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    printf '\n' >> ~/.ssh/authorized_keys
    cat ~/ubuntu-vps-admin.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
fi

В обоих случаях до первого подключения сравните отпечаток хоста с ключом того же алгоритма в доверенной консоли. Для Ed25519 выполните там:

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

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

ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10

Из другого локального терминала загрузите публичный ключ для отдельного администратора, которого создадим ниже. Повторное копирование временного .pub допустимо.

scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

Создайте администратора и проверьте отдельный вход

На сервере сначала выполните getent passwd deploy. Запись не должна существовать. Если имя занято, выберите другое и замените его во всех командах, путях и группах: нельзя подменять ключи существующего пользователя.

Подтвердите систему и ресурсы, просмотрите обновления, затем создайте администратора. Задайте надёжный пароль для запросов sudo. Команды install назначают владельца и ограничивают права на ключ.

cat /etc/os-release
free -h
df -h /
sudo apt update
sudo apt upgrade
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
sudo install -m 600 -o deploy -g deploy ~/ubuntu-vps-admin.pub /home/deploy/.ssh/authorized_keys

В новом терминале компьютера подключитесь как новый администратор.

ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10

В этой новой серверной сессии проверьте sudo. После пароля deploy команда должна вывести root. Продолжайте только после успешных проверок, сохраняя исходный доступ.

sudo whoami

Установите Nginx и настройте поддерживаемый firewall

На сервере установите Nginx. Держите рабочую сессию и консоль доступными во время изменения правил.

sudo apt install nginx
sudo systemctl enable --now nginx

В сети провайдера разрешите TCP 22 из своей административной сети и 80/443 для посетителей. Если SSH работает на другом порту, сохраните именно его. Сетевое правило провайдера не отменяет блокировку гостевой ОС.

Для Oracle Cloud Ubuntu полностью пропустите блок UFW ниже. UFW может нарушить необходимые правила образа и загрузку. Сохраните iptables, включая защиту iSCSI для загрузочных и блочных томов. Настройте security lists или NSG и документированные гостевые правила для HTTP/HTTPS. Не очищайте правила и не заменяйте пакеты firewall.

Следующий блок относится только к другим новым образам, для которых провайдер поддерживает UFW и не требует своей конфигурации. Сначала разрешите фактический порт SSH; в примере это 22.

sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

После выбранного пути проверьте новый вход по SSH. Старая открытая сессия этого не подтверждает. До выпуска сертификата также должна пройти внешняя проверка HTTP в следующем разделе.

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

На сервере создайте новый каталог и конфигурацию Nginx. Замените имя сайта внутри блока. Сохраните кавычки у EOF: они не дают оболочке раскрыть переменные Nginx, например $uri.

sudo install -d -m 755 /var/www/first-site
printf '%s\n' '<!doctype html><html lang="ru"><title>Первое развёртывание</title><h1>Эту страницу обслуживает VPS с Ubuntu</h1></html>' | sudo tee /var/www/first-site/index.html
sudo tee /etc/nginx/sites-available/first-site >/dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;
    root /var/www/first-site;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/first-site /etc/nginx/sites-enabled/first-site
sudo nginx -t

Перезагрузите конфигурацию только после успешной проверки синтаксиса.

sudo systemctl reload nginx

С компьютера запросите своё имя сайта по адресу VPS ещё до изменения DNS. Ожидается ваш заголовок, а не стартовая страница Nginx.

curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/

Подключите DNS и получите сертификат

Создайте A-запись домена на IPv4 VPS. AAAA публикуйте только при рабочем IPv6: устаревшая запись может направить посетителей и проверку сертификата на другую машину. Пример предполагает прямой DNS без прокси.

На компьютере откройте http://app.example.com/ без --resolve. Когда возвращается ваша страница, установите на сервере Certbot и модуль Nginx из архива Ubuntu. Пакетам нужен компонент Universe; ошибку отсутствия пакета устраните до продолжения.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com --redirect
sudo nginx -t
sudo certbot renew --dry-run
systemctl list-timers --all certbot.timer

Ответьте на запросы почты и условий. Certbot меняет конфигурацию сайта и добавляет переход с HTTP на HTTPS. Проверьте таймер продления; если он неактивен, включите sudo systemctl enable --now certbot.timer. Оставьте порт 80 доступным для HTTP-проверки и продления сертификата.

Проверьте сайт извне и после перезагрузки

С компьютера проверьте перенаправление, сертификат и содержимое. HTTP должен вести на HTTPS, а HTTPS — показывать вашу страницу. Не добавляйте -k к curl: это скроет ошибки проверки сертификата.

curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/

Пока развёртывание тестовое, выполните sudo reboot на сервере. После запуска подключитесь как deploy, проверьте systemctl is-active nginx и повторите запрос HTTPS снаружи. Перезагрузка разрывает SSH намеренно; при проблеме запуска используйте консоль.

Разберите сбой и сохраните способ восстановления

Прокрутите таблицу, чтобы увидеть остальные столбцы →

СимптомЧто проверить сначала
Тайм-аут SSHАдрес, firewall провайдера и гостя, аварийную консоль
Permission denied (publickey)Пользователя, закрытый ключ и права authorized_keys
Стандартная страница NginxDNS, server_name и включённую конфигурацию
Не выпущен сертификатПубличные A/AAAA и доступ к порту 80
Nginx не работает после измененияsudo nginx -t и sudo journalctl -u nginx -n 50 --no-pager

Для неудачного входа используйте разбор ошибок SSH. Файлы сайта, конфигурацию Nginx, DNS и порядок сборки храните вне VPS. Закрытые ключи сертификатов требуют защищённого хранения.

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

Эта инструкция обслуживает статические файлы. Для базы и приложения нужны собственные службы и методы копирования. При их добавлении выполните измерение ресурсов.

Вопросы и ответы

Можно ли выполнять команды на существующем сайте?

Сначала проверьте их на отдельном VPS. Пример создаёт файлы, меняет сетевой доступ и разрешает Certbot редактировать Nginx. Действующее развёртывание требует проверки путей, доступа и восстановления.

Здесь устанавливается CMS или база?

Нет. Результат — статическая страница HTTPS. Приложение и база добавляются отдельно, со своим запуском служб и резервным копированием.

Зачем каждый раз проверять новое SSH-подключение?

Существующая сессия может продолжать работу после изменения правил для новых соединений. Отдельный вход подтверждает, что доступ сохранился.

Пример для нового Ubuntu 24.04, прямого DNS и SSH на порту 22. Учитывайте правила конкретного провайдера: Oracle Ubuntu пропускает UFW. Процедура основана на документации и не выполнялась на каждом образе провайдеров.
Связанные задачи

Что сделать дальше?

Следующий шаг

Ваш проект.
Место для его развития.

Сравните доступные конфигурации и действующие условия провайдера.

Посмотреть серверыПартнёрская ссылка · Заказ оформляется у провайдера.