Kulcare Docs
General06 deployment

Environment Configuration

This document details all environment variables and configuration settings required for the Kulcare API Backend in different environments.

Environment Files

The application uses different environment files for different stages:

  • .env.development - Local development
  • .env.test - Testing environment
  • .env.staging - Staging server
  • .env.production - Production server

Core Application Settings

Rails Configuration

# Rails Environment
RAILS_ENV=production
RACK_ENV=production

# Application settings
SECRET_KEY_BASE=your_secret_key_base_here_64_characters_minimum
RAILS_SERVE_STATIC_FILES=false
RAILS_LOG_TO_STDOUT=true

# Session settings
SESSION_TIMEOUT=3600  # 1 hour in seconds

Database Configuration

PostgreSQL (Primary Database)

# Database URL (preferred method)
DATABASE_URL=postgresql://username:password@localhost:5432/kulcare_production

# Or individual settings
DB_HOST=localhost
DB_PORT=5432
DB_NAME=kulcare_production
DB_USERNAME=kulcare
DB_PASSWORD=secure_password_here
DB_POOL=25
DB_TIMEOUT=5000

Redis Configuration

# Redis URL (preferred method)  
REDIS_URL=redis://localhost:6379/0

# Or individual settings
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=your_redis_password

# Redis for different purposes
REDIS_CACHE_URL=redis://localhost:6379/1
REDIS_SIDEKIQ_URL=redis://localhost:6379/2

Elasticsearch Configuration

# Elasticsearch settings
ELASTICSEARCH_URL=http://localhost:9200
ELASTICSEARCH_INDEX_PREFIX=kulcare_production

# Elasticsearch authentication (if enabled)
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=your_password

# Index settings
ES_CLINIC_INDEX=kulcare_production_clinics
ES_DOCTOR_INDEX=kulcare_production_doctors
ES_MEDICINE_INDEX=kulcare_production_medicines

External Service Integrations

SMS/WhatsApp (Twilio)

# Twilio configuration
TWILIO_ACCOUNT_SID=your_twilio_account_sid
TWILIO_AUTH_TOKEN=your_twilio_auth_token
TWILIO_PHONE_NUMBER=+1234567890

# WhatsApp settings
TWILIO_WHATSAPP_NUMBER=whatsapp:+1234567890
TWILIO_WHATSAPP_SANDBOX=false  # Set to true for sandbox mode

WATI (WhatsApp Business API)

# WATI configuration
WATI_API_URL=https://live-mt-server.wati.io
WATI_TOKEN=your_wati_api_token
WATI_INSTANCE_ID=your_instance_id

# WATI webhook settings
WATI_WEBHOOK_URL=https://api.kulcare.com/webhooks/wati
WATI_WEBHOOK_SECRET=your_webhook_secret

Email (SendGrid)

# SendGrid configuration
SENDGRID_API_KEY=your_sendgrid_api_key
SENDGRID_FROM_EMAIL=noreply@kulcare.com
SENDGRID_FROM_NAME="Kulcare"

# Email settings
EMAIL_DELIVERY_METHOD=sendgrid  # or smtp
DEFAULT_FROM_EMAIL=noreply@kulcare.com

Payment Gateway (Razorpay)

# Razorpay configuration
RAZORPAY_KEY_ID=your_razorpay_key_id
RAZORPAY_KEY_SECRET=your_razorpay_key_secret
RAZORPAY_WEBHOOK_SECRET=your_webhook_secret

# Razorpay environment
RAZORPAY_ENV=production  # or test for sandbox

# Payment settings
PAYMENT_CURRENCY=INR
PAYMENT_TIMEOUT=300  # 5 minutes in seconds

File Storage (AWS S3)

# AWS S3 configuration
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_REGION=ap-south-1
AWS_S3_BUCKET=kulcare-production-uploads

# S3 settings
S3_ENDPOINT_URL=https://s3.ap-south-1.amazonaws.com
S3_FORCE_PATH_STYLE=false
S3_USE_SSL=true

# CDN settings (CloudFront)
CDN_URL=https://your-cloudfront-domain.cloudfront.net

Video Consultation (OpenTok/Vonage)

# OpenTok configuration
OPENTOK_API_KEY=your_opentok_api_key
OPENTOK_API_SECRET=your_opentok_api_secret

# Video session settings
VIDEO_SESSION_TIMEOUT=3600  # 1 hour
VIDEO_RECORDING_ENABLED=false

Push Notifications (Pusher)

# Pusher configuration
PUSHER_APP_ID=your_pusher_app_id
PUSHER_KEY=your_pusher_key
PUSHER_SECRET=your_pusher_secret
PUSHER_CLUSTER=ap2

# Pusher settings
PUSHER_ENCRYPTED=true
PUSHER_USE_SSL=true

ABDM (Ayushman Bharat Digital Mission) Integration

# ABDM API configuration
ABDM_BASE_URL=https://dev.abdm.gov.in
ABDM_CLIENT_ID=your_client_id
ABDM_CLIENT_SECRET=your_client_secret

# ABDM service endpoints
ABDM_GATEWAY_URL=https://dev.abdm.gov.in/gateway
ABDM_HIU_BASE_URL=https://dev.abdm.gov.in/hiu
ABDM_HIP_BASE_URL=https://dev.abdm.gov.in/hip

# ABDM authentication
ABDM_AUTH_URL=https://dev.abdm.gov.in/auth
ABDM_CALLBACK_URL=https://api.kulcare.com/abdm/callback

# ABDM facility details
ABDM_HIP_ID=your_hip_id
ABDM_FACILITY_ID=your_facility_id

Security Settings

JWT Configuration

# JWT settings
JWT_SECRET_KEY=your_jwt_secret_key_minimum_32_characters
JWT_EXPIRY_TIME=3600  # 1 hour in seconds
JWT_REFRESH_TOKEN_EXPIRY=2592000  # 30 days in seconds

# JWT algorithm
JWT_ALGORITHM=HS256

API Security

# CORS settings
CORS_ALLOWED_ORIGINS=https://app.kulcare.com,https://admin.kulcare.com
CORS_ALLOW_CREDENTIALS=true
CORS_MAX_AGE=86400

# Rate limiting
RATE_LIMIT_REQUESTS=1000  # requests per hour
RATE_LIMIT_WINDOW=3600    # window in seconds

# API versioning
API_VERSION=v1
API_DEFAULT_FORMAT=json

Encryption

# Data encryption keys
MASTER_KEY=your_master_encryption_key_32_characters
ENCRYPTION_ALGORITHM=aes-256-gcm

# File encryption
FILE_ENCRYPTION_ENABLED=true
FILE_ENCRYPTION_KEY=your_file_encryption_key

Background Jobs Configuration

Sidekiq Settings

# Sidekiq configuration
SIDEKIQ_CONCURRENCY=10
SIDEKIQ_TIMEOUT=25
SIDEKIQ_RETRY=3

# Sidekiq web interface
SIDEKIQ_WEB_ENABLED=true
SIDEKIQ_WEB_USERNAME=admin
SIDEKIQ_WEB_PASSWORD=secure_password

# Job queues
DEFAULT_QUEUE=default
HIGH_PRIORITY_QUEUE=urgent
LOW_PRIORITY_QUEUE=low
MAILER_QUEUE=mailers

Cron Jobs

# Scheduled jobs
CLEANUP_JOB_ENABLED=true
CLEANUP_JOB_SCHEDULE="0 2 * * *"  # Daily at 2 AM

BACKUP_JOB_ENABLED=true
BACKUP_JOB_SCHEDULE="0 3 * * *"   # Daily at 3 AM

REPORT_JOB_ENABLED=true
REPORT_JOB_SCHEDULE="0 1 * * 1"   # Weekly on Monday at 1 AM

Application Features

SMS/Notification Settings

# SMS configuration
SMS_ENABLED=true
SMS_PROVIDER=twilio  # or wati
SMS_RATE_LIMIT=10    # SMS per minute per user

# WhatsApp settings
WHATSAPP_ENABLED=true
WHATSAPP_PROVIDER=wati
WHATSAPP_RATE_LIMIT=5  # Messages per minute per user

# Email settings
EMAIL_ENABLED=true
EMAIL_RATE_LIMIT=20    # Emails per hour per user

Billing and Subscription

# Billing configuration
BILLING_ENABLED=true
FREE_TRIAL_DAYS=30
SUBSCRIPTION_GRACE_PERIOD=7  # Days after expiry

# Currency and pricing
DEFAULT_CURRENCY=INR
CURRENCY_SYMBOL=₹

# Feature limits
MAX_DOCTORS_FREE_PLAN=2
MAX_PATIENTS_FREE_PLAN=100
MAX_APPOINTMENTS_FREE_PLAN=50

File Upload Settings

# Upload limits
MAX_FILE_SIZE=10485760      # 10MB in bytes
MAX_IMAGE_SIZE=5242880      # 5MB in bytes
MAX_DOCUMENT_SIZE=20971520  # 20MB in bytes

# Allowed file types
ALLOWED_IMAGE_TYPES=jpg,jpeg,png,gif
ALLOWED_DOCUMENT_TYPES=pdf,doc,docx
ALLOWED_VIDEO_TYPES=mp4,avi,mov

# Upload storage
UPLOAD_STORAGE=s3  # or local
LOCAL_UPLOAD_PATH=/var/www/uploads

Logging and Monitoring

Log Configuration

# Logging settings
LOG_LEVEL=info          # debug, info, warn, error
LOG_TO_STDOUT=true
LOG_TAGS=request_id,user_id

# Log rotation
LOG_ROTATION_ENABLED=true
LOG_MAX_SIZE=100MB
LOG_MAX_FILES=10

# Structured logging
STRUCTURED_LOGGING=true
LOG_FORMAT=json

Monitoring and Analytics

# Application monitoring
APM_ENABLED=true
APM_SERVICE_NAME=kulcare-api-backend
APM_ENVIRONMENT=production

# Error tracking
ERROR_TRACKING_ENABLED=true
ERROR_TRACKING_SERVICE=sentry
SENTRY_DSN=your_sentry_dsn

