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