280 lines
7.1 KiB
Plaintext
280 lines
7.1 KiB
Plaintext
{
|
|
"listen": ":6060",
|
|
"api_path": "/",
|
|
"cache_control": 39600,
|
|
"static_mount": "/",
|
|
"grpc_listen": ":16060",
|
|
"grpc_keepalive_enabled": true,
|
|
"api_key_salt": "$API_KEY_SALT",
|
|
"max_message_size": 4194304,
|
|
"max_subscriber_count": 128,
|
|
"max_tag_count": 16,
|
|
"expvar": "/stats/expvar/",
|
|
"server_status": "$SERVER_STATUS_PATH",
|
|
"use_x_forwarded_for": true,
|
|
"default_country_code": "$DEFAULT_COUNTRY_CODE",
|
|
|
|
"media": {
|
|
"use_handler": "$MEDIA_HANDLER",
|
|
"max_size": 33554432,
|
|
"gc_period": 60,
|
|
"gc_block_size": 100,
|
|
"handlers": {
|
|
"fs": {
|
|
"upload_dir": "uploads",
|
|
"cache_control": "max-age=86400",
|
|
"cors_origins": $FS_CORS_ORIGINS
|
|
},
|
|
"s3":{
|
|
"access_key_id": "$AWS_ACCESS_KEY_ID",
|
|
"secret_access_key": "$AWS_SECRET_ACCESS_KEY",
|
|
"region": "$AWS_REGION",
|
|
"bucket": "$AWS_S3_BUCKET",
|
|
"endpoint": "$AWS_S3_ENDPOINT",
|
|
"presign_ttl": 3600,
|
|
"cache_control": "max-age=86400",
|
|
"cors_origins": $AWS_CORS_ORIGINS
|
|
}
|
|
}
|
|
},
|
|
|
|
"tls": {
|
|
"enabled": $TLS_ENABLED,
|
|
"http_redirect": ":80",
|
|
"strict_max_age": 604800,
|
|
"autocert": {
|
|
"cache": "/etc/letsencrypt/live/$TLS_DOMAIN_NAME",
|
|
"email": "$TLS_CONTACT_ADDRESS",
|
|
"domains": ["$TLS_DOMAIN_NAME"]
|
|
}
|
|
},
|
|
|
|
"auth_config": {
|
|
"logical_names": [],
|
|
"basic": {
|
|
"add_to_tags": true,
|
|
"min_login_length": 3,
|
|
"min_password_length": 6
|
|
},
|
|
"token": {
|
|
"expire_in": 1209600,
|
|
"serial_num": 1,
|
|
"key": "$AUTH_TOKEN_KEY"
|
|
},
|
|
"code": {
|
|
"expire_in": 900,
|
|
"max_retries": 3,
|
|
"code_length": 6
|
|
}
|
|
},
|
|
|
|
"store_config": {
|
|
"uid_key": "$UID_ENCRYPTION_KEY",
|
|
"max_results": 1024,
|
|
"use_adapter": "$STORE_USE_ADAPTER",
|
|
"adapters": {
|
|
"mysql": {
|
|
"database": "tinode",
|
|
"dsn": "$MYSQL_DSN",
|
|
"max_open_conns": 64,
|
|
"max_idle_conns": 64,
|
|
"conn_max_lifetime": 60,
|
|
"sql_timeout": 10,
|
|
"tenant_registry_db": "$TENANT_REGISTRY_DB",
|
|
"tenant_db_routing": true
|
|
},
|
|
"postgres": {
|
|
"database": "tinode",
|
|
"dsn": "$POSTGRES_DSN"
|
|
},
|
|
"rethinkdb": {
|
|
"database": "tinode",
|
|
"addresses": "rethinkdb"
|
|
},
|
|
"mongodb": {
|
|
"database": "tinode",
|
|
"addresses": "mongodb",
|
|
"replica_set": "rs0"
|
|
}
|
|
},
|
|
"redis": {
|
|
"addr": "$REDIS_ADDR",
|
|
"username": "$REDIS_USERNAME",
|
|
"password": "$REDIS_PASSWORD",
|
|
"db": $REDIS_DB,
|
|
"key_prefix": "$REDIS_KEY_PREFIX",
|
|
"dial_timeout_ms": $REDIS_DIAL_TIMEOUT_MS,
|
|
"read_timeout_ms": $REDIS_READ_TIMEOUT_MS,
|
|
"write_timeout_ms": $REDIS_WRITE_TIMEOUT_MS,
|
|
"pending_ttl_seconds": $REDIS_PENDING_TTL_SECONDS,
|
|
"done_ttl_seconds": $REDIS_DONE_TTL_SECONDS,
|
|
"failed_ttl_seconds": $REDIS_FAILED_TTL_SECONDS,
|
|
"hot_message_ttl_seconds": $REDIS_HOT_MESSAGE_TTL_SECONDS,
|
|
"presence_ttl_seconds": $REDIS_PRESENCE_TTL_SECONDS,
|
|
"cache_ttl_seconds": $REDIS_CACHE_TTL_SECONDS,
|
|
"short_state_ttl_seconds": $REDIS_SHORT_STATE_TTL_SECONDS,
|
|
"group_fanout_enabled": $REDIS_GROUP_FANOUT_ENABLED
|
|
}
|
|
},
|
|
|
|
"kafka": {
|
|
"enabled": $KAFKA_ENABLED,
|
|
"brokers": $KAFKA_BROKERS_JSON,
|
|
"client_id": "$KAFKA_CLIENT_ID",
|
|
"consumer_group": "$KAFKA_CONSUMER_GROUP",
|
|
"dial_timeout_ms": $KAFKA_DIAL_TIMEOUT_MS,
|
|
"write_timeout_ms": $KAFKA_WRITE_TIMEOUT_MS,
|
|
"read_timeout_ms": $KAFKA_READ_TIMEOUT_MS,
|
|
"required_acks": $KAFKA_REQUIRED_ACKS,
|
|
"allow_auto_topic_creation": $KAFKA_ALLOW_AUTO_TOPIC_CREATION,
|
|
"tls_enabled": $KAFKA_TLS_ENABLED,
|
|
"max_retry_count": $KAFKA_MAX_RETRY_COUNT,
|
|
"retry_backoff_ms": $KAFKA_RETRY_BACKOFF_MS,
|
|
"dead_letter_retention_seconds": $KAFKA_DEAD_LETTER_RETENTION_SECONDS,
|
|
"topics": {
|
|
"admin_command": "$KAFKA_TOPIC_ADMIN_COMMAND",
|
|
"admin_command_result": "$KAFKA_TOPIC_ADMIN_COMMAND_RESULT",
|
|
"config_event": "$KAFKA_TOPIC_CONFIG_EVENT",
|
|
"business_event": "$KAFKA_TOPIC_BUSINESS_EVENT",
|
|
"message_persist": "$KAFKA_TOPIC_MESSAGE_PERSIST",
|
|
"message_push": "$KAFKA_TOPIC_MESSAGE_PUSH",
|
|
"file_security": "$KAFKA_TOPIC_FILE_SECURITY",
|
|
"file_lifecycle": "$KAFKA_TOPIC_FILE_LIFECYCLE",
|
|
"workbench_event": "$KAFKA_TOPIC_WORKBENCH_EVENT",
|
|
"cache_invalidate": "$KAFKA_TOPIC_CACHE_INVALIDATE",
|
|
"audit_event": "$KAFKA_TOPIC_AUDIT_EVENT",
|
|
"dead_letter": "$KAFKA_TOPIC_DEAD_LETTER"
|
|
}
|
|
},
|
|
"internal_api": {
|
|
"enabled": $INTERNAL_API_ENABLED,
|
|
"time_window_seconds": $INTERNAL_API_TIME_WINDOW_SECONDS,
|
|
"services": {
|
|
"$INTERNAL_API_HOTGO_SERVICE_NAME": {
|
|
"secret": "$INTERNAL_API_HOTGO_SECRET",
|
|
"allow": ["admin_query"]
|
|
}
|
|
}
|
|
},
|
|
"admin_internal_api": {
|
|
"enabled": $ADMIN_INTERNAL_API_ENABLED,
|
|
"base_url": "$ADMIN_INTERNAL_API_BASE_URL",
|
|
"service_name": "$ADMIN_INTERNAL_API_SERVICE_NAME",
|
|
"secret": "$ADMIN_INTERNAL_API_SECRET",
|
|
"timeout_ms": $ADMIN_INTERNAL_API_TIMEOUT_MS
|
|
},
|
|
|
|
"acc_validation": {
|
|
"email": {
|
|
"add_to_tags": true,
|
|
"required": [$EMAIL_VERIFICATION_REQUIRED],
|
|
"config": {
|
|
"host_url": "$SMTP_HOST_URL",
|
|
"smtp_server": "$SMTP_SERVER",
|
|
"smtp_port": "$SMTP_PORT",
|
|
"sender": "$SMTP_SENDER",
|
|
"login": "$SMTP_LOGIN",
|
|
"sender_password": "$SMTP_PASSWORD",
|
|
"auth_mechanism": "$SMTP_AUTH_MECHANISM",
|
|
"smtp_helo_host": "$SMTP_HELO_HOST",
|
|
"languages": ["en", "es", "fr", "ru", "vi", "zh"],
|
|
"validation_templ": "./templ/email-validation-{{.Language}}.templ",
|
|
"reset_secret_templ": "./templ/email-password-reset-{{.Language}}.templ",
|
|
"max_retries": 3,
|
|
"domains": [$SMTP_DOMAINS],
|
|
"debug_response": "$DEBUG_EMAIL_VERIFICATION_CODE"
|
|
}
|
|
},
|
|
|
|
"tel": {
|
|
"add_to_tags": true,
|
|
"config": {
|
|
"host_url": "$TEL_HOST_URL",
|
|
"languages": ["en", "es", "fr", "pt", "ru", "vi", "zh"],
|
|
"sender": "$TEL_SENDER",
|
|
"universal_templ": "./templ/sms-universal-{{.Language}}.templ",
|
|
"max_retries": 3,
|
|
"debug_response": "$DEBUG_TEL_VERIFICATION_CODE"
|
|
}
|
|
}
|
|
},
|
|
|
|
"acc_gc_config": {
|
|
"enabled": $ACC_GC_ENABLED,
|
|
"gc_period": 3600,
|
|
"gc_block_size": 10,
|
|
"gc_min_account_age": 48
|
|
},
|
|
|
|
"push": [
|
|
{
|
|
"name":"tnpg",
|
|
"config": {
|
|
"enabled": $TNPG_PUSH_ENABLED,
|
|
"token": "$TNPG_AUTH_TOKEN",
|
|
"org": "$TNPG_ORG"
|
|
}
|
|
},
|
|
{
|
|
"name":"fcm",
|
|
"config": {
|
|
"enabled": $FCM_PUSH_ENABLED,
|
|
"project_id": "$FCM_PROJECT_ID",
|
|
"credentials_file": "$FCM_CRED_FILE",
|
|
"time_to_live": 3600,
|
|
"android": {
|
|
"enabled": $FCM_INCLUDE_ANDROID_NOTIFICATION,
|
|
"icon": "ic_logo_push",
|
|
"icon_color": "#3949AB",
|
|
"click_action": ".MessageActivity",
|
|
"msg": {
|
|
"title_loc_key": "new_message",
|
|
"title": "",
|
|
"body_loc_key": "",
|
|
"body": ""
|
|
},
|
|
"sub": {
|
|
"title_loc_key": "new_chat",
|
|
"body_loc_key": ""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
|
|
"webrtc": {
|
|
"enabled": $WEBRTC_ENABLED,
|
|
"call_establishment_timeout": 30,
|
|
"ice_servers_file": "$ICE_SERVERS_FILE"
|
|
},
|
|
|
|
"cluster_config": {
|
|
"self": "",
|
|
"nodes": [
|
|
{"name": "tinode-0", "addr": "tinode-0:12000"},
|
|
{"name": "tinode-1", "addr": "tinode-1:12001"},
|
|
{"name": "tinode-2", "addr": "tinode-2:12002"}
|
|
],
|
|
"failover": {
|
|
"enabled": true,
|
|
"heartbeat": 100,
|
|
"vote_after": 8,
|
|
"node_fail_after": 16
|
|
}
|
|
},
|
|
|
|
"plugins": [
|
|
{
|
|
"enabled": $PLUGIN_PYTHON_CHAT_BOT_ENABLED,
|
|
"name": "python_chat_bot",
|
|
"timeout": 20000,
|
|
"filters": {
|
|
"account": "C"
|
|
},
|
|
"failure_code": 0,
|
|
"failure_text": null,
|
|
"service_addr": "tcp://localhost:40051"
|
|
}
|
|
]
|
|
}
|