# Performance monitoring
PERFORMANCE_MONITORING=true
SLOW_QUERY_THRESHOLD=1000  # milliseconds

Regional Settings

Multi-country Support

# Country configuration
SUPPORTED_COUNTRIES=IN,US
DEFAULT_COUNTRY=IN

# India specific settings
INDIA_TIMEZONE=Asia/Kolkata
INDIA_CURRENCY=INR
INDIA_PHONE_CODE=+91

# US specific settings
US_TIMEZONE=America/New_York
US_CURRENCY=USD
US_PHONE_CODE=+1

Localization

# Language settings
DEFAULT_LOCALE=en
SUPPORTED_LOCALES=en,hi

# Date/time formats
DATE_FORMAT=%d/%m/%Y
TIME_FORMAT=%H:%M
DATETIME_FORMAT="%d/%m/%Y %H:%M"

Development and Testing

Development Settings

# Development-only settings
RAILS_ENV=development
DEBUG_MODE=true
VERBOSE_LOGGING=true

# Development database
DEV_DATABASE_URL=postgresql://localhost/kulcare_development

# Development services
MAIL_DELIVERY_METHOD=letter_opener
SMS_DELIVERY_METHOD=log
WHATSAPP_DELIVERY_METHOD=log

Testing Configuration

# Test environment
RAILS_ENV=test
TEST_DATABASE_URL=postgresql://localhost/kulcare_test

# Test settings
PARALLEL_TESTS=true
TEST_COVERAGE=true
COVERAGE_THRESHOLD=80

# Test data
FACTORY_BOT_ENABLED=true
FAKER_LOCALE=en-IN

Environment-Specific Examples

Production Environment (.env.production)

# Core settings
RAILS_ENV=production
SECRET_KEY_BASE=abc123...64characters...xyz789

# Database
DATABASE_URL=postgresql://kulcare:password@localhost:5432/kulcare_production

# Redis
REDIS_URL=redis://localhost:6379/0

# External services
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RAZORPAY_KEY_ID=rzp_live_xxxxxxxxxx
AWS_S3_BUCKET=kulcare-production-uploads

# Security
JWT_SECRET_KEY=your-production-jwt-secret-32-chars
CORS_ALLOWED_ORIGINS=https://app.kulcare.com

# Features
SMS_ENABLED=true
EMAIL_ENABLED=true
BILLING_ENABLED=true

Staging Environment (.env.staging)

# Core settings
RAILS_ENV=staging
SECRET_KEY_BASE=different-secret-key-for-staging

# Database
DATABASE_URL=postgresql://kulcare_staging:password@localhost:5432/kulcare_staging

# External services (test/sandbox)
TWILIO_ACCOUNT_SID=ACtest_xxxxxxxxxxxxxxxxxxxxxxxx
RAZORPAY_KEY_ID=rzp_test_xxxxxxxxxx
AWS_S3_BUCKET=kulcare-staging-uploads

# Relaxed CORS for testing
CORS_ALLOWED_ORIGINS=https://staging.kulcare.com,http://localhost:3001

Security Best Practices

Environment Variables Security

  1. Never commit environment files to version control

    # Add to .gitignore
    .env*
    !.env.example
  2. Use strong, unique values for each environment

    # Generate secure random strings
    openssl rand -hex 32
  3. Rotate secrets regularly

    • JWT secrets: Every 6 months
    • API keys: As per provider recommendations
    • Database passwords: Every 3 months
  4. Limit environment variable access

    # Set proper file permissions
    chmod 600 .env.production
    chown kulcare:kulcare .env.production

Configuration Management

Using Rails Credentials (Alternative Approach)

# Edit credentials
EDITOR=nano rails credentials:edit --environment production

# In credentials file:
secret_key_base: your_secret_key
database:
  username: kulcare
  password: secure_password
external_apis:
  twilio:
    account_sid: your_sid
    auth_token: your_token

Environment Validation

Create a configuration validation script:

# config/application.rb
class Application < Rails::Application
  config.before_configuration do
    required_env_vars = %w[
      SECRET_KEY_BASE
      DATABASE_URL
      REDIS_URL
      TWILIO_ACCOUNT_SID
      RAZORPAY_KEY_ID
    ]
    
    missing_vars = required_env_vars.select { |var| ENV[var].blank? }
    
    if missing_vars.any?
      raise "Missing required environment variables: #{missing_vars.join(', ')}"
    end
  end
end

Troubleshooting Environment Issues

Common Problems

  1. Database connection failed

    # Check DATABASE_URL format
    echo $DATABASE_URL
    
    # Test connection
    psql $DATABASE_URL
  2. Redis connection issues

    # Test Redis connection
    redis-cli -u $REDIS_URL ping
  3. External API failures

    # Check API credentials
    curl -u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN \
      https://api.twilio.com/2010-04-01/Accounts.json
  4. File upload issues

    # Test AWS S3 access
    aws s3 ls s3://$AWS_S3_BUCKET --region $AWS_REGION

Environment Debugging

# In Rails console
Rails.application.config_for(:database)
ENV.select { |k, v| k.start_with?('REDIS') }

Next Steps

On this page