Как запустить .Net Core и Angular Universal на Nginx Ubuntu

Идея нашего приложения следующая: у нас есть сервер на dotnet core, а клиент на angular 7 (2+) с использованием SSR (server site rendering) или universal angular. Общая архитектура выглядит так:

VPS

Нам нужен VPS-сервер. Я использую Яндекс.облако. Для экспериментов вполне достаточно.

Как добавить виртуальную машину в Яндекс.облако

Если у вас есть другой VPS, пропустите этот блок. Если нет, то алгоритм действий следующий:

1. Если вы уже зарегистрировались и активировали пробную версию

Активируйте пробную версию в Яндекс.облаке.

2. Перейдем во вкладку compute cloud

3. Нажмите на «Создать ВМ»
4. Введем простую конфигурацию ВМ

5. Добавим SSH-ключ

Запустите cmd.exe или powershell.exe. И введите следующую команду.

ssh-keygen -t rsa -b 2048

Я запускал на windows 10, и у меня вылетало сообщение ‘ssh-keygen’ is not recognized. Я просто запустил эту команду в git-bash. Если еще не установили его, установите -- очень нужная и полезная штука.

В папке /c/Users/username/.ssh/id_rsa у вас появится файлы id_rsa и id_rsa.pub.

Добавим содержимое файла id_rsa.pub в поле SSH-ключа.

Подключимся к VPS-серверу и установим несколько компонентов

На вашем VPS установим следующие компоненты.

Install .NET Core Runtime on Linux Ubuntu 18.04 — x64
Install superviso

Install .NET Core Runtime on Linux Ubuntu 18.04 — x64

Чтобы наше .NET Core-приложение запускалось, на линуксе надо установить runtime-среду. Которая и будет запускать нашу сборку.

Согласно официальной документации, там же можно найти другие сборки под linux, windows, MacOS.

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb;
sudo dpkg -i packages-microsoft-prod.deb;
sudo add-apt-repository universe;
sudo apt-get install apt-transport-https;
sudo apt-get update;
sudo apt-get install --assume-yes aspnetcore-runtime-2.2;

Сделаем сборку на разработческой машине. Я делаю сборку в VisualStudio 2019. Но вы можете воспользоваться командой dotnet publish. Естественно, чтобы данная команда сработала, не забудьте установить SDK. Вы можете сделать сборку и на сервере.

dotnet publish --configuration Release

Результат сборки -- файлы .dll. Найдите .dll-файл стартового проекта (startup project). Например, MyProject.dll.

Запустим сборку на сервере командой:

dotnet MyProject.dll

Попробуйте обратиться по ip вашего сервера с указанием порта, например, 52.155.122.144:5000 -- приложение должно запуститься.

Но есть проблема. Если закрыть консоль, то приложение отключится. Чтобы эту проблему решить, надо запустить приложение в фоновом режиме как службу. К счастью, для этого можно использовать сторонний софт superviser, который ставится невероятно просто.

sudo apt-get install supervisor

Добавим файл в директорию /etc/supervisor/conf.d/hellomvc.conf:

Добавьте следующее содержимое:

[program:myproject]
command=/usr/bin/dotnet /var/aspnetcore/myproject/MyProject.dll
directory=/var/aspnetcore/myproject/
autostart=true
autorestart=true
stderr_logfile=/var/log/myproject.err.log
stdout_logfile=/var/log/myproject.out.log
environment=ASPNETCORE__ENVIRONMENT=Production
user=www-data
stopsignal=INT

И перезапустим сервис supervisor:

sudo service supervisor stop
sudo service supervisor start