##// END OF EJS Templates
ini: remove 'pdebug' setting (profiling)...
Thomas De Schampheleire -
r6525:be56b242 default
parent child Browse files
Show More
@@ -1,616 +1,615
1 1 ################################################################################
2 2 ################################################################################
3 3 # Kallithea - Development config: #
4 4 # listening on *:5000 #
5 5 # sqlite and kallithea.db #
6 6 # initial_repo_scan = true #
7 7 # set debug = true #
8 8 # verbose and colorful logging #
9 9 # #
10 10 # The %(here)s variable will be replaced with the parent directory of this file#
11 11 ################################################################################
12 12 ################################################################################
13 13
14 14 [DEFAULT]
15 15 debug = true
16 pdebug = false
17 16
18 17 ################################################################################
19 18 ## Email settings ##
20 19 ## ##
21 20 ## Refer to the documentation ("Email settings") for more details. ##
22 21 ## ##
23 22 ## It is recommended to use a valid sender address that passes access ##
24 23 ## validation and spam filtering in mail servers. ##
25 24 ################################################################################
26 25
27 26 ## 'From' header for application emails. You can optionally add a name.
28 27 ## Default:
29 28 #app_email_from = Kallithea
30 29 ## Examples:
31 30 #app_email_from = Kallithea <kallithea-noreply@example.com>
32 31 #app_email_from = kallithea-noreply@example.com
33 32
34 33 ## Subject prefix for application emails.
35 34 ## A space between this prefix and the real subject is automatically added.
36 35 ## Default:
37 36 #email_prefix =
38 37 ## Example:
39 38 #email_prefix = [Kallithea]
40 39
41 40 ## Recipients for error emails and fallback recipients of application mails.
42 41 ## Multiple addresses can be specified, space-separated.
43 42 ## Only addresses are allowed, do not add any name part.
44 43 ## Default:
45 44 #email_to =
46 45 ## Examples:
47 46 #email_to = admin@example.com
48 47 #email_to = admin@example.com another_admin@example.com
49 48
50 49 ## 'From' header for error emails. You can optionally add a name.
51 50 ## Default:
52 51 #error_email_from = pylons@yourapp.com
53 52 ## Examples:
54 53 #error_email_from = Kallithea Errors <kallithea-noreply@example.com>
55 54 #error_email_from = paste_error@example.com
56 55
57 56 ## SMTP server settings
58 57 ## If specifying credentials, make sure to use secure connections.
59 58 ## Default: Send unencrypted unauthenticated mails to the specified smtp_server.
60 59 ## For "SSL", use smtp_use_ssl = true and smtp_port = 465.
61 60 ## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587.
62 61 #smtp_server = smtp.example.com
63 62 #smtp_username =
64 63 #smtp_password =
65 64 #smtp_port = 25
66 65 #smtp_use_ssl = false
67 66 #smtp_use_tls = false
68 67
69 68 [server:main]
70 69 ## Gearbox default web server ##
71 70 #use = egg:gearbox#wsgiref
72 71 ## nr of worker threads to spawn
73 72 #threadpool_workers = 1
74 73 ## max request before thread respawn
75 74 #threadpool_max_requests = 100
76 75 ## option to use threads of process
77 76 #use_threadpool = true
78 77
79 78 ## Gearbox gevent web server ##
80 79 #use = egg:gearbox#gevent
81 80
82 81 ## WAITRESS ##
83 82 use = egg:waitress#main
84 83 ## number of worker threads
85 84 threads = 1
86 85 ## MAX BODY SIZE 100GB
87 86 max_request_body_size = 107374182400
88 87 ## use poll instead of select, fixes fd limits, may not work on old
89 88 ## windows systems.
90 89 #asyncore_use_poll = True
91 90
92 91 ## GUNICORN ##
93 92 #use = egg:gunicorn#main
94 93 ## number of process workers. You must set `instance_id = *` when this option
95 94 ## is set to more than one worker
96 95 #workers = 1
97 96 ## process name
98 97 #proc_name = kallithea
99 98 ## type of worker class, one of sync, eventlet, gevent, tornado
100 99 ## recommended for bigger setup is using of of other than sync one
101 100 #worker_class = sync
102 101 #max_requests = 1000
103 102 ## amount of time a worker can handle request before it gets killed and
104 103 ## restarted
105 104 #timeout = 3600
106 105
107 106 ## UWSGI ##
108 107 ## run with uwsgi --ini-paste-logged <inifile.ini>
109 108 #[uwsgi]
110 109 #socket = /tmp/uwsgi.sock
111 110 #master = true
112 111 #http = 127.0.0.1:5000
113 112
114 113 ## set as deamon and redirect all output to file
115 114 #daemonize = ./uwsgi_kallithea.log
116 115
117 116 ## master process PID
118 117 #pidfile = ./uwsgi_kallithea.pid
119 118
120 119 ## stats server with workers statistics, use uwsgitop
121 120 ## for monitoring, `uwsgitop 127.0.0.1:1717`
122 121 #stats = 127.0.0.1:1717
123 122 #memory-report = true
124 123
125 124 ## log 5XX errors
126 125 #log-5xx = true
127 126
128 127 ## Set the socket listen queue size.
129 128 #listen = 256
130 129
131 130 ## Gracefully Reload workers after the specified amount of managed requests
132 131 ## (avoid memory leaks).
133 132 #max-requests = 1000
134 133
135 134 ## enable large buffers
136 135 #buffer-size = 65535
137 136
138 137 ## socket and http timeouts ##
139 138 #http-timeout = 3600
140 139 #socket-timeout = 3600
141 140
142 141 ## Log requests slower than the specified number of milliseconds.
143 142 #log-slow = 10
144 143
145 144 ## Exit if no app can be loaded.
146 145 #need-app = true
147 146
148 147 ## Set lazy mode (load apps in workers instead of master).
149 148 #lazy = true
150 149
151 150 ## scaling ##
152 151 ## set cheaper algorithm to use, if not set default will be used
153 152 #cheaper-algo = spare
154 153
155 154 ## minimum number of workers to keep at all times
156 155 #cheaper = 1
157 156
158 157 ## number of workers to spawn at startup
159 158 #cheaper-initial = 1
160 159
161 160 ## maximum number of workers that can be spawned
162 161 #workers = 4
163 162
164 163 ## how many workers should be spawned at a time
165 164 #cheaper-step = 1
166 165
167 166 ## COMMON ##
168 167 #host = 127.0.0.1
169 168 host = 0.0.0.0
170 169 port = 5000
171 170
172 171 ## middleware for hosting the WSGI application under a URL prefix
173 172 #[filter:proxy-prefix]
174 173 #use = egg:PasteDeploy#prefix
175 174 #prefix = /<your-prefix>
176 175
177 176 [app:main]
178 177 use = egg:kallithea
179 178 ## enable proxy prefix middleware
180 179 #filter-with = proxy-prefix
181 180
182 181 full_stack = true
183 182 static_files = true
184 183 ## Available Languages:
185 184 ## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW
186 185 lang =
187 186 cache_dir = %(here)s/data
188 187 index_dir = %(here)s/data/index
189 188
190 189 ## perform a full repository scan on each server start, this should be
191 190 ## set to false after first startup, to allow faster server restarts.
192 191 #initial_repo_scan = false
193 192 initial_repo_scan = true
194 193
195 194 ## uncomment and set this path to use archive download cache
196 195 archive_cache_dir = %(here)s/tarballcache
197 196
198 197 ## change this to unique ID for security
199 198 app_instance_uuid = development-not-secret
200 199
201 200 ## cut off limit for large diffs (size in bytes)
202 201 cut_off_limit = 256000
203 202
204 203 ## force https in Kallithea, fixes https redirects, assumes it's always https
205 204 force_https = false
206 205
207 206 ## use Strict-Transport-Security headers
208 207 use_htsts = false
209 208
210 209 ## number of commits stats will parse on each iteration
211 210 commit_parse_limit = 25
212 211
213 212 ## path to git executable
214 213 git_path = git
215 214
216 215 ## git rev filter option, --all is the default filter, if you need to
217 216 ## hide all refs in changelog switch this to --branches --tags
218 217 #git_rev_filter = --branches --tags
219 218
220 219 ## RSS feed options
221 220 rss_cut_off_limit = 256000
222 221 rss_items_per_page = 10
223 222 rss_include_diff = false
224 223
225 224 ## options for showing and identifying changesets
226 225 show_sha_length = 12
227 226 show_revision_number = false
228 227
229 228 ## Canonical URL to use when creating full URLs in UI and texts.
230 229 ## Useful when the site is available under different names or protocols.
231 230 ## Defaults to what is provided in the WSGI environment.
232 231 #canonical_url = https://kallithea.example.com/repos
233 232
234 233 ## gist URL alias, used to create nicer urls for gist. This should be an
235 234 ## url that does rewrites to _admin/gists/<gistid>.
236 235 ## example: http://gist.example.com/{gistid}. Empty means use the internal
237 236 ## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid>
238 237 gist_alias_url =
239 238
240 239 ## white list of API enabled controllers. This allows to add list of
241 240 ## controllers to which access will be enabled by api_key. eg: to enable
242 241 ## api access to raw_files put `FilesController:raw`, to enable access to patches
243 242 ## add `ChangesetController:changeset_patch`. This list should be "," separated
244 243 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
245 244 ## Recommended settings below are commented out:
246 245 api_access_controllers_whitelist =
247 246 # ChangesetController:changeset_patch,
248 247 # ChangesetController:changeset_raw,
249 248 # FilesController:raw,
250 249 # FilesController:archivefile
251 250
252 251 ## default encoding used to convert from and to unicode
253 252 ## can be also a comma separated list of encoding in case of mixed encodings
254 253 default_encoding = utf8
255 254
256 255 ## issue tracker for Kallithea (leave blank to disable, absent for default)
257 256 #bugtracker = https://bitbucket.org/conservancy/kallithea/issues
258 257
259 258 ## issue tracking mapping for commits messages
260 259 ## comment out issue_pat, issue_server, issue_prefix to enable
261 260
262 261 ## pattern to get the issues from commit messages
263 262 ## default one used here is #<numbers> with a regex passive group for `#`
264 263 ## {id} will be all groups matched from this pattern
265 264
266 265 issue_pat = (?:\s*#)(\d+)
267 266
268 267 ## server url to the issue, each {id} will be replaced with match
269 268 ## fetched from the regex and {repo} is replaced with full repository name
270 269 ## including groups {repo_name} is replaced with just name of repo
271 270
272 271 issue_server_link = https://issues.example.com/{repo}/issue/{id}
273 272
274 273 ## prefix to add to link to indicate it's an url
275 274 ## #314 will be replaced by <issue_prefix><id>
276 275
277 276 issue_prefix = #
278 277
279 278 ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
280 279 ## multiple patterns, to other issues server, wiki or others
281 280 ## below an example how to create a wiki pattern
282 281 # wiki-some-id -> https://wiki.example.com/some-id
283 282
284 283 #issue_pat_wiki = (?:wiki-)(.+)
285 284 #issue_server_link_wiki = https://wiki.example.com/{id}
286 285 #issue_prefix_wiki = WIKI-
287 286
288 287 ## alternative return HTTP header for failed authentication. Default HTTP
289 288 ## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with
290 289 ## handling that. Set this variable to 403 to return HTTPForbidden
291 290 auth_ret_code =
292 291
293 292 ## locking return code. When repository is locked return this HTTP code. 2XX
294 293 ## codes don't break the transactions while 4XX codes do
295 294 lock_ret_code = 423
296 295
297 296 ## allows to change the repository location in settings page
298 297 allow_repo_location_change = True
299 298
300 299 ## allows to setup custom hooks in settings page
301 300 allow_custom_hooks_settings = True
302 301
303 302 ## extra extensions for indexing, space separated and without the leading '.'.
304 303 # index.extensions =
305 304 # gemfile
306 305 # lock
307 306
308 307 ## extra filenames for indexing, space separated
309 308 # index.filenames =
310 309 # .dockerignore
311 310 # .editorconfig
312 311 # INSTALL
313 312 # CHANGELOG
314 313
315 314 ####################################
316 315 ### CELERY CONFIG ####
317 316 ####################################
318 317
319 318 use_celery = false
320 319
321 320 ## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq:
322 321 broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost
323 322
324 323 celery.imports = kallithea.lib.celerylib.tasks
325 324 celery.accept.content = pickle
326 325 celery.result.backend = amqp
327 326 celery.result.dburi = amqp://
328 327 celery.result.serialier = json
329 328
330 329 #celery.send.task.error.emails = true
331 330 #celery.amqp.task.result.expires = 18000
332 331
333 332 celeryd.concurrency = 2
334 333 celeryd.max.tasks.per.child = 1
335 334
336 335 ## If true, tasks will never be sent to the queue, but executed locally instead.
337 336 celery.always.eager = false
338 337
339 338 ####################################
340 339 ### BEAKER CACHE ####
341 340 ####################################
342 341
343 342 beaker.cache.data_dir = %(here)s/data/cache/data
344 343 beaker.cache.lock_dir = %(here)s/data/cache/lock
345 344
346 345 beaker.cache.regions = short_term,long_term,sql_cache_short
347 346
348 347 beaker.cache.short_term.type = memory
349 348 beaker.cache.short_term.expire = 60
350 349 beaker.cache.short_term.key_length = 256
351 350
352 351 beaker.cache.long_term.type = memory
353 352 beaker.cache.long_term.expire = 36000
354 353 beaker.cache.long_term.key_length = 256
355 354
356 355 beaker.cache.sql_cache_short.type = memory
357 356 beaker.cache.sql_cache_short.expire = 10
358 357 beaker.cache.sql_cache_short.key_length = 256
359 358
360 359 ####################################
361 360 ### BEAKER SESSION ####
362 361 ####################################
363 362
364 363 ## Name of session cookie. Should be unique for a given host and path, even when running
365 364 ## on different ports. Otherwise, cookie sessions will be shared and messed up.
366 365 beaker.session.key = kallithea
367 366 ## Sessions should always only be accessible by the browser, not directly by JavaScript.
368 367 beaker.session.httponly = true
369 368 ## Session lifetime. 2592000 seconds is 30 days.
370 369 beaker.session.timeout = 2592000
371 370
372 371 ## Server secret used with HMAC to ensure integrity of cookies.
373 372 beaker.session.secret = development-not-secret
374 373 ## Further, encrypt the data with AES.
375 374 #beaker.session.encrypt_key = <key_for_encryption>
376 375 #beaker.session.validate_key = <validation_key>
377 376
378 377 ## Type of storage used for the session, current types are
379 378 ## dbm, file, memcached, database, and memory.
380 379
381 380 ## File system storage of session data. (default)
382 381 #beaker.session.type = file
383 382
384 383 ## Cookie only, store all session data inside the cookie. Requires secure secrets.
385 384 #beaker.session.type = cookie
386 385
387 386 ## Database storage of session data.
388 387 #beaker.session.type = ext:database
389 388 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea
390 389 #beaker.session.table_name = db_session
391 390
392 391 ############################
393 392 ## ERROR HANDLING SYSTEMS ##
394 393 ############################
395 394
396 395 ####################
397 396 ### [appenlight] ###
398 397 ####################
399 398
400 399 ## AppEnlight is tailored to work with Kallithea, see
401 400 ## http://appenlight.com for details how to obtain an account
402 401 ## you must install python package `appenlight_client` to make it work
403 402
404 403 ## appenlight enabled
405 404 appenlight = false
406 405
407 406 appenlight.server_url = https://api.appenlight.com
408 407 appenlight.api_key = YOUR_API_KEY
409 408
410 409 ## TWEAK AMOUNT OF INFO SENT HERE
411 410
412 411 ## enables 404 error logging (default False)
413 412 appenlight.report_404 = false
414 413
415 414 ## time in seconds after request is considered being slow (default 1)
416 415 appenlight.slow_request_time = 1
417 416
418 417 ## record slow requests in application
419 418 ## (needs to be enabled for slow datastore recording and time tracking)
420 419 appenlight.slow_requests = true
421 420
422 421 ## enable hooking to application loggers
423 422 #appenlight.logging = true
424 423
425 424 ## minimum log level for log capture
426 425 #appenlight.logging.level = WARNING
427 426
428 427 ## send logs only from erroneous/slow requests
429 428 ## (saves API quota for intensive logging)
430 429 appenlight.logging_on_error = false
431 430
432 431 ## list of additional keywords that should be grabbed from environ object
433 432 ## can be string with comma separated list of words in lowercase
434 433 ## (by default client will always send following info:
435 434 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
436 435 ## start with HTTP* this list be extended with additional keywords here
437 436 appenlight.environ_keys_whitelist =
438 437
439 438 ## list of keywords that should be blanked from request object
440 439 ## can be string with comma separated list of words in lowercase
441 440 ## (by default client will always blank keys that contain following words
442 441 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
443 442 ## this list be extended with additional keywords set here
444 443 appenlight.request_keys_blacklist =
445 444
446 445 ## list of namespaces that should be ignores when gathering log entries
447 446 ## can be string with comma separated list of namespaces
448 447 ## (by default the client ignores own entries: appenlight_client.client)
449 448 appenlight.log_namespace_blacklist =
450 449
451 450 ################
452 451 ### [sentry] ###
453 452 ################
454 453
455 454 ## sentry is a alternative open source error aggregator
456 455 ## you must install python packages `sentry` and `raven` to enable
457 456
458 457 sentry.dsn = YOUR_DNS
459 458 sentry.servers =
460 459 sentry.name =
461 460 sentry.key =
462 461 sentry.public_key =
463 462 sentry.secret_key =
464 463 sentry.project =
465 464 sentry.site =
466 465 sentry.include_paths =
467 466 sentry.exclude_paths =
468 467
469 468 ################################################################################
470 469 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
471 470 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
472 471 ## execute malicious code after an exception is raised. ##
473 472 ################################################################################
474 473 #set debug = false
475 474 set debug = true
476 475
477 476 ##################################
478 477 ### LOGVIEW CONFIG ###
479 478 ##################################
480 479
481 480 logview.sqlalchemy = #faa
482 481 logview.pylons.templating = #bfb
483 482 logview.pylons.util = #eee
484 483
485 484 #########################################################
486 485 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
487 486 #########################################################
488 487
489 488 # SQLITE [default]
490 489 sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60
491 490
492 491 # POSTGRESQL
493 492 #sqlalchemy.url = postgresql://user:pass@localhost/kallithea
494 493
495 494 # MySQL
496 495 #sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
497 496
498 497 # see sqlalchemy docs for others
499 498
500 499 sqlalchemy.echo = false
501 500 sqlalchemy.pool_recycle = 3600
502 501
503 502 ################################
504 503 ### ALEMBIC CONFIGURATION ####
505 504 ################################
506 505
507 506 [alembic]
508 507 script_location = kallithea:alembic
509 508
510 509 ################################
511 510 ### LOGGING CONFIGURATION ####
512 511 ################################
513 512
514 513 [loggers]
515 514 keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer
516 515
517 516 [handlers]
518 517 keys = console, console_sql
519 518
520 519 [formatters]
521 520 keys = generic, color_formatter, color_formatter_sql
522 521
523 522 #############
524 523 ## LOGGERS ##
525 524 #############
526 525
527 526 [logger_root]
528 527 level = NOTSET
529 528 handlers = console
530 529
531 530 [logger_routes]
532 531 level = DEBUG
533 532 handlers =
534 533 qualname = routes.middleware
535 534 ## "level = DEBUG" logs the route matched and routing variables.
536 535 propagate = 1
537 536
538 537 [logger_beaker]
539 538 level = DEBUG
540 539 handlers =
541 540 qualname = beaker.container
542 541 propagate = 1
543 542
544 543 [logger_templates]
545 544 level = INFO
546 545 handlers =
547 546 qualname = pylons.templating
548 547 propagate = 1
549 548
550 549 [logger_kallithea]
551 550 level = DEBUG
552 551 handlers =
553 552 qualname = kallithea
554 553 propagate = 1
555 554
556 555 [logger_tg]
557 556 level = DEBUG
558 557 handlers =
559 558 qualname = tg
560 559 propagate = 1
561 560
562 561 [logger_gearbox]
563 562 level = DEBUG
564 563 handlers =
565 564 qualname = gearbox
566 565 propagate = 1
567 566
568 567 [logger_sqlalchemy]
569 568 level = INFO
570 569 handlers = console_sql
571 570 qualname = sqlalchemy.engine
572 571 propagate = 0
573 572
574 573 [logger_whoosh_indexer]
575 574 level = DEBUG
576 575 handlers =
577 576 qualname = whoosh_indexer
578 577 propagate = 1
579 578
580 579 ##############
581 580 ## HANDLERS ##
582 581 ##############
583 582
584 583 [handler_console]
585 584 class = StreamHandler
586 585 args = (sys.stderr,)
587 586 #level = INFO
588 587 level = DEBUG
589 588 #formatter = generic
590 589 formatter = color_formatter
591 590
592 591 [handler_console_sql]
593 592 class = StreamHandler
594 593 args = (sys.stderr,)
595 594 #level = WARN
596 595 level = DEBUG
597 596 #formatter = generic
598 597 formatter = color_formatter_sql
599 598
600 599 ################
601 600 ## FORMATTERS ##
602 601 ################
603 602
604 603 [formatter_generic]
605 604 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
606 605 datefmt = %Y-%m-%d %H:%M:%S
607 606
608 607 [formatter_color_formatter]
609 608 class = kallithea.lib.colored_formatter.ColorFormatter
610 609 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
611 610 datefmt = %Y-%m-%d %H:%M:%S
612 611
613 612 [formatter_color_formatter_sql]
614 613 class = kallithea.lib.colored_formatter.ColorFormatterSql
615 614 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
616 615 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,616 +1,615
1 1 ## -*- coding: utf-8 -*-
2 2 <%text>################################################################################</%text>
3 3 <%text>################################################################################</%text>
4 4 # Kallithea - config file generated with kallithea-config #
5 5 <%text>################################################################################</%text>
6 6 <%text>################################################################################</%text>
7 7
8 8 [DEFAULT]
9 9 debug = true
10 pdebug = false
11 10
12 11 <%text>################################################################################</%text>
13 12 <%text>## Email settings ##</%text>
14 13 <%text>## ##</%text>
15 14 <%text>## Refer to the documentation ("Email settings") for more details. ##</%text>
16 15 <%text>## ##</%text>
17 16 <%text>## It is recommended to use a valid sender address that passes access ##</%text>
18 17 <%text>## validation and spam filtering in mail servers. ##</%text>
19 18 <%text>################################################################################</%text>
20 19
21 20 <%text>## 'From' header for application emails. You can optionally add a name.</%text>
22 21 <%text>## Default:</%text>
23 22 #app_email_from = Kallithea
24 23 <%text>## Examples:</%text>
25 24 #app_email_from = Kallithea <kallithea-noreply@example.com>
26 25 #app_email_from = kallithea-noreply@example.com
27 26
28 27 <%text>## Subject prefix for application emails.</%text>
29 28 <%text>## A space between this prefix and the real subject is automatically added.</%text>
30 29 <%text>## Default:</%text>
31 30 #email_prefix =
32 31 <%text>## Example:</%text>
33 32 #email_prefix = [Kallithea]
34 33
35 34 <%text>## Recipients for error emails and fallback recipients of application mails.</%text>
36 35 <%text>## Multiple addresses can be specified, space-separated.</%text>
37 36 <%text>## Only addresses are allowed, do not add any name part.</%text>
38 37 <%text>## Default:</%text>
39 38 #email_to =
40 39 <%text>## Examples:</%text>
41 40 #email_to = admin@example.com
42 41 #email_to = admin@example.com another_admin@example.com
43 42
44 43 <%text>## 'From' header for error emails. You can optionally add a name.</%text>
45 44 <%text>## Default:</%text>
46 45 #error_email_from = pylons@yourapp.com
47 46 <%text>## Examples:</%text>
48 47 #error_email_from = Kallithea Errors <kallithea-noreply@example.com>
49 48 #error_email_from = paste_error@example.com
50 49
51 50 <%text>## SMTP server settings</%text>
52 51 <%text>## If specifying credentials, make sure to use secure connections.</%text>
53 52 <%text>## Default: Send unencrypted unauthenticated mails to the specified smtp_server.</%text>
54 53 <%text>## For "SSL", use smtp_use_ssl = true and smtp_port = 465.</%text>
55 54 <%text>## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587.</%text>
56 55 #smtp_server = smtp.example.com
57 56 #smtp_username =
58 57 #smtp_password =
59 58 #smtp_port = 25
60 59 #smtp_use_ssl = false
61 60 #smtp_use_tls = false
62 61
63 62 [server:main]
64 63 %if http_server == 'gearbox':
65 64 <%text>## Gearbox default web server ##</%text>
66 65 use = egg:gearbox#wsgiref
67 66 <%text>## nr of worker threads to spawn</%text>
68 67 threadpool_workers = 1
69 68 <%text>## max request before thread respawn</%text>
70 69 threadpool_max_requests = 100
71 70 <%text>## option to use threads of process</%text>
72 71 use_threadpool = true
73 72
74 73 %elif http_server == 'gevent':
75 74 <%text>## Gearbox gevent web server ##</%text>
76 75 use = egg:gearbox#gevent
77 76
78 77 %elif http_server == 'waitress':
79 78 <%text>## WAITRESS ##</%text>
80 79 use = egg:waitress#main
81 80 <%text>## number of worker threads</%text>
82 81 threads = 1
83 82 <%text>## MAX BODY SIZE 100GB</%text>
84 83 max_request_body_size = 107374182400
85 84 <%text>## use poll instead of select, fixes fd limits, may not work on old</%text>
86 85 <%text>## windows systems.</%text>
87 86 #asyncore_use_poll = True
88 87
89 88 %elif http_server == 'gunicorn':
90 89 <%text>## GUNICORN ##</%text>
91 90 use = egg:gunicorn#main
92 91 <%text>## number of process workers. You must set `instance_id = *` when this option</%text>
93 92 <%text>## is set to more than one worker</%text>
94 93 workers = 1
95 94 <%text>## process name</%text>
96 95 proc_name = kallithea
97 96 <%text>## type of worker class, one of sync, eventlet, gevent, tornado</%text>
98 97 <%text>## recommended for bigger setup is using of of other than sync one</%text>
99 98 worker_class = sync
100 99 max_requests = 1000
101 100 <%text>## amount of time a worker can handle request before it gets killed and</%text>
102 101 <%text>## restarted</%text>
103 102 timeout = 3600
104 103
105 104 %elif http_server == 'uwsgi':
106 105 <%text>## UWSGI ##</%text>
107 106 <%text>## run with uwsgi --ini-paste-logged <inifile.ini></%text>
108 107 [uwsgi]
109 108 socket = /tmp/uwsgi.sock
110 109 master = true
111 110 http = 127.0.0.1:5000
112 111
113 112 <%text>## set as deamon and redirect all output to file</%text>
114 113 #daemonize = ./uwsgi_kallithea.log
115 114
116 115 <%text>## master process PID</%text>
117 116 pidfile = ./uwsgi_kallithea.pid
118 117
119 118 <%text>## stats server with workers statistics, use uwsgitop</%text>
120 119 <%text>## for monitoring, `uwsgitop 127.0.0.1:1717`</%text>
121 120 stats = 127.0.0.1:1717
122 121 memory-report = true
123 122
124 123 <%text>## log 5XX errors</%text>
125 124 log-5xx = true
126 125
127 126 <%text>## Set the socket listen queue size.</%text>
128 127 listen = 256
129 128
130 129 <%text>## Gracefully Reload workers after the specified amount of managed requests</%text>
131 130 <%text>## (avoid memory leaks).</%text>
132 131 max-requests = 1000
133 132
134 133 <%text>## enable large buffers</%text>
135 134 buffer-size = 65535
136 135
137 136 <%text>## socket and http timeouts ##</%text>
138 137 http-timeout = 3600
139 138 socket-timeout = 3600
140 139
141 140 <%text>## Log requests slower than the specified number of milliseconds.</%text>
142 141 log-slow = 10
143 142
144 143 <%text>## Exit if no app can be loaded.</%text>
145 144 need-app = true
146 145
147 146 <%text>## Set lazy mode (load apps in workers instead of master).</%text>
148 147 lazy = true
149 148
150 149 <%text>## scaling ##</%text>
151 150 <%text>## set cheaper algorithm to use, if not set default will be used</%text>
152 151 cheaper-algo = spare
153 152
154 153 <%text>## minimum number of workers to keep at all times</%text>
155 154 cheaper = 1
156 155
157 156 <%text>## number of workers to spawn at startup</%text>
158 157 cheaper-initial = 1
159 158
160 159 <%text>## maximum number of workers that can be spawned</%text>
161 160 workers = 4
162 161
163 162 <%text>## how many workers should be spawned at a time</%text>
164 163 cheaper-step = 1
165 164
166 165 %endif
167 166 <%text>## COMMON ##</%text>
168 167 host = ${host}
169 168 port = ${port}
170 169
171 170 <%text>## middleware for hosting the WSGI application under a URL prefix</%text>
172 171 #[filter:proxy-prefix]
173 172 #use = egg:PasteDeploy#prefix
174 173 #prefix = /<your-prefix>
175 174
176 175 [app:main]
177 176 use = egg:kallithea
178 177 <%text>## enable proxy prefix middleware</%text>
179 178 #filter-with = proxy-prefix
180 179
181 180 full_stack = true
182 181 static_files = true
183 182 <%text>## Available Languages:</%text>
184 183 <%text>## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW</%text>
185 184 lang =
186 185 cache_dir = ${here}/data
187 186 index_dir = ${here}/data/index
188 187
189 188 <%text>## perform a full repository scan on each server start, this should be</%text>
190 189 <%text>## set to false after first startup, to allow faster server restarts.</%text>
191 190 initial_repo_scan = false
192 191
193 192 <%text>## uncomment and set this path to use archive download cache</%text>
194 193 archive_cache_dir = ${here}/tarballcache
195 194
196 195 <%text>## change this to unique ID for security</%text>
197 196 app_instance_uuid = ${uuid()}
198 197
199 198 <%text>## cut off limit for large diffs (size in bytes)</%text>
200 199 cut_off_limit = 256000
201 200
202 201 <%text>## force https in Kallithea, fixes https redirects, assumes it's always https</%text>
203 202 force_https = false
204 203
205 204 <%text>## use Strict-Transport-Security headers</%text>
206 205 use_htsts = false
207 206
208 207 <%text>## number of commits stats will parse on each iteration</%text>
209 208 commit_parse_limit = 25
210 209
211 210 <%text>## path to git executable</%text>
212 211 git_path = git
213 212
214 213 <%text>## git rev filter option, --all is the default filter, if you need to</%text>
215 214 <%text>## hide all refs in changelog switch this to --branches --tags</%text>
216 215 #git_rev_filter = --branches --tags
217 216
218 217 <%text>## RSS feed options</%text>
219 218 rss_cut_off_limit = 256000
220 219 rss_items_per_page = 10
221 220 rss_include_diff = false
222 221
223 222 <%text>## options for showing and identifying changesets</%text>
224 223 show_sha_length = 12
225 224 show_revision_number = false
226 225
227 226 <%text>## Canonical URL to use when creating full URLs in UI and texts.</%text>
228 227 <%text>## Useful when the site is available under different names or protocols.</%text>
229 228 <%text>## Defaults to what is provided in the WSGI environment.</%text>
230 229 #canonical_url = https://kallithea.example.com/repos
231 230
232 231 <%text>## gist URL alias, used to create nicer urls for gist. This should be an</%text>
233 232 <%text>## url that does rewrites to _admin/gists/<gistid>.</%text>
234 233 <%text>## example: http://gist.example.com/{gistid}. Empty means use the internal</%text>
235 234 <%text>## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid></%text>
236 235 gist_alias_url =
237 236
238 237 <%text>## white list of API enabled controllers. This allows to add list of</%text>
239 238 <%text>## controllers to which access will be enabled by api_key. eg: to enable</%text>
240 239 <%text>## api access to raw_files put `FilesController:raw`, to enable access to patches</%text>
241 240 <%text>## add `ChangesetController:changeset_patch`. This list should be "," separated</%text>
242 241 <%text>## Syntax is <ControllerClass>:<function>. Check debug logs for generated names</%text>
243 242 <%text>## Recommended settings below are commented out:</%text>
244 243 api_access_controllers_whitelist =
245 244 # ChangesetController:changeset_patch,
246 245 # ChangesetController:changeset_raw,
247 246 # FilesController:raw,
248 247 # FilesController:archivefile
249 248
250 249 <%text>## default encoding used to convert from and to unicode</%text>
251 250 <%text>## can be also a comma separated list of encoding in case of mixed encodings</%text>
252 251 default_encoding = utf8
253 252
254 253 <%text>## issue tracker for Kallithea (leave blank to disable, absent for default)</%text>
255 254 #bugtracker = https://bitbucket.org/conservancy/kallithea/issues
256 255
257 256 <%text>## issue tracking mapping for commits messages</%text>
258 257 <%text>## comment out issue_pat, issue_server, issue_prefix to enable</%text>
259 258
260 259 <%text>## pattern to get the issues from commit messages</%text>
261 260 <%text>## default one used here is #<numbers> with a regex passive group for `#`</%text>
262 261 <%text>## {id} will be all groups matched from this pattern</%text>
263 262
264 263 issue_pat = (?:\s*#)(\d+)
265 264
266 265 <%text>## server url to the issue, each {id} will be replaced with match</%text>
267 266 <%text>## fetched from the regex and {repo} is replaced with full repository name</%text>
268 267 <%text>## including groups {repo_name} is replaced with just name of repo</%text>
269 268
270 269 issue_server_link = https://issues.example.com/{repo}/issue/{id}
271 270
272 271 <%text>## prefix to add to link to indicate it's an url</%text>
273 272 <%text>## #314 will be replaced by <issue_prefix><id></%text>
274 273
275 274 issue_prefix = #
276 275
277 276 <%text>## issue_pat, issue_server_link, issue_prefix can have suffixes to specify</%text>
278 277 <%text>## multiple patterns, to other issues server, wiki or others</%text>
279 278 <%text>## below an example how to create a wiki pattern</%text>
280 279 # wiki-some-id -> https://wiki.example.com/some-id
281 280
282 281 #issue_pat_wiki = (?:wiki-)(.+)
283 282 #issue_server_link_wiki = https://wiki.example.com/{id}
284 283 #issue_prefix_wiki = WIKI-
285 284
286 285 <%text>## alternative return HTTP header for failed authentication. Default HTTP</%text>
287 286 <%text>## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with</%text>
288 287 <%text>## handling that. Set this variable to 403 to return HTTPForbidden</%text>
289 288 auth_ret_code =
290 289
291 290 <%text>## locking return code. When repository is locked return this HTTP code. 2XX</%text>
292 291 <%text>## codes don't break the transactions while 4XX codes do</%text>
293 292 lock_ret_code = 423
294 293
295 294 <%text>## allows to change the repository location in settings page</%text>
296 295 allow_repo_location_change = True
297 296
298 297 <%text>## allows to setup custom hooks in settings page</%text>
299 298 allow_custom_hooks_settings = True
300 299
301 300 <%text>## extra extensions for indexing, space separated and without the leading '.'.</%text>
302 301 # index.extensions =
303 302 # gemfile
304 303 # lock
305 304
306 305 <%text>## extra filenames for indexing, space separated</%text>
307 306 # index.filenames =
308 307 # .dockerignore
309 308 # .editorconfig
310 309 # INSTALL
311 310 # CHANGELOG
312 311
313 312 <%text>####################################</%text>
314 313 <%text>### CELERY CONFIG ####</%text>
315 314 <%text>####################################</%text>
316 315
317 316 use_celery = false
318 317
319 318 <%text>## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq:</%text>
320 319 broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost
321 320
322 321 celery.imports = kallithea.lib.celerylib.tasks
323 322 celery.accept.content = pickle
324 323 celery.result.backend = amqp
325 324 celery.result.dburi = amqp://
326 325 celery.result.serialier = json
327 326
328 327 #celery.send.task.error.emails = true
329 328 #celery.amqp.task.result.expires = 18000
330 329
331 330 celeryd.concurrency = 2
332 331 celeryd.max.tasks.per.child = 1
333 332
334 333 <%text>## If true, tasks will never be sent to the queue, but executed locally instead.</%text>
335 334 celery.always.eager = false
336 335
337 336 <%text>####################################</%text>
338 337 <%text>### BEAKER CACHE ####</%text>
339 338 <%text>####################################</%text>
340 339
341 340 beaker.cache.data_dir = ${here}/data/cache/data
342 341 beaker.cache.lock_dir = ${here}/data/cache/lock
343 342
344 343 beaker.cache.regions = short_term,long_term,sql_cache_short
345 344
346 345 beaker.cache.short_term.type = memory
347 346 beaker.cache.short_term.expire = 60
348 347 beaker.cache.short_term.key_length = 256
349 348
350 349 beaker.cache.long_term.type = memory
351 350 beaker.cache.long_term.expire = 36000
352 351 beaker.cache.long_term.key_length = 256
353 352
354 353 beaker.cache.sql_cache_short.type = memory
355 354 beaker.cache.sql_cache_short.expire = 10
356 355 beaker.cache.sql_cache_short.key_length = 256
357 356
358 357 <%text>####################################</%text>
359 358 <%text>### BEAKER SESSION ####</%text>
360 359 <%text>####################################</%text>
361 360
362 361 <%text>## Name of session cookie. Should be unique for a given host and path, even when running</%text>
363 362 <%text>## on different ports. Otherwise, cookie sessions will be shared and messed up.</%text>
364 363 beaker.session.key = kallithea
365 364 <%text>## Sessions should always only be accessible by the browser, not directly by JavaScript.</%text>
366 365 beaker.session.httponly = true
367 366 <%text>## Session lifetime. 2592000 seconds is 30 days.</%text>
368 367 beaker.session.timeout = 2592000
369 368
370 369 <%text>## Server secret used with HMAC to ensure integrity of cookies.</%text>
371 370 beaker.session.secret = ${uuid()}
372 371 <%text>## Further, encrypt the data with AES.</%text>
373 372 #beaker.session.encrypt_key = <key_for_encryption>
374 373 #beaker.session.validate_key = <validation_key>
375 374
376 375 <%text>## Type of storage used for the session, current types are</%text>
377 376 <%text>## dbm, file, memcached, database, and memory.</%text>
378 377
379 378 <%text>## File system storage of session data. (default)</%text>
380 379 #beaker.session.type = file
381 380
382 381 <%text>## Cookie only, store all session data inside the cookie. Requires secure secrets.</%text>
383 382 #beaker.session.type = cookie
384 383
385 384 <%text>## Database storage of session data.</%text>
386 385 #beaker.session.type = ext:database
387 386 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea
388 387 #beaker.session.table_name = db_session
389 388
390 389 %if error_aggregation_service == 'appenlight':
391 390 <%text>############################</%text>
392 391 <%text>## ERROR HANDLING SYSTEMS ##</%text>
393 392 <%text>############################</%text>
394 393
395 394 <%text>####################</%text>
396 395 <%text>### [appenlight] ###</%text>
397 396 <%text>####################</%text>
398 397
399 398 <%text>## AppEnlight is tailored to work with Kallithea, see</%text>
400 399 <%text>## http://appenlight.com for details how to obtain an account</%text>
401 400 <%text>## you must install python package `appenlight_client` to make it work</%text>
402 401
403 402 <%text>## appenlight enabled</%text>
404 403 appenlight = false
405 404
406 405 appenlight.server_url = https://api.appenlight.com
407 406 appenlight.api_key = YOUR_API_KEY
408 407
409 408 <%text>## TWEAK AMOUNT OF INFO SENT HERE</%text>
410 409
411 410 <%text>## enables 404 error logging (default False)</%text>
412 411 appenlight.report_404 = false
413 412
414 413 <%text>## time in seconds after request is considered being slow (default 1)</%text>
415 414 appenlight.slow_request_time = 1
416 415
417 416 <%text>## record slow requests in application</%text>
418 417 <%text>## (needs to be enabled for slow datastore recording and time tracking)</%text>
419 418 appenlight.slow_requests = true
420 419
421 420 <%text>## enable hooking to application loggers</%text>
422 421 #appenlight.logging = true
423 422
424 423 <%text>## minimum log level for log capture</%text>
425 424 #appenlight.logging.level = WARNING
426 425
427 426 <%text>## send logs only from erroneous/slow requests</%text>
428 427 <%text>## (saves API quota for intensive logging)</%text>
429 428 appenlight.logging_on_error = false
430 429
431 430 <%text>## list of additional keywords that should be grabbed from environ object</%text>
432 431 <%text>## can be string with comma separated list of words in lowercase</%text>
433 432 <%text>## (by default client will always send following info:</%text>
434 433 <%text>## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that</%text>
435 434 <%text>## start with HTTP* this list be extended with additional keywords here</%text>
436 435 appenlight.environ_keys_whitelist =
437 436
438 437 <%text>## list of keywords that should be blanked from request object</%text>
439 438 <%text>## can be string with comma separated list of words in lowercase</%text>
440 439 <%text>## (by default client will always blank keys that contain following words</%text>
441 440 <%text>## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'</%text>
442 441 <%text>## this list be extended with additional keywords set here</%text>
443 442 appenlight.request_keys_blacklist =
444 443
445 444 <%text>## list of namespaces that should be ignores when gathering log entries</%text>
446 445 <%text>## can be string with comma separated list of namespaces</%text>
447 446 <%text>## (by default the client ignores own entries: appenlight_client.client)</%text>
448 447 appenlight.log_namespace_blacklist =
449 448
450 449 %elif error_aggregation_service == 'sentry':
451 450 <%text>################</%text>
452 451 <%text>### [sentry] ###</%text>
453 452 <%text>################</%text>
454 453
455 454 <%text>## sentry is a alternative open source error aggregator</%text>
456 455 <%text>## you must install python packages `sentry` and `raven` to enable</%text>
457 456
458 457 sentry.dsn = YOUR_DNS
459 458 sentry.servers =
460 459 sentry.name =
461 460 sentry.key =
462 461 sentry.public_key =
463 462 sentry.secret_key =
464 463 sentry.project =
465 464 sentry.site =
466 465 sentry.include_paths =
467 466 sentry.exclude_paths =
468 467
469 468 %endif
470 469 <%text>################################################################################</%text>
471 470 <%text>## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##</%text>
472 471 <%text>## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##</%text>
473 472 <%text>## execute malicious code after an exception is raised. ##</%text>
474 473 <%text>################################################################################</%text>
475 474 set debug = false
476 475
477 476 <%text>##################################</%text>
478 477 <%text>### LOGVIEW CONFIG ###</%text>
479 478 <%text>##################################</%text>
480 479
481 480 logview.sqlalchemy = #faa
482 481 logview.pylons.templating = #bfb
483 482 logview.pylons.util = #eee
484 483
485 484 <%text>#########################################################</%text>
486 485 <%text>### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###</%text>
487 486 <%text>#########################################################</%text>
488 487
489 488 %if database_engine == 'sqlite':
490 489 # SQLITE [default]
491 490 sqlalchemy.url = sqlite:///${here}/kallithea.db?timeout=60
492 491
493 492 %elif database_engine == 'postgres':
494 493 # POSTGRESQL
495 494 sqlalchemy.url = postgresql://user:pass@localhost/kallithea
496 495
497 496 %elif database_engine == 'mysql':
498 497 # MySQL
499 498 sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
500 499
501 500 %endif
502 501 # see sqlalchemy docs for others
503 502
504 503 sqlalchemy.echo = false
505 504 sqlalchemy.pool_recycle = 3600
506 505
507 506 <%text>################################</%text>
508 507 <%text>### ALEMBIC CONFIGURATION ####</%text>
509 508 <%text>################################</%text>
510 509
511 510 [alembic]
512 511 script_location = kallithea:alembic
513 512
514 513 <%text>################################</%text>
515 514 <%text>### LOGGING CONFIGURATION ####</%text>
516 515 <%text>################################</%text>
517 516
518 517 [loggers]
519 518 keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer
520 519
521 520 [handlers]
522 521 keys = console, console_sql
523 522
524 523 [formatters]
525 524 keys = generic, color_formatter, color_formatter_sql
526 525
527 526 <%text>#############</%text>
528 527 <%text>## LOGGERS ##</%text>
529 528 <%text>#############</%text>
530 529
531 530 [logger_root]
532 531 level = NOTSET
533 532 handlers = console
534 533
535 534 [logger_routes]
536 535 level = DEBUG
537 536 handlers =
538 537 qualname = routes.middleware
539 538 <%text>## "level = DEBUG" logs the route matched and routing variables.</%text>
540 539 propagate = 1
541 540
542 541 [logger_beaker]
543 542 level = DEBUG
544 543 handlers =
545 544 qualname = beaker.container
546 545 propagate = 1
547 546
548 547 [logger_templates]
549 548 level = INFO
550 549 handlers =
551 550 qualname = pylons.templating
552 551 propagate = 1
553 552
554 553 [logger_kallithea]
555 554 level = DEBUG
556 555 handlers =
557 556 qualname = kallithea
558 557 propagate = 1
559 558
560 559 [logger_tg]
561 560 level = DEBUG
562 561 handlers =
563 562 qualname = tg
564 563 propagate = 1
565 564
566 565 [logger_gearbox]
567 566 level = DEBUG
568 567 handlers =
569 568 qualname = gearbox
570 569 propagate = 1
571 570
572 571 [logger_sqlalchemy]
573 572 level = INFO
574 573 handlers = console_sql
575 574 qualname = sqlalchemy.engine
576 575 propagate = 0
577 576
578 577 [logger_whoosh_indexer]
579 578 level = DEBUG
580 579 handlers =
581 580 qualname = whoosh_indexer
582 581 propagate = 1
583 582
584 583 <%text>##############</%text>
585 584 <%text>## HANDLERS ##</%text>
586 585 <%text>##############</%text>
587 586
588 587 [handler_console]
589 588 class = StreamHandler
590 589 args = (sys.stderr,)
591 590 level = INFO
592 591 formatter = generic
593 592
594 593 [handler_console_sql]
595 594 class = StreamHandler
596 595 args = (sys.stderr,)
597 596 level = WARN
598 597 formatter = generic
599 598
600 599 <%text>################</%text>
601 600 <%text>## FORMATTERS ##</%text>
602 601 <%text>################</%text>
603 602
604 603 [formatter_generic]
605 604 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
606 605 datefmt = %Y-%m-%d %H:%M:%S
607 606
608 607 [formatter_color_formatter]
609 608 class = kallithea.lib.colored_formatter.ColorFormatter
610 609 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
611 610 datefmt = %Y-%m-%d %H:%M:%S
612 611
613 612 [formatter_color_formatter_sql]
614 613 class = kallithea.lib.colored_formatter.ColorFormatterSql
615 614 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
616 615 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,620 +1,619
1 1 ################################################################################
2 2 ################################################################################
3 3 # Kallithea - config for tests: #
4 4 # initial_repo_scan = true #
5 5 # sqlalchemy and kallithea_test.sqlite #
6 6 # custom logging #
7 7 # #
8 8 # The %(here)s variable will be replaced with the parent directory of this file#
9 9 ################################################################################
10 10 ################################################################################
11 11
12 12 [DEFAULT]
13 13 debug = true
14 pdebug = false
15 14
16 15 ################################################################################
17 16 ## Email settings ##
18 17 ## ##
19 18 ## Refer to the documentation ("Email settings") for more details. ##
20 19 ## ##
21 20 ## It is recommended to use a valid sender address that passes access ##
22 21 ## validation and spam filtering in mail servers. ##
23 22 ################################################################################
24 23
25 24 ## 'From' header for application emails. You can optionally add a name.
26 25 ## Default:
27 26 #app_email_from = Kallithea
28 27 ## Examples:
29 28 #app_email_from = Kallithea <kallithea-noreply@example.com>
30 29 #app_email_from = kallithea-noreply@example.com
31 30
32 31 ## Subject prefix for application emails.
33 32 ## A space between this prefix and the real subject is automatically added.
34 33 ## Default:
35 34 #email_prefix =
36 35 ## Example:
37 36 #email_prefix = [Kallithea]
38 37
39 38 ## Recipients for error emails and fallback recipients of application mails.
40 39 ## Multiple addresses can be specified, space-separated.
41 40 ## Only addresses are allowed, do not add any name part.
42 41 ## Default:
43 42 #email_to =
44 43 ## Examples:
45 44 #email_to = admin@example.com
46 45 #email_to = admin@example.com another_admin@example.com
47 46
48 47 ## 'From' header for error emails. You can optionally add a name.
49 48 ## Default:
50 49 #error_email_from = pylons@yourapp.com
51 50 ## Examples:
52 51 #error_email_from = Kallithea Errors <kallithea-noreply@example.com>
53 52 #error_email_from = paste_error@example.com
54 53
55 54 ## SMTP server settings
56 55 ## If specifying credentials, make sure to use secure connections.
57 56 ## Default: Send unencrypted unauthenticated mails to the specified smtp_server.
58 57 ## For "SSL", use smtp_use_ssl = true and smtp_port = 465.
59 58 ## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587.
60 59 #smtp_server = smtp.example.com
61 60 #smtp_username =
62 61 #smtp_password =
63 62 #smtp_port = 25
64 63 #smtp_use_ssl = false
65 64 #smtp_use_tls = false
66 65
67 66 [server:main]
68 67 ## Gearbox default web server ##
69 68 #use = egg:gearbox#wsgiref
70 69 ## nr of worker threads to spawn
71 70 #threadpool_workers = 1
72 71 ## max request before thread respawn
73 72 #threadpool_max_requests = 100
74 73 ## option to use threads of process
75 74 #use_threadpool = true
76 75
77 76 ## Gearbox gevent web server ##
78 77 #use = egg:gearbox#gevent
79 78
80 79 ## WAITRESS ##
81 80 use = egg:waitress#main
82 81 ## number of worker threads
83 82 threads = 1
84 83 ## MAX BODY SIZE 100GB
85 84 max_request_body_size = 107374182400
86 85 ## use poll instead of select, fixes fd limits, may not work on old
87 86 ## windows systems.
88 87 #asyncore_use_poll = True
89 88
90 89 ## GUNICORN ##
91 90 #use = egg:gunicorn#main
92 91 ## number of process workers. You must set `instance_id = *` when this option
93 92 ## is set to more than one worker
94 93 #workers = 1
95 94 ## process name
96 95 #proc_name = kallithea
97 96 ## type of worker class, one of sync, eventlet, gevent, tornado
98 97 ## recommended for bigger setup is using of of other than sync one
99 98 #worker_class = sync
100 99 #max_requests = 1000
101 100 ## amount of time a worker can handle request before it gets killed and
102 101 ## restarted
103 102 #timeout = 3600
104 103
105 104 ## UWSGI ##
106 105 ## run with uwsgi --ini-paste-logged <inifile.ini>
107 106 #[uwsgi]
108 107 #socket = /tmp/uwsgi.sock
109 108 #master = true
110 109 #http = 127.0.0.1:5000
111 110
112 111 ## set as deamon and redirect all output to file
113 112 #daemonize = ./uwsgi_kallithea.log
114 113
115 114 ## master process PID
116 115 #pidfile = ./uwsgi_kallithea.pid
117 116
118 117 ## stats server with workers statistics, use uwsgitop
119 118 ## for monitoring, `uwsgitop 127.0.0.1:1717`
120 119 #stats = 127.0.0.1:1717
121 120 #memory-report = true
122 121
123 122 ## log 5XX errors
124 123 #log-5xx = true
125 124
126 125 ## Set the socket listen queue size.
127 126 #listen = 256
128 127
129 128 ## Gracefully Reload workers after the specified amount of managed requests
130 129 ## (avoid memory leaks).
131 130 #max-requests = 1000
132 131
133 132 ## enable large buffers
134 133 #buffer-size = 65535
135 134
136 135 ## socket and http timeouts ##
137 136 #http-timeout = 3600
138 137 #socket-timeout = 3600
139 138
140 139 ## Log requests slower than the specified number of milliseconds.
141 140 #log-slow = 10
142 141
143 142 ## Exit if no app can be loaded.
144 143 #need-app = true
145 144
146 145 ## Set lazy mode (load apps in workers instead of master).
147 146 #lazy = true
148 147
149 148 ## scaling ##
150 149 ## set cheaper algorithm to use, if not set default will be used
151 150 #cheaper-algo = spare
152 151
153 152 ## minimum number of workers to keep at all times
154 153 #cheaper = 1
155 154
156 155 ## number of workers to spawn at startup
157 156 #cheaper-initial = 1
158 157
159 158 ## maximum number of workers that can be spawned
160 159 #workers = 4
161 160
162 161 ## how many workers should be spawned at a time
163 162 #cheaper-step = 1
164 163
165 164 ## COMMON ##
166 165 host = 127.0.0.1
167 166 #port = 5000
168 167 port = 4999
169 168
170 169 ## middleware for hosting the WSGI application under a URL prefix
171 170 #[filter:proxy-prefix]
172 171 #use = egg:PasteDeploy#prefix
173 172 #prefix = /<your-prefix>
174 173
175 174 [app:main]
176 175 use = egg:kallithea
177 176 ## enable proxy prefix middleware
178 177 #filter-with = proxy-prefix
179 178
180 179 full_stack = true
181 180 static_files = true
182 181 ## Available Languages:
183 182 ## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW
184 183 lang =
185 184 #cache_dir = %(here)s/data
186 185 cache_dir = %(here)s/../../data/test/cache
187 186 #index_dir = %(here)s/data/index
188 187 index_dir = %(here)s/../../data/test/index
189 188
190 189 ## perform a full repository scan on each server start, this should be
191 190 ## set to false after first startup, to allow faster server restarts.
192 191 #initial_repo_scan = false
193 192 initial_repo_scan = true
194 193
195 194 ## uncomment and set this path to use archive download cache
196 195 #archive_cache_dir = %(here)s/tarballcache
197 196 archive_cache_dir = %(here)s/../../data/test/tarballcache
198 197
199 198 ## change this to unique ID for security
200 199 app_instance_uuid = test
201 200
202 201 ## cut off limit for large diffs (size in bytes)
203 202 cut_off_limit = 256000
204 203
205 204 ## force https in Kallithea, fixes https redirects, assumes it's always https
206 205 force_https = false
207 206
208 207 ## use Strict-Transport-Security headers
209 208 use_htsts = false
210 209
211 210 ## number of commits stats will parse on each iteration
212 211 commit_parse_limit = 25
213 212
214 213 ## path to git executable
215 214 git_path = git
216 215
217 216 ## git rev filter option, --all is the default filter, if you need to
218 217 ## hide all refs in changelog switch this to --branches --tags
219 218 #git_rev_filter = --branches --tags
220 219
221 220 ## RSS feed options
222 221 rss_cut_off_limit = 256000
223 222 rss_items_per_page = 10
224 223 rss_include_diff = false
225 224
226 225 ## options for showing and identifying changesets
227 226 show_sha_length = 12
228 227 #show_revision_number = false
229 228 show_revision_number = true
230 229
231 230 ## Canonical URL to use when creating full URLs in UI and texts.
232 231 ## Useful when the site is available under different names or protocols.
233 232 ## Defaults to what is provided in the WSGI environment.
234 233 #canonical_url = https://kallithea.example.com/repos
235 234
236 235 ## gist URL alias, used to create nicer urls for gist. This should be an
237 236 ## url that does rewrites to _admin/gists/<gistid>.
238 237 ## example: http://gist.example.com/{gistid}. Empty means use the internal
239 238 ## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/<gistid>
240 239 gist_alias_url =
241 240
242 241 ## white list of API enabled controllers. This allows to add list of
243 242 ## controllers to which access will be enabled by api_key. eg: to enable
244 243 ## api access to raw_files put `FilesController:raw`, to enable access to patches
245 244 ## add `ChangesetController:changeset_patch`. This list should be "," separated
246 245 ## Syntax is <ControllerClass>:<function>. Check debug logs for generated names
247 246 ## Recommended settings below are commented out:
248 247 api_access_controllers_whitelist =
249 248 # ChangesetController:changeset_patch,
250 249 # ChangesetController:changeset_raw,
251 250 # FilesController:raw,
252 251 # FilesController:archivefile
253 252
254 253 ## default encoding used to convert from and to unicode
255 254 ## can be also a comma separated list of encoding in case of mixed encodings
256 255 default_encoding = utf8
257 256
258 257 ## issue tracker for Kallithea (leave blank to disable, absent for default)
259 258 #bugtracker = https://bitbucket.org/conservancy/kallithea/issues
260 259
261 260 ## issue tracking mapping for commits messages
262 261 ## comment out issue_pat, issue_server, issue_prefix to enable
263 262
264 263 ## pattern to get the issues from commit messages
265 264 ## default one used here is #<numbers> with a regex passive group for `#`
266 265 ## {id} will be all groups matched from this pattern
267 266
268 267 issue_pat = (?:\s*#)(\d+)
269 268
270 269 ## server url to the issue, each {id} will be replaced with match
271 270 ## fetched from the regex and {repo} is replaced with full repository name
272 271 ## including groups {repo_name} is replaced with just name of repo
273 272
274 273 issue_server_link = https://issues.example.com/{repo}/issue/{id}
275 274
276 275 ## prefix to add to link to indicate it's an url
277 276 ## #314 will be replaced by <issue_prefix><id>
278 277
279 278 issue_prefix = #
280 279
281 280 ## issue_pat, issue_server_link, issue_prefix can have suffixes to specify
282 281 ## multiple patterns, to other issues server, wiki or others
283 282 ## below an example how to create a wiki pattern
284 283 # wiki-some-id -> https://wiki.example.com/some-id
285 284
286 285 #issue_pat_wiki = (?:wiki-)(.+)
287 286 #issue_server_link_wiki = https://wiki.example.com/{id}
288 287 #issue_prefix_wiki = WIKI-
289 288
290 289 ## alternative return HTTP header for failed authentication. Default HTTP
291 290 ## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with
292 291 ## handling that. Set this variable to 403 to return HTTPForbidden
293 292 auth_ret_code =
294 293
295 294 ## locking return code. When repository is locked return this HTTP code. 2XX
296 295 ## codes don't break the transactions while 4XX codes do
297 296 lock_ret_code = 423
298 297
299 298 ## allows to change the repository location in settings page
300 299 allow_repo_location_change = True
301 300
302 301 ## allows to setup custom hooks in settings page
303 302 allow_custom_hooks_settings = True
304 303
305 304 ## extra extensions for indexing, space separated and without the leading '.'.
306 305 # index.extensions =
307 306 # gemfile
308 307 # lock
309 308
310 309 ## extra filenames for indexing, space separated
311 310 # index.filenames =
312 311 # .dockerignore
313 312 # .editorconfig
314 313 # INSTALL
315 314 # CHANGELOG
316 315
317 316 ####################################
318 317 ### CELERY CONFIG ####
319 318 ####################################
320 319
321 320 use_celery = false
322 321
323 322 ## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq:
324 323 broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost
325 324
326 325 celery.imports = kallithea.lib.celerylib.tasks
327 326 celery.accept.content = pickle
328 327 celery.result.backend = amqp
329 328 celery.result.dburi = amqp://
330 329 celery.result.serialier = json
331 330
332 331 #celery.send.task.error.emails = true
333 332 #celery.amqp.task.result.expires = 18000
334 333
335 334 celeryd.concurrency = 2
336 335 celeryd.max.tasks.per.child = 1
337 336
338 337 ## If true, tasks will never be sent to the queue, but executed locally instead.
339 338 celery.always.eager = false
340 339
341 340 ####################################
342 341 ### BEAKER CACHE ####
343 342 ####################################
344 343
345 344 #beaker.cache.data_dir = %(here)s/data/cache/data
346 345 beaker.cache.data_dir = %(here)s/../../data/test/cache/data
347 346 #beaker.cache.lock_dir = %(here)s/data/cache/lock
348 347 beaker.cache.lock_dir = %(here)s/../../data/test/cache/lock
349 348
350 349 beaker.cache.regions = short_term,long_term,sql_cache_short
351 350
352 351 beaker.cache.short_term.type = memory
353 352 beaker.cache.short_term.expire = 60
354 353 beaker.cache.short_term.key_length = 256
355 354
356 355 beaker.cache.long_term.type = memory
357 356 beaker.cache.long_term.expire = 36000
358 357 beaker.cache.long_term.key_length = 256
359 358
360 359 beaker.cache.sql_cache_short.type = memory
361 360 #beaker.cache.sql_cache_short.expire = 10
362 361 beaker.cache.sql_cache_short.expire = 1
363 362 beaker.cache.sql_cache_short.key_length = 256
364 363
365 364 ####################################
366 365 ### BEAKER SESSION ####
367 366 ####################################
368 367
369 368 ## Name of session cookie. Should be unique for a given host and path, even when running
370 369 ## on different ports. Otherwise, cookie sessions will be shared and messed up.
371 370 beaker.session.key = kallithea
372 371 ## Sessions should always only be accessible by the browser, not directly by JavaScript.
373 372 beaker.session.httponly = true
374 373 ## Session lifetime. 2592000 seconds is 30 days.
375 374 beaker.session.timeout = 2592000
376 375
377 376 ## Server secret used with HMAC to ensure integrity of cookies.
378 377 beaker.session.secret = {74e0cd75-b339-478b-b129-07dd221def1f}
379 378 ## Further, encrypt the data with AES.
380 379 #beaker.session.encrypt_key = <key_for_encryption>
381 380 #beaker.session.validate_key = <validation_key>
382 381
383 382 ## Type of storage used for the session, current types are
384 383 ## dbm, file, memcached, database, and memory.
385 384
386 385 ## File system storage of session data. (default)
387 386 #beaker.session.type = file
388 387
389 388 ## Cookie only, store all session data inside the cookie. Requires secure secrets.
390 389 #beaker.session.type = cookie
391 390
392 391 ## Database storage of session data.
393 392 #beaker.session.type = ext:database
394 393 #beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea
395 394 #beaker.session.table_name = db_session
396 395
397 396 ############################
398 397 ## ERROR HANDLING SYSTEMS ##
399 398 ############################
400 399
401 400 ####################
402 401 ### [appenlight] ###
403 402 ####################
404 403
405 404 ## AppEnlight is tailored to work with Kallithea, see
406 405 ## http://appenlight.com for details how to obtain an account
407 406 ## you must install python package `appenlight_client` to make it work
408 407
409 408 ## appenlight enabled
410 409 appenlight = false
411 410
412 411 appenlight.server_url = https://api.appenlight.com
413 412 appenlight.api_key = YOUR_API_KEY
414 413
415 414 ## TWEAK AMOUNT OF INFO SENT HERE
416 415
417 416 ## enables 404 error logging (default False)
418 417 appenlight.report_404 = false
419 418
420 419 ## time in seconds after request is considered being slow (default 1)
421 420 appenlight.slow_request_time = 1
422 421
423 422 ## record slow requests in application
424 423 ## (needs to be enabled for slow datastore recording and time tracking)
425 424 appenlight.slow_requests = true
426 425
427 426 ## enable hooking to application loggers
428 427 #appenlight.logging = true
429 428
430 429 ## minimum log level for log capture
431 430 #appenlight.logging.level = WARNING
432 431
433 432 ## send logs only from erroneous/slow requests
434 433 ## (saves API quota for intensive logging)
435 434 appenlight.logging_on_error = false
436 435
437 436 ## list of additional keywords that should be grabbed from environ object
438 437 ## can be string with comma separated list of words in lowercase
439 438 ## (by default client will always send following info:
440 439 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
441 440 ## start with HTTP* this list be extended with additional keywords here
442 441 appenlight.environ_keys_whitelist =
443 442
444 443 ## list of keywords that should be blanked from request object
445 444 ## can be string with comma separated list of words in lowercase
446 445 ## (by default client will always blank keys that contain following words
447 446 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
448 447 ## this list be extended with additional keywords set here
449 448 appenlight.request_keys_blacklist =
450 449
451 450 ## list of namespaces that should be ignores when gathering log entries
452 451 ## can be string with comma separated list of namespaces
453 452 ## (by default the client ignores own entries: appenlight_client.client)
454 453 appenlight.log_namespace_blacklist =
455 454
456 455 ################
457 456 ### [sentry] ###
458 457 ################
459 458
460 459 ## sentry is a alternative open source error aggregator
461 460 ## you must install python packages `sentry` and `raven` to enable
462 461
463 462 sentry.dsn = YOUR_DNS
464 463 sentry.servers =
465 464 sentry.name =
466 465 sentry.key =
467 466 sentry.public_key =
468 467 sentry.secret_key =
469 468 sentry.project =
470 469 sentry.site =
471 470 sentry.include_paths =
472 471 sentry.exclude_paths =
473 472
474 473 ################################################################################
475 474 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
476 475 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
477 476 ## execute malicious code after an exception is raised. ##
478 477 ################################################################################
479 478 set debug = false
480 479
481 480 ##################################
482 481 ### LOGVIEW CONFIG ###
483 482 ##################################
484 483
485 484 logview.sqlalchemy = #faa
486 485 logview.pylons.templating = #bfb
487 486 logview.pylons.util = #eee
488 487
489 488 #########################################################
490 489 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
491 490 #########################################################
492 491
493 492 # SQLITE [default]
494 493 #sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60
495 494 sqlalchemy.url = sqlite:///%(here)s/kallithea_test.sqlite
496 495
497 496 # POSTGRESQL
498 497 #sqlalchemy.url = postgresql://user:pass@localhost/kallithea
499 498
500 499 # MySQL
501 500 #sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8
502 501
503 502 # see sqlalchemy docs for others
504 503
505 504 sqlalchemy.echo = false
506 505 sqlalchemy.pool_recycle = 3600
507 506
508 507 ################################
509 508 ### ALEMBIC CONFIGURATION ####
510 509 ################################
511 510
512 511 [alembic]
513 512 script_location = kallithea:alembic
514 513
515 514 ################################
516 515 ### LOGGING CONFIGURATION ####
517 516 ################################
518 517
519 518 [loggers]
520 519 keys = root, routes, kallithea, sqlalchemy, tg, gearbox, beaker, templates, whoosh_indexer
521 520
522 521 [handlers]
523 522 keys = console, console_sql
524 523
525 524 [formatters]
526 525 keys = generic, color_formatter, color_formatter_sql
527 526
528 527 #############
529 528 ## LOGGERS ##
530 529 #############
531 530
532 531 [logger_root]
533 532 level = NOTSET
534 533 handlers = console
535 534
536 535 [logger_routes]
537 536 level = DEBUG
538 537 handlers =
539 538 qualname = routes.middleware
540 539 ## "level = DEBUG" logs the route matched and routing variables.
541 540 propagate = 1
542 541
543 542 [logger_beaker]
544 543 level = DEBUG
545 544 handlers =
546 545 qualname = beaker.container
547 546 propagate = 1
548 547
549 548 [logger_templates]
550 549 level = INFO
551 550 handlers =
552 551 qualname = pylons.templating
553 552 propagate = 1
554 553
555 554 [logger_kallithea]
556 555 level = DEBUG
557 556 handlers =
558 557 qualname = kallithea
559 558 propagate = 1
560 559
561 560 [logger_tg]
562 561 level = DEBUG
563 562 handlers =
564 563 qualname = tg
565 564 propagate = 1
566 565
567 566 [logger_gearbox]
568 567 level = DEBUG
569 568 handlers =
570 569 qualname = gearbox
571 570 propagate = 1
572 571
573 572 [logger_sqlalchemy]
574 573 level = INFO
575 574 handlers = console_sql
576 575 qualname = sqlalchemy.engine
577 576 propagate = 0
578 577
579 578 [logger_whoosh_indexer]
580 579 level = DEBUG
581 580 handlers =
582 581 qualname = whoosh_indexer
583 582 propagate = 1
584 583
585 584 ##############
586 585 ## HANDLERS ##
587 586 ##############
588 587
589 588 [handler_console]
590 589 class = StreamHandler
591 590 args = (sys.stderr,)
592 591 #level = INFO
593 592 level = DEBUG
594 593 #formatter = generic
595 594 formatter = color_formatter
596 595
597 596 [handler_console_sql]
598 597 class = StreamHandler
599 598 args = (sys.stderr,)
600 599 level = WARN
601 600 #formatter = generic
602 601 formatter = color_formatter_sql
603 602
604 603 ################
605 604 ## FORMATTERS ##
606 605 ################
607 606
608 607 [formatter_generic]
609 608 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
610 609 datefmt = %Y-%m-%d %H:%M:%S
611 610
612 611 [formatter_color_formatter]
613 612 class = kallithea.lib.colored_formatter.ColorFormatter
614 613 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
615 614 datefmt = %Y-%m-%d %H:%M:%S
616 615
617 616 [formatter_color_formatter_sql]
618 617 class = kallithea.lib.colored_formatter.ColorFormatterSql
619 618 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
620 619 datefmt = %Y-%m-%d %H:%M:%S
General Comments 0
You need to be logged in to leave comments. Login now