В этой статье мы разберем варианты деплоя приложения на ASP.NET Core — от простого к сложному.
Что будем разворачивать?
Возьмём шаблонное приложение — ToDo List. Оно использует фреймворк ASP.NET Core MVC и базу данных PostgreSQL. При этом у Postgres также есть несколько вариантов развёртывания, от Docker до Managed PostgreSQL.
Приложение на Гитхабе: BaseTodoList
Важный нюанс: для корректной работы приложения может потребоваться настроить две переменные окружения:
-
DATABASE_CONNECTION— строка подключения к БД. -
ASPNETCORE_URLS— значения адресов, по которым будет доступно приложение.
PaaS (Timeweb Cloud App Platform)
Самый простой способ развернуть приложение на ASP.NET Core — использовать готовые решения Platform as a Service. Это модель услуг, в которой пользователь получает платформу, где может поднимать различные приложения и управлять ими, абстрагируясь от инфрастуктуры — сетей, серверов и т.д. Это очень удобный подход, поскольку он позволяет сосредоточиться на написании кода и логике приложения, не тратя время на настройку и поддержку серверного оборудования. Также подход позволяет быстро разворачивать приложение, например, для тестирования, в качестве MVP (minimal viable product) или проверки различных гипотез.
Одним из таких решений является Timeweb Cloud App Platform. Здесь мы просто можем указать ссылку на репозиторий, настроить команды запуска приложения и платформа всё сделает за нас.
Процесс настройки следующий:
-
Выбираем тип приложения
-
Выбираем репозиторий с приложением (через интеграцию с GitHub или просто по адресу репозитория)
-
Указываем команды сборки и запуска
-
Добавляем переменные окружения
-
Выбираем мощность сервера
-
Запускаемся!
Для запуска приложения нужен тип Backend -> ASP.NET Core. Наше тестовое приложение написано на .NET 7, поэтому необходимо явно указать эту версию:
Далее нужно указать репозиторий.
Если ваше приложение есть на вашем аккаунте GitHub, GitLab или Bitbucket, можно войти в систему контроля версий через Timeweb Cloud и выбрать приложение из списка репозиториев.
При входе через GitHub можно указать только конкретные репозитории:
Если у вас нет аккаунта или вы не хотите связывать его со сторонним приложением, можно воспользоваться ссылкой на репозиторий:
После выбора приложения, если вы использовали одну из облачных систем управления репозиториями, можно включить параметр «Сборка по последнему выполненному коммиту». Он позволяет выполнять автоматический редеплой более свежей версии приложения на основе последнего коммита в указанную ветку.
Далее выбираем регион и конфигурацию сервера. Для тестов подойдёт минимальная, но в целом необходимо ориентироваться на потребление ресурсов вашего приложения и планируемую нагрузку на него.
После выбора конфигурации необходимо установить команды сборки и запуска, а также переменные окружения. Обычно команда сборки не требует изменений, но можно явно указать конфигурацию Release для приложения.
В нашем приложении в команде dotnet run необходимо явно указать запускаемый проект. Это делается с помощью флага --project.
Также необходимо указать переменные окружения. В данном случае нам нужны:
-
Переменная со строкой подключения к БД
DATABASE_CONNECTION. Укажите её в формате
-
Переменная
APP_URL, которая укажет адрес сервера как0.0.0.0:5000. Это необходимо для корректной работы App Platform.
После этого нажимаем «Запустить деплой» и смотрим на логи:
После запуска приложения его логи также можно будет посмотреть в отдельной вкладке «Логи приложения».
При необходимости можно изменить настройки вашего приложения: от конфигурации сервера до параметров запуска:
А по адресу сервера или домена будет доступно само приложение:
Другие способы деплоя приложения
В этом разделе мы разберём другие способы развёртывания приложения на ASP.NET Core. Они могут быть полезны, если необходима более тонкая настройка инфраструктуры, где будет развёрнуто приложение.
Разберём следующие варианты:
-
Nginx и Reverse Proxy
-
Dockerfile
-
Docker Compose
App Platform
и тестирования проектов из GitHub, GitLab, Bitbucket
или любого другого git-репозитория.
Reverse-Proxy на VPS (NGINX)
Подготовка
Что нам потребуется?
-
VPS c ОС Ubuntu LTS
-
Nginx
-
.NET SDK
Характеристики VPS можно рассчитать на основе планируемой нагрузки. Минимальная конфигурация может быть следующая:
-
1 CPU
-
1GB RAM
-
15 - 20 GB Disk
Для более комфортной работы можно взять что-то помощнее, например 2 GB RAM.
Устанавливаем Nginx
После создания сервера необходимо подключиться к нему по SSH и выполнить следующие команды:
Проверить корректность установки можно с помощью команды
Когда мы устанавливаем Nginx впервые, то для того, чтобы Nginx запустился, нужно выполнить команду:
По адресу сервера можем увидеть стартовую страницу:
Устанавливаем dotnet
Тестовое приложение использует .net7. Чтобы установить его, можно воспользоваться инструкцией Установка .NET в Ubuntu в справочном центре Microsoft.
На Ubuntu установка сводится к выполнению команды:
Проверить установку можно с помощью команды:
Запускаем приложение на ASP.NET
Сначала клонируем репозиторий себе на сервер:
И перейдём в папку с проектом:
Далее выполняем сборку, чтобы убедиться что всё хорошо:
Собранное приложение необходимо опубликовать с помощью команды dotnet publish. В параметре -o необходимо указать директорию, в которой будет лежать исполняемый файл приложения. Обычно это папка по пути /var/www/<приложение>:
Проверим, что в папке появились файлы приложения:
Приложение необходимо запустить, указать к нему переменные окружения и реализовать его перезапуск при рестарте сервера. Это можно сделать с помощью systemctl.
Добавим файл сервиса:
Настраиваем Nginx
Теперь настроим Nginx. Сначала откроем файл по пути /etc/nginx/sites-available/default в текстовом редакторе (например, nano) и поместим туда следующий код конфигурации:
После заполнения файла выполним команду для включения нашей конфигурации:
Далее можем проверить конфигурацию с помощью:
И перезапустить Nginx:
По адресу нашего сервера теперь доступно приложение:
Docker
Более подробная инструкция есть в другой статье, где разбирается деплой приложения на ASP.NET Core как раз с помощью Dockerfile. Ниже рассмотрим основные моменты.
Рекомендуемая конфигурация:
-
1 CPU
-
2GB RAM
-
15 - 20 GB Disk
Для этого варианта развёртывания нам потребуется сервер с установленным Docker. Можно установить его вручную, а можно выбрать сервер с уже установленным ПО.
Dockerfile
В самом приложении уже предоставлен Dockerfile. Разберём его:
Развернуть приложение можно двумя способами: просто собрав docker-контейнер на сервере или с помощью Docker Registry.
Сборка контейнера
Подключимся на сервер с помощью SSH, склонируем проект и перейдём в папку с проектом.
После сборки контейнера запустим его, указав в переменной окружения строку подключения к БД:
По адресу сервера и порту 5000 доступно наше приложение:
Docker Compose на VPS
Если необходимо развернуть приложение вместе с базой данных на одном сервере — например, в качестве тестового стенда — можно использовать Docker Compose.
Docker Compose — это утилита, которая позволяет управлять приложениями, использующими множество контейнеров. В нашем случае контейнеров будет два:
-
PostgreSQL
-
Приложение на ASP.NET
Минимальная конфигурация:
-
1 CPU
-
2GB RAM
-
15 - 20 GB Disk
Файл docker-compose
Запуск на сервере
Снова склонируем репозиторий с помощью команды git clone и перейдём в папку с проектом:
Далее выполним команду:
Дождёмся запуска сервиса и перейдём по адресу сервера. Готово!
Разверните свое приложение на VDS/VPS от Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
В этой статье мы разобрали основные способы развёртывания приложения на ASP.NET Core, от простого, например, решения PaaS, к более сложному — вариантам с ручной настройкой сервера.
