Skip to content

Instantly share code, notes, and snippets.

@ChakshuGautam
Created December 15, 2025 10:56
Show Gist options
  • Select an option

  • Save ChakshuGautam/cfd4fc2beb1b9de7cfbd067ada4689e6 to your computer and use it in GitHub Desktop.

Select an option

Save ChakshuGautam/cfd4fc2beb1b9de7cfbd067ada4689e6 to your computer and use it in GitHub Desktop.
SDCRS Docker Compose Deployment - Hetzner Server (91.99.29.19)
# SDCRS Deployment Environment Variables
# ========================================
# Database Configuration
POSTGRES_USER=egov
POSTGRES_PASSWORD=egov_password_change_me
POSTGRES_DB=egov
# Kafka Configuration
KAFKA_BROKER=kafka:9092
# Elasticsearch Configuration
ELASTICSEARCH_HOST=elasticsearch
ELASTICSEARCH_PORT=9200
# Redis Configuration
REDIS_HOST=redis
REDIS_PORT=6379
# Tenant Configuration
TENANT_ID=dj
STATE_LEVEL_TENANT_ID=dj
# Service Host URLs (internal Docker network)
EGOV_MDMS_HOST=http://egov-mdms-service:8094
EGOV_IDGEN_HOST=http://egov-idgen:8088
EGOV_USER_HOST=http://egov-user:8107
EGOV_WORKFLOW_HOST=http://egov-workflow-v2:8109
EGOV_PERSISTER_HOST=http://egov-persister:8085
EGOV_INDEXER_HOST=http://egov-indexer:8086
EGOV_FILESTORE_HOST=http://egov-filestore:8083
EGOV_LOCALIZATION_HOST=http://egov-localization:8087
EGOV_ACCESSCONTROL_HOST=http://egov-accesscontrol:8090
# Custom Service URLs
SDCRS_HOST=http://sdcrs-services:8080
FRAUD_DETECTION_HOST=http://fraud-detection-service:8082
UPI_PAYOUT_HOST=http://upi-payout-adapter:8081
# Razorpay Configuration (UPI Payouts)
# IMPORTANT: Replace with actual Razorpay X credentials for production
RAZORPAY_KEY_ID=rzp_test_XXXXXXXXXX
RAZORPAY_KEY_SECRET=XXXXXXXXXXXXXXXXXXXX
RAZORPAY_ACCOUNT_NUMBER=XXXXXXXXXXX
RAZORPAY_WEBHOOK_SECRET=webhook_secret_change_me
# Payout Configuration
PAYOUT_AMOUNT=500
MONTHLY_CAP=5000
MAX_DAILY_REPORTS=5
# Fraud Detection Configuration
FRAUD_RISK_THRESHOLD=70
MAX_TIMESTAMP_AGE_HOURS=48
# File Store Configuration
FILESTORE_S3_BUCKET=sdcrs-filestore
FILESTORE_ALLOWED_EXTENSIONS=jpg,jpeg,png
# Server Configuration
SERVER_PORT_SDCRS=8080
SERVER_PORT_UPI=8081
SERVER_PORT_FRAUD=8082
# Logging
LOG_LEVEL=INFO
SPRING_PROFILES_ACTIVE=docker
# JWT Configuration (for user service)
JWT_SECRET=jwt_secret_key_change_in_production_must_be_long_enough
# Timezone
TZ=Africa/Djibouti
services:
postgres:
image: postgres:16-alpine
container_name: sdcrs-postgres
environment:
POSTGRES_USER: egov
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
POSTGRES_DB: egov
volumes:
- postgres_data:/var/lib/postgresql/data
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
ports:
- 5432:5432
healthcheck:
test:
- CMD-SHELL
- pg_isready -U egov
interval: 10s
timeout: 5s
retries: 5
networks:
- egov-network
redis:
image: redis:7-alpine
container_name: sdcrs-redis
ports:
- 6379:6379
healthcheck:
test:
- CMD
- redis-cli
- ping
interval: 10s
timeout: 5s
retries: 5
networks:
- egov-network
zookeeper:
image: confluentinc/cp-zookeeper:7.4.0
container_name: sdcrs-zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
healthcheck:
test:
- CMD
- nc
- -z
- localhost
- '2181'
interval: 10s
timeout: 5s
retries: 5
networks:
- egov-network
kafka:
image: confluentinc/cp-kafka:7.4.0
container_name: sdcrs-kafka
depends_on:
zookeeper:
condition: service_healthy
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'
ports:
- 9092:9092
healthcheck:
test:
- CMD
- kafka-broker-api-versions
- --bootstrap-server
- localhost:9092
interval: 10s
timeout: 10s
retries: 5
networks:
- egov-network
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.9
container_name: sdcrs-elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
- es_data:/usr/share/elasticsearch/data
ports:
- 9200:9200
healthcheck:
test:
- CMD-SHELL
- curl -f http://localhost:9200/_cluster/health || exit 1
interval: 30s
timeout: 10s
retries: 5
networks:
- egov-network
egov-enc-service:
build:
context: ./services/digit
dockerfile: egov-enc-service/Dockerfile
container_name: egov-enc-service
depends_on:
postgres:
condition: service_healthy
egov-mdms-service:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_URL: jdbc:postgresql://postgres:5432/egov
SPRING_FLYWAY_USER: egov
SPRING_FLYWAY_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_BASELINE_ON_MIGRATE: 'true'
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: 'false'
SERVER_PORT: 1234
MASTER_PASSWORD: asd@#$@$!132123
MASTER_SALT: qweasdzx
MASTER_INITIALVECTOR: qweasdzxqwea
MASTER_PASSWORD_PROVIDER: software
EGOV_MDMS_HOST: http://egov-mdms-service:8094
EGOV_STATE_LEVEL_TENANT_ID: ncr
STATE_LEVEL_TENANT_ID: ncr
ports:
- 1234:1234
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:1234/egov-enc-service/actuator/health
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
- egov-network
egov-mdms-service:
build:
context: ./services/digit
dockerfile: egov-mdms-service/Dockerfile
container_name: egov-mdms-service
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8094
EGOV_MDMS_CONF_PATH: /mdms-data
volumes:
- ./configs/mdms:/mdms-data:ro
ports:
- 8094:8094
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8094/egov-mdms-service/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-idgen:
build:
context: ./services/digit
dockerfile: egov-idgen/Dockerfile
container_name: egov-idgen
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8088
SPRING_FLYWAY_BASELINE_ON_MIGRATE: 'true'
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: 'false'
SPRING_FLYWAY_ENABLED: 'false'
ports:
- 8088:8088
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8088/egov-idgen/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-user:
build:
context: ./services/digit
dockerfile: egov-user/Dockerfile
container_name: egov-user
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
redis:
condition: service_healthy
egov-enc-service:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
SERVER_PORT: 8107
EGOV_MDMS_HOST: http://egov-mdms-service:8094
MDMS_HOST: http://egov-mdms-service:8094
EGOV_OTP_HOST: http://egov-user:8107
EGOV_ENC_HOST: http://egov-enc-service:1234
EGOV_USER_HOST: http://egov-user:8107
EGOV_IDGEN_HOST: http://egov-idgen:8088
EGOV_STATE_LEVEL_TENANT_ID: ncr
STATE_LEVEL_TENANT_ID: ncr
ports:
- 8107:8107
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8107/user/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-workflow-v2:
build:
context: ./services/digit
dockerfile: egov-workflow-v2/Dockerfile
container_name: egov-workflow-v2
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8109
EGOV_MDMS_HOST: http://egov-mdms-service:8094/
EGOV_USER_HOST: http://egov-user:8107/
STATE_LEVEL_TENANT_ID: ncr
ports:
- 8109:8109
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8109/egov-workflow-v2/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-filestore:
build:
context: ./services/digit
dockerfile: egov-filestore/Dockerfile
container_name: egov-filestore
depends_on:
postgres:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_URL: jdbc:postgresql://postgres:5432/egov
SPRING_FLYWAY_USER: egov
SPRING_FLYWAY_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_BASELINE_ON_MIGRATE: 'true'
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: 'false'
SERVER_PORT: 8083
FILE_STORAGE_MOUNT_PATH: /filestore
ALLOWED_FORMATS_MAP: '{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","pdf":"application/pdf"}'
ALLOWED_FILE_SIZE_MAP: '{"jpg":10,"jpeg":10,"png":10,"pdf":5}'
volumes:
- filestore_data:/filestore
ports:
- 8083:8083
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8083/filestore/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-localization:
build:
context: ./services/digit
dockerfile: egov-localization/Dockerfile
container_name: egov-localization
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
redis:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_URL: jdbc:postgresql://postgres:5432/egov
SPRING_FLYWAY_USER: egov
SPRING_FLYWAY_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_BASELINE_ON_MIGRATE: 'true'
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: 'false'
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
SERVER_PORT: 8096
ports:
- 8096:8096
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8096/localization/actuator/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-location:
build:
context: ./services/digit
dockerfile: egov-location/Dockerfile
container_name: egov-location
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_URL: jdbc:postgresql://postgres:5432/egov
SPRING_FLYWAY_USER: egov
SPRING_FLYWAY_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_BASELINE_ON_MIGRATE: 'true'
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: 'false'
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8084
EGOV_MDMS_HOST: http://egov-mdms-service:8094/
SPRING_FLYWAY_ENABLED: 'false'
ports:
- 8084:8084
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8084/egov-location/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-accesscontrol:
build:
context: ./services/digit
dockerfile: egov-accesscontrol/Dockerfile
container_name: egov-accesscontrol
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8090
EGOV_MDMS_HOST: http://egov-mdms-service:8094/
ports:
- 8090:8090
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8090/access/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-persister:
build:
context: ./services/digit
dockerfile: egov-persister/Dockerfile
container_name: egov-persister
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8091
EGOV_PERSIST_YML_REPO_PATH: /persister-config/
volumes:
- ./configs/persister:/persister-config:ro
ports:
- 8091:8091
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8091/common-persist/actuator/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
egov-indexer:
build:
context: ./services/digit
dockerfile: egov-indexer/Dockerfile
container_name: egov-indexer
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
elasticsearch:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_URL: jdbc:postgresql://postgres:5432/egov
SPRING_FLYWAY_USER: egov
SPRING_FLYWAY_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_FLYWAY_BASELINE_ON_MIGRATE: 'true'
SPRING_FLYWAY_VALIDATE_ON_MIGRATE: 'false'
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8095
EGOV_INFRA_INDEXER_HOST: http://elasticsearch:9200
EGOV_INDEXER_YML_REPO_PATH: /indexer-config
volumes:
- ./configs/indexer:/indexer-config:ro
ports:
- 8095:8095
healthcheck:
test:
- CMD
- curl
- -sf
- http://localhost:8095/egov-indexer/actuator/health
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
sdcrs-services:
build:
context: ./services/sdcrs-services
dockerfile: Dockerfile
container_name: sdcrs-services
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
egov-mdms-service:
condition: service_healthy
egov-idgen:
condition: service_healthy
egov-user:
condition: service_healthy
egov-workflow-v2:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8080
EGOV_USER_HOST: http://egov-user:8107/
EGOV_WORKFLOW_HOST: http://egov-workflow-v2:8109/
EGOV_MDMS_HOST: http://egov-mdms-service:8094/
EGOV_IDGEN_HOST: http://egov-idgen:8088/
EGOV_STATE_LEVEL_TENANT_ID: ncr
STATE_LEVEL_TENANT_ID: ncr
EGOV_FILESTORE_HOST: http://egov-filestore:8083/
EGOV_LOCATION_HOST: http://egov-location:8084/
ports:
- 8080:8080
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:8080/sdcrs-services/health
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
- egov-network
upi-payout-adapter:
build:
context: ./services/upi-payout-adapter
dockerfile: Dockerfile
container_name: upi-payout-adapter
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8081
RAZORPAY_API_KEY: ${RAZORPAY_API_KEY:-rzp_test_xxxx}
RAZORPAY_API_SECRET: ${RAZORPAY_API_SECRET:-xxxx}
RAZORPAY_ACCOUNT_NUMBER: ${RAZORPAY_ACCOUNT_NUMBER:-2323230012345678}
RAZORPAY_WEBHOOK_SECRET: ${RAZORPAY_WEBHOOK_SECRET:-}
ports:
- 8081:8081
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:8081/upi-payout-adapter/health
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
- egov-network
fraud-detection-service:
build:
context: ./services/fraud-detection-service
dockerfile: Dockerfile
container_name: fraud-detection-service
depends_on:
postgres:
condition: service_healthy
kafka:
condition: service_healthy
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/egov
SPRING_DATASOURCE_USERNAME: egov
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD:-egov123}
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
SERVER_PORT: 8082
ports:
- 8082:8082
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:8082/fraud-detection-service/health
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
networks:
- egov-network
sdcrs-frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
NEXT_PUBLIC_API_BASE_URL: http://91.99.29.19
container_name: sdcrs-frontend
environment:
NODE_ENV: production
NEXT_PUBLIC_API_BASE_URL: http://91.99.29.19
USER_SERVICE_URL: http://egov-user:8107
WORKFLOW_SERVICE_URL: http://egov-workflow-v2:8109
SDCRS_SERVICE_URL: http://sdcrs-services:8080
FILESTORE_SERVICE_URL: http://egov-filestore:8083
MDMS_SERVICE_URL: http://egov-mdms-service:8094
FRAUD_SERVICE_URL: http://fraud-detection-service:8096
ports:
- 3000:3000
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:3000/
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
networks:
- egov-network
networks:
egov-network:
driver: bridge
volumes:
postgres_data: null
es_data: null
filestore_data: null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment