diff --git a/docs/en/administration/basedirectory.md b/docs/en/administration/basedirectory.md index 13d67903f3..c7bdd33909 100644 --- a/docs/en/administration/basedirectory.md +++ b/docs/en/administration/basedirectory.md @@ -17,31 +17,9 @@ The location of the base directory depends on your operating system and type of ## Change base directory location -The location of the base directory can be changed by using one of the following ways. -The preferences are the following: Properties file over system property over environment variable. - -### Environment variable - -By setting the environment variable **SCM_HOME** e.g.: +The location of the base directory can be changed by setting the environment variable **SCM_WEBAPP_HOMEDIR**. ```bash -export SCM_HOME=/home/scm +export SCM_WEBAPP_HOMEDIR=/home/scm /opt/scm-server/bin/scm-server ``` - -For rpm and deb installations the variable can be changed via the file `/etc/default/scm-server`. - -## System property - -The path can be changed by setting the system property **scm.home** e.g.: - -```bash --Dscm.home=/home/scm -``` -## Properties file - -If SCM-Manager finds a file called `scm.properties` on the class path it reads the property `scm.home` e.g.: - -```properties -scm.home=/home/scm -``` diff --git a/docs/en/administration/logging.md b/docs/en/administration/logging.md index 308ad5b744..a422844489 100644 --- a/docs/en/administration/logging.md +++ b/docs/en/administration/logging.md @@ -6,30 +6,140 @@ subtitle: Configuration and locations of SCM-Manager logging SCM-Manager logs information which can be useful, if the system does not behave as expected. The logging behavior depends on your operating system and installation. -| Type of Installation | Logging | -|----------------------|---------| -| Docker | stdout | -| RPM | /var/log/scm | -| DEB | /var/log/scm | -| Unix | $BASEDIR/logs | -| Mac OS X | ~/Library/Logs/SCM-Manager | -| Windows | $BASEDIR\logs | +| Type of Installation | Logging | +|----------------------|----------------------------| +| Docker | stdout | +| RPM | /var/log/scm | +| DEB | /var/log/scm | +| Unix | $BASEDIR/logs | +| Mac OS X | ~/Library/Logs/SCM-Manager | +| Windows | $BASEDIR\logs | The location of the **$BASEDIR** can be found [here](../basedirectory/). ## Configuration -The logging behaviour of SCM-Manager can be configured via an xml file. -The syntax and properties can be found [here](http://logback.qos.ch/manual/configuration.html). -The location of the file depends also on the type of installation. +The logging behaviour of SCM-Manager can be configured via an `config.yml` file or environment variables. +Environment variables override the behaviour defined in the `config.yml`. +The location of the `config.yml` file depends also on the type of installation. -| Type of Installation | Path | -|----------------------|---------| -| Docker | /etc/scm/logging.xml | -| RPM | /etc/scm/logging.xml | -| DEB | /etc/scm/logging.xml | -| Unix | $EXTRACT_PATH/scm-server/conf/logging.xml | -| Mac OS X | $EXTRACT_PATH/scm-server/conf/logging.xml | -| Windows | $EXTRACT_PATH/scm-server/conf/logging.xml | +| Type of Installation | Path | +|----------------------|------------------------------------------| +| Docker | /etc/scm/config.yml | +| RPM | /etc/scm/config.yml | +| DEB | /etc/scm/config.yml | +| Unix | $EXTRACT_PATH/scm-server/conf/config.yml | +| Mac OS X | $EXTRACT_PATH/scm-server/conf/config.yml | +| Windows | $EXTRACT_PATH/scm-server/conf/config.yml | -**$EXTRACT_PATH** is the path were you etract the content of the package. +**$EXTRACT_PATH** is the path were you extract the content of the package. + +## Configuration via config.yml file + +The logging configuration can be set via `config.yml` file. +The configuration could look like this: + +```yaml +log: + # The directory where the log files should be stored + # This is an optional setting, if it is not set, the default directory will be used + logDir: /etc/scm/logs + # The log level that should be used globally + # Supported log levels are: TRACE, DEBUG, INFO, WARN and ERROR + rootLevel: WARN + # Whether the log file should be appended with new logs + enableFileAppender: true + # Whether the standard output should be appended with new logs + enableConsoleAppender: true + + # Specifies which log level should be used for a specific class or package + # The "name" needs to be a fully qualified classpath or package path + # This setting overrides the root log level, for the specified class or package + logger: + sonia.scm: DEBUG + com.cloudogu.scm: DEBUG +``` + +## Configuration via environment variable + +Every property that can be set inside the `config.yml` can also be set as an environment variable. +The following table explains which environment variables are available and how to set them. + +| Environment Variable | Corresponding config.yml property | Example | +|----------------------------------|-----------------------------------|--------------------------------------------------------------| +| SCM_LOG_DIR | log.logDir | export SCM_LOG_DIR=/etc/scm/logs | +| SCM_LOG_ROOT_LEVEL | log.rootLevel | export SCM_LOG_ROOT_LEVEL=WARN | +| SCM_LOG_FILE_APPENDER_ENABLED | log.enableFileAppender | export SCM_LOG_FILE_APPENDER_ENABLED=true | +| SCM_LOG_CONSOLE_APPENDER_ENABLED | log.enableConsoleAppender | export SCM_LOG_CONSOLE_APPENDER_ENABLED=true | +| SCM_LOG_LOGGER | log.logger | export SCM_LOG_LOGGER=sonia.scm:DEBUG,com.cloudogu.scm:DEBUG | + +## Logback + +If the configuration properties are not sufficient, then you may configure Logback itself. +Logback is the library that the SCM-Manager uses for its logging. +To enable a custom Logback configuration, you have to start the SCM-Manager with the following system property `-Dlogback.configurationFile=logging.xml`. +If this property is set, then the configuration inside the `config.yml` and environment variables will be ignored. +Then depending on the type of installation you use the `logging.xml` file is expected at the following directories: + +| Type of Installation | Path | +|----------------------|-------------------------------------------| +| Docker | /etc/scm/logging.xml | +| RPM | /etc/scm/logging.xml | +| DEB | /etc/scm/logging.xml | +| Unix | $EXTRACT_PATH/scm-server/conf/logging.xml | +| Mac OS X | $EXTRACT_PATH/scm-server/conf/logging.xml | +| Windows | $EXTRACT_PATH/scm-server/conf/logging.xml | + +**$EXTRACT_PATH** is the path were you extract the content of the package. + +**Example** + +```xml + + + + /var/log/scm/scm-manager.log + + + /var/log/scm/scm-manager-%i.log + 1 + 10 + + + + 10MB + + + true + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n + + + + + + + + + + + + + + + + + + + + + + +``` diff --git a/docs/en/administration/scm-server.md b/docs/en/administration/scm-server.md index 3e7413b7cf..ba7067d301 100644 --- a/docs/en/administration/scm-server.md +++ b/docs/en/administration/scm-server.md @@ -8,107 +8,13 @@ SCM-Manager v3 can be configured in several ways. We recommend using `config.yml one place. However, if required, each option in this configuration can also be set via environment variables. See the relevant topics below for more information. -## Logging - -The log level can be configured in the `config.yml`. -You can change the root log level to change the log level globally for all loggers. -Also, new specific logger can be added to control logging in a fine-grained style. -We provide two types of log appender. -`fileAppender` which writes the logging output to a defined log file and the `consoleAppender` which simply prints -everything to your (bash/shell) console. -Depending on which platform your scm-server is running, we already configured the recommended logging settings. - -**Example** - -```yaml -log: - # General logging level - rootLevel: WARN - enableFileAppender: true - enableConsoleAppender: true - - # Custom specific loggers - # The "name" has to be the path of the classes to be logged with this logger - logger: - sonia.scm: DEBUG - com.cloudogu.scm: DEBUG -``` - -To override this config with environment variables you could set it like: - -`SCM_LOG_ROOT_LEVEL` to one of the log levels, like `DEBUG` -`SCM_LOG_FILE_APPENDER_ENABLED` to one of the log levels, like `true` -`SCM_LOG_CONSOLE_APPENDER_ENABLED` to one of the log levels, like `false` -`SCM_LOG_LOGGER` with a comma-separated list of your loggers, like `sonia.scm:DEBUG,com.cloudogu.scm:TRACE` - -Supported log levels are: TRACE, DEBUG, INFO, WARN, ERROR - -### Logback - -If you want to configure more advanced loggers which are beyond this simple configuration, you may still use -a logback configuration file. -You have to enable your logback configuration by setting the file path with the system -property `logback.configurationFile`, like `-Dlogback.configurationFile=logging.xml`. -If the logback configuration is enabled, the log configuration of the `config.yml` will be ignored. - -**Example** - -```xml - - - - /var/log/scm/scm-manager.log - - - /var/log/scm/scm-manager-%i.log - 1 - 10 - - - - 10MB - - - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - -``` ## Webserver Configuration The listener host and port of your SCM-Server can directly be edited in the top level of your `config.yml`. If you want your server without a context path (use `root path`), you can change this option to be `/`. -**Example** +**config.yml** ```yaml # This is the host adresse, `0.0.0.0` means it listens on every interface @@ -118,11 +24,13 @@ port: 8080 contextPath: / ``` -To override this config with environment variables you could set it like: +**Environment variables** -`SCM_SERVER_PORT` to your port, like `8081` -`SCM_SERVER_ADDRESS_BINDING` to the destination ip / hostname, like `0.0.0.0` -`SCM_SERVER_CONTEXT_PATH` to `/myContextPath` +| Environment Variable | Corresponding config.yml property | Example | +|----------------------|-----------------------------------|------------------------------------| +| SCM_ADDRESS_BINDING | addressBinding | export SCM_ADDRESS_BINDING=0.0.0.0 | +| SCM_PORT | port | export SCM_PORT=8080 | +| SCM_CONTEXT_PATH | contextPath | export SCM_CONTEXT_PATH=/ | ## SSL @@ -183,9 +91,9 @@ protect your keystore. ### Server configuration -Adjust your `config.yml` to apply your prepared keystore with configured certificate. +Adjust your `config.yml` to apply your prepared keystore with configured certificate or set them via environment variables. -**Example** +**config.yml** ```yaml https: @@ -202,6 +110,16 @@ https: redirectHttpToHttps: true ``` +**Environment variables** + +| Environment Variable | Corresponding config.yml property | Example | +|----------------------------------|-----------------------------------|-------------------------------------------------------| +| SCM_HTTPS_KEY_STORE_PATH | https.keyStorePath | export SCM_HTTPS_KEY_STORE_PATH=/conf/keystore.pkcs12 | +| SCM_HTTPS_KEY_STORE_PASSWORD | https.keyStorePassword | export SCM_HTTPS_KEY_STORE_PASSWORD=secret | +| SCM_HTTPS_KEY_STORE_TYPE | https.keyStoreType | export SCM_HTTPS_KEY_STORE_TYPE=PKCS12 | +| SCM_HTTPS_SSL_PORT | https.sslPort | export SCM_HTTPS_PORT=443 | +| SCM_HTTPS_REDIRECT_HTTP_TO_HTTPS | https.redirectHttpToHttps | export SCM_HTTPS_REDIRECT_HTTP_TO_HTTPS=true | + ## Change directories The default directories are platform-specific and therefore could be different if you try scm-server on different @@ -210,24 +128,26 @@ starting `/`, your configured path will be located relative to your base directo like `/opt/scm-server` on unix-based packages). -For technical reasons the tempDir is located at the top level of your config.yml. All other path-based config options +For technical reasons the tempDir is located at the top level of your `config.yml`. All other path-based config options are located under `webapp`. -**Example** +**config.yml** ```yaml tempDir: /tmp webapp: homeDir: ./scm-home - workDir: + workDir: /etc/scm/work ``` -To override this config with environment variables you could set it like: +**Environment variables** -`SCM_TEMP_DIR` to your port, like `/tmp` -`SCM_WEBAPP_HOMEDIR` to home dir (aka `scm-home`), like `./myHomeDir` -`SCM_WEBAPP_WORKDIR` to `/scm-work` +| Environment Variable | Corresponding config.yml property | Example | +|----------------------|-----------------------------------|-----------------------------------------| +| SCM_TEMP_DIR | tempDir | export SCM_TEMP_DIR=/tmp | +| SCM_WEBAPP_HOMEDIR | webapp.homeDir | export SCM_WEBAPP_HOMEDIR=./scm-home | +| SCM_WEBAPP_WORKDIR | webapp.workDir | export SCM_WEBAPP_WORKDIR=/etc/scm/work | ## Reverse proxy @@ -241,17 +161,27 @@ Many reverse proxies will also cache response streams. This can lead to timeouts repositories. To avoid this, you might want to increase the `idleTimeout` to a higher value, depending on the size of your repositories (you might want to start with `300000`, that would be five minutes). -**Example** +**config.yml** ```yaml forwardHeadersEnabled: true idleTimeout: 300000 ``` +**Environment variables** + +| Environment Variable | Corresponding config.yml property | Example | +|-----------------------------|-----------------------------------|-----------------------------------------| +| SCM_FORWARD_HEADERS_ENABLED | forwardHeadersEnabled | export SCM_FORWARD_HEADERS_ENABLED=true | +| SCM_IDLE_TIMEOUT | idleTimeout | export SCM_IDLE_TIMEOUT=300000 | + ## Webapp The webapp configuration consists of anything that is not webserver or logging related. Most of the available options should be set to the recommended values of your default `config.yml` file. +You can also override these options with environment variables. + +**config.yml** ```yaml webapp: @@ -279,11 +209,17 @@ webapp: workingCopyPoolSize: 5 ``` -To override this config with environment variables can set the options following the schema `SCM_WEBAPP_PROPERTYNAME`. -All hierarchy levels have to be separated by underscores `_`. +**Environment variables** -Like: - -- `SCM_WEBAPP_CACHE_DATAFILE_ENABLED` = `true` -- `SCM_WEBAPP_MAXASYNCABORTSECONDS` = `45` -- `SCM_WEBAPP_CENTRALWORKQUEUE_WORKERS` = `42` +| Environment Variable | Corresponding config.yml property | Example | +|-------------------------------------|-----------------------------------|--------------------------------------------------------------------------------------------------| +| SCM_WEBAPP_WORKDIR | webapp.workDir | export SCM_WEBAPP_WORKDIR=/tmp/scm-work | +| SCM_WEBAPP_HOMEDIR | webapp.homeDir | export SCM_WEBAPP_HOMEDIR=/var/lib/scm | +| SCM_WEBAPP_CACHE_DATAFILE_ENABLED | webapp.cache.datafile.enabled | export SCM_WEBAPP_CACHE_DATAFILE_ENABLED=true | +| SCM_WEBAPP_CACHE_STORE_ENABLED | webapp.cache.store.enabled | export SCM_WEBAPP_CACHE_STORE_ENABLED=true | +| SCM_WEBAPP_ENDLESSJWT | webapp.endlessJwt | export SCM_WEBAPP_ENDLESSJWT=false | +| SCM_WEBAPP_ASYNCTHREADS | webapp.asyncThreads | export SCM_WEBAPP_ASYNCTHREADS=4 | +| SCM_WEBAPP_MAXASYNCABORTSECONDS | webapp.maxAsyncAbortSeconds | export SCM_WEBAPP_MAXASYNCABORTSECONDS=60 | +| SCM_WEBAPP_CENTRALWORKQUEUE_WORKERS | webapp.centralWorkQueue.workers | export SCM_WEBAPP_CENTRALWORKQUEUE_WORKERS=4 | +| SCM_WEBAPP_WORKINGCOPYPOOLSTRATEGY | webapp.workingCopyPoolStrategy | export SCM_WEBAPP_WORKINGCOPYPOOLSTRATEGY=sonia.scm.repository.work.SimpleCachingWorkingCopyPool | +| SCM_WEBAPP_WORKINGCOPYPOOLSIZE | webapp.workingCopyPoolSize | export SCM_WEBAPP_WORKINGCOPYPOOLSIZE=5 | diff --git a/docs/en/administration/workdir_caching.md b/docs/en/administration/workdir_caching.md index 437713b035..dd2d884aa3 100644 --- a/docs/en/administration/workdir_caching.md +++ b/docs/en/administration/workdir_caching.md @@ -10,11 +10,20 @@ back to the central repository. The larger the repositories, the longer this may To speed up such changes a lot, SCM-Manager offers a strategy where the local clones will be cached and reused for subsequent requests. This strategy caches up to a configurable amount of clones (but at most one per repository). -To enable this strategy, add the system property `scm.workingCopyPoolStrategy` to the value -`sonia.scm.repository.work.SimpleCachingWorkingCopyPool`: +To enable this strategy you can change the `config.yml` or set the corresponding environment variable. +The maximum capacity of the cache can also be set via `config.yml` or corresponding environment variable (the default value is 5). -```bash --Dscm.workingCopyPoolStrategy=sonia.scm.repository.work.SimpleCachingWorkingCopyPool +**config.yml** + +```yaml +webapp: + # ... + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + workingCopyPoolSize: 5 + # ... ``` -The maximum capacity of the cache can be set using the property `scm.workingCopyPoolSize` (the default is 5). +```bash +export SCM_WEBAPP_WORKINGCOPYPOOLSTRATEGY=sonia.scm.repository.work.SimpleCachingWorkingCopyPool +export SCM_WEBAPP_WORKINGCOPYPOOLSIZE=5 +``` diff --git a/gradle/changelog/fix-log-dir-env.yml b/gradle/changelog/fix-log-dir-env.yml new file mode 100644 index 0000000000..ea804118a1 --- /dev/null +++ b/gradle/changelog/fix-log-dir-env.yml @@ -0,0 +1,2 @@ +- type: fixed + description: The environment variable for defining the log directory is now applied diff --git a/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java b/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java index e6fae50559..852d98c478 100644 --- a/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java +++ b/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java @@ -45,7 +45,7 @@ public class ServerConfigYaml { private LogConfig() {} public String getLogDir() { - return logDir; + return getEnvWithDefault("LOG_DIR", logDir); } public void setLogDir(String logDir) {