##// END OF EJS Templates
configs: mention not to use memory sessions
super-admin -
r5183:e1d1f48d default
parent child Browse files
Show More
@@ -1,863 +1,863 b''
1 1
2 2
3 3 ; #########################################
4 4 ; RHODECODE COMMUNITY EDITION CONFIGURATION
5 5 ; #########################################
6 6
7 7 [DEFAULT]
8 8 ; Debug flag sets all loggers to debug, and enables request tracking
9 9 debug = true
10 10
11 11 ; ########################################################################
12 12 ; EMAIL CONFIGURATION
13 13 ; These settings will be used by the RhodeCode mailing system
14 14 ; ########################################################################
15 15
16 16 ; prefix all emails subjects with given prefix, helps filtering out emails
17 17 #email_prefix = [RhodeCode]
18 18
19 19 ; email FROM address all mails will be sent
20 20 #app_email_from = rhodecode-noreply@localhost
21 21
22 22 #smtp_server = mail.server.com
23 23 #smtp_username =
24 24 #smtp_password =
25 25 #smtp_port =
26 26 #smtp_use_tls = false
27 27 #smtp_use_ssl = true
28 28
29 29 [server:main]
30 30 ; COMMON HOST/IP CONFIG, This applies mostly to develop setup,
31 31 ; Host port for gunicorn are controlled by gunicorn_conf.py
32 32 host = 127.0.0.1
33 33 port = 10020
34 34
35 35 ; ##################################################
36 36 ; WAITRESS WSGI SERVER - Recommended for Development
37 37 ; ##################################################
38 38
39 39 ; use server type
40 40 use = egg:waitress#main
41 41
42 42 ; number of worker threads
43 43 threads = 5
44 44
45 45 ; MAX BODY SIZE 100GB
46 46 max_request_body_size = 107374182400
47 47
48 48 ; Use poll instead of select, fixes file descriptors limits problems.
49 49 ; May not work on old windows systems.
50 50 asyncore_use_poll = true
51 51
52 52
53 53 ; ###########################
54 54 ; GUNICORN APPLICATION SERVER
55 55 ; ###########################
56 56
57 57 ; run with gunicorn --paste rhodecode.ini --config gunicorn_conf.py
58 58
59 59 ; Module to use, this setting shouldn't be changed
60 60 #use = egg:gunicorn#main
61 61
62 62 ; Prefix middleware for RhodeCode.
63 63 ; recommended when using proxy setup.
64 64 ; allows to set RhodeCode under a prefix in server.
65 65 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
66 66 ; And set your prefix like: `prefix = /custom_prefix`
67 67 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
68 68 ; to make your cookies only work on prefix url
69 69 [filter:proxy-prefix]
70 70 use = egg:PasteDeploy#prefix
71 71 prefix = /
72 72
73 73 [app:main]
74 74 ; The %(here)s variable will be replaced with the absolute path of parent directory
75 75 ; of this file
76 76 ; Each option in the app:main can be override by an environmental variable
77 77 ;
78 78 ;To override an option:
79 79 ;
80 80 ;RC_<KeyName>
81 81 ;Everything should be uppercase, . and - should be replaced by _.
82 82 ;For example, if you have these configuration settings:
83 83 ;rc_cache.repo_object.backend = foo
84 84 ;can be overridden by
85 85 ;export RC_CACHE_REPO_OBJECT_BACKEND=foo
86 86
87 87 use = egg:rhodecode-enterprise-ce
88 88
89 89 ; enable proxy prefix middleware, defined above
90 90 #filter-with = proxy-prefix
91 91
92 92 ; #############
93 93 ; DEBUG OPTIONS
94 94 ; #############
95 95
96 96 pyramid.reload_templates = true
97 97
98 98 # During development the we want to have the debug toolbar enabled
99 99 pyramid.includes =
100 100 pyramid_debugtoolbar
101 101
102 102 debugtoolbar.hosts = 0.0.0.0/0
103 103 debugtoolbar.exclude_prefixes =
104 104 /css
105 105 /fonts
106 106 /images
107 107 /js
108 108
109 109 ## RHODECODE PLUGINS ##
110 110 rhodecode.includes =
111 111 rhodecode.api
112 112
113 113
114 114 # api prefix url
115 115 rhodecode.api.url = /_admin/api
116 116
117 117 ; enable debug style page
118 118 debug_style = true
119 119
120 120 ; #################
121 121 ; END DEBUG OPTIONS
122 122 ; #################
123 123
124 124 ; encryption key used to encrypt social plugin tokens,
125 125 ; remote_urls with credentials etc, if not set it defaults to
126 126 ; `beaker.session.secret`
127 127 #rhodecode.encrypted_values.secret =
128 128
129 129 ; decryption strict mode (enabled by default). It controls if decryption raises
130 130 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
131 131 #rhodecode.encrypted_values.strict = false
132 132
133 133 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
134 134 ; fernet is safer, and we strongly recommend switching to it.
135 135 ; Due to backward compatibility aes is used as default.
136 136 #rhodecode.encrypted_values.algorithm = fernet
137 137
138 138 ; Return gzipped responses from RhodeCode (static files/application)
139 139 gzip_responses = false
140 140
141 141 ; Auto-generate javascript routes file on startup
142 142 generate_js_files = false
143 143
144 144 ; System global default language.
145 145 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
146 146 lang = en
147 147
148 148 ; Perform a full repository scan and import on each server start.
149 149 ; Settings this to true could lead to very long startup time.
150 150 startup.import_repos = false
151 151
152 152 ; URL at which the application is running. This is used for Bootstrapping
153 153 ; requests in context when no web request is available. Used in ishell, or
154 154 ; SSH calls. Set this for events to receive proper url for SSH calls.
155 155 app.base_url = http://rhodecode.local
156 156
157 157 ; Unique application ID. Should be a random unique string for security.
158 158 app_instance_uuid = rc-production
159 159
160 160 ; Cut off limit for large diffs (size in bytes). If overall diff size on
161 161 ; commit, or pull request exceeds this limit this diff will be displayed
162 162 ; partially. E.g 512000 == 512Kb
163 163 cut_off_limit_diff = 512000
164 164
165 165 ; Cut off limit for large files inside diffs (size in bytes). Each individual
166 166 ; file inside diff which exceeds this limit will be displayed partially.
167 167 ; E.g 128000 == 128Kb
168 168 cut_off_limit_file = 128000
169 169
170 170 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
171 171 vcs_full_cache = true
172 172
173 173 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
174 174 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
175 175 force_https = false
176 176
177 177 ; use Strict-Transport-Security headers
178 178 use_htsts = false
179 179
180 180 ; Set to true if your repos are exposed using the dumb protocol
181 181 git_update_server_info = false
182 182
183 183 ; RSS/ATOM feed options
184 184 rss_cut_off_limit = 256000
185 185 rss_items_per_page = 10
186 186 rss_include_diff = false
187 187
188 188 ; gist URL alias, used to create nicer urls for gist. This should be an
189 189 ; url that does rewrites to _admin/gists/{gistid}.
190 190 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
191 191 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
192 192 gist_alias_url =
193 193
194 194 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
195 195 ; used for access.
196 196 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
197 197 ; came from the the logged in user who own this authentication token.
198 198 ; Additionally @TOKEN syntax can be used to bound the view to specific
199 199 ; authentication token. Such view would be only accessible when used together
200 200 ; with this authentication token
201 201 ; list of all views can be found under `/_admin/permissions/auth_token_access`
202 202 ; The list should be "," separated and on a single line.
203 203 ; Most common views to enable:
204 204
205 205 # RepoCommitsView:repo_commit_download
206 206 # RepoCommitsView:repo_commit_patch
207 207 # RepoCommitsView:repo_commit_raw
208 208 # RepoCommitsView:repo_commit_raw@TOKEN
209 209 # RepoFilesView:repo_files_diff
210 210 # RepoFilesView:repo_archivefile
211 211 # RepoFilesView:repo_file_raw
212 212 # GistView:*
213 213 api_access_controllers_whitelist =
214 214
215 215 ; Default encoding used to convert from and to unicode
216 216 ; can be also a comma separated list of encoding in case of mixed encodings
217 217 default_encoding = UTF-8
218 218
219 219 ; instance-id prefix
220 220 ; a prefix key for this instance used for cache invalidation when running
221 221 ; multiple instances of RhodeCode, make sure it's globally unique for
222 222 ; all running RhodeCode instances. Leave empty if you don't use it
223 223 instance_id =
224 224
225 225 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
226 226 ; of an authentication plugin also if it is disabled by it's settings.
227 227 ; This could be useful if you are unable to log in to the system due to broken
228 228 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
229 229 ; module to log in again and fix the settings.
230 230 ; Available builtin plugin IDs (hash is part of the ID):
231 231 ; egg:rhodecode-enterprise-ce#rhodecode
232 232 ; egg:rhodecode-enterprise-ce#pam
233 233 ; egg:rhodecode-enterprise-ce#ldap
234 234 ; egg:rhodecode-enterprise-ce#jasig_cas
235 235 ; egg:rhodecode-enterprise-ce#headers
236 236 ; egg:rhodecode-enterprise-ce#crowd
237 237
238 238 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
239 239
240 240 ; Flag to control loading of legacy plugins in py:/path format
241 241 auth_plugin.import_legacy_plugins = true
242 242
243 243 ; alternative return HTTP header for failed authentication. Default HTTP
244 244 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
245 245 ; handling that causing a series of failed authentication calls.
246 246 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
247 247 ; This will be served instead of default 401 on bad authentication
248 248 auth_ret_code =
249 249
250 250 ; use special detection method when serving auth_ret_code, instead of serving
251 251 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
252 252 ; and then serve auth_ret_code to clients
253 253 auth_ret_code_detection = false
254 254
255 255 ; locking return code. When repository is locked return this HTTP code. 2XX
256 256 ; codes don't break the transactions while 4XX codes do
257 257 lock_ret_code = 423
258 258
259 259 ; allows to change the repository location in settings page
260 260 allow_repo_location_change = true
261 261
262 262 ; allows to setup custom hooks in settings page
263 263 allow_custom_hooks_settings = true
264 264
265 265 ; Generated license token required for EE edition license.
266 266 ; New generated token value can be found in Admin > settings > license page.
267 267 license_token =
268 268
269 269 ; This flag hides sensitive information on the license page such as token, and license data
270 270 license.hide_license_info = false
271 271
272 272 ; supervisor connection uri, for managing supervisor and logs.
273 273 supervisor.uri =
274 274
275 275 ; supervisord group name/id we only want this RC instance to handle
276 276 supervisor.group_id = dev
277 277
278 278 ; Display extended labs settings
279 279 labs_settings_active = true
280 280
281 281 ; Custom exception store path, defaults to TMPDIR
282 282 ; This is used to store exception from RhodeCode in shared directory
283 283 #exception_tracker.store_path =
284 284
285 285 ; Send email with exception details when it happens
286 286 #exception_tracker.send_email = false
287 287
288 288 ; Comma separated list of recipients for exception emails,
289 289 ; e.g admin@rhodecode.com,devops@rhodecode.com
290 290 ; Can be left empty, then emails will be sent to ALL super-admins
291 291 #exception_tracker.send_email_recipients =
292 292
293 293 ; optional prefix to Add to email Subject
294 294 #exception_tracker.email_prefix = [RHODECODE ERROR]
295 295
296 296 ; File store configuration. This is used to store and serve uploaded files
297 297 file_store.enabled = true
298 298
299 299 ; Storage backend, available options are: local
300 300 file_store.backend = local
301 301
302 302 ; path to store the uploaded binaries
303 303 file_store.storage_path = %(here)s/data/file_store
304 304
305 305 ; Uncomment and set this path to control settings for archive download cache.
306 306 ; Generated repo archives will be cached at this location
307 307 ; and served from the cache during subsequent requests for the same archive of
308 308 ; the repository. This path is important to be shared across filesystems and with
309 309 ; RhodeCode and vcsserver
310 310
311 311 ; Default is $cache_dir/archive_cache if not set
312 312 archive_cache.store_dir = %(here)s/data/archive_cache
313 313
314 314 ; The limit in GB sets how much data we cache before recycling last used, defaults to 10 gb
315 315 archive_cache.cache_size_gb = 10
316 316
317 317 ; By default cache uses sharding technique, this specifies how many shards are there
318 318 archive_cache.cache_shards = 10
319 319
320 320 ; #############
321 321 ; CELERY CONFIG
322 322 ; #############
323 323
324 324 ; manually run celery: /path/to/celery worker --task-events --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
325 325
326 326 use_celery = false
327 327
328 328 ; path to store schedule database
329 329 #celerybeat-schedule.path =
330 330
331 331 ; connection url to the message broker (default redis)
332 332 celery.broker_url = redis://localhost:6379/8
333 333
334 334 ; rabbitmq example
335 335 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
336 336
337 337 ; maximum tasks to execute before worker restart
338 338 celery.max_tasks_per_child = 20
339 339
340 340 ; tasks will never be sent to the queue, but executed locally instead.
341 341 celery.task_always_eager = false
342 342
343 343 ; #############
344 344 ; DOGPILE CACHE
345 345 ; #############
346 346
347 347 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
348 348 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
349 349 cache_dir = %(here)s/data
350 350
351 351 ; *********************************************
352 352 ; `sql_cache_short` cache for heavy SQL queries
353 353 ; Only supported backend is `memory_lru`
354 354 ; *********************************************
355 355 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
356 356 rc_cache.sql_cache_short.expiration_time = 30
357 357
358 358
359 359 ; *****************************************************
360 360 ; `cache_repo_longterm` cache for repo object instances
361 361 ; Only supported backend is `memory_lru`
362 362 ; *****************************************************
363 363 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
364 364 ; by default we use 30 Days, cache is still invalidated on push
365 365 rc_cache.cache_repo_longterm.expiration_time = 2592000
366 366 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
367 367 rc_cache.cache_repo_longterm.max_size = 10000
368 368
369 369
370 370 ; *********************************************
371 371 ; `cache_general` cache for general purpose use
372 372 ; for simplicity use rc.file_namespace backend,
373 373 ; for performance and scale use rc.redis
374 374 ; *********************************************
375 375 rc_cache.cache_general.backend = dogpile.cache.rc.file_namespace
376 376 rc_cache.cache_general.expiration_time = 43200
377 377 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
378 378 #rc_cache.cache_general.arguments.filename = /tmp/cache_general_db
379 379
380 380 ; alternative `cache_general` redis backend with distributed lock
381 381 #rc_cache.cache_general.backend = dogpile.cache.rc.redis
382 382 #rc_cache.cache_general.expiration_time = 300
383 383
384 384 ; redis_expiration_time needs to be greater then expiration_time
385 385 #rc_cache.cache_general.arguments.redis_expiration_time = 7200
386 386
387 387 #rc_cache.cache_general.arguments.host = localhost
388 388 #rc_cache.cache_general.arguments.port = 6379
389 389 #rc_cache.cache_general.arguments.db = 0
390 390 #rc_cache.cache_general.arguments.socket_timeout = 30
391 391 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
392 392 #rc_cache.cache_general.arguments.distributed_lock = true
393 393
394 394 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
395 395 #rc_cache.cache_general.arguments.lock_auto_renewal = true
396 396
397 397 ; *************************************************
398 398 ; `cache_perms` cache for permission tree, auth TTL
399 399 ; for simplicity use rc.file_namespace backend,
400 400 ; for performance and scale use rc.redis
401 401 ; *************************************************
402 402 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
403 403 rc_cache.cache_perms.expiration_time = 3600
404 404 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
405 405 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms_db
406 406
407 407 ; alternative `cache_perms` redis backend with distributed lock
408 408 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
409 409 #rc_cache.cache_perms.expiration_time = 300
410 410
411 411 ; redis_expiration_time needs to be greater then expiration_time
412 412 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
413 413
414 414 #rc_cache.cache_perms.arguments.host = localhost
415 415 #rc_cache.cache_perms.arguments.port = 6379
416 416 #rc_cache.cache_perms.arguments.db = 0
417 417 #rc_cache.cache_perms.arguments.socket_timeout = 30
418 418 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
419 419 #rc_cache.cache_perms.arguments.distributed_lock = true
420 420
421 421 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
422 422 #rc_cache.cache_perms.arguments.lock_auto_renewal = true
423 423
424 424 ; ***************************************************
425 425 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
426 426 ; for simplicity use rc.file_namespace backend,
427 427 ; for performance and scale use rc.redis
428 428 ; ***************************************************
429 429 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
430 430 rc_cache.cache_repo.expiration_time = 2592000
431 431 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
432 432 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo_db
433 433
434 434 ; alternative `cache_repo` redis backend with distributed lock
435 435 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
436 436 #rc_cache.cache_repo.expiration_time = 2592000
437 437
438 438 ; redis_expiration_time needs to be greater then expiration_time
439 439 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
440 440
441 441 #rc_cache.cache_repo.arguments.host = localhost
442 442 #rc_cache.cache_repo.arguments.port = 6379
443 443 #rc_cache.cache_repo.arguments.db = 1
444 444 #rc_cache.cache_repo.arguments.socket_timeout = 30
445 445 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
446 446 #rc_cache.cache_repo.arguments.distributed_lock = true
447 447
448 448 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
449 449 #rc_cache.cache_repo.arguments.lock_auto_renewal = true
450 450
451 451 ; ##############
452 452 ; BEAKER SESSION
453 453 ; ##############
454 454
455 455 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
456 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
457 ; Fastest ones are Redis and ext:database
456 ; types are file, ext:redis, ext:database, ext:memcached
457 ; Fastest ones are ext:redis and ext:database, DO NOT use memory type for session
458 458 beaker.session.type = file
459 459 beaker.session.data_dir = %(here)s/data/sessions
460 460
461 461 ; Redis based sessions
462 462 #beaker.session.type = ext:redis
463 463 #beaker.session.url = redis://127.0.0.1:6379/2
464 464
465 465 ; DB based session, fast, and allows easy management over logged in users
466 466 #beaker.session.type = ext:database
467 467 #beaker.session.table_name = db_session
468 468 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
469 469 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
470 470 #beaker.session.sa.pool_recycle = 3600
471 471 #beaker.session.sa.echo = false
472 472
473 473 beaker.session.key = rhodecode
474 474 beaker.session.secret = develop-rc-uytcxaz
475 475 beaker.session.lock_dir = %(here)s/data/sessions/lock
476 476
477 477 ; Secure encrypted cookie. Requires AES and AES python libraries
478 478 ; you must disable beaker.session.secret to use this
479 479 #beaker.session.encrypt_key = key_for_encryption
480 480 #beaker.session.validate_key = validation_key
481 481
482 482 ; Sets session as invalid (also logging out user) if it haven not been
483 483 ; accessed for given amount of time in seconds
484 484 beaker.session.timeout = 2592000
485 485 beaker.session.httponly = true
486 486
487 487 ; Path to use for the cookie. Set to prefix if you use prefix middleware
488 488 #beaker.session.cookie_path = /custom_prefix
489 489
490 490 ; Set https secure cookie
491 491 beaker.session.secure = false
492 492
493 493 ; default cookie expiration time in seconds, set to `true` to set expire
494 494 ; at browser close
495 495 #beaker.session.cookie_expires = 3600
496 496
497 497 ; #############################
498 498 ; SEARCH INDEXING CONFIGURATION
499 499 ; #############################
500 500
501 501 ; Full text search indexer is available in rhodecode-tools under
502 502 ; `rhodecode-tools index` command
503 503
504 504 ; WHOOSH Backend, doesn't require additional services to run
505 505 ; it works good with few dozen repos
506 506 search.module = rhodecode.lib.index.whoosh
507 507 search.location = %(here)s/data/index
508 508
509 509 ; ####################
510 510 ; CHANNELSTREAM CONFIG
511 511 ; ####################
512 512
513 513 ; channelstream enables persistent connections and live notification
514 514 ; in the system. It's also used by the chat system
515 515
516 516 channelstream.enabled = false
517 517
518 518 ; server address for channelstream server on the backend
519 519 channelstream.server = 127.0.0.1:9800
520 520
521 521 ; location of the channelstream server from outside world
522 522 ; use ws:// for http or wss:// for https. This address needs to be handled
523 523 ; by external HTTP server such as Nginx or Apache
524 524 ; see Nginx/Apache configuration examples in our docs
525 525 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
526 526 channelstream.secret = secret
527 527 channelstream.history.location = %(here)s/channelstream_history
528 528
529 529 ; Internal application path that Javascript uses to connect into.
530 530 ; If you use proxy-prefix the prefix should be added before /_channelstream
531 531 channelstream.proxy_path = /_channelstream
532 532
533 533
534 534 ; ##############################
535 535 ; MAIN RHODECODE DATABASE CONFIG
536 536 ; ##############################
537 537
538 538 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
539 539 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
540 540 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
541 541 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
542 542 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
543 543
544 544 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
545 545
546 546 ; see sqlalchemy docs for other advanced settings
547 547 ; print the sql statements to output
548 548 sqlalchemy.db1.echo = false
549 549
550 550 ; recycle the connections after this amount of seconds
551 551 sqlalchemy.db1.pool_recycle = 3600
552 552
553 553 ; the number of connections to keep open inside the connection pool.
554 554 ; 0 indicates no limit
555 555 ; the general calculus with gevent is:
556 556 ; if your system allows 500 concurrent greenlets (max_connections) that all do database access,
557 557 ; then increase pool size + max overflow so that they add up to 500.
558 558 #sqlalchemy.db1.pool_size = 5
559 559
560 560 ; The number of connections to allow in connection pool "overflow", that is
561 561 ; connections that can be opened above and beyond the pool_size setting,
562 562 ; which defaults to five.
563 563 #sqlalchemy.db1.max_overflow = 10
564 564
565 565 ; Connection check ping, used to detect broken database connections
566 566 ; could be enabled to better handle cases if MySQL has gone away errors
567 567 #sqlalchemy.db1.ping_connection = true
568 568
569 569 ; ##########
570 570 ; VCS CONFIG
571 571 ; ##########
572 572 vcs.server.enable = true
573 573 vcs.server = localhost:9900
574 574
575 575 ; Web server connectivity protocol, responsible for web based VCS operations
576 576 ; Available protocols are:
577 577 ; `http` - use http-rpc backend (default)
578 578 vcs.server.protocol = http
579 579
580 580 ; Push/Pull operations protocol, available options are:
581 581 ; `http` - use http-rpc backend (default)
582 582 vcs.scm_app_implementation = http
583 583
584 584 ; Push/Pull operations hooks protocol, available options are:
585 585 ; `http` - use http-rpc backend (default)
586 586 vcs.hooks.protocol = http
587 587
588 588 ; Host on which this instance is listening for hooks. vcsserver will call this host to pull/push hooks so it should be
589 589 ; accessible via network.
590 590 ; Use vcs.hooks.host = "*" to bind to current hostname (for Docker)
591 591 vcs.hooks.host = *
592 592
593 593 ; Start VCSServer with this instance as a subprocess, useful for development
594 594 vcs.start_server = false
595 595
596 596 ; List of enabled VCS backends, available options are:
597 597 ; `hg` - mercurial
598 598 ; `git` - git
599 599 ; `svn` - subversion
600 600 vcs.backends = hg, git, svn
601 601
602 602 ; Wait this number of seconds before killing connection to the vcsserver
603 603 vcs.connection_timeout = 3600
604 604
605 605 ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
606 606 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
607 607 ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
608 608 #vcs.svn.compatible_version = 1.8
609 609
610 610 ; Cache flag to cache vcsserver remote calls locally
611 611 ; It uses cache_region `cache_repo`
612 612 vcs.methods.cache = true
613 613
614 614 ; ####################################################
615 615 ; Subversion proxy support (mod_dav_svn)
616 616 ; Maps RhodeCode repo groups into SVN paths for Apache
617 617 ; ####################################################
618 618
619 619 ; Enable or disable the config file generation.
620 620 svn.proxy.generate_config = false
621 621
622 622 ; Generate config file with `SVNListParentPath` set to `On`.
623 623 svn.proxy.list_parent_path = true
624 624
625 625 ; Set location and file name of generated config file.
626 626 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
627 627
628 628 ; alternative mod_dav config template. This needs to be a valid mako template
629 629 ; Example template can be found in the source code:
630 630 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
631 631 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
632 632
633 633 ; Used as a prefix to the `Location` block in the generated config file.
634 634 ; In most cases it should be set to `/`.
635 635 svn.proxy.location_root = /
636 636
637 637 ; Command to reload the mod dav svn configuration on change.
638 638 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
639 639 ; Make sure user who runs RhodeCode process is allowed to reload Apache
640 640 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
641 641
642 642 ; If the timeout expires before the reload command finishes, the command will
643 643 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
644 644 #svn.proxy.reload_timeout = 10
645 645
646 646 ; ####################
647 647 ; SSH Support Settings
648 648 ; ####################
649 649
650 650 ; Defines if a custom authorized_keys file should be created and written on
651 651 ; any change user ssh keys. Setting this to false also disables possibility
652 652 ; of adding SSH keys by users from web interface. Super admins can still
653 653 ; manage SSH Keys.
654 654 ssh.generate_authorized_keyfile = false
655 655
656 656 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
657 657 # ssh.authorized_keys_ssh_opts =
658 658
659 659 ; Path to the authorized_keys file where the generate entries are placed.
660 660 ; It is possible to have multiple key files specified in `sshd_config` e.g.
661 661 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
662 662 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
663 663
664 664 ; Command to execute the SSH wrapper. The binary is available in the
665 665 ; RhodeCode installation directory.
666 666 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
667 667 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
668 668
669 669 ; Allow shell when executing the ssh-wrapper command
670 670 ssh.wrapper_cmd_allow_shell = false
671 671
672 672 ; Enables logging, and detailed output send back to the client during SSH
673 673 ; operations. Useful for debugging, shouldn't be used in production.
674 674 ssh.enable_debug_logging = true
675 675
676 676 ; Paths to binary executable, by default they are the names, but we can
677 677 ; override them if we want to use a custom one
678 678 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
679 679 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
680 680 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
681 681
682 682 ; Enables SSH key generator web interface. Disabling this still allows users
683 683 ; to add their own keys.
684 684 ssh.enable_ui_key_generator = true
685 685
686 686
687 687 ; #################
688 688 ; APPENLIGHT CONFIG
689 689 ; #################
690 690
691 691 ; Appenlight is tailored to work with RhodeCode, see
692 692 ; http://appenlight.rhodecode.com for details how to obtain an account
693 693
694 694 ; Appenlight integration enabled
695 695 #appenlight = false
696 696
697 697 #appenlight.server_url = https://api.appenlight.com
698 698 #appenlight.api_key = YOUR_API_KEY
699 699 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
700 700
701 701 ; used for JS client
702 702 #appenlight.api_public_key = YOUR_API_PUBLIC_KEY
703 703
704 704 ; TWEAK AMOUNT OF INFO SENT HERE
705 705
706 706 ; enables 404 error logging (default False)
707 707 #appenlight.report_404 = false
708 708
709 709 ; time in seconds after request is considered being slow (default 1)
710 710 #appenlight.slow_request_time = 1
711 711
712 712 ; record slow requests in application
713 713 ; (needs to be enabled for slow datastore recording and time tracking)
714 714 #appenlight.slow_requests = true
715 715
716 716 ; enable hooking to application loggers
717 717 #appenlight.logging = true
718 718
719 719 ; minimum log level for log capture
720 720 #ppenlight.logging.level = WARNING
721 721
722 722 ; send logs only from erroneous/slow requests
723 723 ; (saves API quota for intensive logging)
724 724 #appenlight.logging_on_error = false
725 725
726 726 ; list of additional keywords that should be grabbed from environ object
727 727 ; can be string with comma separated list of words in lowercase
728 728 ; (by default client will always send following info:
729 729 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
730 730 ; start with HTTP* this list be extended with additional keywords here
731 731 #appenlight.environ_keys_whitelist =
732 732
733 733 ; list of keywords that should be blanked from request object
734 734 ; can be string with comma separated list of words in lowercase
735 735 ; (by default client will always blank keys that contain following words
736 736 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
737 737 ; this list be extended with additional keywords set here
738 738 #appenlight.request_keys_blacklist =
739 739
740 740 ; list of namespaces that should be ignores when gathering log entries
741 741 ; can be string with comma separated list of namespaces
742 742 ; (by default the client ignores own entries: appenlight_client.client)
743 743 #appenlight.log_namespace_blacklist =
744 744
745 745 ; Statsd client config, this is used to send metrics to statsd
746 746 ; We recommend setting statsd_exported and scrape them using Prometheus
747 747 #statsd.enabled = false
748 748 #statsd.statsd_host = 0.0.0.0
749 749 #statsd.statsd_port = 8125
750 750 #statsd.statsd_prefix =
751 751 #statsd.statsd_ipv6 = false
752 752
753 753 ; configure logging automatically at server startup set to false
754 754 ; to use the below custom logging config.
755 755 ; RC_LOGGING_FORMATTER
756 756 ; RC_LOGGING_LEVEL
757 757 ; env variables can control the settings for logging in case of autoconfigure
758 758
759 759 #logging.autoconfigure = true
760 760
761 761 ; specify your own custom logging config file to configure logging
762 762 #logging.logging_conf_file = /path/to/custom_logging.ini
763 763
764 764 ; Dummy marker to add new entries after.
765 765 ; Add any custom entries below. Please don't remove this marker.
766 766 custom.conf = 1
767 767
768 768
769 769 ; #####################
770 770 ; LOGGING CONFIGURATION
771 771 ; #####################
772 772
773 773 [loggers]
774 774 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
775 775
776 776 [handlers]
777 777 keys = console, console_sql
778 778
779 779 [formatters]
780 780 keys = generic, json, color_formatter, color_formatter_sql
781 781
782 782 ; #######
783 783 ; LOGGERS
784 784 ; #######
785 785 [logger_root]
786 786 level = NOTSET
787 787 handlers = console
788 788
789 789 [logger_sqlalchemy]
790 790 level = INFO
791 791 handlers = console_sql
792 792 qualname = sqlalchemy.engine
793 793 propagate = 0
794 794
795 795 [logger_beaker]
796 796 level = DEBUG
797 797 handlers =
798 798 qualname = beaker.container
799 799 propagate = 1
800 800
801 801 [logger_rhodecode]
802 802 level = DEBUG
803 803 handlers =
804 804 qualname = rhodecode
805 805 propagate = 1
806 806
807 807 [logger_ssh_wrapper]
808 808 level = DEBUG
809 809 handlers =
810 810 qualname = ssh_wrapper
811 811 propagate = 1
812 812
813 813 [logger_celery]
814 814 level = DEBUG
815 815 handlers =
816 816 qualname = celery
817 817
818 818
819 819 ; ########
820 820 ; HANDLERS
821 821 ; ########
822 822
823 823 [handler_console]
824 824 class = StreamHandler
825 825 args = (sys.stderr, )
826 826 level = DEBUG
827 827 ; To enable JSON formatted logs replace 'generic/color_formatter' with 'json'
828 828 ; This allows sending properly formatted logs to grafana loki or elasticsearch
829 829 formatter = color_formatter
830 830
831 831 [handler_console_sql]
832 832 ; "level = DEBUG" logs SQL queries and results.
833 833 ; "level = INFO" logs SQL queries.
834 834 ; "level = WARN" logs neither. (Recommended for production systems.)
835 835 class = StreamHandler
836 836 args = (sys.stderr, )
837 837 level = WARN
838 838 ; To enable JSON formatted logs replace 'generic/color_formatter_sql' with 'json'
839 839 ; This allows sending properly formatted logs to grafana loki or elasticsearch
840 840 formatter = color_formatter_sql
841 841
842 842 ; ##########
843 843 ; FORMATTERS
844 844 ; ##########
845 845
846 846 [formatter_generic]
847 847 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
848 848 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
849 849 datefmt = %Y-%m-%d %H:%M:%S
850 850
851 851 [formatter_color_formatter]
852 852 class = rhodecode.lib.logging_formatter.ColorFormatter
853 853 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
854 854 datefmt = %Y-%m-%d %H:%M:%S
855 855
856 856 [formatter_color_formatter_sql]
857 857 class = rhodecode.lib.logging_formatter.ColorFormatterSql
858 858 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
859 859 datefmt = %Y-%m-%d %H:%M:%S
860 860
861 861 [formatter_json]
862 862 format = %(timestamp)s %(levelname)s %(name)s %(message)s %(req_id)s
863 863 class = rhodecode.lib._vendor.jsonlogger.JsonFormatter
@@ -1,813 +1,813 b''
1 1
2 2 ; #########################################
3 3 ; RHODECODE COMMUNITY EDITION CONFIGURATION
4 4 ; #########################################
5 5
6 6 [DEFAULT]
7 7 ; Debug flag sets all loggers to debug, and enables request tracking
8 8 debug = false
9 9
10 10 ; ########################################################################
11 11 ; EMAIL CONFIGURATION
12 12 ; These settings will be used by the RhodeCode mailing system
13 13 ; ########################################################################
14 14
15 15 ; prefix all emails subjects with given prefix, helps filtering out emails
16 16 #email_prefix = [RhodeCode]
17 17
18 18 ; email FROM address all mails will be sent
19 19 #app_email_from = rhodecode-noreply@localhost
20 20
21 21 #smtp_server = mail.server.com
22 22 #smtp_username =
23 23 #smtp_password =
24 24 #smtp_port =
25 25 #smtp_use_tls = false
26 26 #smtp_use_ssl = true
27 27
28 28 [server:main]
29 29 ; COMMON HOST/IP CONFIG, This applies mostly to develop setup,
30 30 ; Host port for gunicorn are controlled by gunicorn_conf.py
31 31 host = 127.0.0.1
32 32 port = 10020
33 33
34 34
35 35 ; ###########################
36 36 ; GUNICORN APPLICATION SERVER
37 37 ; ###########################
38 38
39 39 ; run with gunicorn --paste rhodecode.ini --config gunicorn_conf.py
40 40
41 41 ; Module to use, this setting shouldn't be changed
42 42 use = egg:gunicorn#main
43 43
44 44 ; Prefix middleware for RhodeCode.
45 45 ; recommended when using proxy setup.
46 46 ; allows to set RhodeCode under a prefix in server.
47 47 ; eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
48 48 ; And set your prefix like: `prefix = /custom_prefix`
49 49 ; be sure to also set beaker.session.cookie_path = /custom_prefix if you need
50 50 ; to make your cookies only work on prefix url
51 51 [filter:proxy-prefix]
52 52 use = egg:PasteDeploy#prefix
53 53 prefix = /
54 54
55 55 [app:main]
56 56 ; The %(here)s variable will be replaced with the absolute path of parent directory
57 57 ; of this file
58 58 ; Each option in the app:main can be override by an environmental variable
59 59 ;
60 60 ;To override an option:
61 61 ;
62 62 ;RC_<KeyName>
63 63 ;Everything should be uppercase, . and - should be replaced by _.
64 64 ;For example, if you have these configuration settings:
65 65 ;rc_cache.repo_object.backend = foo
66 66 ;can be overridden by
67 67 ;export RC_CACHE_REPO_OBJECT_BACKEND=foo
68 68
69 69 use = egg:rhodecode-enterprise-ce
70 70
71 71 ; enable proxy prefix middleware, defined above
72 72 #filter-with = proxy-prefix
73 73
74 74 ; encryption key used to encrypt social plugin tokens,
75 75 ; remote_urls with credentials etc, if not set it defaults to
76 76 ; `beaker.session.secret`
77 77 #rhodecode.encrypted_values.secret =
78 78
79 79 ; decryption strict mode (enabled by default). It controls if decryption raises
80 80 ; `SignatureVerificationError` in case of wrong key, or damaged encryption data.
81 81 #rhodecode.encrypted_values.strict = false
82 82
83 83 ; Pick algorithm for encryption. Either fernet (more secure) or aes (default)
84 84 ; fernet is safer, and we strongly recommend switching to it.
85 85 ; Due to backward compatibility aes is used as default.
86 86 #rhodecode.encrypted_values.algorithm = fernet
87 87
88 88 ; Return gzipped responses from RhodeCode (static files/application)
89 89 gzip_responses = false
90 90
91 91 ; Auto-generate javascript routes file on startup
92 92 generate_js_files = false
93 93
94 94 ; System global default language.
95 95 ; All available languages: en (default), be, de, es, fr, it, ja, pl, pt, ru, zh
96 96 lang = en
97 97
98 98 ; Perform a full repository scan and import on each server start.
99 99 ; Settings this to true could lead to very long startup time.
100 100 startup.import_repos = false
101 101
102 102 ; URL at which the application is running. This is used for Bootstrapping
103 103 ; requests in context when no web request is available. Used in ishell, or
104 104 ; SSH calls. Set this for events to receive proper url for SSH calls.
105 105 app.base_url = http://rhodecode.local
106 106
107 107 ; Unique application ID. Should be a random unique string for security.
108 108 app_instance_uuid = rc-production
109 109
110 110 ; Cut off limit for large diffs (size in bytes). If overall diff size on
111 111 ; commit, or pull request exceeds this limit this diff will be displayed
112 112 ; partially. E.g 512000 == 512Kb
113 113 cut_off_limit_diff = 512000
114 114
115 115 ; Cut off limit for large files inside diffs (size in bytes). Each individual
116 116 ; file inside diff which exceeds this limit will be displayed partially.
117 117 ; E.g 128000 == 128Kb
118 118 cut_off_limit_file = 128000
119 119
120 120 ; Use cached version of vcs repositories everywhere. Recommended to be `true`
121 121 vcs_full_cache = true
122 122
123 123 ; Force https in RhodeCode, fixes https redirects, assumes it's always https.
124 124 ; Normally this is controlled by proper flags sent from http server such as Nginx or Apache
125 125 force_https = false
126 126
127 127 ; use Strict-Transport-Security headers
128 128 use_htsts = false
129 129
130 130 ; Set to true if your repos are exposed using the dumb protocol
131 131 git_update_server_info = false
132 132
133 133 ; RSS/ATOM feed options
134 134 rss_cut_off_limit = 256000
135 135 rss_items_per_page = 10
136 136 rss_include_diff = false
137 137
138 138 ; gist URL alias, used to create nicer urls for gist. This should be an
139 139 ; url that does rewrites to _admin/gists/{gistid}.
140 140 ; example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
141 141 ; RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
142 142 gist_alias_url =
143 143
144 144 ; List of views (using glob pattern syntax) that AUTH TOKENS could be
145 145 ; used for access.
146 146 ; Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
147 147 ; came from the the logged in user who own this authentication token.
148 148 ; Additionally @TOKEN syntax can be used to bound the view to specific
149 149 ; authentication token. Such view would be only accessible when used together
150 150 ; with this authentication token
151 151 ; list of all views can be found under `/_admin/permissions/auth_token_access`
152 152 ; The list should be "," separated and on a single line.
153 153 ; Most common views to enable:
154 154
155 155 # RepoCommitsView:repo_commit_download
156 156 # RepoCommitsView:repo_commit_patch
157 157 # RepoCommitsView:repo_commit_raw
158 158 # RepoCommitsView:repo_commit_raw@TOKEN
159 159 # RepoFilesView:repo_files_diff
160 160 # RepoFilesView:repo_archivefile
161 161 # RepoFilesView:repo_file_raw
162 162 # GistView:*
163 163 api_access_controllers_whitelist =
164 164
165 165 ; Default encoding used to convert from and to unicode
166 166 ; can be also a comma separated list of encoding in case of mixed encodings
167 167 default_encoding = UTF-8
168 168
169 169 ; instance-id prefix
170 170 ; a prefix key for this instance used for cache invalidation when running
171 171 ; multiple instances of RhodeCode, make sure it's globally unique for
172 172 ; all running RhodeCode instances. Leave empty if you don't use it
173 173 instance_id =
174 174
175 175 ; Fallback authentication plugin. Set this to a plugin ID to force the usage
176 176 ; of an authentication plugin also if it is disabled by it's settings.
177 177 ; This could be useful if you are unable to log in to the system due to broken
178 178 ; authentication settings. Then you can enable e.g. the internal RhodeCode auth
179 179 ; module to log in again and fix the settings.
180 180 ; Available builtin plugin IDs (hash is part of the ID):
181 181 ; egg:rhodecode-enterprise-ce#rhodecode
182 182 ; egg:rhodecode-enterprise-ce#pam
183 183 ; egg:rhodecode-enterprise-ce#ldap
184 184 ; egg:rhodecode-enterprise-ce#jasig_cas
185 185 ; egg:rhodecode-enterprise-ce#headers
186 186 ; egg:rhodecode-enterprise-ce#crowd
187 187
188 188 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
189 189
190 190 ; Flag to control loading of legacy plugins in py:/path format
191 191 auth_plugin.import_legacy_plugins = true
192 192
193 193 ; alternative return HTTP header for failed authentication. Default HTTP
194 194 ; response is 401 HTTPUnauthorized. Currently HG clients have troubles with
195 195 ; handling that causing a series of failed authentication calls.
196 196 ; Set this variable to 403 to return HTTPForbidden, or any other HTTP code
197 197 ; This will be served instead of default 401 on bad authentication
198 198 auth_ret_code =
199 199
200 200 ; use special detection method when serving auth_ret_code, instead of serving
201 201 ; ret_code directly, use 401 initially (Which triggers credentials prompt)
202 202 ; and then serve auth_ret_code to clients
203 203 auth_ret_code_detection = false
204 204
205 205 ; locking return code. When repository is locked return this HTTP code. 2XX
206 206 ; codes don't break the transactions while 4XX codes do
207 207 lock_ret_code = 423
208 208
209 209 ; allows to change the repository location in settings page
210 210 allow_repo_location_change = true
211 211
212 212 ; allows to setup custom hooks in settings page
213 213 allow_custom_hooks_settings = true
214 214
215 215 ; Generated license token required for EE edition license.
216 216 ; New generated token value can be found in Admin > settings > license page.
217 217 license_token =
218 218
219 219 ; This flag hides sensitive information on the license page such as token, and license data
220 220 license.hide_license_info = false
221 221
222 222 ; supervisor connection uri, for managing supervisor and logs.
223 223 supervisor.uri =
224 224
225 225 ; supervisord group name/id we only want this RC instance to handle
226 226 supervisor.group_id = prod
227 227
228 228 ; Display extended labs settings
229 229 labs_settings_active = true
230 230
231 231 ; Custom exception store path, defaults to TMPDIR
232 232 ; This is used to store exception from RhodeCode in shared directory
233 233 #exception_tracker.store_path =
234 234
235 235 ; Send email with exception details when it happens
236 236 #exception_tracker.send_email = false
237 237
238 238 ; Comma separated list of recipients for exception emails,
239 239 ; e.g admin@rhodecode.com,devops@rhodecode.com
240 240 ; Can be left empty, then emails will be sent to ALL super-admins
241 241 #exception_tracker.send_email_recipients =
242 242
243 243 ; optional prefix to Add to email Subject
244 244 #exception_tracker.email_prefix = [RHODECODE ERROR]
245 245
246 246 ; File store configuration. This is used to store and serve uploaded files
247 247 file_store.enabled = true
248 248
249 249 ; Storage backend, available options are: local
250 250 file_store.backend = local
251 251
252 252 ; path to store the uploaded binaries
253 253 file_store.storage_path = %(here)s/data/file_store
254 254
255 255 ; Uncomment and set this path to control settings for archive download cache.
256 256 ; Generated repo archives will be cached at this location
257 257 ; and served from the cache during subsequent requests for the same archive of
258 258 ; the repository. This path is important to be shared across filesystems and with
259 259 ; RhodeCode and vcsserver
260 260
261 261 ; Default is $cache_dir/archive_cache if not set
262 262 archive_cache.store_dir = %(here)s/data/archive_cache
263 263
264 264 ; The limit in GB sets how much data we cache before recycling last used, defaults to 10 gb
265 265 archive_cache.cache_size_gb = 40
266 266
267 267 ; By default cache uses sharding technique, this specifies how many shards are there
268 268 archive_cache.cache_shards = 4
269 269
270 270 ; #############
271 271 ; CELERY CONFIG
272 272 ; #############
273 273
274 274 ; manually run celery: /path/to/celery worker --task-events --beat --app rhodecode.lib.celerylib.loader --scheduler rhodecode.lib.celerylib.scheduler.RcScheduler --loglevel DEBUG --ini /path/to/rhodecode.ini
275 275
276 276 use_celery = false
277 277
278 278 ; path to store schedule database
279 279 #celerybeat-schedule.path =
280 280
281 281 ; connection url to the message broker (default redis)
282 282 celery.broker_url = redis://localhost:6379/8
283 283
284 284 ; rabbitmq example
285 285 #celery.broker_url = amqp://rabbitmq:qweqwe@localhost:5672/rabbitmqhost
286 286
287 287 ; maximum tasks to execute before worker restart
288 288 celery.max_tasks_per_child = 20
289 289
290 290 ; tasks will never be sent to the queue, but executed locally instead.
291 291 celery.task_always_eager = false
292 292
293 293 ; #############
294 294 ; DOGPILE CACHE
295 295 ; #############
296 296
297 297 ; Default cache dir for caches. Putting this into a ramdisk can boost performance.
298 298 ; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space
299 299 cache_dir = %(here)s/data
300 300
301 301 ; *********************************************
302 302 ; `sql_cache_short` cache for heavy SQL queries
303 303 ; Only supported backend is `memory_lru`
304 304 ; *********************************************
305 305 rc_cache.sql_cache_short.backend = dogpile.cache.rc.memory_lru
306 306 rc_cache.sql_cache_short.expiration_time = 30
307 307
308 308
309 309 ; *****************************************************
310 310 ; `cache_repo_longterm` cache for repo object instances
311 311 ; Only supported backend is `memory_lru`
312 312 ; *****************************************************
313 313 rc_cache.cache_repo_longterm.backend = dogpile.cache.rc.memory_lru
314 314 ; by default we use 30 Days, cache is still invalidated on push
315 315 rc_cache.cache_repo_longterm.expiration_time = 2592000
316 316 ; max items in LRU cache, set to smaller number to save memory, and expire last used caches
317 317 rc_cache.cache_repo_longterm.max_size = 10000
318 318
319 319
320 320 ; *********************************************
321 321 ; `cache_general` cache for general purpose use
322 322 ; for simplicity use rc.file_namespace backend,
323 323 ; for performance and scale use rc.redis
324 324 ; *********************************************
325 325 rc_cache.cache_general.backend = dogpile.cache.rc.file_namespace
326 326 rc_cache.cache_general.expiration_time = 43200
327 327 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
328 328 #rc_cache.cache_general.arguments.filename = /tmp/cache_general_db
329 329
330 330 ; alternative `cache_general` redis backend with distributed lock
331 331 #rc_cache.cache_general.backend = dogpile.cache.rc.redis
332 332 #rc_cache.cache_general.expiration_time = 300
333 333
334 334 ; redis_expiration_time needs to be greater then expiration_time
335 335 #rc_cache.cache_general.arguments.redis_expiration_time = 7200
336 336
337 337 #rc_cache.cache_general.arguments.host = localhost
338 338 #rc_cache.cache_general.arguments.port = 6379
339 339 #rc_cache.cache_general.arguments.db = 0
340 340 #rc_cache.cache_general.arguments.socket_timeout = 30
341 341 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
342 342 #rc_cache.cache_general.arguments.distributed_lock = true
343 343
344 344 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
345 345 #rc_cache.cache_general.arguments.lock_auto_renewal = true
346 346
347 347 ; *************************************************
348 348 ; `cache_perms` cache for permission tree, auth TTL
349 349 ; for simplicity use rc.file_namespace backend,
350 350 ; for performance and scale use rc.redis
351 351 ; *************************************************
352 352 rc_cache.cache_perms.backend = dogpile.cache.rc.file_namespace
353 353 rc_cache.cache_perms.expiration_time = 3600
354 354 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
355 355 #rc_cache.cache_perms.arguments.filename = /tmp/cache_perms_db
356 356
357 357 ; alternative `cache_perms` redis backend with distributed lock
358 358 #rc_cache.cache_perms.backend = dogpile.cache.rc.redis
359 359 #rc_cache.cache_perms.expiration_time = 300
360 360
361 361 ; redis_expiration_time needs to be greater then expiration_time
362 362 #rc_cache.cache_perms.arguments.redis_expiration_time = 7200
363 363
364 364 #rc_cache.cache_perms.arguments.host = localhost
365 365 #rc_cache.cache_perms.arguments.port = 6379
366 366 #rc_cache.cache_perms.arguments.db = 0
367 367 #rc_cache.cache_perms.arguments.socket_timeout = 30
368 368 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
369 369 #rc_cache.cache_perms.arguments.distributed_lock = true
370 370
371 371 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
372 372 #rc_cache.cache_perms.arguments.lock_auto_renewal = true
373 373
374 374 ; ***************************************************
375 375 ; `cache_repo` cache for file tree, Readme, RSS FEEDS
376 376 ; for simplicity use rc.file_namespace backend,
377 377 ; for performance and scale use rc.redis
378 378 ; ***************************************************
379 379 rc_cache.cache_repo.backend = dogpile.cache.rc.file_namespace
380 380 rc_cache.cache_repo.expiration_time = 2592000
381 381 ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set
382 382 #rc_cache.cache_repo.arguments.filename = /tmp/cache_repo_db
383 383
384 384 ; alternative `cache_repo` redis backend with distributed lock
385 385 #rc_cache.cache_repo.backend = dogpile.cache.rc.redis
386 386 #rc_cache.cache_repo.expiration_time = 2592000
387 387
388 388 ; redis_expiration_time needs to be greater then expiration_time
389 389 #rc_cache.cache_repo.arguments.redis_expiration_time = 2678400
390 390
391 391 #rc_cache.cache_repo.arguments.host = localhost
392 392 #rc_cache.cache_repo.arguments.port = 6379
393 393 #rc_cache.cache_repo.arguments.db = 1
394 394 #rc_cache.cache_repo.arguments.socket_timeout = 30
395 395 ; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends
396 396 #rc_cache.cache_repo.arguments.distributed_lock = true
397 397
398 398 ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen
399 399 #rc_cache.cache_repo.arguments.lock_auto_renewal = true
400 400
401 401 ; ##############
402 402 ; BEAKER SESSION
403 403 ; ##############
404 404
405 405 ; beaker.session.type is type of storage options for the logged users sessions. Current allowed
406 ; types are file, ext:redis, ext:database, ext:memcached, and memory (default if not specified).
407 ; Fastest ones are Redis and ext:database
406 ; types are file, ext:redis, ext:database, ext:memcached
407 ; Fastest ones are ext:redis and ext:database, DO NOT use memory type for session
408 408 beaker.session.type = file
409 409 beaker.session.data_dir = %(here)s/data/sessions
410 410
411 411 ; Redis based sessions
412 412 #beaker.session.type = ext:redis
413 413 #beaker.session.url = redis://127.0.0.1:6379/2
414 414
415 415 ; DB based session, fast, and allows easy management over logged in users
416 416 #beaker.session.type = ext:database
417 417 #beaker.session.table_name = db_session
418 418 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
419 419 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
420 420 #beaker.session.sa.pool_recycle = 3600
421 421 #beaker.session.sa.echo = false
422 422
423 423 beaker.session.key = rhodecode
424 424 beaker.session.secret = production-rc-uytcxaz
425 425 beaker.session.lock_dir = %(here)s/data/sessions/lock
426 426
427 427 ; Secure encrypted cookie. Requires AES and AES python libraries
428 428 ; you must disable beaker.session.secret to use this
429 429 #beaker.session.encrypt_key = key_for_encryption
430 430 #beaker.session.validate_key = validation_key
431 431
432 432 ; Sets session as invalid (also logging out user) if it haven not been
433 433 ; accessed for given amount of time in seconds
434 434 beaker.session.timeout = 2592000
435 435 beaker.session.httponly = true
436 436
437 437 ; Path to use for the cookie. Set to prefix if you use prefix middleware
438 438 #beaker.session.cookie_path = /custom_prefix
439 439
440 440 ; Set https secure cookie
441 441 beaker.session.secure = false
442 442
443 443 ; default cookie expiration time in seconds, set to `true` to set expire
444 444 ; at browser close
445 445 #beaker.session.cookie_expires = 3600
446 446
447 447 ; #############################
448 448 ; SEARCH INDEXING CONFIGURATION
449 449 ; #############################
450 450
451 451 ; Full text search indexer is available in rhodecode-tools under
452 452 ; `rhodecode-tools index` command
453 453
454 454 ; WHOOSH Backend, doesn't require additional services to run
455 455 ; it works good with few dozen repos
456 456 search.module = rhodecode.lib.index.whoosh
457 457 search.location = %(here)s/data/index
458 458
459 459 ; ####################
460 460 ; CHANNELSTREAM CONFIG
461 461 ; ####################
462 462
463 463 ; channelstream enables persistent connections and live notification
464 464 ; in the system. It's also used by the chat system
465 465
466 466 channelstream.enabled = false
467 467
468 468 ; server address for channelstream server on the backend
469 469 channelstream.server = 127.0.0.1:9800
470 470
471 471 ; location of the channelstream server from outside world
472 472 ; use ws:// for http or wss:// for https. This address needs to be handled
473 473 ; by external HTTP server such as Nginx or Apache
474 474 ; see Nginx/Apache configuration examples in our docs
475 475 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
476 476 channelstream.secret = secret
477 477 channelstream.history.location = %(here)s/channelstream_history
478 478
479 479 ; Internal application path that Javascript uses to connect into.
480 480 ; If you use proxy-prefix the prefix should be added before /_channelstream
481 481 channelstream.proxy_path = /_channelstream
482 482
483 483
484 484 ; ##############################
485 485 ; MAIN RHODECODE DATABASE CONFIG
486 486 ; ##############################
487 487
488 488 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
489 489 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
490 490 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode?charset=utf8
491 491 ; pymysql is an alternative driver for MySQL, use in case of problems with default one
492 492 #sqlalchemy.db1.url = mysql+pymysql://root:qweqwe@localhost/rhodecode
493 493
494 494 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
495 495
496 496 ; see sqlalchemy docs for other advanced settings
497 497 ; print the sql statements to output
498 498 sqlalchemy.db1.echo = false
499 499
500 500 ; recycle the connections after this amount of seconds
501 501 sqlalchemy.db1.pool_recycle = 3600
502 502
503 503 ; the number of connections to keep open inside the connection pool.
504 504 ; 0 indicates no limit
505 505 ; the general calculus with gevent is:
506 506 ; if your system allows 500 concurrent greenlets (max_connections) that all do database access,
507 507 ; then increase pool size + max overflow so that they add up to 500.
508 508 #sqlalchemy.db1.pool_size = 5
509 509
510 510 ; The number of connections to allow in connection pool "overflow", that is
511 511 ; connections that can be opened above and beyond the pool_size setting,
512 512 ; which defaults to five.
513 513 #sqlalchemy.db1.max_overflow = 10
514 514
515 515 ; Connection check ping, used to detect broken database connections
516 516 ; could be enabled to better handle cases if MySQL has gone away errors
517 517 #sqlalchemy.db1.ping_connection = true
518 518
519 519 ; ##########
520 520 ; VCS CONFIG
521 521 ; ##########
522 522 vcs.server.enable = true
523 523 vcs.server = localhost:9900
524 524
525 525 ; Web server connectivity protocol, responsible for web based VCS operations
526 526 ; Available protocols are:
527 527 ; `http` - use http-rpc backend (default)
528 528 vcs.server.protocol = http
529 529
530 530 ; Push/Pull operations protocol, available options are:
531 531 ; `http` - use http-rpc backend (default)
532 532 vcs.scm_app_implementation = http
533 533
534 534 ; Push/Pull operations hooks protocol, available options are:
535 535 ; `http` - use http-rpc backend (default)
536 536 vcs.hooks.protocol = http
537 537
538 538 ; Host on which this instance is listening for hooks. vcsserver will call this host to pull/push hooks so it should be
539 539 ; accessible via network.
540 540 ; Use vcs.hooks.host = "*" to bind to current hostname (for Docker)
541 541 vcs.hooks.host = *
542 542
543 543 ; Start VCSServer with this instance as a subprocess, useful for development
544 544 vcs.start_server = false
545 545
546 546 ; List of enabled VCS backends, available options are:
547 547 ; `hg` - mercurial
548 548 ; `git` - git
549 549 ; `svn` - subversion
550 550 vcs.backends = hg, git, svn
551 551
552 552 ; Wait this number of seconds before killing connection to the vcsserver
553 553 vcs.connection_timeout = 3600
554 554
555 555 ; Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
556 556 ; Set a numeric version for your current SVN e.g 1.8, or 1.12
557 557 ; Legacy available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible, pre-1.9-compatible
558 558 #vcs.svn.compatible_version = 1.8
559 559
560 560 ; Cache flag to cache vcsserver remote calls locally
561 561 ; It uses cache_region `cache_repo`
562 562 vcs.methods.cache = true
563 563
564 564 ; ####################################################
565 565 ; Subversion proxy support (mod_dav_svn)
566 566 ; Maps RhodeCode repo groups into SVN paths for Apache
567 567 ; ####################################################
568 568
569 569 ; Enable or disable the config file generation.
570 570 svn.proxy.generate_config = false
571 571
572 572 ; Generate config file with `SVNListParentPath` set to `On`.
573 573 svn.proxy.list_parent_path = true
574 574
575 575 ; Set location and file name of generated config file.
576 576 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
577 577
578 578 ; alternative mod_dav config template. This needs to be a valid mako template
579 579 ; Example template can be found in the source code:
580 580 ; rhodecode/apps/svn_support/templates/mod-dav-svn.conf.mako
581 581 #svn.proxy.config_template = ~/.rccontrol/enterprise-1/custom_svn_conf.mako
582 582
583 583 ; Used as a prefix to the `Location` block in the generated config file.
584 584 ; In most cases it should be set to `/`.
585 585 svn.proxy.location_root = /
586 586
587 587 ; Command to reload the mod dav svn configuration on change.
588 588 ; Example: `/etc/init.d/apache2 reload` or /home/USER/apache_reload.sh
589 589 ; Make sure user who runs RhodeCode process is allowed to reload Apache
590 590 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
591 591
592 592 ; If the timeout expires before the reload command finishes, the command will
593 593 ; be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
594 594 #svn.proxy.reload_timeout = 10
595 595
596 596 ; ####################
597 597 ; SSH Support Settings
598 598 ; ####################
599 599
600 600 ; Defines if a custom authorized_keys file should be created and written on
601 601 ; any change user ssh keys. Setting this to false also disables possibility
602 602 ; of adding SSH keys by users from web interface. Super admins can still
603 603 ; manage SSH Keys.
604 604 ssh.generate_authorized_keyfile = false
605 605
606 606 ; Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
607 607 # ssh.authorized_keys_ssh_opts =
608 608
609 609 ; Path to the authorized_keys file where the generate entries are placed.
610 610 ; It is possible to have multiple key files specified in `sshd_config` e.g.
611 611 ; AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
612 612 ssh.authorized_keys_file_path = ~/.ssh/authorized_keys_rhodecode
613 613
614 614 ; Command to execute the SSH wrapper. The binary is available in the
615 615 ; RhodeCode installation directory.
616 616 ; e.g ~/.rccontrol/community-1/profile/bin/rc-ssh-wrapper
617 617 ssh.wrapper_cmd = ~/.rccontrol/community-1/rc-ssh-wrapper
618 618
619 619 ; Allow shell when executing the ssh-wrapper command
620 620 ssh.wrapper_cmd_allow_shell = false
621 621
622 622 ; Enables logging, and detailed output send back to the client during SSH
623 623 ; operations. Useful for debugging, shouldn't be used in production.
624 624 ssh.enable_debug_logging = false
625 625
626 626 ; Paths to binary executable, by default they are the names, but we can
627 627 ; override them if we want to use a custom one
628 628 ssh.executable.hg = ~/.rccontrol/vcsserver-1/profile/bin/hg
629 629 ssh.executable.git = ~/.rccontrol/vcsserver-1/profile/bin/git
630 630 ssh.executable.svn = ~/.rccontrol/vcsserver-1/profile/bin/svnserve
631 631
632 632 ; Enables SSH key generator web interface. Disabling this still allows users
633 633 ; to add their own keys.
634 634 ssh.enable_ui_key_generator = true
635 635
636 636
637 637 ; #################
638 638 ; APPENLIGHT CONFIG
639 639 ; #################
640 640
641 641 ; Appenlight is tailored to work with RhodeCode, see
642 642 ; http://appenlight.rhodecode.com for details how to obtain an account
643 643
644 644 ; Appenlight integration enabled
645 645 #appenlight = false
646 646
647 647 #appenlight.server_url = https://api.appenlight.com
648 648 #appenlight.api_key = YOUR_API_KEY
649 649 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
650 650
651 651 ; used for JS client
652 652 #appenlight.api_public_key = YOUR_API_PUBLIC_KEY
653 653
654 654 ; TWEAK AMOUNT OF INFO SENT HERE
655 655
656 656 ; enables 404 error logging (default False)
657 657 #appenlight.report_404 = false
658 658
659 659 ; time in seconds after request is considered being slow (default 1)
660 660 #appenlight.slow_request_time = 1
661 661
662 662 ; record slow requests in application
663 663 ; (needs to be enabled for slow datastore recording and time tracking)
664 664 #appenlight.slow_requests = true
665 665
666 666 ; enable hooking to application loggers
667 667 #appenlight.logging = true
668 668
669 669 ; minimum log level for log capture
670 670 #ppenlight.logging.level = WARNING
671 671
672 672 ; send logs only from erroneous/slow requests
673 673 ; (saves API quota for intensive logging)
674 674 #appenlight.logging_on_error = false
675 675
676 676 ; list of additional keywords that should be grabbed from environ object
677 677 ; can be string with comma separated list of words in lowercase
678 678 ; (by default client will always send following info:
679 679 ; 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
680 680 ; start with HTTP* this list be extended with additional keywords here
681 681 #appenlight.environ_keys_whitelist =
682 682
683 683 ; list of keywords that should be blanked from request object
684 684 ; can be string with comma separated list of words in lowercase
685 685 ; (by default client will always blank keys that contain following words
686 686 ; 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
687 687 ; this list be extended with additional keywords set here
688 688 #appenlight.request_keys_blacklist =
689 689
690 690 ; list of namespaces that should be ignores when gathering log entries
691 691 ; can be string with comma separated list of namespaces
692 692 ; (by default the client ignores own entries: appenlight_client.client)
693 693 #appenlight.log_namespace_blacklist =
694 694
695 695 ; Statsd client config, this is used to send metrics to statsd
696 696 ; We recommend setting statsd_exported and scrape them using Prometheus
697 697 #statsd.enabled = false
698 698 #statsd.statsd_host = 0.0.0.0
699 699 #statsd.statsd_port = 8125
700 700 #statsd.statsd_prefix =
701 701 #statsd.statsd_ipv6 = false
702 702
703 703 ; configure logging automatically at server startup set to false
704 704 ; to use the below custom logging config.
705 705 ; RC_LOGGING_FORMATTER
706 706 ; RC_LOGGING_LEVEL
707 707 ; env variables can control the settings for logging in case of autoconfigure
708 708
709 709 #logging.autoconfigure = true
710 710
711 711 ; specify your own custom logging config file to configure logging
712 712 #logging.logging_conf_file = /path/to/custom_logging.ini
713 713
714 714 ; Dummy marker to add new entries after.
715 715 ; Add any custom entries below. Please don't remove this marker.
716 716 custom.conf = 1
717 717
718 718
719 719 ; #####################
720 720 ; LOGGING CONFIGURATION
721 721 ; #####################
722 722
723 723 [loggers]
724 724 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
725 725
726 726 [handlers]
727 727 keys = console, console_sql
728 728
729 729 [formatters]
730 730 keys = generic, json, color_formatter, color_formatter_sql
731 731
732 732 ; #######
733 733 ; LOGGERS
734 734 ; #######
735 735 [logger_root]
736 736 level = NOTSET
737 737 handlers = console
738 738
739 739 [logger_sqlalchemy]
740 740 level = INFO
741 741 handlers = console_sql
742 742 qualname = sqlalchemy.engine
743 743 propagate = 0
744 744
745 745 [logger_beaker]
746 746 level = DEBUG
747 747 handlers =
748 748 qualname = beaker.container
749 749 propagate = 1
750 750
751 751 [logger_rhodecode]
752 752 level = DEBUG
753 753 handlers =
754 754 qualname = rhodecode
755 755 propagate = 1
756 756
757 757 [logger_ssh_wrapper]
758 758 level = DEBUG
759 759 handlers =
760 760 qualname = ssh_wrapper
761 761 propagate = 1
762 762
763 763 [logger_celery]
764 764 level = DEBUG
765 765 handlers =
766 766 qualname = celery
767 767
768 768
769 769 ; ########
770 770 ; HANDLERS
771 771 ; ########
772 772
773 773 [handler_console]
774 774 class = StreamHandler
775 775 args = (sys.stderr, )
776 776 level = INFO
777 777 ; To enable JSON formatted logs replace 'generic/color_formatter' with 'json'
778 778 ; This allows sending properly formatted logs to grafana loki or elasticsearch
779 779 formatter = generic
780 780
781 781 [handler_console_sql]
782 782 ; "level = DEBUG" logs SQL queries and results.
783 783 ; "level = INFO" logs SQL queries.
784 784 ; "level = WARN" logs neither. (Recommended for production systems.)
785 785 class = StreamHandler
786 786 args = (sys.stderr, )
787 787 level = WARN
788 788 ; To enable JSON formatted logs replace 'generic/color_formatter_sql' with 'json'
789 789 ; This allows sending properly formatted logs to grafana loki or elasticsearch
790 790 formatter = generic
791 791
792 792 ; ##########
793 793 ; FORMATTERS
794 794 ; ##########
795 795
796 796 [formatter_generic]
797 797 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
798 798 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
799 799 datefmt = %Y-%m-%d %H:%M:%S
800 800
801 801 [formatter_color_formatter]
802 802 class = rhodecode.lib.logging_formatter.ColorFormatter
803 803 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
804 804 datefmt = %Y-%m-%d %H:%M:%S
805 805
806 806 [formatter_color_formatter_sql]
807 807 class = rhodecode.lib.logging_formatter.ColorFormatterSql
808 808 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
809 809 datefmt = %Y-%m-%d %H:%M:%S
810 810
811 811 [formatter_json]
812 812 format = %(timestamp)s %(levelname)s %(name)s %(message)s %(req_id)s
813 813 class = rhodecode.lib._vendor.jsonlogger.JsonFormatter
General Comments 0
You need to be logged in to leave comments. Login now