nav-img
Evolution

Развертывание сайта с использованием LEMP

В разделе описано, как создать простой сайт с использованием стека LEMP. На виртуальной машине будет развернут веб-сервер Nginx и СУБД MySQL. Чтобы получить публичное доменное имя и сертификат для сайта, используется бесплатный сервис nip.io.

Перед началом работы

  1. Зарегистрируйтесь в личном кабинете Cloud.ru.

    Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Убедитесь, что вам назначена сервисная роль eiv.admin или роль администратора проекта. При необходимости настройте права или запросите их у администратора.

Создайте группу безопасности

Группы безопасности в облаке Evolution позволяют контролировать входящий и исходящий трафик для создаваемых ресурсов. В правилах группы безопасности необходимо разрешить доступ к виртуальной машине по протоколу HTTPS, а также весь исходящий трафик.

  1. На верхней панели слева нажмите Кнопка с изображением девяти точек и выберите Сеть → Группы безопасности.

  2. Нажмите Создать группу безопасности.

  3. В поле Зона доступности выберите «ru.AZ-1».

  4. Укажите название группы безопасности — «sg-lemp».

  5. Добавьте правила входящего и исходящего трафика.

    1. В блоке Правила входящего трафика нажмите Добавить правило.

    2. Создайте правило со следующими параметрами:

      • Протокол — «TCP».

      • Порт — «443».

      • Тип источника — «IP-адрес».

      • Источник — «0.0.0.0/0».

    3. В блоке Правила исходящего трафика нажмите Добавить правило.

    4. Создайте правило со следующими параметрами:

      • Протокол — «Любой».

      • Порт — оставьте пустым.

      • Тип источника — «IP-адрес».

      • Источник — «0.0.0.0/0».

  6. Нажмите Создать.

Создайте виртуальную машину с веб-сервером

  1. На верхней панели слева нажмите Кнопка с изображением девяти точек и выберите Инфраструктура → Виртуальные машины.

  2. Нажмите Создать виртуальную машину.

  3. Введите название виртуальной машины — «lemp-server».

  4. В поле Зона доступности выберите «ru.AZ-1».

  5. В блоке Образ перейдите на вкладку Маркетплейс и выберите образ «LEMP».

  6. Укажите конфигурацию вычислительных ресурсов:

    • Гарантированная доля vCPU — 10%.

    • vCPU, шт — «1».

    • RAM, ГБ — «2».

  7. Нажмите Продолжить.

  8. Назначьте ВМ публичный IP-адрес:

    1. Оставьте включенной опцию Подключить публичный IP.

    2. В поле Группы безопасности выберите группу «sg-lemp».

  9. Настройте параметры авторизации пользователя.

    1. В поле Имя пользователя введите логин пользователя виртуальной машины: например, «cloud-user».

    2. Выберите пароль в качестве метода аутентификации.

    3. Укажите пароль пользователя.

  10. Нажмите Создать.

  11. В строке созданной ВМ скопируйте и сохраните адрес из столбца Публичный IP: он потребуется для дальнейшей настройки.

Настройте Nginx

Сервер Nginx обрабатывает запросы пользователей к сайту.

  1. Выберите виртуальную машину «lemp-server» в списке.

  2. Перейдите на вкладку Серийная консоль.

  3. Введите логин и пароль, указанные при создании виртуальной машины.

  4. Обновите пакеты ОС. В серийной консоли выполните команды:

    sudo apt update
    sudo apt upgrade
  5. Для обработки скриптов установите менеджер процессов PHP-FPM:

    sudo apt install php8.1-fpm
  6. Создайте новый конфигурационный файл:

    sudo nano /etc/nginx/sites-available/mysite
  7. Добавьте в файл конфигурацию виртуального сервера, заменив <public_ip> на публичный IP-адрес виртуальной машины «lemp-server»:

    server {
    listen 80;
    server_name <public_ip>.nip.io;
    root /var/www/html/mysite;
    index index.php index.html index.htm;
    location / {
    try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
    location ~ /\.ht {
    deny all;
    }
    }
  8. Добавьте ссылку на конфигурационный файл в каталоге sites-enabled:

    sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
  9. Проверьте, что в конфигурации Nginx нет ошибок:

    sudo nginx -t
  10. Чтобы применить настройки, перезапустите Nginx:

    sudo systemctl restart nginx

Настройте базу данных MySQL

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

  1. Подключитесь к MySQL:

    sudo mysql -u root -p
  2. Создайте новую базу данных. Выполните построчно следующие команды:

    CREATE DATABASE mydatabase;
    USE mydatabase;
    CREATE TABLE entries (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content TEXT NOT NULL
    );
  3. Создайте пользователя db_user:

    CREATE USER 'db_user'@'localhost' IDENTIFIED BY '<user_password>';
    GRANT ALL PRIVILEGES ON mydatabase.* TO 'db_user'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

    Где <user_password> — пароль пользователя.

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

Сайт состоит из одной страницы с простой формой для добавления записей.

  1. Создайте корневой каталог сайта:

    sudo mkdir -p /var/www/html/mysite
  2. Установите права доступа:

    sudo chown -R $USER:$USER /var/www/html/mysite
    sudo chmod -R 755 /var/www/html/mysite
  3. Создайте стартовую страницу сайта:

    sudo nano /var/www/html/mysite/index.php
  4. Вставьте на страницу код, заменив <user_password> на пароль пользователя базы данных, созданного на предыдущем шаге:

    <?php
    $conn = new mysqli("localhost", "db_user", "<user_password>", "mydatabase");
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $content = $_POST["content"];
    $stmt = $conn->prepare("INSERT INTO entries (content) VALUES (?)");
    $stmt->bind_param("s", $content);
    $stmt->execute();
    $stmt->close();
    }
    $result = $conn->query("SELECT * FROM entries");
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <title>Simple LEMP Site</title>
    </head>
    <body>
    <h1>Add a New Record</h1>
    <form method="post">
    <textarea name="content" rows="4" cols="50"></textarea><br>
    <input type="submit" value="Submit">
    </form>
    <h2>Entries</h2>
    <ul>
    <?php while ($row = $result->fetch_assoc()): ?>
    <li><?php echo htmlspecialchars($row['content']); ?></li>
    <?php endwhile; ?>
    </ul>
    </body>
    </html>
    <?php
    $conn->close();
    ?>

Настройте доменное имя

Для создания доменного имени и SSL-сертификата используется сервис nip.io. Также вы можете использовать собственный домен и SSL-сертификат.

  1. Подготовьте доменное имя вида <public_ip>.nip.io, где <public_ip> — публичный IP-адрес виртуальной машины «lemp-server».

  2. Установите утилиту для формирования SSL-сертификата и запустите ее:

    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d <public_ip>.nip.io --register-unsafely-without-email
  3. Откройте браузер и перейдите по адресу <public_ip>.nip.io.

Результат

При переходе по адресу вашего сайта откроется форма с заголовком «Add a New Record» и кнопкой «Submit» для добавления записей. Добавленные записи отображаются в списке «Entries» под формой.