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: