WeatherForecast. Dev. Deploy. Selectel.
И так, у нас есть проект в стадии разработки, и я хочу проверить как он будет разворачиваться на виртуальном сервере с подключением к реальным базам данным. Заодно, ещё раз потренируемся.
Создаем виртуальную машину. Только в этот раз в настройках сети выбираем "Приватная подсеть + 1 публичный IP". Наш сервер будет доступен по публичному IP, а базы данных будут находиться в приватной сети, и будут доступны только внутри неё. По соображениям безопасности лучше избегать выставления баз данных наружу.
В этот раз нам понадобится размер диска побольше, потому что 5 ГБ не хватит, я увеличил размер диска до 7ГБ.
После создания сервера мы видим в консоли 2 IP адреса: первый - публичный, второй - внутри приватной сети.
Далее настраиваете подключение по SSH.
Затем устанавливаете ПО: NGINX и ufw, dotnet
Ещё нам понадобится программа Git, чтобы скачать исходники с GitHub. Устанавливаете командой:
sudo apt install git -y
Теперь скачиваем исходники проекта, я качаю только ветку dev, последний коммит:
git clone --depth 1 -b dev https://github.com/deploy2production/weather-forecast.git
Переходим в каталог проекта и собираем его для публикации:
cd weather-forecast/
dotnet publish DeployToProduction.WeatherForecast.App --configuration Release
Теперь нам нужно создать базы данных. Заходим в панель управления Selectel, в левом меню выбираем "Облачная платформа" -> "Базы данных", жмем "Создать кластер".
Первой базой данных мы создадим Postgres.
Выбираем "Произвольная" конфигурация и ставим минимальные ресурсы, мы тренируемся, тратить лишние деньги нам ни к чему. Реплики нам тоже пока не нужны.
В настройках сети выбираем ранее созданную с виртуальной машиной подсеть.
И жмем "Создать кластер баз данных".
Второй базой данных создаем Redis. Также выбираем минимальные ресурсы.
Выбираем политику вытеснения. И генерируем пароль. С паролем тут аккуратно. Нам нужен пароль без запятых (замените запятые на другой символ). Сохраните пароль.
Выбираем подсеть. Жмем "Создать кластер баз данных".
Ждем пока базы данных будут созданы.
Теперь нужно настроить Postgres: создать пользователя и базу данных.
Кликаем на строку "WeatherForecastPgsql" в списке кластеров, выбираем вкладку "Пользователь".
Жмем "Создать пользователя". Вводим имя и пароль.
Открываем вкладку "Базы данных", жмем "Создаем базу данных".
Выбираем имя, и влаельца, жмем "Создать".
На вкладке "Настройки" вы можете увидеть как подключиться к базе данных, нам эта информация пригодится при настройке ConnectionStrings нашего сервиса:
С настройкой демонов вы уже знакомы. Кратко:
sudo nano /etc/systemd/system/weatherforecast.service
Меняем в настройках путь к каталогу куда проект был опубликован, имя dll-ки. И добавляем два ключа Environment (ConnectionStrings + два символа _ + название = значение в кавычках):
[Unit] Description=weatherforecast [Service] WorkingDirectory=/home/aseverin/weather-forecast/DeployToProduction.WeatherForecast.App/bin/Release/net7.0/publish ExecStart=dotnet ./DeployToProduction.WeatherForecast.App.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=weatherforecast User=aseverin Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false Environment=ASPNETCORE_URLS=http://127.0.0.1:5022 Environment=ConnectionStrings__Postgres="Host=192.168.0.115;Port=6432;UserName=webapp;Password=*******;Database=weatherforecast" Environment=ConnectionStrings__Redis="192.168.0.136:6379,password=********" [Install] WantedBy=multi-user.targetmulti-user.targetmulti-user.target
sudo systemctl enable weatherforecast.service sudo systemctl start weatherforecast.service
sudo nano /etc/nginx/sites-available/default
Оставляем только один сервер для обработки запросов:
upstream backend { server 127.0.0.1:5022; } server { location / { proxy_pass http://backend; } }
sudo service nginx restart
И давайте бонусом настроим DNS для нашего проекта.
Я открываю панель управления доменами в REG.RU, выбираю домен deploy2production.ru, жму "Добавить запись".
Ввожу под-домен weather-forecast и публичный IP адрес моей виртуальной машины, жму "Готово":
Ждем, когда изменения DNS вступят в силу. Проверяем:
З.Ы.
Не забываем после экспериментов и тренировок удалять не нужные ресурсы (виртуальные машины, базы данных)