65ae4b42da
Deployed staging/prod envs now use Database__Host=mssql.easysoft.ro (LAN DNS -> the MSSQL VM 10.0.0.240) instead of the raw IP, matching the infra DNS standardization. The docker-compose default stays 'sqlserver' for local dev. (.env/.env.staging/.env.production are gitignored; their deployed values were updated locally and apply on redeploy.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
155 lines
4.8 KiB
Bash
155 lines
4.8 KiB
Bash
# .env.template - Template of environment variables for docker-compose
|
|
# Copy this file to `.env` (local), `.env.staging`, or `.env.production` and fill the secret values.
|
|
# Do NOT commit your `.env.*` files containing real secrets.
|
|
|
|
# Docker image tag — must match the tag CI pushes to the registry for this environment.
|
|
# "staging" for the staging Portainer stack, "production" for the production stack.
|
|
# For local dev this is ignored (docker-compose.override.yml builds images locally).
|
|
IMAGE_TAG=staging
|
|
|
|
# Volume base paths — controls where logs and uploaded files are stored on the host.
|
|
# Portainer (staging/prod): leave unset to use the /opt/myai defaults.
|
|
# Local dev: set to relative paths so logs and files land in the repo tree.
|
|
LOGS_PATH=./logs
|
|
FILES_PATH=../Apis/api/Files
|
|
|
|
# Common
|
|
ASPNETCORE_ENVIRONMENT=Development
|
|
|
|
# Web (myai-web container) - maps to web appsettings Site:Mode section
|
|
# Controls the public site experience:
|
|
# Normal - full site (default)
|
|
# UnderConstruction - redirect visitors to /under-construction.html
|
|
# Unavailable - redirect visitors to /site-unavailable.html (HTTP 503)
|
|
Site__Mode=Normal
|
|
|
|
# API (main)
|
|
ASPNETCORE_URLS=http://+:8080
|
|
APP_ENVIRONMENT_NAME=myai-Development
|
|
|
|
# SMTP Configuration
|
|
Smtp__Host=your.smtp.host
|
|
Smtp__Port=587
|
|
Smtp__Username=your-smtp-username
|
|
Smtp__Password=
|
|
Smtp__UseStartTls=true
|
|
|
|
# AI Settings (choose provider: OpenAI or Ollama)
|
|
Ai__Provider=OpenAI
|
|
|
|
# OpenAI settings
|
|
Ai__OpenAI__ApiKey=
|
|
Ai__OpenAI__ChatModel=gpt-4o-mini
|
|
Ai__OpenAI__EmbeddingModel=text-embedding-3-large
|
|
Ai__OpenAI__TimeoutSeconds=30
|
|
|
|
# Ollama settings
|
|
Ai__Ollama__BaseUrl=http://localhost:11434
|
|
Ai__Ollama__ChatModel=llama2
|
|
Ai__Ollama__EmbeddingModel=embedding-model
|
|
Ai__Ollama__TimeoutSeconds=30
|
|
|
|
# Database (shared) - maps to Database:Host etc. used by apps.
|
|
# Deployed (staging/prod) uses the LAN DNS name (resolves to the MSSQL VM 10.0.0.240);
|
|
# for local dev leave it unset to use the docker-compose 'sqlserver' service default.
|
|
Database__Host=mssql.easysoft.ro
|
|
Database__Port=1433
|
|
Database__Name=MyAiDb
|
|
Database__User=sa
|
|
Database__Password=
|
|
Database__TrustServerCertificate=true
|
|
|
|
# RAG settings
|
|
Rag__MaxFileSizeMb=8
|
|
Rag__ChunkSize=900
|
|
Rag__ChunkOverlap=150
|
|
Rag__MaxTextChars=60000
|
|
Rag__DefaultTopK=20
|
|
Rag__MaxTopK=50
|
|
Rag__ClassifyWithAi=false
|
|
|
|
# Matcher settings (cv-matcher)
|
|
Matcher__TopK=10
|
|
Matcher__DeepScoreTopN=5
|
|
Matcher__MaxJobTextChars=60000
|
|
|
|
# RagApi credentials
|
|
RagApi__BaseUrl=http://rag-api:8080
|
|
RagApi__InternalApiKey=
|
|
RagApi__RequireApiKey=true
|
|
|
|
# CvMatcher credentials
|
|
CvMatcherApi__BaseUrl=http://cv-matcher-api:8080
|
|
CvMatcherApi__InternalApiKey=
|
|
CvMatcherApi__RequireApiKey=true
|
|
|
|
# Captcha
|
|
Captcha__Provider=Recaptcha
|
|
Captcha__SecretKey=
|
|
Captcha__PublicKey=
|
|
Captcha__MinimumScore=0.5
|
|
|
|
# CV cleanup job container (scheduled CV file storage cleanup)
|
|
Jobs__CvStorageCleanupEnabled=true
|
|
Jobs__CvStorageCleanupInterval=01:00:00
|
|
Jobs__CvStorageMaxTotalSizeMegabytes=40
|
|
|
|
# CV search job (job board scraper — triggered by one-click email link)
|
|
Jobs__CvSearchEnabled=true
|
|
Jobs__CvSearchInterval=00:00:30
|
|
JobSearch__Enabled=true
|
|
JobSearch__JobSearchLinkBaseUrl=https://myai.ro
|
|
JobSearch__TokenExpiryDays=7
|
|
JobSearch__MinMatchScore=15
|
|
JobSearch__MaxJobsToMatch=15
|
|
|
|
# File Storage
|
|
FileStorage__Path=Files
|
|
FileStorage__DefaultFileName=
|
|
FileStorage__ToEmail=
|
|
FileStorage__SubjectPrefix=[File Download]
|
|
|
|
# Contact / Subscribe
|
|
Contact__ToEmail=
|
|
Contact__SubjectPrefix=[Contact]
|
|
Subscribe__ToEmail=
|
|
Subscribe__SubjectPrefix=[Subscribe]
|
|
|
|
# CORS
|
|
Cors__AllowedOrigins__0=http://localhost:3000
|
|
Cors__AllowedOrigins__1=http://localhost:5000
|
|
|
|
# Logging
|
|
Logging__LogLevel__Default=Information
|
|
Logging__LogLevel__Microsoft=Warning
|
|
Logging__LogLevel__Microsoft__AspNetCore=Warning
|
|
Logging__LogLevel__Api=Information
|
|
|
|
# Serilog
|
|
Serilog__WriteTo__2__Args__fromEmail=
|
|
Serilog__WriteTo__2__Args__toEmail=
|
|
Serilog__WriteTo__2__Args__mailServer=
|
|
Serilog__WriteTo__2__Args__networkCredential__userName=
|
|
Serilog__WriteTo__2__Args__networkCredential__password=
|
|
Serilog__WriteTo__2__Args__port=587
|
|
Serilog__WriteTo__2__Args__enableSsl=true
|
|
|
|
# CvMatcher API internal
|
|
CvMatcherApi__BaseUrl=http://cv-matcher-api:8081
|
|
CvMatcherApi__InternalApiKey=
|
|
|
|
# Rate Limiting (api - public rate limits)
|
|
# Window uses TimeSpan strings: "hh:mm:ss" (e.g. "00:01:00" = 1 minute, "00:10:00" = 10 minutes).
|
|
RateLimiting__Global__PermitLimit=120
|
|
RateLimiting__Global__Window=00:01:00
|
|
RateLimiting__Global__QueueLimit=0
|
|
RateLimiting__Policies__contact__PermitLimit=5
|
|
RateLimiting__Policies__contact__Window=00:01:00
|
|
RateLimiting__Policies__contact__QueueLimit=0
|
|
RateLimiting__Policies__cvMatcher__PermitLimit=10
|
|
RateLimiting__Policies__cvMatcher__Window=00:10:00
|
|
RateLimiting__Policies__cvMatcher__QueueLimit=0
|
|
RateLimiting__Policies__download__PermitLimit=5
|
|
RateLimiting__Policies__download__Window=00:01:00
|
|
RateLimiting__Policies__download__QueueLimit=0
|