Бекенд на C# Web Api
Миграция базы данных
Для просмотра и ручного редактирования БД можно использовать программу DBeaver.
После деплоя сервиса все таблицы, которые описаны в приложении, не создадутся автоматически. Их нужно либо создать вручную (в точности повторяя структуру, описанную в приложении), либо воспользоваться миграцией — полуавтоматическим способом поддержания таблиц в актуальном состоянии.
Подробно про Flow миграции описано по тут: Microsoft — Code First Migrations in Team Environments.

В первую очередь необходимо установить следующие NuGet пакеты:
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore
Затем нужно дополнить Dockerfile:
sdk — корректируем образ.
USER root — указываем пользователя с root правами.
COPY .. — копируем исходные файлы внутрь контейнера. Они понадобятся при сборке внутри контейрера.
dotnet-ef — устанавливаем и настраиваем утилиту dotnet-ef. С помощью этой утилиты применяется миграция.
Пример готового докерфайла смотрите тут.

Команды для копирования:
USER root
COPY . .
RUN dotnet new tool-manifest
RUN dotnet tool install dotnet-ef
ENV PATH="$PATH:/root/.dotnet/tools"Открываем консоль и переходим в папку где находится Dockerfile. Выполняем следующую команду:
dotnet ef migrations add InitialCreate --project ./Entities/Entities.csproj --startup-project ./DemoWebApi/DemoWebApi.csprojРассмотрим детальнее эту команду:
dotnet ef — пользуемся утилитой dotnet-ef.
migrations add — добавляем новую миграцию.
InitialCreate — имя миграции.
--project — путь до файла проекта *.csproj, в котором находится описание базы данных. В демо-проекте структура имеет вид, как на картинке ниже. Описание БД находится в проекте Entities.csproj, поэтому указываем путь до файла этого проекта.
--startup-project — путь до файла проекта, из которого запускается приложение (там где находится файл Program.cs).

После выполнения команды выше в консоли должно быть выведено Done.

Также в проекте должны появиться автоматически сгенерированные файлы миграции.

Можно также проверить что миграция действительно существует, выполнив команду, которая выводит список всех миграций.
dotnet ef migrations list --project ./Entities/Entities.csproj --startup-project ./DemoWebApi/DemoWebApi.csproj
После создания файлов миграции нужно заново залить все приложение на VPS и заново задеплоить. После повторного запуска теперь внутри контейнера с WebApi приложением будут лежать все файлы проекта и файлы миграции (благодаря команде COPY . .). Теперь надо зайти внутрь контейнера и ввести команду для применения миграции.
Входим в контейнер используя команду ниже. Вместо 1aef6560f7f0 вводите id контейнера с WebApi.
docker ps # просматриваем контейнеры и их ID
docker exec -it 1aef6560f7f0 bash # входим в файловую систему контейнераПосле входа вводим следующую команду, чтобы проверить что есть не применённая миграция:
dotnet ef migrations list --project ./Entities/Entities.csproj --startup-project ./DemoWebApi/DemoWebApi.csprojДолжен вывестись список миграций. Также видим, что миграция InitialCreate находится в статусе ожидания.

Затем вводим следующую команду чтобы применить миграцию:
dotnet ef database update --project ./Entities/Entities.csproj --startup-project ./DemoWebApi/DemoWebApi.csprojВывод должен быть таким:

Заходим в DBeaver и проверяем, что в базе данных появились все таблицы и связи, описанные в приложении на C# WebApi. Помимо наших таблиц добавится еще одна служебная таблица __EFMigrationsHistory, в которой будет храниться история всех миграций.
Для того чтобы еще раз обновить базу данных нужно проделать все те же шаги. Каждый раз, когда меняется структура таблиц, или добавляются новые таблицы, перед тем как залить все изменения на сервер нужно создать новый файл миграции. Затем залить обновленное приложение на сервер и применить миграцию на сервере. Таким образом, будет храниться история всех миграций в виде файлов миграций и служебной таблицы в БД.

Microsoft — Code First Migrations in Team Environments
Автор документа: Артём Ветик