diff --git a/api/.env.template b/api/.env.template
deleted file mode 100644
index c6112d0..0000000
--- a/api/.env.template
+++ /dev/null
@@ -1,84 +0,0 @@
-# myai API - Environment Variables Template
-# Copy this file to .env and fill in your values
-# DO NOT commit .env to source control!
-
-# ASP.NET Core Environment (Development, Staging, Production)
-ASPNETCORE_ENVIRONMENT=Development
-ASPNETCORE_URLS=http://+:8080
-
-# Application Environment Name (shown in email subjects to identify which environment sent the email)
-APP_ENVIRONMENT_NAME=myai.ro-Development
-
-# Azure Key Vault (Optional - for production)
-KeyVault__Enabled=false
-KeyVault__VaultUri=https://your-keyvault-name.vault.azure.net/
-
-# Note: If Key Vault is enabled, you can store secrets there instead of below
-# The following settings can be overridden by Key Vault secrets
-
-# SMTP Configuration
-Smtp__Host=mail.example.com
-Smtp__Port=587
-Smtp__Username=no-reply@example.com
-Smtp__Password=your-secure-password-here
-Smtp__UseStartTls=true
-
-# Google reCAPTCHA
-Captcha__Provider=Recaptcha
-Captcha__SecretKey=your-recaptcha-secret-key
-Captcha__PublicKey=your-recaptcha-public-key
-Captcha__MinimumScore=0.5
-Captcha__ExpectedAction=
-Captcha__ExpectedHostname=
-
-# Google Services (optional - public keys safe to expose)
-Google__TagManagerId=GTM-XXXXXXX
-Google__MapKey=
-
-# File Storage (relative to solution folder - defaults to "Files" if not set)
-FileStorage__Path=Files
-FileStorage__DefaultFileName=
-FileStorage__ToEmail=admin@yourdomain.com
-FileStorage__FromEmail=no-reply@yourdomain.com
-FileStorage__SubjectPrefix=[File Download]
-
-# Contact Settings
-Contact__ToEmail=contact@yourdomain.com
-Contact__FromEmail=no-reply@yourdomain.com
-Contact__SubjectPrefix=[Contact]
-
-# Subscribe Settings
-Subscribe__ToEmail=contact@yourdomain.com
-Subscribe__SubjectPrefix=[Subscribe]
-
-# CORS - Allowed Origins (comma separated or multiple variables)
-Cors__AllowedOrigins__0=https://yourdomain.com
-Cors__AllowedOrigins__1=https://www.yourdomain.com
-
-# Logging Configuration
-Logging__LogLevel__Default=Information
-Logging__LogLevel__Microsoft=Warning
-Logging__LogLevel__Microsoft.AspNetCore=Warning
-Logging__LogLevel__Api=Information
-
-# Serilog Email Alerts (for Error notifications)
-Serilog__WriteTo__2__Args__fromEmail=no-reply@yourdomain.com
-Serilog__WriteTo__2__Args__toEmail=webmaster@yourdomain.com
-Serilog__WriteTo__2__Args__mailServer=mail.example.com
-Serilog__WriteTo__2__Args__networkCredential__userName=no-reply@yourdomain.com
-Serilog__WriteTo__2__Args__networkCredential__password=your-password
-Serilog__WriteTo__2__Args__port=587
-Serilog__WriteTo__2__Args__enableSsl=true
-
-
-# OpenAI / RAG CV Matcher
-OpenAI__ApiKey=sk-your-openai-api-key
-OpenAI__ChatModel=gpt-4o-mini
-OpenAI__EmbeddingModel=text-embedding-3-small
-OpenAI__TimeoutSeconds=60
-Rag__MaxPdfSizeMb=5
-Rag__ChunkSize=900
-Rag__ChunkOverlap=150
-Rag__CvTtlMinutes=60
-Rag__MaxJobTextChars=20000
-Rag__TopK=6
diff --git a/docker-compose/docker-compose.dcproj b/docker-compose/docker-compose.dcproj
index c6e2d00..d214124 100644
--- a/docker-compose/docker-compose.dcproj
+++ b/docker-compose/docker-compose.dcproj
@@ -9,6 +9,7 @@
2.1
+
diff --git a/docker-compose/docker-compose.production.yml b/docker-compose/docker-compose.production.yml
index 2f57561..daa9641 100644
--- a/docker-compose/docker-compose.production.yml
+++ b/docker-compose/docker-compose.production.yml
@@ -41,12 +41,27 @@ services:
- Ai__OpenAI__ChatModel=${Ai__OpenAI__ChatModel}
- Ai__OpenAI__EmbeddingModel=${Ai__OpenAI__EmbeddingModel}
- Ai__OpenAI__TimeoutSeconds=${Ai__OpenAI__TimeoutSeconds}
- - Rag__MaxPdfSizeMb=5
- - Rag__ChunkSize=900
- - Rag__ChunkOverlap=150
- - Rag__CvTtlMinutes=60
- - Rag__MaxJobTextChars=20000
- - Rag__TopK=6
+ # Database (shared)
+ - Database__Host=${Database__Host}
+ - Database__Port=${Database__Port}
+ - Database__Name=${Database__Name}
+ - Database__User=${Database__User}
+ - Database__Password=${Database__Password}
+ - Database__TrustServerCertificate=${Database__TrustServerCertificate}
+ # Internal API protection
+ - InternalApi__ApiKey=${InternalApi__ApiKey}
+ - InternalApi__RequireApiKey=${InternalApi__RequireApiKey}
+ # CvMatcher API settings used by this service
+ - CvMatcherApi__BaseUrl=${CvMatcherApi__BaseUrl}
+ - CvMatcherApi__InternalApiKey=${CvMatcherApi__InternalApiKey}
+ # RAG settings
+ - Rag__MaxFileSizeMb=${Rag__MaxFileSizeMb}
+ - Rag__ChunkSize=${Rag__ChunkSize}
+ - Rag__ChunkOverlap=${Rag__ChunkOverlap}
+ - Rag__MaxTextChars=${Rag__MaxTextChars}
+ - Rag__DefaultTopK=${Rag__DefaultTopK}
+ - Rag__MaxTopK=${Rag__MaxTopK}
+ - Rag__ClassifyWithAi=${Rag__ClassifyWithAi}
volumes:
- myai_api_logs:/app/logs
- /opt/easysoft/files:/app/Files
diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml
index 11b63f3..5a35dfb 100644
--- a/docker-compose/docker-compose.yml
+++ b/docker-compose/docker-compose.yml
@@ -13,12 +13,18 @@ services:
environment:
- ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Development}
- ASPNETCORE_URLS=http://+:8080
- - ConnectionStrings__RagDb=Server=mssql,1433;Database=MyAi;User Id=sa;Password=bpdTUyb3;TrustServerCertificate=True
+ - # Database settings (read by the apps as Database:Host/Port/Name/User/Password)
+ - Database__Host=${Database__Host:-mssql}
+ - Database__Port=${Database__Port:-1433}
+ - Database__Name=${Database__Name:-MyAiCvMatcher}
+ - Database__User=${Database__User:-sa}
+ - Database__Password=${Database__Password:-Your_strong_password123}
+ - Database__TrustServerCertificate=${Database__TrustServerCertificate:-true}
- InternalApi__RequireApiKey=true
- - InternalApi__ApiKey=${INTERNAL_API_KEY:-change-this-internal-key}
- - Ai__Provider=${AI_PROVIDER:-OpenAI}
- - Ai__OpenAI__ApiKey=${OPENAI_API_KEY:-}
- - Ai__Ollama__BaseUrl=${OLLAMA_BASE_URL:-http://host.docker.internal:11434}
+ - InternalApi__ApiKey=${InternalApi__ApiKey:-change-this-internal-key}
+ - Ai__Provider=${Ai__Provider:-OpenAI}
+ - Ai__OpenAI__ApiKey=${Ai__OpenAI__ApiKey:-}
+ - Ai__Ollama__BaseUrl=${Ai__Ollama__BaseUrl:-http://host.docker.internal:11434}
networks:
- myai-network
restart: unless-stopped
@@ -37,14 +43,20 @@ services:
environment:
- ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Development}
- ASPNETCORE_URLS=http://+:8080
- - ConnectionStrings__CvMatcherDb=Server=mssql,1433;Database=MyAiCvMatcher;User Id=sa;Password=${MSSQL_SA_PASSWORD:-Your_strong_password123};TrustServerCertificate=True
+ - # Database settings (cv-matcher uses same keys)
+ - Database__Host=${Database__Host:-mssql}
+ - Database__Port=${Database__Port:-1433}
+ - Database__Name=${Database__Name:-MyAiCvMatcher}
+ - Database__User=${Database__User:-sa}
+ - Database__Password=${Database__Password:-Your_strong_password123}
+ - Database__TrustServerCertificate=${Database__TrustServerCertificate:-true}
- InternalApi__RequireApiKey=true
- - InternalApi__ApiKey=${INTERNAL_API_KEY:-change-this-internal-key}
+ - InternalApi__ApiKey=${InternalApi__ApiKey:-change-this-internal-key}
- RagApi__BaseUrl=http://rag-api:8080
- - RagApi__InternalApiKey=${INTERNAL_API_KEY:-change-this-internal-key}
- - Ai__Provider=${AI_PROVIDER:-OpenAI}
- - Ai__OpenAI__ApiKey=${OPENAI_API_KEY:-}
- - Ai__Ollama__BaseUrl=${OLLAMA_BASE_URL:-http://host.docker.internal:11434}
+ - RagApi__InternalApiKey=${InternalApi__ApiKey:-change-this-internal-key}
+ - Ai__Provider=${Ai__Provider:-OpenAI}
+ - Ai__OpenAI__ApiKey=${Ai__OpenAI__ApiKey:-}
+ - Ai__Ollama__BaseUrl=${Ai__Ollama__BaseUrl:-http://host.docker.internal:11434}
networks:
- myai-network
restart: unless-stopped
@@ -67,7 +79,7 @@ services:
- Cors__AllowedOrigins__0=http://localhost:5000
- Cors__AllowedOrigins__1=http://web:8080
- CvMatcherApi__BaseUrl=http://cv-matcher-api:8080
- - CvMatcherApi__InternalApiKey=${INTERNAL_API_KEY:-change-this-internal-key}
+ - CvMatcherApi__InternalApiKey=${CvMatcherApi__InternalApiKey:-change-this-internal-key}
volumes:
- ../api/logs:/app/logs
networks: