production.ini
238 lines
| 7.6 KiB
| text/x-ini
|
IniLexer
/ configs / production.ini
r1119 | # | |||
r483 | ||||
r806 | ; ################################# | |||
; RHODECODE VCSSERVER CONFIGURATION | ||||
; ################################# | ||||
r483 | ||||
[server:main] | ||||
r806 | ; COMMON HOST/IP CONFIG | |||
r483 | host = 127.0.0.1 | |||
port = 9900 | ||||
r801 | ||||
r806 | ; ########################### | |||
; GUNICORN APPLICATION SERVER | ||||
; ########################### | ||||
r801 | ||||
r1021 | ; run with gunicorn --paste rhodecode.ini | |||
r483 | ||||
r806 | ; Module to use, this setting shouldn't be changed | |||
r483 | use = egg:gunicorn#main | |||
r806 | ||||
; Sets the number of process workers. More workers means more concurrent connections | ||||
; RhodeCode can handle at the same time. Each additional worker also it increases | ||||
; memory usage as each has it's own set of caches. | ||||
; Recommended value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers, but no more | ||||
; than 8-10 unless for really big deployments .e.g 700-1000 users. | ||||
; `instance_id = *` must be set in the [app:main] section below (which is the default) | ||||
; when using more than 1 worker. | ||||
r483 | workers = 2 | |||
r801 | ||||
r806 | ; Gunicorn access log level | |||
r801 | loglevel = info | |||
r806 | ; Process name visible in process list | |||
r483 | proc_name = rhodecode_vcsserver | |||
r801 | ||||
r809 | ; Type of worker class, one of `sync`, `gevent` | |||
r806 | ; currently `sync` is the only option allowed. | |||
r483 | worker_class = sync | |||
r801 | ||||
r806 | ; The maximum number of simultaneous clients. Valid only for gevent | |||
r801 | worker_connections = 10 | |||
r806 | ; Max number of requests that worker will handle before being gracefully restarted. | |||
; Prevents memory leaks, jitter adds variability so not all workers are restarted at once. | ||||
r483 | max_requests = 1000 | |||
max_requests_jitter = 30 | ||||
r801 | ||||
r806 | ; Amount of time a worker can spend with handling a request before it | |||
; gets killed and restarted. By default set to 21600 (6hrs) | ||||
; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h) | ||||
r483 | timeout = 21600 | |||
r806 | ; The maximum size of HTTP request line in bytes. | |||
; 0 for unlimited | ||||
r801 | limit_request_line = 0 | |||
r806 | ; Limit the number of HTTP headers fields in a request. | |||
; By default this value is 100 and can't be larger than 32768. | ||||
r801 | limit_request_fields = 32768 | |||
r806 | ; Limit the allowed size of an HTTP request header field. | |||
; Value is a positive number or 0. | ||||
; Setting it to 0 will allow unlimited header field sizes. | ||||
r801 | limit_request_field_size = 0 | |||
r806 | ; Timeout for graceful workers restart. | |||
; After receiving a restart signal, workers have this much time to finish | ||||
; serving requests. Workers still alive after the timeout (starting from the | ||||
; receipt of the restart signal) are force killed. | ||||
; Examples: 1800 (30min), 3600 (1hr), 7200 (2hr), 43200 (12h) | ||||
r1021 | graceful_timeout = 21600 | |||
r801 | ||||
# The number of seconds to wait for requests on a Keep-Alive connection. | ||||
# Generally set in the 1-5 seconds range. | ||||
keepalive = 2 | ||||
r806 | ; Maximum memory usage that each worker can use before it will receive a | |||
; graceful restart signal 0 = memory monitoring is disabled | ||||
; Examples: 268435456 (256MB), 536870912 (512MB) | ||||
; 1073741824 (1GB), 2147483648 (2GB), 4294967296 (4GB) | ||||
r801 | memory_max_usage = 0 | |||
r806 | ; How often in seconds to check for memory usage for each gunicorn worker | |||
r801 | memory_usage_check_interval = 60 | |||
r806 | ; Threshold value for which we don't recycle worker if GarbageCollection | |||
; frees up enough resources. Before each restart we try to run GC on worker | ||||
; in case we get enough free memory after that, restart will not happen. | ||||
r801 | memory_usage_recovery_threshold = 0.8 | |||
r483 | ||||
[app:main] | ||||
r806 | ; The %(here)s variable will be replaced with the absolute path of parent directory | |||
; of this file | ||||
r1021 | ; Each option in the app:main can be override by an environmental variable | |||
; | ||||
;To override an option: | ||||
; | ||||
;RC_<KeyName> | ||||
;Everything should be uppercase, . and - should be replaced by _. | ||||
;For example, if you have these configuration settings: | ||||
;rc_cache.repo_object.backend = foo | ||||
;can be overridden by | ||||
;export RC_CACHE_REPO_OBJECT_BACKEND=foo | ||||
r483 | use = egg:rhodecode-vcsserver | |||
r806 | ; Pyramid default locales, we need this to be set | |||
r1021 | #pyramid.default_locale_name = en | |||
r483 | ||||
r806 | ; default locale used by VCS systems | |||
r1021 | #locale = en_US.UTF-8 | |||
r483 | ||||
r806 | ; path to binaries for vcsserver, it should be set by the installer | |||
r1021 | ; at installation time, e.g /home/user/.rccontrol/vcsserver-1/profile/bin | |||
r806 | ; it can also be a path to nix-build output in case of development | |||
r483 | core.binary_dir = "" | |||
r806 | ; Custom exception store path, defaults to TMPDIR | |||
; This is used to store exception from RhodeCode in shared directory | ||||
r546 | #exception_tracker.store_path = | |||
r519 | ||||
r806 | ; ############# | |||
; DOGPILE CACHE | ||||
; ############# | ||||
; Default cache dir for caches. Putting this into a ramdisk can boost performance. | ||||
; eg. /tmpfs/data_ramdisk, however this directory might require large amount of space | ||||
r1021 | #cache_dir = %(here)s/data | |||
r519 | ||||
r806 | ; *************************************** | |||
; `repo_object` cache, default file based | ||||
; *************************************** | ||||
; `repo_object` cache settings for vcs methods for repositories | ||||
r1021 | #rc_cache.repo_object.backend = dogpile.cache.rc.file_namespace | |||
r806 | ||||
; cache auto-expires after N seconds | ||||
; Examples: 86400 (1Day), 604800 (7Days), 1209600 (14Days), 2592000 (30days), 7776000 (90Days) | ||||
r1021 | #rc_cache.repo_object.expiration_time = 2592000 | |||
r776 | ||||
r809 | ; file cache store path. Defaults to `cache_dir =` value or tempdir if both values are not set | |||
r1021 | #rc_cache.repo_object.arguments.filename = /tmp/vcsserver_cache_repo_object.db | |||
r776 | ||||
r809 | ; *********************************************************** | |||
r806 | ; `repo_object` cache with redis backend | |||
r809 | ; recommended for larger instance, and for better performance | |||
; *********************************************************** | ||||
r806 | ||||
; `repo_object` cache settings for vcs methods for repositories | ||||
#rc_cache.repo_object.backend = dogpile.cache.rc.redis_msgpack | ||||
; cache auto-expires after N seconds | ||||
; Examples: 86400 (1Day), 604800 (7Days), 1209600 (14Days), 2592000 (30days), 7776000 (90Days) | ||||
#rc_cache.repo_object.expiration_time = 2592000 | ||||
; redis_expiration_time needs to be greater then expiration_time | ||||
#rc_cache.repo_object.arguments.redis_expiration_time = 3592000 | ||||
#rc_cache.repo_object.arguments.host = localhost | ||||
#rc_cache.repo_object.arguments.port = 6379 | ||||
#rc_cache.repo_object.arguments.db = 5 | ||||
#rc_cache.repo_object.arguments.socket_timeout = 30 | ||||
; more Redis options: https://dogpilecache.sqlalchemy.org/en/latest/api.html#redis-backends | ||||
#rc_cache.repo_object.arguments.distributed_lock = true | ||||
r483 | ||||
r949 | ; auto-renew lock to prevent stale locks, slower but safer. Use only if problems happen | |||
#rc_cache.repo_object.arguments.lock_auto_renewal = true | ||||
r1006 | ; Statsd client config, this is used to send metrics to statsd | |||
; We recommend setting statsd_exported and scrape them using Promethues | ||||
r920 | #statsd.enabled = false | |||
#statsd.statsd_host = 0.0.0.0 | ||||
#statsd.statsd_port = 8125 | ||||
#statsd.statsd_prefix = | ||||
#statsd.statsd_ipv6 = false | ||||
r483 | ||||
r1021 | ; configure logging automatically at server startup set to false | |||
; to use the below custom logging config. | ||||
r1023 | ; RC_LOGGING_FORMATTER | |||
; RC_LOGGING_LEVEL | ||||
; env variables can control the settings for logging in case of autoconfigure | ||||
r1021 | #logging.autoconfigure = true | |||
; specify your own custom logging config file to configure logging | ||||
#logging.logging_conf_file = /path/to/custom_logging.ini | ||||
r806 | ; ##################### | |||
; LOGGING CONFIGURATION | ||||
; ##################### | ||||
r1023 | ||||
r1024 | [loggers] | |||
keys = root, vcsserver | ||||
r483 | ||||
r1024 | [handlers] | |||
keys = console | ||||
r483 | ||||
r1024 | [formatters] | |||
keys = generic, json | ||||
r483 | ||||
r806 | ; ####### | |||
; LOGGERS | ||||
; ####### | ||||
r1024 | [logger_root] | |||
level = NOTSET | ||||
handlers = console | ||||
r483 | ||||
r1024 | [logger_vcsserver] | |||
level = INFO | ||||
handlers = | ||||
qualname = vcsserver | ||||
propagate = 1 | ||||
r483 | ||||
r806 | ; ######## | |||
; HANDLERS | ||||
; ######## | ||||
r483 | ||||
r1024 | [handler_console] | |||
class = StreamHandler | ||||
args = (sys.stderr, ) | ||||
level = INFO | ||||
r1026 | ; To enable JSON formatted logs replace 'generic' with 'json' | |||
; This allows sending properly formatted logs to grafana loki or elasticsearch | ||||
r1024 | formatter = generic | |||
r483 | ||||
r806 | ; ########## | |||
; FORMATTERS | ||||
; ########## | ||||
r483 | ||||
r1024 | [formatter_generic] | |||
format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | ||||
datefmt = %Y-%m-%d %H:%M:%S | ||||
r1019 | ||||
r1024 | [formatter_json] | |||
format = %(timestamp)s %(levelname)s %(name)s %(message)s %(req_id)s | ||||
class = vcsserver.lib._vendor.jsonlogger.JsonFormatter | ||||