mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
475 lines
26 KiB
YAML
475 lines
26 KiB
YAML
{{- if not .Values.existingConfigMap }}
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: {{ include "synctv.configMapName" . }}
|
|
labels:
|
|
{{- include "synctv.labels" . | nindent 4 }}
|
|
{{- $connectionLimits := .Values.config.connectionLimits | default dict }}
|
|
{{- $messagingRateLimits := .Values.config.messagingRateLimits | default dict }}
|
|
{{- $requestRateLimits := .Values.config.requestRateLimits | default dict }}
|
|
{{- $passwordComplexity := .Values.config.passwordComplexity | default dict }}
|
|
{{- $bufferSizes := .Values.config.bufferSizes | default dict }}
|
|
{{- $mediaProviders := .Values.config.mediaProviders | default dict }}
|
|
{{- $mediaProviderAlist := $mediaProviders.alist | default dict }}
|
|
{{- $mediaProviderBilibili := $mediaProviders.bilibili | default dict }}
|
|
{{- $mediaProviderEmby := $mediaProviders.emby | default dict }}
|
|
{{- $webauthn := .Values.config.webauthn | default dict }}
|
|
{{- $cache := .Values.config.cache | default dict }}
|
|
{{- $proxySliceCache := .Values.config.proxySliceCache | default dict }}
|
|
{{- $fileStorage := .Values.config.fileStorage | default dict }}
|
|
{{- $security := .Values.config.security | default dict }}
|
|
{{- $ssrf := $security.ssrf | default dict }}
|
|
{{- $time := .Values.config.time | default dict }}
|
|
{{- $clockSync := $time.clockSync | default dict }}
|
|
{{- $clockSyncProvider := $clockSync.provider | default dict }}
|
|
{{- $livestream := .Values.config.livestream | default dict }}
|
|
{{- $hlsStorage := $livestream.hlsStorage | default dict }}
|
|
{{- $hlsStorageType := $hlsStorage.type | default "memory" }}
|
|
data:
|
|
synctv.yaml: |
|
|
{{ if .Values.config.dataDir }}
|
|
data_dir: {{ .Values.config.dataDir | quote }}
|
|
{{ end }}
|
|
|
|
time:
|
|
timezone: {{ $time.timezone | default "" | quote }}
|
|
clock_sync:
|
|
enabled: {{ $clockSync.enabled | default false }}
|
|
provider:
|
|
type: {{ $clockSyncProvider.type | default "sntp" | quote }}
|
|
servers:
|
|
{{- range ($clockSyncProvider.servers | default (list "time.cloudflare.com:123" "pool.ntp.org:123")) }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
interval_seconds: {{ $clockSyncProvider.intervalSeconds | default 300 }}
|
|
timeout_millis: {{ $clockSyncProvider.timeoutMillis | default 1000 }}
|
|
|
|
logging:
|
|
level: {{ .Values.config.logging.level | default "info" | quote }}
|
|
format: {{ .Values.config.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.config.logging.output }}
|
|
output:
|
|
type: {{ .Values.config.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.config.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.config.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.config.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.config.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.config.logging.color | default "auto" | quote }}
|
|
|
|
server:
|
|
host: {{ .Values.config.server.host | quote }}
|
|
port: {{ .Values.config.server.port }}
|
|
project_url: {{ .Values.config.server.projectUrl | default "https://github.com/synctv-org/synctv" | quote }}
|
|
enable_reflection: {{ .Values.config.server.enableReflection | default false }}
|
|
shutdown_drain_timeout_seconds: {{ .Values.config.server.shutdownDrainTimeoutSeconds | default 30 }}
|
|
grpc_max_message_size_bytes: {{ printf "%d" (int64 (.Values.config.server.grpcMaxMessageSizeBytes | default 16777216)) }}
|
|
grpc_compression_enabled: {{ if hasKey .Values.config.server "grpcCompressionEnabled" }}{{ .Values.config.server.grpcCompressionEnabled }}{{ else }}true{{ end }}
|
|
logging:
|
|
level: {{ .Values.config.server.logging.level | default "info" | quote }}
|
|
format: {{ .Values.config.server.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.config.server.logging.output }}
|
|
output:
|
|
type: {{ .Values.config.server.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.config.server.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.config.server.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.config.server.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.config.server.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.config.server.logging.color | default "auto" | quote }}
|
|
{{- if .Values.config.server.trustedProxies }}
|
|
trusted_proxies:
|
|
{{- range .Values.config.server.trustedProxies }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- if .Values.config.server.corsAllowedOrigins }}
|
|
cors_allowed_origins:
|
|
{{- range .Values.config.server.corsAllowedOrigins }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
health:
|
|
enabled: {{ if hasKey .Values.config.health "enabled" }}{{ .Values.config.health.enabled }}{{ else }}true{{ end }}
|
|
host: {{ .Values.config.health.host | default "0.0.0.0" | quote }}
|
|
port: {{ .Values.config.health.port | default 8081 }}
|
|
logging:
|
|
level: {{ .Values.config.health.logging.level | default "info" | quote }}
|
|
format: {{ .Values.config.health.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.config.health.logging.output }}
|
|
output:
|
|
type: {{ .Values.config.health.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.config.health.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.config.health.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.config.health.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.config.health.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.config.health.logging.color | default "auto" | quote }}
|
|
{{- if and .Values.config.publicIds .Values.config.publicIds.sqids .Values.config.publicIds.sqids.enabled }}
|
|
public_ids:
|
|
sqids:
|
|
{{- if .Values.config.publicIds.sqids.alphabet }}
|
|
alphabet: {{ .Values.config.publicIds.sqids.alphabet | quote }}
|
|
{{- else }}
|
|
alphabet: null
|
|
{{- end }}
|
|
min_length: {{ .Values.config.publicIds.sqids.minLength | default 12 }}
|
|
{{- end }}
|
|
|
|
security:
|
|
ssrf:
|
|
enabled: {{ $ssrf.enabled | default false }}
|
|
allow_private_network_targets: {{ $ssrf.allowPrivateNetworkTargets | default false }}
|
|
allowed_hosts:{{ if $ssrf.allowedHosts }}
|
|
{{- range $ssrf.allowedHosts }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
{{- else }} []
|
|
{{- end }}
|
|
allowed_ip_ranges:{{ if $ssrf.allowedIpRanges }}
|
|
{{- range $ssrf.allowedIpRanges }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
{{- else }} []
|
|
{{- end }}
|
|
|
|
metrics:
|
|
enabled: {{ .Values.metrics.enabled | default false }}
|
|
host: {{ .Values.metrics.host | default .Values.config.server.host | quote }}
|
|
port: {{ .Values.metrics.port | default 9090 }}
|
|
tls:
|
|
enabled: {{ .Values.metrics.tls.enabled | default false }}
|
|
{{- if .Values.metrics.tls.enabled }}
|
|
cert_path: "/etc/synctv/metrics/tls/tls.crt"
|
|
key_path: "/etc/synctv/metrics/tls/tls.key"
|
|
{{- end }}
|
|
auth:
|
|
mode: {{ .Values.metrics.auth.mode | default "bearer_token" | quote }}
|
|
{{- if eq (.Values.metrics.auth.mode | default "bearer_token") "basic" }}
|
|
basic_username: {{ .Values.secrets.metrics.basicUsername | default "metrics" | quote }}
|
|
{{- end }}
|
|
{{- if eq (.Values.metrics.auth.mode | default "bearer_token") "kubernetes" }}
|
|
kubernetes:
|
|
audience: {{ .Values.metrics.auth.kubernetes.audience | default "" | quote }}
|
|
authentication_cache_ttl_seconds: {{ .Values.metrics.auth.kubernetes.authenticationCacheTtlSeconds | default 60 }}
|
|
authorization_cache_ttl_seconds: {{ .Values.metrics.auth.kubernetes.authorizationCacheTtlSeconds | default 60 }}
|
|
{{- end }}
|
|
logging:
|
|
level: {{ .Values.metrics.logging.level | default "warn" | quote }}
|
|
format: {{ .Values.metrics.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.metrics.logging.output }}
|
|
output:
|
|
type: {{ .Values.metrics.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.metrics.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.metrics.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.metrics.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.metrics.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.metrics.logging.color | default "auto" | quote }}
|
|
|
|
management:
|
|
enabled: {{ .Values.config.management.enabled }}
|
|
transport: {{ .Values.config.management.transport | default "unix" | quote }}
|
|
unix_socket_path: {{ .Values.config.management.unixSocketPath | default "/run/synctv/synctv.sock" | quote }}
|
|
port: {{ .Values.config.management.port | default 50052 }}
|
|
enable_reflection: {{ .Values.config.management.enableReflection | default false }}
|
|
logging:
|
|
level: {{ .Values.config.management.logging.level | default "info" | quote }}
|
|
format: {{ .Values.config.management.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.config.management.logging.output }}
|
|
output:
|
|
type: {{ .Values.config.management.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.config.management.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.config.management.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.config.management.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.config.management.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.config.management.logging.color | default "auto" | quote }}
|
|
|
|
database:
|
|
max_connections: {{ .Values.config.database.maxConnections | default 20 }}
|
|
min_connections: {{ .Values.config.database.minConnections | default 5 }}
|
|
connect_timeout_seconds: {{ .Values.config.database.connectTimeoutSeconds | default 10 }}
|
|
idle_timeout_seconds: {{ .Values.config.database.idleTimeoutSeconds | default 600 }}
|
|
max_lifetime_seconds: {{ .Values.config.database.maxLifetimeSeconds | default 1800 }}
|
|
|
|
redis:
|
|
connect_timeout_seconds: {{ .Values.config.redis.connectTimeoutSeconds | default 5 }}
|
|
response_timeout_seconds: {{ .Values.config.redis.responseTimeoutSeconds | default 5 }}
|
|
pipeline_buffer_size: {{ .Values.config.redis.pipelineBufferSize | default 512 }}
|
|
key_prefix: {{ .Values.config.redis.keyPrefix | default "synctv:" | quote }}
|
|
deployment_mode: {{ .Values.config.redis.deploymentMode | default "standalone" | quote }}
|
|
{{- if .Values.config.redis.sentinelMasterName }}
|
|
sentinel_master_name: {{ .Values.config.redis.sentinelMasterName | quote }}
|
|
{{- end }}
|
|
{{- if .Values.config.redis.sentinelAddresses }}
|
|
sentinel_addresses:
|
|
{{- range .Values.config.redis.sentinelAddresses }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
jwt:
|
|
access_token_duration_hours: {{ .Values.config.jwt.accessTokenDurationHours | default 1 }}
|
|
refresh_token_duration_days: {{ .Values.config.jwt.refreshTokenDurationDays | default 30 }}
|
|
guest_token_duration_hours: {{ .Values.config.jwt.guestTokenDurationHours | default 4 }}
|
|
clock_skew_leeway_secs: {{ .Values.config.jwt.clockSkewLeewaySecs | default 60 }}
|
|
|
|
cache:
|
|
l1_capacity: {{ $cache.l1Capacity | default 5000 }}
|
|
l1_ttl_seconds: {{ $cache.l1TtlSeconds | default 300 }}
|
|
l2_ttl_seconds: {{ $cache.l2TtlSeconds | default 300 }}
|
|
username_cache_capacity: {{ $cache.usernameCacheCapacity | default 10000 }}
|
|
username_cache_ttl_seconds: {{ $cache.usernameCacheTtlSeconds | default 3600 }}
|
|
|
|
proxy_slice_cache:
|
|
enabled: {{ if hasKey $proxySliceCache "enabled" }}{{ $proxySliceCache.enabled }}{{ else }}true{{ end }}
|
|
slice_size_bytes: {{ printf "%d" (int64 ($proxySliceCache.sliceSizeBytes | default 2097152)) }}
|
|
max_cache_size_bytes: {{ printf "%d" (int64 ($proxySliceCache.maxCacheSizeBytes | default 536870912)) }}
|
|
segment_ttl_seconds: {{ $proxySliceCache.segmentTtlSeconds | default 300 }}
|
|
stale_max_age_seconds: {{ $proxySliceCache.staleMaxAgeSeconds | default 60 }}
|
|
stale_while_revalidate: {{ if hasKey $proxySliceCache "staleWhileRevalidate" }}{{ $proxySliceCache.staleWhileRevalidate }}{{ else }}true{{ end }}
|
|
file_backend_enabled: {{ $proxySliceCache.fileBackendEnabled | default false }}
|
|
{{- if $proxySliceCache.fileCacheDir }}
|
|
file_cache_dir: {{ $proxySliceCache.fileCacheDir | quote }}
|
|
{{- end }}
|
|
eviction_interval_seconds: {{ $proxySliceCache.evictionIntervalSeconds | default 60 }}
|
|
watermark_ratio: {{ $proxySliceCache.watermarkRatio | default 0.875 }}
|
|
|
|
livestream:
|
|
rtmp_port: {{ .Values.config.livestream.rtmpPort }}
|
|
public_rtmp_host: {{ .Values.config.livestream.publicRtmpHost | default "" | quote }}
|
|
logging:
|
|
level: {{ $livestream.logging.level | default "info" | quote }}
|
|
format: {{ $livestream.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" $livestream.logging.output }}
|
|
output:
|
|
type: {{ $livestream.logging.output.type | default "file" | quote }}
|
|
path: {{ $livestream.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ $livestream.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ $livestream.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ $livestream.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ $livestream.logging.color | default "auto" | quote }}
|
|
gop_cache_size: {{ $livestream.gopCacheSize }}
|
|
stream_timeout_seconds: {{ $livestream.streamTimeoutSeconds }}
|
|
cleanup_check_interval_seconds: {{ $livestream.cleanupCheckIntervalSeconds }}
|
|
pull_max_retries: {{ $livestream.pullMaxRetries | default 10 }}
|
|
pull_initial_backoff_ms: {{ $livestream.pullInitialBackoffMs | default 1000 }}
|
|
pull_max_backoff_ms: {{ $livestream.pullMaxBackoffMs | default 30000 }}
|
|
max_flv_tag_size_bytes: {{ printf "%d" (int64 ($livestream.maxFlvTagSizeBytes | default 10485760)) }}
|
|
gop_cache_max_memory_mb: {{ printf "%d" (int64 ($livestream.gopCacheMaxMemoryMb | default 100)) }}
|
|
hls_storage:
|
|
type: {{ $hlsStorageType | quote }}
|
|
{{ if eq $hlsStorageType "memory" }}
|
|
memory_max_mb: {{ printf "%d" (int64 ($hlsStorage.memoryMaxMb | default 0)) }}
|
|
{{ end }}
|
|
{{ if or (eq $hlsStorageType "file") (eq $hlsStorageType "shared_file") }}
|
|
path: {{ $hlsStorage.path | default "" | quote }}
|
|
{{ end }}
|
|
{{ if eq $hlsStorageType "s3" }}
|
|
endpoint: {{ $hlsStorage.endpoint | default "" | quote }}
|
|
bucket: {{ $hlsStorage.bucket | default "" | quote }}
|
|
{{ if $hlsStorage.region }}
|
|
region: {{ $hlsStorage.region | quote }}
|
|
{{ else }}
|
|
region: null
|
|
{{ end }}
|
|
base_path: {{ $hlsStorage.basePath | default "hls/" | quote }}
|
|
{{ end }}
|
|
flv_max_connection_duration_seconds: {{ $livestream.flvMaxConnectionDurationSeconds | default 86400 }}
|
|
flv_write_timeout_seconds: {{ $livestream.flvWriteTimeoutSeconds | default 30 }}
|
|
|
|
file_storage:
|
|
default_backend: {{ $fileStorage.defaultBackend | default "disabled" | quote }}
|
|
chat_attachments_backend: {{ $fileStorage.chatAttachmentsBackend | default "" | quote }}
|
|
user_avatars_backend: {{ $fileStorage.userAvatarsBackend | default "" | quote }}
|
|
media_covers_backend: {{ $fileStorage.mediaCoversBackend | default "" | quote }}
|
|
room_covers_backend: {{ $fileStorage.roomCoversBackend | default "" | quote }}
|
|
playlist_covers_backend: {{ $fileStorage.playlistCoversBackend | default "" | quote }}
|
|
upload_token_secret: ""
|
|
unreferenced_object_retention_seconds: {{ $fileStorage.unreferencedObjectRetentionSeconds | default 86400 }}
|
|
{{- $fileStorageBackends := $fileStorage.backends | default dict }}
|
|
{{- if $fileStorageBackends }}
|
|
backends:
|
|
{{- range $name, $backend := $fileStorageBackends }}
|
|
{{- $backendType := index $backend "type" | default "disabled" }}
|
|
{{ $name }}:
|
|
type: {{ $backendType | quote }}
|
|
{{ if eq $backendType "database" }}
|
|
compression: {{ $backend.compression | default "zstd" | quote }}
|
|
compression_min_size_bytes: {{ $backend.compressionMinSizeBytes | default 4096 }}
|
|
compression_min_savings_percent: {{ $backend.compressionMinSavingsPercent | default 10 }}
|
|
{{ end }}
|
|
{{ if eq $backendType "s3" }}
|
|
endpoint: {{ $backend.endpoint | default "" | quote }}
|
|
{{ if $backend.accessKeyIdFile }}
|
|
access_key_id_file: {{ $backend.accessKeyIdFile | quote }}
|
|
{{ else }}
|
|
access_key_id: {{ $backend.accessKeyId | default "" | quote }}
|
|
{{ end }}
|
|
{{ if $backend.secretAccessKeyFile }}
|
|
secret_access_key_file: {{ $backend.secretAccessKeyFile | quote }}
|
|
{{ else }}
|
|
secret_access_key: {{ $backend.secretAccessKey | default "" | quote }}
|
|
{{ end }}
|
|
bucket: {{ $backend.bucket | default "" | quote }}
|
|
region: {{ $backend.region | default "auto" | quote }}
|
|
base_path: {{ $backend.basePath | default "files/" | quote }}
|
|
public_base_url: {{ $backend.publicBaseUrl | default "" | quote }}
|
|
upload_expires_seconds: {{ $backend.uploadExpiresSeconds | default 900 }}
|
|
{{ end }}
|
|
{{- end }}
|
|
{{- else }}
|
|
backends: {}
|
|
{{- end }}
|
|
|
|
cluster:
|
|
enabled: {{ .Values.config.cluster.enabled }}
|
|
host: {{ .Values.config.cluster.host | default "0.0.0.0" | quote }}
|
|
port: {{ .Values.config.cluster.port | default 50051 }}
|
|
advertise_host: {{ .Values.config.cluster.advertiseHost | default "" | quote }}
|
|
advertise_port: {{ .Values.config.cluster.advertisePort | default 0 }}
|
|
critical_channel_capacity: {{ .Values.config.cluster.criticalChannelCapacity | default 10000 }}
|
|
publish_channel_capacity: {{ .Values.config.cluster.publishChannelCapacity | default 100000 }}
|
|
discovery_mode: {{ .Values.config.cluster.discoveryMode | default "redis" | quote }}
|
|
leader_election_mode: {{ .Values.config.cluster.leaderElectionMode | default "redis" | quote }}
|
|
{{- if .Values.config.cluster.peers }}
|
|
peers:
|
|
{{- range .Values.config.cluster.peers }}
|
|
- {{ . | quote }}
|
|
{{- end }}
|
|
{{- end }}
|
|
catchup_window_secs: {{ .Values.config.cluster.catchupWindowSecs | default 300 }}
|
|
stream_max_length: {{ .Values.config.cluster.streamMaxLength | default 100000 }}
|
|
logging:
|
|
level: {{ .Values.config.cluster.logging.level | default "warn" | quote }}
|
|
format: {{ .Values.config.cluster.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.config.cluster.logging.output }}
|
|
output:
|
|
type: {{ .Values.config.cluster.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.config.cluster.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.config.cluster.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.config.cluster.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.config.cluster.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.config.cluster.logging.color | default "auto" | quote }}
|
|
|
|
webrtc:
|
|
mode: {{ .Values.config.webrtc.mode | default "peer_to_peer" | quote }}
|
|
enable_builtin_stun: {{ .Values.config.webrtc.enableBuiltinStun }}
|
|
stun_port: {{ .Values.config.webrtc.stunPort | default 3478 }}
|
|
stun_host: {{ .Values.config.webrtc.stunHost | default "0.0.0.0" | quote }}
|
|
{{- if .Values.config.webrtc.stunExternalAddr }}
|
|
stun_external_addr: {{ .Values.config.webrtc.stunExternalAddr | quote }}
|
|
{{- end }}
|
|
filter_private_ice_candidates: {{ .Values.config.webrtc.filterPrivateIceCandidates }}
|
|
logging:
|
|
level: {{ .Values.config.webrtc.logging.level | default "info" | quote }}
|
|
format: {{ .Values.config.webrtc.logging.format | default "text" | quote }}
|
|
{{- if kindIs "map" .Values.config.webrtc.logging.output }}
|
|
output:
|
|
type: {{ .Values.config.webrtc.logging.output.type | default "file" | quote }}
|
|
path: {{ .Values.config.webrtc.logging.output.path | quote }}
|
|
rotation:
|
|
strategy: {{ .Values.config.webrtc.logging.output.rotation.strategy | default "daily" | quote }}
|
|
max_files: {{ .Values.config.webrtc.logging.output.rotation.maxFiles | default 30 }}
|
|
{{- else }}
|
|
output: {{ .Values.config.webrtc.logging.output | default "stdout" | quote }}
|
|
{{- end }}
|
|
color: {{ .Values.config.webrtc.logging.color | default "auto" | quote }}
|
|
|
|
connection_limits:
|
|
max_per_user: {{ $connectionLimits.maxPerUser | default 20 }}
|
|
max_per_room: {{ $connectionLimits.maxPerRoom | default 2000 }}
|
|
max_total: {{ $connectionLimits.maxTotal | default 100000 }}
|
|
idle_timeout_seconds: {{ $connectionLimits.idleTimeoutSeconds | default 300 }}
|
|
max_duration_seconds: {{ $connectionLimits.maxDurationSeconds | default 86400 }}
|
|
ws_message_rate_limit_per_second: {{ $connectionLimits.wsMessageRateLimitPerSecond | default 50 }}
|
|
|
|
messaging_rate_limits:
|
|
chat_per_second: {{ $messagingRateLimits.chatPerSecond | default 10 }}
|
|
window_seconds: {{ $messagingRateLimits.windowSeconds | default 1 }}
|
|
|
|
request_rate_limits:
|
|
auth_max_requests: {{ $requestRateLimits.authMaxRequests | default 5 }}
|
|
auth_window_seconds: {{ $requestRateLimits.authWindowSeconds | default 60 }}
|
|
write_max_requests: {{ $requestRateLimits.writeMaxRequests | default 120 }}
|
|
write_window_seconds: {{ $requestRateLimits.writeWindowSeconds | default 60 }}
|
|
read_max_requests: {{ $requestRateLimits.readMaxRequests | default 600 }}
|
|
read_window_seconds: {{ $requestRateLimits.readWindowSeconds | default 60 }}
|
|
media_max_requests: {{ $requestRateLimits.mediaMaxRequests | default 120 }}
|
|
media_window_seconds: {{ $requestRateLimits.mediaWindowSeconds | default 60 }}
|
|
admin_max_requests: {{ $requestRateLimits.adminMaxRequests | default 180 }}
|
|
admin_window_seconds: {{ $requestRateLimits.adminWindowSeconds | default 60 }}
|
|
streaming_max_requests: {{ $requestRateLimits.streamingMaxRequests | default 1200 }}
|
|
streaming_window_seconds: {{ $requestRateLimits.streamingWindowSeconds | default 60 }}
|
|
websocket_max_requests: {{ $requestRateLimits.websocketMaxRequests | default 60 }}
|
|
websocket_window_seconds: {{ $requestRateLimits.websocketWindowSeconds | default 60 }}
|
|
|
|
password_complexity:
|
|
min_length: {{ $passwordComplexity.minLength | default 8 }}
|
|
require_uppercase: {{ if hasKey $passwordComplexity "requireUppercase" }}{{ $passwordComplexity.requireUppercase }}{{ else }}true{{ end }}
|
|
require_lowercase: {{ if hasKey $passwordComplexity "requireLowercase" }}{{ $passwordComplexity.requireLowercase }}{{ else }}true{{ end }}
|
|
require_digit: {{ if hasKey $passwordComplexity "requireDigit" }}{{ $passwordComplexity.requireDigit }}{{ else }}true{{ end }}
|
|
require_special: {{ if hasKey $passwordComplexity "requireSpecial" }}{{ $passwordComplexity.requireSpecial }}{{ else }}false{{ end }}
|
|
max_repeated_chars: {{ if hasKey $passwordComplexity "maxRepeatedChars" }}{{ $passwordComplexity.maxRepeatedChars }}{{ else }}3{{ end }}
|
|
zxcvbn_enabled: {{ if hasKey $passwordComplexity "zxcvbnEnabled" }}{{ $passwordComplexity.zxcvbnEnabled }}{{ else }}false{{ end }}
|
|
zxcvbn_min_score: {{ if hasKey $passwordComplexity "zxcvbnMinScore" }}{{ $passwordComplexity.zxcvbnMinScore }}{{ else }}3{{ end }}
|
|
|
|
buffer_sizes:
|
|
websocket_outbound: {{ $bufferSizes.websocketOutbound | default 256 }}
|
|
audit_buffer: {{ $bufferSizes.auditBuffer | default 10000 }}
|
|
|
|
bootstrap:
|
|
create_root_user: {{ .Values.config.bootstrap.createRootUser | default false }}
|
|
root_username: {{ .Values.config.bootstrap.rootUsername | default "root" | quote }}
|
|
|
|
media_providers:
|
|
alist:
|
|
request_timeout_seconds: {{ $mediaProviderAlist.requestTimeoutSeconds | default 30 }}
|
|
connect_timeout_seconds: {{ $mediaProviderAlist.connectTimeoutSeconds | default 10 }}
|
|
bilibili:
|
|
request_timeout_seconds: {{ $mediaProviderBilibili.requestTimeoutSeconds | default 30 }}
|
|
connect_timeout_seconds: {{ $mediaProviderBilibili.connectTimeoutSeconds | default 10 }}
|
|
emby:
|
|
request_timeout_seconds: {{ $mediaProviderEmby.requestTimeoutSeconds | default 30 }}
|
|
connect_timeout_seconds: {{ $mediaProviderEmby.connectTimeoutSeconds | default 10 }}
|
|
|
|
webauthn:
|
|
enabled: {{ $webauthn.enabled | default false }}
|
|
rp_id: {{ $webauthn.rpId | default "" | quote }}
|
|
rp_origin: {{ $webauthn.rpOrigin | default "" | quote }}
|
|
rp_name: {{ $webauthn.rpName | default "SyncTV" | quote }}
|
|
allowed_origins: {{ $webauthn.allowedOrigins | default list | toJson }}
|
|
apple_app_ids: {{ $webauthn.appleAppIds | default list | toJson }}
|
|
{{- if $webauthn.androidApps }}
|
|
android_apps:
|
|
{{- range $webauthn.androidApps }}
|
|
- package_name: {{ .packageName | quote }}
|
|
sha256_cert_fingerprints: {{ .sha256CertFingerprints | default list | toJson }}
|
|
{{- end }}
|
|
{{- else }}
|
|
android_apps: []
|
|
{{- end }}
|
|
allow_subdomains: {{ $webauthn.allowSubdomains | default false }}
|
|
allow_any_port: {{ $webauthn.allowAnyPort | default false }}
|
|
timeout_seconds: {{ $webauthn.timeoutSeconds | default 300 }}
|
|
{{- end }}
|