Виртуальная машина. Демоны.
Предисловие
Когда мы тренировались локально, настраивали NGINX, мы запусками проекты командой dotnet run. В "бою" так, конечно, не делают. Во-первых, проект собирают для публикации. Во-вторых, настраивают систему так, чтобы она запускала приложение в фоновом режиме, на языке linux, создают демонов. Этим мы сейчас и займемся.
Но прежде взглянем на несколько команд, которые нам пригодятся. В Ubuntu, когда вы подключаетесь по ssh или открываете терминал в WSL, вы попадаете в свой "домашний" каталог. Его путь выглядит так: /home/<username>. Этот путь можно вывести командой pwd, как только вы открыли терминал. pwd - выводит путь рабочего каталога, то есть полный путь текущего каталога.
Быстро вернуться в домашний катало можно командой:
cd ~
Проверить как работает наш проект или NGINX можно с помощью программы curl
curl http://127.0.0.1
curl выведет в консоль содержимое ответа сайта/сервера.
Поехали
Мы только создали виртуальную машину и установили нужное нам ПО. Теперь создадим шаблонные проекты и выполним команду publish, которая скомпилирует проект и сложит в каталог готовый для запуска:
mkdir deploy2production cd deploy2production/ dotnet new webapp dotnet publish --configuration Release cd .. mkdir deploy2production2 cd deploy2production2/ dotnet new webapp dotnet publish --configuration Release cd ..
Опубликованный проект будет находиться по относительному пути:
./bin/Release/net7.0/publish
В нашей OC Ubuntu установлена подсистема systemd, которая отвечает за управление службами. Её-то мы и будем настраивать. И делать мы это будем, как всегда, редактируя конфигурационные файлы.
Откроем на редактирование файл для первого проекта и вставим в него необходимые нам настройки:
sudo nano /etc/systemd/system/deploy2production.service
[Unit] Description=deploy2production [Service] WorkingDirectory=/home/aseverin/deploy2production ExecStart=dotnet ./bin/Release/net7.0/publish/deploy2production.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=deploy2production User=aseverin Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false Environment=ASPNETCORE_URLS=http://127.0.0.1:5022 [Install] WantedBy=multi-user.targetmulti-user.targetmulti-user.target
Вам нужно поправить для себя следующие ключи:
WorkingDirectory - ваш путь к каталогу deploy2production
User - ваш пользователь на виртуальной машине
Аналогично настраиваем фоновый запуск второго проекта
sudo nano /etc/systemd/system/deploy2production2.service
[Unit] Description=deploy2production2 [Service] WorkingDirectory=/home/aseverin/deploy2production2 ExecStart=dotnet ./bin/Release/net7.0/publish/deploy2production2.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=deploy2production2 User=aseverin Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false Environment=ASPNETCORE_URLS=http://127.0.0.1:5122 [Install] WantedBy=multi-user.targetmulti-user.targetmulti-user.target
Далее активируем наши настройки:
sudo systemctl enable deploy2production.service sudo systemctl enable deploy2production2.service
sudo systemctl start deploy2production.service sudo systemctl start deploy2production2.service
Проверить состояние сервиса можно командой (выйти Ctrl+C):
sudo systemctl status deploy2production.service
Смотреть журнал работы сервиса (выйти Ctrl+C):
sudo journalctl -fu deploy2production2.service
Теперь осталось настроить NGINX, как это делать вы уже знаете, а здесь кратко:
sudo nano /etc/nginx/sites-available/default
upstream backend { server 127.0.0.1:5022; server 127.0.0.1:5122; } server { location / { proxy_pass http://backend; } }
sudo service nginx restart