dev #9

Merged
mfnefd merged 77 commits from dev into main 2024-12-25 23:49:45 +04:00
5 changed files with 54 additions and 8 deletions
Showing only changes of commit 2e20e9d7cc - Show all commits

4
.env Normal file
View File

@ -0,0 +1,4 @@
POSTGRES_USER="postgres"
POSTGRES_PASSWORD="12345"
POSTGRES_DB="main_database"
DB_CONNECTION_STRING="Host=postgres:5438;Database=${POSTGRES_DB};Username=${POSTGRES_USER};Password=${POSTGRES_PASSWORD}"

View File

@ -10,7 +10,7 @@ RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /
USER appuser USER appuser
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
ARG configuration=Release ARG configuration=Debug
WORKDIR /src WORKDIR /src
COPY ["Cloud.csproj", "."] COPY ["Cloud.csproj", "."]
RUN dotnet restore "./Cloud.csproj" RUN dotnet restore "./Cloud.csproj"
@ -25,6 +25,6 @@ RUN dotnet publish "./Cloud.csproj" -c $configuration -o /app/publish /p:UseAppH
FROM base AS final FROM base AS final
WORKDIR /app WORKDIR /app
COPY --from=publish /app/publish . COPY --from=publish /app/publish .
# TODO: Добавить инициализацию базы данных с помощью миграции
ENTRYPOINT ["dotnet", "Cloud.dll"] ENTRYPOINT ["dotnet", "Cloud.dll"]

View File

@ -13,6 +13,8 @@ using Cloud.Services;
using Cloud.Services.Domain.Implement; using Cloud.Services.Domain.Implement;
using Cloud.Services.Domain; using Cloud.Services.Domain;
using Cloud.Services.Cache; using Cloud.Services.Cache;
using Cloud.Support;
using System.Text.RegularExpressions;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -21,9 +23,10 @@ builder.Services.AddTransient<IBrokerService, KafkaService>();
builder.Services.AddTransient<IGreenhouseService, GreenhouseService>(); builder.Services.AddTransient<IGreenhouseService, GreenhouseService>();
//Redis configuration //Redis configuration
string redisUrl = Environment.GetEnvironmentVariable("REDIS_URL") ?? "localhost:6379";
builder.Services.AddSingleton<IConnectionMultiplexer>(sp => builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{ {
var configuration = ConfigurationOptions.Parse("localhost:6379"); var configuration = ConfigurationOptions.Parse(redisUrl);
return ConnectionMultiplexer.Connect(configuration); return ConnectionMultiplexer.Connect(configuration);
}); });
builder.Services.AddSingleton<IRedisCacheService, RedisCacheService>(); builder.Services.AddSingleton<IRedisCacheService, RedisCacheService>();
@ -47,15 +50,21 @@ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
}; };
}); });
string connectionString = Environment.GetEnvironmentVariable("DB_CONNECTION_STRING")
?? "Host=localhost;Port=5438;Database=main_database;Username=postgres;Password=12345";
string dbUrl = "http://" + Regex.Match(connectionString, @"(?<=Host=)([^;]+)").Groups[1].Value;
await NetworkSupport.CheckConnectionAsync(dbUrl);
builder.Services.AddDbContext<ApplicationContext>(options => builder.Services.AddDbContext<ApplicationContext>(options =>
options.UseNpgsql("Host=localhost;Port=5438;Database=main_database;Username=postgres;Password=12345")); options.UseNpgsql(connectionString));
// Настройка CORS // Настройка CORS
string frontUrl = Environment.GetEnvironmentVariable("FRONT_URL") ?? "http://localhost:3000";
builder.Services.AddCors(options => builder.Services.AddCors(options =>
{ {
options.AddPolicy("AllowFrontendLocalhost", builder => options.AddPolicy("AllowFrontendLocalhost", builder =>
{ {
builder.WithOrigins("http://localhost:3000") // фронтенд builder.WithOrigins(frontUrl) // фронтенд
.AllowAnyHeader() .AllowAnyHeader()
.AllowAnyMethod(); .AllowAnyMethod();
}); });

View File

@ -0,0 +1,26 @@
namespace Cloud.Support;
public static class NetworkSupport
{
public static async Task CheckConnectionAsync(string address)
{
using var client = new HttpClient();
try
{
var response = await client.GetAsync(address);
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"Соединение успешно проверено. Статус-код: {response.StatusCode}");
}
else
{
Console.WriteLine($"Соединение не удалось проверить. Статус-код: {response.StatusCode}. URL: {address}");
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"Ошибка при проверке соединения: {ex.Message}. URL: {address}");
}
}
}

View File

@ -12,6 +12,13 @@ services:
build: ./Cloud/ build: ./Cloud/
ports: ports:
- "5124:5124" - "5124:5124"
environment:
DB_CONNECTION_STRING: ${DB_CONNECTION_STRING}
REDDIS_URL: redis:6379
# На всякий случай, если будет больно
# KAFKA_URL: kafka:9092
# Добавить, когда будет фронт!
# FRONT_URL: front:3000
depends_on: depends_on:
- postgres - postgres
- redis - redis
@ -19,9 +26,9 @@ services:
image: postgres:14 image: postgres:14
container_name: cucumber_database container_name: cucumber_database
environment: environment:
POSTGRES_USER: postgres POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: 12345 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: main_database POSTGRES_DB: ${POSTGRES_DB}
ports: ports:
- "5438:5432" - "5438:5432"
volumes: volumes: