# The "secret" keys in here are for development purposes. # None of them have ever been used in production. # This also applies to former versions of this file, and to all other config files. http.port = 9663 https.port = disabled mongodb { uri = "mongodb://127.0.0.1:27017?appName=lila" mongo-async-driver = ${akka} yolo { uri = ${mongodb.uri} # uri = "mongodb://127.0.0.1:27010?appName=lila&connectTimeoutMS=800&rm.maxNonQueryableHeartbeats=9999" } } net { domain = "localhost:9663" socket.domains = [ "localhost:9664" ] asset.domain = ${net.domain} asset.base_url = "http://"${net.asset.domain} asset.minified = false base_url = "http://"${net.domain} email = "" crawlable = false ratelimit = true prodDomain = "lichess.org" http.log = true stage.banner = false } play { application.loader = "lila.app.AppLoader" http { requestHandler = "play.api.http.DefaultHttpRequestHandler" errorHandler = provided filters = provided parser.maxMemoryBuffer=512KiB session { cookieName = "lila2" maxAge = 3650 days } secret.key = "CiebwjgIM9cHQ;I?Xk:sfqDJ;BhIe:jsL?r=?IPF[saf>s^r0]?0grUq4>q?5mP^" # public (lila does not rely on cookie signing) } ws { useragent = "lichess.org" compressionEnabled = true timeout { connection = 5 seconds idle = 5 minutes request = 5 minutes } } server { # The maximum length of the HTTP headers. The most common effect of this is a restriction in cookie length, including # number of cookies and size of cookie values. max-header-size = 4096 # 8192 netty { transport = "native" # The maximum length of the initial line. This effectively restricts the maximum length of a URL that the server will # accept, the initial line consists of the method (3-7 characters), the URL, and the HTTP version (8 characters), # including typical whitespace, the maximum URL length will be this number - 18. maxInitialLineLength = 2048 # 4096 } } akka { actor-system = lila } } akka { loggers = ["akka.event.slf4j.Slf4jLogger"] loglevel = INFO # stdout-loglevel = INFO log-dead-letters-during-shutdown = off akka.log-dead-letters = off coordinated-shutdown { phases { actor-system-terminate { timeout = 5s } } } blocking-smtp-dispatcher { executor = "thread-pool-executor" thread-pool-executor { core-pool-size-min = 8 core-pool-size-max = 64 } } } app { renderer.name = "renderer" stage = false } api { token = secret influx_event = { endpoint = "http://monitor.lichess.ovh:8086/write?db=events" env = "dev" } } accessibility { blind { cookie { name = "mBzamRgfXgRBSnXB" salt = "WWcTbz5xxaHU4d96" } } } pagerDuty { serviceId = "" apiKey = "" } prismic { api_url = "https://lichess.cdn.prismic.io/api" } blog { prismic = ${prismic} collection = blog last_post_cache.ttl = 5 minutes } chat { collection { chat = chat timeout = chat_timeout } actor.name = chat timeout { duration = 15 minutes check_every = 15 seconds } } study.mongodb.uri = ${mongodb.uri} puzzle { mongodb { uri = ${mongodb.uri} } collection { puzzle = puzzle2_puzzle round = puzzle2_round path = puzzle2_path } } storm.secret = "somethingElseInProd" coordinate { collection { score = coordinate_score } } event { collection { event = event } } video { collection { video = video view = video_view } sheet { url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSSaZYC5lUe0o5CVydmi6imP7QIrIHB1lKGL7xlke68IjlfslOdwRr3Xs_69cwmZxn9Tkuea3MGOHXx/pub?gid=0&single=true&output=csv" delay = 6 hours } youtube { url = "https://www.googleapis.com/youtube/v3/videos" api_key = "" max = 50 delay = 20 minutes } } search { enabled = false writeable = true endpoint = "http://localhost:9673" } teamSearch { index = team actor.name = team-search } relation { collection { relation = relation } limit { follow = 400 block = 500 } } bookmark { collection.bookmark = bookmark actor.name = bookmark } geoip { file = "" cache_ttl = 20 minutes } security { collection.security = security collection.print_ban = print_ban collection.firewall = firewall flood.duration = 60 seconds geoip = ${geoip} password_reset { secret = "???" } email_confirm { enabled = false secret = "???" cookie = "email_confirm" } email_change { secret = "???" } login_token { secret = "???" } tor { enabled = true provider_url = "https://check.torproject.org/torbulkexitlist" refresh_delay = 1 hour } disposable_email { enabled = false provider_url = "https://raw.githubusercontent.com/ornicar/disposable/publish/domains.txt" refresh_delay = 10 minutes } dns_api { url = "https://cloudflare-dns.com/dns-query" timeout = 5 seconds } check_mail_api { url = "https://mailcheck.p.rapidapi.com/" key = "" } ip2proxy { enabled = false url = "http://ip2proxy.lichess.ovh:1929" } hcaptcha = ${hcaptcha} lame_name_check = true } mailer { primary { mock = true host = "localhost" port = 587 tls = true user = "login@"${net.domain} password = "???" sender = ${net.domain}" " } secondary = ${mailer.primary} } oauth { mongodb { uri = ${mongodb.uri} } } hcaptcha { endpoint = "https://hcaptcha.com/siteverify" public_key = "f91a151d-73e5-4a95-9d4e-74bfa19bec9d" private_key = "" enabled = false } shutup { collection.shutup = shutup actor.name = shutup } playban { collection.playban = playban } push { collection { device = push_device subscription = push_subscription } web { vapid_public_key = "BGr5CL0QlEYa7qW7HLqe7DFkCeTsYMLsi1Db+5Vwt1QBIs6+WxN8066AjtP8S9u+w+CbleE8xWY+qQaNEMs7sAs=" url = "http://push.lichess.ovh:9054" } firebase { url = "https://fcm.googleapis.com/v1/projects/lichess-1366/messages:send" json = "" } } report { collection.report = report2 actor.name = report score.threshold = 50 } i18n { web_path.relative = public/trans } detectlanguage.api { url = "https://ws.detectlanguage.com/0.2/detect" key = "" } timeline { collection { unsub = timeline_unsub entry = timeline_entry } user { display_max = 10 actor.name = user-timeline } } game { collection { game = game5 crosstable = crosstable2 matchup = matchup } captcher { name = captcher duration = 15 seconds } gifUrl = "http://gif.lichess.ovh:6175" } streamer { collection.streamer = "streamer" paginator.max_per_page = 12 streaming { twitch { client_id = "" secret = "" } google.api_key = "" keyword = "lichess.org" } } explorer { endpoint = "https://explorer.lichess.ovh" internal_endpoint = "http://explorer.lichess.ovh" tablebase = { endpoint = "https://tablebase.lichess.ovh" } } gameSearch { index = game paginator.max_per_page = 12 actor.name = game-search } round { collection { note = game_note forecast = forecast alarm = round_alarm } } tournament { collection { tournament = tournament2 player = tournament_player pairing = tournament_pairing leaderboard = tournament_leaderboard } history.message.ttl = 20 seconds sri.timeout = 7 seconds # small to avoid missed events api_actor.name = tournament-api pairing.delay = 3.1 seconds } swiss { bbpairing = "/path/to/bbpPairings.exe" } simul { collection.simul = simul feature.views = 10000 # max frontpage views of simul per host per day } forum { topic.max_per_page = 10 post.max_per_page = 10 } forumSearch { index = forum paginator.max_per_page = 10 actor.name = forum-search } message { thread.max_per_page = 30 collection.thread = m_thread } coach { collection.coach = coach collection.review = coach_review } memo { collection { cache = cache config = flag } picfit { collection = picfit_image secretKey = "qix8rozsRE6Rsw5uvBjwJUCFfQhyaKbR" # request signature endpointGet = "http://127.0.0.1:3001" endpointPost = "http://127.0.0.1:3001" } } redis { uri = "redis://127.0.0.1" # uri = "redis-socket:///var/run/redis/redis-server.sock" } socket { redis = ${redis} } setup.max_playing = 200 evalCache { collection.evalCache = eval_cache } user { online.ttl = 7 seconds collection { user = user4 note = note trophy = trophy trophyKind = trophyKind ranking = ranking } } fishnet { redis = ${redis} collection { analysis = fishnet_analysis client = fishnet_client } offline_mode = true # any client can provide moves and analysis actor.name = fishnet analysis.nodes = 1500000 # sf 15 dev move.plies = 300 client_min_version = "2.1.3" } insight { mongodb { uri = "mongodb://127.0.0.1:27017/lichess-insight?appName=lila" } } notify { collection.notify = notify actor.name = notify } learn { collection.progress = learn_progress } simulation { enabled = false players = 300 watchers = 200 } zulip { domain = "" user = "" pass = "" } plan { stripe { endpoint="https://api.stripe.com/v1" keys { public="" secret="" } products { monthly = "prod_JZswNwe0eLPJIU" onetime = "prod_JZuNrVAZSUieAd" gift = "prod_JboaVzGqSWzVGI" } } paypal { ipn_key="" } collection { patron = plan_patron charge = plan_charge } # https://openexchangerates.org oer.appId = "" } hub { actor { game { search = ${gameSearch.actor.name} } renderer = ${app.renderer.name} captcher = ${game.captcher.name} forum { search = ${forumSearch.actor.name} } team.search = ${teamSearch.actor.name} fishnet = ${fishnet.actor.name} tournament.api = ${tournament.api_actor.name} timeline { user = ${timeline.user.actor.name} } bookmark = ${bookmark.actor.name} report = ${report.actor.name} shutup = ${shutup.actor.name} chat = ${chat.actor.name} notify = ${notify.actor.name} } } kamon { enabled = false environment.service = "lila" metric.tick-interval = 60 seconds influxdb { hostname = "" port = 8086 database = "kamon" percentiles = [50.0, 75.0, 90.0, 95.0, 99.0, 99.9] protocol = "http" post-empty-distributions = false precision = "s" environment-tags { include-service = no include-host = no include-instance = yes } } prometheus { buckets { default-buckets = [ 10, 100, 1000, 10000, 100000 ] time-buckets = [ 0.01, 0.05, 0.1, 0.5, 1, 5, 10 ] information-buckets = [ 512, 2048, 16384, 524288, ] } } modules { jvm-metrics.enabled = yes process-metrics.enabled = yes host-metrics.enabled = no prometheus-reporter.enabled = yes } } # Don't let play manage its own PID file pidfile.path = "/dev/null"