.Net Core — это кроссплатформенная среда с открытым исходным кодом, которая позволяет нам создавать приложения для целого ряда операционных систем, от Windows до Mac и Linux.
Кроме того, это дает нам возможность использовать возможности контейнеризации. Контейнеризация помогает нам масштабировать услуги по мере увеличения трафика.
В этом посте мы увидим:
1. Как мы можем создавать масштабируемые API с помощью .Net Core
2. Как подключиться к базе данных SQL Server с помощью Entity Framework Core
3. Как мы можно создавать образы докеров меньшего размера
4. Как мы можем развернуть приложение как контейнер в Ubuntu.
Поскольку это демонстрационное приложение, мы собираемся максимально упростить требования. Например, предположим, что клиент хочет, чтобы приложение сформировало клиентскую базу, которая будет покупать продукты в его супермаркете. Для этого нам нужно создать:
1. Клиентский API для добавления, обновления и удаления клиентов
2. Продуктовый API для добавления, обновления и удаления продуктов в счете клиента.
Вы можете найти полный код вышеуказанного API здесь.
Чтобы создать API, перейдите в Visual Studio и создайте основной проект веб-API. После создания проекта давайте установим в него следующие зависимости проекта с помощью диспетчера пакетов nuget:
Install-Package Microsoft.EntityFrameworkCore -v 2.6.0
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
Следующий шаг: подключение к базе данных и модели
Как только мы добавим все зависимости проекта, давайте начнем с добавления в проект классов модели и класса контекста базы данных.
Для этого создайте класс и назовите его Customer.cs, Product.cs и ApplicationDbContext.cs. Класс ApplicationDbContext наследует класс DbContext, находящийся в библиотеке EntityFrameworkCore.
Ниже приведено содержимое каждого из вышеперечисленных классов:
Регистрация необходимых служб
Теперь, когда контекст нашей базы данных готов, следующим шагом будет настройка необходимых служб и конвейера запросов в Startup.cs.
Настройка контекста базы данных в ConfigureService() позволит нам внедрить его где угодно. Для этого добавим приведенный ниже код в метод ConfigureServices() в Startup.cs.
Создание сервисов и контроллеров
Следующим шагом будет добавление классов контроллера и сервисов.
Итак, добавим 2 интерфейса:
1. ICustomerService
2. IPProductService
Также добавим соответствующие классы для созданных интерфейсов
1. CustomerService
2. ProductService
Поскольку мы создали 2 службы, а именно CustomerService и ProductService, нам нужно зарегистрировать эти службы в методе ConfigureServices() в Startup, чтобы ввести их в контроллер. Давайте продолжим и изменим метод ConfigureServices(), добавив следующий код:
services.AddTransient<ICustomerService, CustomerService>(); services.AddTransient<IProductService, ProductService>();
Теперь пришло время реализовать контроллер. Создайте 2 контроллера API и назовите их CustomerController и ProductController. Внедрите требуемый сервис в конструктор в Controller, как показано ниже:
ПРИМЕЧАНИЕ. Убедитесь, что вы добавили строку подключения в файл appSettings.json, как показано ниже:
"ConnectionString": "Server=<instanceName>;Database=<dbName>;User Id=<userId>;Password=<password>"
ПРИМЕЧАНИЕ. Кроме того, убедитесь, что вы создаете и запускаете миграцию базы данных в ApplicationDbContext, чтобы создать базу данных и схему с помощью команд —
> Add-Migration InitialMigration -c ApplicationDbContext -o Data/Migrations > Update-Database
Подготовьтесь к развертыванию
Следующим шагом является настройка проекта для развертывания в качестве контейнера докеров. Чтобы создать результирующий образ меньшего размера, мы собираемся использовать базовые образы alpine для среды sdk и aspnet.
Итак, давайте добавим в проект Dockerfile и добавим в него следующие строки кода для создания образа Docker.
Теперь, когда наш проект настроен, внесите код в свой репозиторий GitHub или bitbucket. Поскольку мы собираемся развернуть API на узле Linux, у нас должен быть готов узел Linux с docker и git.
На практике образы можно создавать, настроив конвейеры GitHub/bitbucket/AWS Codebuild и отправив полученный образ в репозиторий образов, например Dockerhub/Amazon ECR, который затем можно развернуть. с помощью Jenkins или Kubernetes.
В этом посте мы не будем углубляться в эту тему, поэтому мы собираемся развернуть его вручную.
У меня есть готовый компьютер с Ubuntu, поэтому давайте войдем в систему и клонируем репозиторий, используя:
git clone <repositoryCloneUrl>
После клонирования выполните приведенные ниже команды, чтобы создать образ докера.
sudo docker build -t sshop-image ./Examples-1-SShop/SShop
После создания образа вы увидите сообщение, как показано на изображении ниже:
Затем выполните приведенную ниже команду, чтобы запустить приложение в контейнере:
sudo docker run -d -p <machine-ip>:8080:80 -e ConnectionString="Server=<instanceName>;Database=<dbName>;User Id=<userId>;Password=<password>" --name sshop sshop-image
ПРИМЕЧАНИЕ. Не забудьте заменить ‹machine-ip›/‹instanceName›/‹dbName›/‹userId›/‹password› на IP-адрес вашего компьютера, экземпляр базы данных и учетные данные, если это необходимо.
Из приведенной выше команды видно, как мы можем передать строку подключения как переменную среды, которая переопределит значение ключа ConnectionString в appsettings.json. файл и используется нашим приложением.
API будет доступен на ‹machine-ip›:8080 после успешного развертывания.
Тестирование развертывания
Теперь, когда наш API развернут, пришло время для тестирования. Мы можем протестировать API с помощью Postman.
Поздравляем, вы создали API с использованием ядра .Net и развернули его как контейнер докеров.
Ссылка на репозиторий кода прикреплена в начале этого поста. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь обращаться ко мне по адресу [email protected].