Создаем сеть orgaflow-net, которая будет использоваться для взаимодействия контейнеров:
docker network create orgaflow-netСоздаем volume postgres_data для хранения данных базы данных после перезапуска контейнеров:
docker volume create postgres_dataКонтейнер настроен для постоянного хранения данных, чтобы избежать повторных миграций:
docker run -d \
--name orgaflow_postgres \
--network orgaflow-net \
-p 5433:5432 \
-v postgres_data:/var/lib/postgresql/data \
-e POSTGRES_DB=OrgaFlowDb \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=secret \
--restart always \
postgres:15Собираем Docker-образ для сервиса авторизации и запускаем контейнер:
docker build -t auth-service:dev -f auth-service/Dockerfile .
docker run -d \
--name auth-service \
--network orgaflow-net \
-p 5095:8080 \
auth-service:devСоздаем образ микросервиса задач и запускаем контейнер:
docker build -t task-service:dev -f ./task-service/Dockerfile .
docker run -d \
--name task-service \
--network orgaflow-net \
-p 5096:8080 \
task-service:devСобираем образ основного приложения и запускаем контейнер:
docker build -t main-app:dev -f ./Dockerfile .
docker run -d \
--name main-app \
--network orgaflow-net \
-p 80:8080 \
main-app:devСобираем образ UI приложения и запускаем контейнер:
docker build -t orgaflow-ui:dev -f ./OrgaFlow.UI/Dockerfile .
docker run -d \
--name ui-app \
--network orgaflow-net \
-p 3000:3000 \
orgaflow-ui:devЕсли приложение запускается в первый раз, необходимо выполнить миграции для всех трех контекстов базы данных. (Легче запустить собрать и запустить orgaflow_postgres и через IDE сделать миграции, с мониторингом процесса, а после перейти к работе над другими контейнерами)
dotnet ef migrations add Init -s ./OrgaFlow.API -p ./OrgaFlow.Persistence --context AuthDbContextПрименение миграции:
dotnet ef database update --verbose -s .\OrgaFlow.API\ -p .\OrgaFlow.Persistence\ --AuthDbContextdotnet ef migrations add Init -s ./OrgaFlow.API -p ./OrgaFlow.Persistence --context AppDbContextПрименение миграции:
dotnet ef database update --verbose -s .\OrgaFlow.API\ -p .\OrgaFlow.Persistence\ --AppDbContextdotnet ef migrations add Init -s ./OrgaFlow.API -p ./OrgaFlow.Persistence --context TaskDbContextПрименение миграции:
dotnet ef database update --verbose -s .\OrgaFlow.API\ -p .\OrgaFlow.Persistence\ --TaskDbContextЕсли необходимо запустить приложение без контейнеров, потребуется внести изменения в несколько файлов конфигурации.
Было:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AuthService": {
"BaseUrl": "http://auth-service:8080/api/auth/"
},
"TaskService": {
"BaseUrl": "http://task-service:8080/api/Task/"
}
}Стало:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AuthService": {
"BaseUrl": "http://localhost:5095/api/auth/"
},
"TaskService": {
"BaseUrl": "http://localhost:5130/api/Task/"
}
}Было:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AuthService": {
"BaseUrl": "http://auth-service:8080/api/auth/"
}
}Стало:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AuthService": {
"BaseUrl": "http://localhost:5095/api/auth/"
}
}Было:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DbConnectionString": "Host=orgaflow_postgres;Port=5432;Username=postgres;Password=secret;Database=OrgaFlowDb"
}
}
Стало:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DbConnectionString": "Host=localhost;Port=5433;Username=postgres;Password=secret;Database=OrgaFlowDb"
}
}
После этих изменений приложение можно запускать напрямую через IDE.