Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как развернуть свой веб-сайт в облаке с помощью Next.js, Django, SSL, DNS

999
10 минут чтения
Средний рейтинг статьи: 3.1

При создании веб-приложения конечной целью является публикация его в интернете. Но это может показаться сложным, особенно если вы раньше никогда этим не занимались. Целью данного руководства как раз и будет рассказать об этапах публикации сайта на VDS-сервер (с последующим обеспечением его защиты), с применением технологий контейнеризации.

В этой статье будут рассматриваться несколько технологий, и если вы столкнетесь с незнакомыми понятиями, не стоит волноваться. По мере прочтения у вас сложится пазл в голове, и в дальнейшем вы сами сможете устанавливать сайт на VDS. Итогом станет полноценный сайт с доменным именем и SSL-сертификатом.

План действий

В этой статье примером будет выступать полноценный веб-сайт — Frontend (клиентская часть) на Next.js, Backend (серверная часть) на Django (python), контейнеризация через Docker.

Для этого мы выполним следующие шаги:

  • Создадим пример Frontend (NextJS) и Backend (Django) сайтов.
  • Настроим Docker-контейнеры.
  • Настроим Nginx (сервер) и LetsEncrypt (SSL-сертификат).

Необходимые требования

Начнем с главного:

  1. Аккаунт в Timeweb Cloud — зарегистрироваться можно по этой ссылке.
  2. VDS — облачный сервер с IPv4, создать можно по этой ссылке.
  3. Доменное имя. В случае отсутствия доменного имени, вы можете использовать бесплатный технический домен (доменное имя задается 3 уровня, например: .tw1.su). О том, как его получить, вы можете прочитать в нашей документации.

Рекомендуем прочитать данную статью полностью, перед тем как приступать к развертыванию. Это даст вам понять, что вас ждет и как лучше поступить в вашем конкретном случае.

Продолжим наше руководство по тому, как опубликовать сайт на VDS-сервере.

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Настройка сервера

Заказать сервер можно по этой ссылке.

Внизу вы видите самый дешевый комплект — 285 рублей в месяц за стандартный VDS с публичным IPv4. ОС желательно выбрать Ubuntu, так как именно для нее написано наше руководство.

Публичный IPv4 требуется, если ваша сеть не поддерживает IPv6-подключения.

Image1

После вам нужно будет подключиться по протоколу SSH к вашему серверу.

SSH — это сетевой протокол для удаленного управления операционной системой с помощью командной строки и передачи данных в зашифрованном виде.

Если у вас Linux, то вы можете просто ввести команду:

    

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

А для Windows вы можете установить PuTTY — клиент SSH. Но необязательно использовать PuTTY, с версии Windows 10 1809 SSH-клиент доступен через PowerShell.

Установка нужного комплекта программ

Нам нужно будет установить:

  1. Docker — это платформа контейнеризации, с помощью которой можно автоматизировать и отделить приложения от основной системы.
  2. Docker-compose — это надстройка над докером, которая позволяет запускать несколько контейнеров одновременно и маршрутизировать потоки данных между ними.
  3. Certbot — это клиент для установки SSL-сертификата от Let’s Encrypt. Let’s Encrypt — это центр сертификации, который создает по умолчанию сертификаты сроком действия в 90 дней.
  4. Nginx — веб-сервер.
    

Docker мы будем устанавливать через Ubuntu Snaps, потому что благодаря ему автоматически будут установлены все нужные зависимости для работы Docker-compose. Ubuntu Snaps — это универсальный формат пакетов, который не зависит от конкретного Linux-дистрибутива.

Настройка безопасности

Итак, вы решили опубликовать сайт на VDS-сервере. Но стоит подумать о защите сервера, иначе злоумышленники могут получить несанкционированный доступ к системе.

Новый пользователь

Как сказано выше, одна из проблем — через SSH мы сразу подключаемся к суперпользователю (root), то есть удаленно администрируем сервер без ограничений. А этим может воспользоваться злоумышленник.

Поэтому мы заведем другого пользователя и отключим доступ к SSH суперпользователю.

Для этого существует команда useradd:

    

После нужно задать пароль новому пользователю и добавить его в группу sudo:

    

Группа sudo нужна для того, чтобы мы могли работать с системой.

Аутентификация через ключ

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

    

Затем скопируйте публичный ключ (~/.ssh/id_rsa.pub) и вставьте его в секцию SSH-ключей сервера на Timeweb Cloud.

Image3

Также давайте настроим SSH-ключ для пользователя.

Есть разные программы, реализующие подключение по SSH, такие, как lsh и Dropbear, но самой популярной является OpenSSH. Установка клиента OpenSSH на Ubuntu:

    

