Настройка 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 |
| Стандартная страница Nginx | DNS, 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-подключение?
Существующая сессия может продолжать работу после изменения правил для новых соединений. Отдельный вход подтверждает, что доступ сохранился.