Evolution
Тема интерфейса

Настройка взаимодействия приложения на виртуальных машинах с сервисом Managed PostgreSQL

В этой лабораторной работе вы развернете сервис сокращенных ссылок и настроите защищенную схему взаимодействия FastAPI-приложения с сервисом Managed PostgreSQL.

Вы выполните развертывание виртуальной машины Ubuntu 22.04, настройку сетей и групп безопасности, создание кластера PostgreSQL, установку и конфигурирование приложения и публикацию API за Nginx с поддержкой Let’s Encrypt.

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

Вы будете использовать следующие сервисы:

  • Виртуальная машина — виртуальная машина в облаке для размещения приложения.

  • Публичный IP-адрес — для доступа к сервису через интернет.

  • Managed PostgreSQL — управляемая база данных PostgreSQL.

  • VPC сеть — изолированная виртуальная сеть для создания безопасной инфраструктуры.

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

  • Nginx — для проксирования запросов и организации защищённого HTTPS-доступа к приложению.

  • Let’s Encrypt — для автоматического получения бесплатного SSL-сертификата.

Шаги:

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

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

4. Настройте сервис, Nginx и HTTPS

В этом шаге вы автоматически опубликуете API-приложение через системный сервис, настроите обратный прокси через Nginx и выпустите бесплатный SSL-сертификат с помощью Let’s Encrypt.

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

  1. Создайте спецификацию сервиса:

    sudo nano /etc/systemd/system/short-links.service

    Вставьте в спецификацию следующее содержимое:

    [Unit]
    Description=Short Links Service
    After=network.target
    [Service]
    User=user1
    Group=user1
    WorkingDirectory=/home/user1/short-links-service
    Environment="PATH=/home/user1/short-links-service/venv/bin"
    EnvironmentFile=/home/user1/short-links-service/.env
    ExecStart=/home/user1/short-links-service/venv/bin/uvicorn server:app --host 127.0.0.1 --port 8000
    Restart=always
    [Install]
    WantedBy=multi-user.target

    При необходимости замените user1 на имя своего пользователя.

  2. Запустите сервис:

    sudo systemctl daemon-reload
    sudo systemctl enable short-links
    sudo systemctl start short-links
  3. Проверьте статус сервиса:

    sudo systemctl status short-links
  4. Убедитесь, что сервис находится в статусе «active (running)».

Зарегистрируйте бесплатный домен

  1. В сервисе виртуальных машин скопируйте публичный IP-адрес вашей виртуальной машины.

  2. Сформируйте доменное имя по шаблону <IP-адрес>.nip.io (например, 1.2.3.4.nip.io).

  3. Проверьте, что в браузере по адресу http://<IP-адрес>.nip.io загружается страница Welcome to nginx.

Настройте Nginx

  1. Создайте конфигурационный файл:

    sudo nano /etc/nginx/sites-available/short-links-service.conf
  2. Вставьте конфигурацию, заменив <IP-адрес> на IP-адрес вашей виртуальной машины.

    server {
    listen 80;
    server_name <IP-адрес>.nip.io www.<IP-адрес>.nip.io;
    # Проксирование запросов к FastAPI
    location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
    }
    # Логи
    access_log /var/log/nginx/short_links.log;
    error_log /var/log/nginx/short_links_error.log;
    }
  3. Примените конфигурацию и перезапустите nginx:

    sudo ln -sf /etc/nginx/sites-available/short-links-service.conf /etc/nginx/sites-enabled/short-links-service.conf
    sudo rm -f /etc/nginx/sites-enabled/default
    sudo nginx -t
    sudo systemctl reload nginx
  4. Проверьте, что nginx работает:

    sudo systemctl status nginx

    Cервис nginx должен быть в статусе «active (running)».

  5. Перейдите по адресу http://\DOMAIN\.nip.io/docs.

    Откроется документация API FastAPI по незащищенному протоколу HTTP.

Выпустите SSL сертификат и настройте HTTPS

  1. Запустите команду для выпуска SSL-сертификата.

    sudo certbot --nginx -d <DOMAIN> --redirect --agree-tos -m <EMAIL>

    Где:

    • <DOMAIN> — ваш домен из nip.io.

    • <EMAIL> — ваш email.

  2. После успешного выпуска сертификата, перейдите по адресу https://DOMAIN.nip.io/docs.

    Откроется документация API FastAPI. В свойствах сайта браузер отметит соединение как безопасное.

  3. Проверьте работу API:

    1. В документации вызовите POST-запрос:

      {
      "original_url": "https://console.cloud.ru/"
      }
    2. Вернется короткая ссылка.

    3. Перейдите по ссылке — должен открыться сайт https://console.cloud.ru/.

Что дальше

В этой лабораторной работе вы полностью реализовали инфраструктуру и приложение для сервиса сокращения ссылок в облаке Cloud.ru с управляемой базой данных, надежной сетевой изоляцией и публикацией API по HTTPS.

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

Узнавайте больше о работе с сервисами и получайте практические навыки управления облаком, выполняя лабораторные работы.