Запуск демона SSH (sshd) на сервере под Ubuntu:

    

После вы должны создать на сервере директорию SSH в домашней директории юзера (из-под аккаунта администратора) и добавить публичный ключ, который мы сгенерировали ранее, в файл authorized_keys. А также изменить права:

    

После отредактируем файл /etc/ssh/sshd_config:

    

Эти параметры запретят входить через root и аутентификацию по паролю.

Настройка брандмауэра

Брандмауэр (Firewall), грубо говоря, блокирует часть портов для защиты от посторонних подключений. В Ubuntu идет встроенный ufw, поэтому настроим его:

    

Fail2Ban

Fail2Ban — это утилита для защиты от брутфорса (bruteforce — грубая сила, взлом методом перебора паролей). Она анализирует логи и попытки входа и может блокировать IP-адреса в зависимости от правил. Например, после 5 неудачных попыток в течение 10 минут блокируем IP-адрес на 2 часа.

Установка:

    

И редактируем конфиг /etc/fail2ban/jail.conf:

    

Если в течение 10 минут было 9 попыток войти, мы блокируем IP на 120 минут.

Нам надо перезапустить сервис fail2ban, так как мы отредактировали конфигурацию. Сделать это можно через systemctl (утилита для управления системой инициализации systemd):

    

Контейнеризация

Основная часть установки сайта на VDS-сервер — это настройка контейнеризации через Docker.

Docker — это платформа для создания контейнеров с открытым исходным кодом.

Контейнеры Docker — это стандартизированные, изолированные и портативные пакеты программного обеспечения, которые включают в себя всё необходимое для запуска приложения, включая код, среду выполнения, системные инструменты, библиотеки и настройки.

Для этого туториала был создан репозиторий, который содержит два каталога: frontend и backend.

Директория frontend содержит код для Next.js-приложения, когда как backend отвечает за серверную часть (Django).

Чтобы начать, клонируйте репозиторий-шаблон:

    

И измените в backend/backend/settings.py константу ALLOWED_HOSTS:

    

109.68.212.254 замените на IP-адрес сервера, hardtobecoder.tw1.su — на ваш домен.

Создание Docker-контейнера для Frontend (клиентская часть)

В директории frontend есть файл Dockerfile, который отвечает за установку модулей и запуск приложения:

    

Он задействует Node.JS и пакетный менеджер npm для установки и запуска.

Также есть файл frontend/.Dockerignore, который копирует frontend/.gitignore.

Создание Docker-контейнера для Backend (серверная часть)

Теперь рассмотрим контейнер для серверной части на Django. Аналогично с Frontend (клиентская часть), есть Dockerfile, который выглядит следующим образом:

    

Данный Docker-контейнер будет запускать gunicorn — WSGI-сервер. Позднее мы подключим к нему Nginx как обратный прокси-сервер.

И точно также существует файл backend/.dockerignore.

Создание Docker-compose.yml

Для того, чтобы наши Docker-контейнеры работали вместе, есть файл Docker-compose.yml:

    

Docker-compose — этой скрипт на Python, который позволяет запускать несколько Docker-контейнеров и настраивать их совместную работу.

Настройка Nginx

Nginx — это веб-сервер. При обслуживании Django-приложения Nginx выступает в качестве обратного прокси-сервера: отвечает за обработку входящих запросов и их переадресацию.

В директории nginx есть два файла — default и create.sh. default является файлом конфигурации нашего сервера:

    

Замените hardtobecoder.tw1.su на ваш домен, а 8000 на нужный вам порт (в зависимости от того, какой вы указали в Dockerfile Backend’а или Frontend’а).

После этого посмотрим файл create.sh — баш-скрипт для установки и настройки прокси-сервера Nginx и загрузки SSL-сертификата:

    

Не забудьте изменить hardtobecoder.tw1.su на ваш домен.

Запуск

Если вы все настроили правильно, перейдите в директорию с файлом Docker-compose.yml и запустите следующие команды:

    

После того как вы перейдете на адрес сайта, вы увидите, что ваше приложение доступно через HTTPS благодаря домену и SSL-сертификату!

Image2

Эти команды соберут контейнеры, запустят в режиме демона, и в конце будет включен и настроен Nginx.

Выгодные тарифы на VDS/VPS в Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Сайт успешно опубликован! Вы теперь знаете, как поставить сайт на VDS: как настроить сервер, Docker-контейнеры, запускать веб-приложения на Python или JavaScript. Если вам показалось это руководство полезным, поделитесь им с друзьями или коллегами. Если у вас возникли проблемы, перепроверьте ваши действия или напишите в поддержку Timeweb Cloud.

999
10 минут чтения
Средний рейтинг статьи: 3.1
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server