docker: make settings fully configurable via env vars

Now every setting in the official Etherpad container will be configurable via
environment variables.
pull/3913/head
Paul Tiedtke 2020-04-16 23:24:49 +02:00 committed by muxator
parent 8d39cc4db2
commit 85adaa44d8
2 changed files with 138 additions and 56 deletions

View File

@ -52,7 +52,7 @@ And point your browser to `http://<YOUR_IP>:<DESIRED_PORT>`
## Options available by default ## Options available by default
The `settings.json.docker` available by default enables some configuration to be set from the environment. The `settings.json.docker` available by default allows to control almost every setting via environment variables.
### General ### General
@ -83,11 +83,72 @@ The `settings.json.docker` available by default enables some configuration to be
If your database needs additional settings, you will have to use a personalized `settings.json.docker` and rebuild the container (or otherwise put the updated `settings.json` inside your image). If your database needs additional settings, you will have to use a personalized `settings.json.docker` and rebuild the container (or otherwise put the updated `settings.json` inside your image).
### Pad Options
| Variable | Description | Default |
| -------------------------------- | ----------- | ------- |
| `PAD_OPTIONS_NO_COLORS` | | `false` |
| `PAD_OPTIONS_SHOW_CONTROLS` | | `true` |
| `PAD_OPTIONS_SHOW_CHAT` | | `true` |
| `PAD_OPTIONS_SHOW_LINE_NUMBERS` | | `true` |
| `PAD_OPTIONS_USE_MONOSPACE_FONT` | | `false` |
| `PAD_OPTIONS_USER_NAME` | | `false` |
| `PAD_OPTIONS_USER_COLOR` | | `false` |
| `PAD_OPTIONS_RTL` | | `false` |
| `PAD_OPTIONS_ALWAYS_SHOW_CHAT` | | `false` |
| `PAD_OPTIONS_CHAT_AND_USERS` | | `false` |
| `PAD_OPTIONS_LANG` | | `en-gb` |
### Shortcuts
| Variable | Description | Default |
| ----------------------------------- | ------------------------------------------------ | ------- |
| `PAD_SHORTCUTS_ENABLED_ALT_F9` | focus on the File Menu and/or editbar | `true` |
| `PAD_SHORTCUTS_ENABLED_ALT_C` | focus on the Chat window | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_S` | save a revision | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_Z` | undo/redo | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_Y` | redo | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_I` | italic | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_B` | bold | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_U` | underline | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_H` | backspace | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_5` | strike through | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_1` | ordered list | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_2` | shows a gritter popup showing a line author | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_L` | unordered list | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_N` | ordered list | `true` |
| `PAD_SHORTCUTS_ENABLED_CMD_SHIFT_C` | clear authorship | `true` |
| `PAD_SHORTCUTS_ENABLED_DELETE` | | `true` |
| `PAD_SHORTCUTS_ENABLED_RETURN` | | `true` |
| `PAD_SHORTCUTS_ENABLED_ESC` | in mozilla versions 14-19 avoid reconnecting pad | `true` |
| `PAD_SHORTCUTS_ENABLED_TAB` | indent | `true` |
| `PAD_SHORTCUTS_ENABLED_CTRL_HOME` | scroll to top of pad | `true` |
| `PAD_SHORTCUTS_ENABLED_PAGE_UP` | | `true` |
| `PAD_SHORTCUTS_ENABLED_PAGE_DOWN` | | `true` |
### Skins ### Skins
You can use the UI skin variants builder at `/p/test#skinvariantsbuilder`
For the colibris skin only, you can choose how to render the three main containers:
* toolbar (top menu with icons)
* editor (containing the text of the pad)
* background (area outside of editor, mostly visible when using page style)
For each of the 3 containers you can choose 4 color combinations:
* super-light
* light
* dark
* super-dark
For the editor container, you can also make it full width by adding `full-width-editor` variant (by default editor is rendered as a page, with a max-width of 900px).
| Variable | Description | Default | | Variable | Description | Default |
| --------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------- | | --------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------- |
| `SKIN_NAME` | either `no-skin`, `colibris` or an existing directory under `src/static/skins` | `colibris` | | `SKIN_NAME` | either `no-skin`, `colibris` or an existing directory under `src/static/skins` | `colibris` |
| `SKIN_VARIANTS` | multiple skin variants separated by spaces | `super-light-toolbar super-light-editor light-background` |
### Logging ### Logging
@ -95,6 +156,7 @@ If your database needs additional settings, you will have to use a personalized
| Variable | Description | Default | | Variable | Description | Default |
| -------------------- | ---------------------------------------------------- | ------- | | -------------------- | ---------------------------------------------------- | ------- |
| `LOGLEVEL` | valid values are `DEBUG`, `INFO`, `WARN` and `ERROR` | `INFO` | | `LOGLEVEL` | valid values are `DEBUG`, `INFO`, `WARN` and `ERROR` | `INFO` |
| `DISABLE_IP_LOGGING` | Privacy: disable IP logging | `false` |
### Advanced ### Advanced
@ -106,6 +168,26 @@ If your database needs additional settings, you will have to use a personalized
| `IMPORT_MAX_FILE_SIZE` | maximum allowed file size when importing a pad, in bytes. | `52428800` (50 MB) | | `IMPORT_MAX_FILE_SIZE` | maximum allowed file size when importing a pad, in bytes. | `52428800` (50 MB) |
| `IMPORT_EXPORT_MAX_REQ_PER_IP` | maximum number of import/export calls per IP. | `10` | | `IMPORT_EXPORT_MAX_REQ_PER_IP` | maximum number of import/export calls per IP. | `10` |
| `IMPORT_EXPORT_RATE_LIMIT_WINDOW` | the call rate for import/export requests will be estimated in this time window (in milliseconds) | `90000` | | `IMPORT_EXPORT_RATE_LIMIT_WINDOW` | the call rate for import/export requests will be estimated in this time window (in milliseconds) | `90000` |
| `SUPPRESS_ERRORS_IN_PAD_TEXT` | Should we suppress errors from being visible in the default Pad Text? | `false` |
| `REQUIRE_SESSION` | If this option is enabled, a user must have a session to access pads. This effectively allows only group pads to be accessed. | `false` |
| `EDIT_ONLY` | Users may edit pads but not create new ones. Pad creation is only via the API. This applies both to group pads and regular pads. | `false` |
| `SESSION_NO_PASSWORD` | If set to true, those users who have a valid session will automatically be granted access to password protected pads. | `false` |
| `MINIFY` | If true, all css & js will be minified before sending to the client. This will improve the loading performance massively, but makes it difficult to debug the javascript/css | `true` |
| `MAX_AGE` | How long may clients use served javascript code (in seconds)? Not setting this may cause problems during deployment. Set to 0 to disable caching. | `21600` (6 hours) |
| `ABIWORD` | Absolute path to the Abiword executable. Abiword is needed to get advanced import/export features of pads. Setting it to null disables Abiword and will only allow plain text and HTML import/exports. | `null` |
| `SOFFICE` | This is the absolute path to the soffice executable. LibreOffice can be used in lieu of Abiword to export pads. Setting it to null disables LibreOffice exporting. | `null` |
| `TIDY_HTML` | Path to the Tidy executable. Tidy is used to improve the quality of exported pads. Setting it to null disables Tidy. | `null` |
| `ALLOW_UNKNOWN_FILE_ENDS` | Allow import of file types other than the supported ones: txt, doc, docx, rtf, odt, html & htm | `true` |
| `REQUIRE_AUTHENTICATION` | This setting is used if you require authentication of all users. Note: "/admin" always requires authentication. | `false` |
| `REQUIRE_AUTHORIZATION` | Require authorization by a module, or a user with is_admin set, see below. | `false` |
| `AUTOMATIC_RECONNECTION_TIMEOUT` | Time (in seconds) to automatically reconnect pad when a "Force reconnect" message is shown to user. Set to 0 to disable automatic reconnection. | `0` |
| `FOCUS_LINE_PERCENTAGE_ABOVE` | Percentage of viewport height to be additionally scrolled. e.g. 0.5, to place caret line in the middle of viewport, when user edits a line above of the viewport. Set to 0 to disable extra scrolling | `0` |
| `FOCUS_LINE_PERCENTAGE_BELOW` | Percentage of viewport height to be additionally scrolled. e.g. 0.5, to place caret line in the middle of viewport, when user edits a line below of the viewport. Set to 0 to disable extra scrolling | `0` |
| `FOCUS_LINE_PERCENTAGE_ARROW_UP` | Percentage of viewport height to be additionally scrolled when user presses arrow up in the line of the top of the viewport. Set to 0 to let the scroll to be handled as default by Etherpad | `0` |
| `FOCUS_LINE_DURATION` | Time (in milliseconds) used to animate the scroll transition. Set to 0 to disable animation | `0` |
| `FOCUS_LINE_CARET_SCROLL` | Flag to control if it should scroll when user places the caret in the last line of the viewport | `false` |
| `LOAD_TEST` | Allow Load Testing tools to hit the Etherpad Instance. WARNING: this will disable security on the instance. | `false` |
| `EXPOSE_VERSION` | Expose Etherpad version in the web interface and in the Server http header. Do not enable on production machines. | `false` |
### Examples ### Examples

View File

@ -122,7 +122,7 @@
* "full-width-editor" variant (by default editor is rendered as a page, with * "full-width-editor" variant (by default editor is rendered as a page, with
* a max-width of 900px). * a max-width of 900px).
*/ */
"skinVariants": "super-light-toolbar super-light-editor light-background", "skinVariants": "${SKIN_VARIANTS:super-light-toolbar super-light-editor light-background}",
/* /*
* IP and port which Etherpad should bind at. * IP and port which Etherpad should bind at.
@ -200,57 +200,57 @@
* Change them if you want to override. * Change them if you want to override.
*/ */
"padOptions": { "padOptions": {
"noColors": false, "noColors": "${PAD_OPTIONS_NO_COLORS:false}",
"showControls": true, "showControls": "${PAD_OPTIONS_SHOW_CONTROLS:true}",
"showChat": true, "showChat": "${PAD_OPTIONS_SHOW_CHAT:true}",
"showLineNumbers": true, "showLineNumbers": "${PAD_OPTIONS_SHOW_LINE_NUMBERS:true}",
"useMonospaceFont": false, "useMonospaceFont": "${PAD_OPTIONS_USE_MONOSPACE_FONT:false}",
"userName": false, "userName": "${PAD_OPTIONS_USER_NAME:false}",
"userColor": false, "userColor": "${PAD_OPTIONS_USER_COLOR:false}",
"rtl": false, "rtl": "${PAD_OPTIONS_RTL:false}",
"alwaysShowChat": false, "alwaysShowChat": "${PAD_OPTIONS_ALWAYS_SHOW_CHAT:false}",
"chatAndUsers": false, "chatAndUsers": "${PAD_OPTIONS_CHAT_AND_USERS:false}",
"lang": "en-gb" "lang": "${PAD_OPTIONS_LANG:en-gb}"
}, },
/* /*
* Pad Shortcut Keys * Pad Shortcut Keys
*/ */
"padShortcutEnabled" : { "padShortcutEnabled" : {
"altF9": true, /* focus on the File Menu and/or editbar */ "altF9": "${PAD_SHORTCUTS_ENABLED_ALT_F9:true}", /* focus on the File Menu and/or editbar */
"altC": true, /* focus on the Chat window */ "altC": "${PAD_SHORTCUTS_ENABLED_ALT_C:true}", /* focus on the Chat window */
"cmdShift2": true, /* shows a gritter popup showing a line author */ "cmdShift2": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_2:true}", /* shows a gritter popup showing a line author */
"delete": true, "delete": "${PAD_SHORTCUTS_ENABLED_DELETE:true}",
"return": true, "return": "${PAD_SHORTCUTS_ENABLED_RETURN:true}",
"esc": true, /* in mozilla versions 14-19 avoid reconnecting pad */ "esc": "${PAD_SHORTCUTS_ENABLED_ESC:true}", /* in mozilla versions 14-19 avoid reconnecting pad */
"cmdS": true, /* save a revision */ "cmdS": "${PAD_SHORTCUTS_ENABLED_CMD_S:true}", /* save a revision */
"tab": true, /* indent */ "tab": "${PAD_SHORTCUTS_ENABLED_TAB:true}", /* indent */
"cmdZ": true, /* undo/redo */ "cmdZ": "${PAD_SHORTCUTS_ENABLED_CMD_Z:true}", /* undo/redo */
"cmdY": true, /* redo */ "cmdY": "${PAD_SHORTCUTS_ENABLED_CMD_Y:true}", /* redo */
"cmdI": true, /* italic */ "cmdI": "${PAD_SHORTCUTS_ENABLED_CMD_I:true}", /* italic */
"cmdB": true, /* bold */ "cmdB": "${PAD_SHORTCUTS_ENABLED_CMD_B:true}", /* bold */
"cmdU": true, /* underline */ "cmdU": "${PAD_SHORTCUTS_ENABLED_CMD_U:true}", /* underline */
"cmd5": true, /* strike through */ "cmd5": "${PAD_SHORTCUTS_ENABLED_CMD_5:true}", /* strike through */
"cmdShiftL": true, /* unordered list */ "cmdShiftL": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_L:true}", /* unordered list */
"cmdShiftN": true, /* ordered list */ "cmdShiftN": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_N:true}", /* ordered list */
"cmdShift1": true, /* ordered list */ "cmdShift1": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_1:true}", /* ordered list */
"cmdShiftC": true, /* clear authorship */ "cmdShiftC": "${PAD_SHORTCUTS_ENABLED_CMD_SHIFT_C:true}", /* clear authorship */
"cmdH": true, /* backspace */ "cmdH": "${PAD_SHORTCUTS_ENABLED_CMD_H:true}", /* backspace */
"ctrlHome": true, /* scroll to top of pad */ "ctrlHome": "${PAD_SHORTCUTS_ENABLED_CTRL_HOME:true}", /* scroll to top of pad */
"pageUp": true, "pageUp": "${PAD_SHORTCUTS_ENABLED_PAGE_UP:true}",
"pageDown": true "pageDown": "${PAD_SHORTCUTS_ENABLED_PAGE_DOWN:true}"
}, },
/* /*
* Should we suppress errors from being visible in the default Pad Text? * Should we suppress errors from being visible in the default Pad Text?
*/ */
"suppressErrorsInPadText": false, "suppressErrorsInPadText": "${SUPPRESS_ERRORS_IN_PAD_TEXT:false}",
/* /*
* If this option is enabled, a user must have a session to access pads. * If this option is enabled, a user must have a session to access pads.
* This effectively allows only group pads to be accessed. * This effectively allows only group pads to be accessed.
*/ */
"requireSession": false, "requireSession": "${REQUIRE_SESSION:false}",
/* /*
* Users may edit pads but not create new ones. * Users may edit pads but not create new ones.
@ -258,13 +258,13 @@
* Pad creation is only via the API. * Pad creation is only via the API.
* This applies both to group pads and regular pads. * This applies both to group pads and regular pads.
*/ */
"editOnly": false, "editOnly": "${EDIT_ONLY:false}",
/* /*
* If set to true, those users who have a valid session will automatically be * If set to true, those users who have a valid session will automatically be
* granted access to password protected pads. * granted access to password protected pads.
*/ */
"sessionNoPassword": false, "sessionNoPassword": "${SESSION_NO_PASSWORD:false}",
/* /*
* If true, all css & js will be minified before sending to the client. * If true, all css & js will be minified before sending to the client.
@ -272,7 +272,7 @@
* This will improve the loading performance massively, but makes it difficult * This will improve the loading performance massively, but makes it difficult
* to debug the javascript/css * to debug the javascript/css
*/ */
"minify": true, "minify": "${MINIFY:true}",
/* /*
* How long may clients use served javascript code (in seconds)? * How long may clients use served javascript code (in seconds)?
@ -280,7 +280,7 @@
* Not setting this may cause problems during deployment. * Not setting this may cause problems during deployment.
* Set to 0 to disable caching. * Set to 0 to disable caching.
*/ */
"maxAge": 21600, // 60 * 60 * 6 = 6 hours "maxAge": "${MAX_AGE:21600}", // 60 * 60 * 6 = 6 hours
/* /*
* Absolute path to the Abiword executable. * Absolute path to the Abiword executable.
@ -289,7 +289,7 @@
* it to null disables Abiword and will only allow plain text and HTML * it to null disables Abiword and will only allow plain text and HTML
* import/exports. * import/exports.
*/ */
"abiword": null, "abiword": "${ABIWORD}",
/* /*
* This is the absolute path to the soffice executable. * This is the absolute path to the soffice executable.
@ -297,7 +297,7 @@
* LibreOffice can be used in lieu of Abiword to export pads. * LibreOffice can be used in lieu of Abiword to export pads.
* Setting it to null disables LibreOffice exporting. * Setting it to null disables LibreOffice exporting.
*/ */
"soffice": null, "soffice": "${SOFFICE}",
/* /*
* Path to the Tidy executable. * Path to the Tidy executable.
@ -305,25 +305,25 @@
* Tidy is used to improve the quality of exported pads. * Tidy is used to improve the quality of exported pads.
* Setting it to null disables Tidy. * Setting it to null disables Tidy.
*/ */
"tidyHtml": null, "tidyHtml": "${TIDY_HTML}",
/* /*
* Allow import of file types other than the supported ones: * Allow import of file types other than the supported ones:
* txt, doc, docx, rtf, odt, html & htm * txt, doc, docx, rtf, odt, html & htm
*/ */
"allowUnknownFileEnds": true, "allowUnknownFileEnds": "${ALLOW_UNKNOWN_FILE_ENDS:true}",
/* /*
* This setting is used if you require authentication of all users. * This setting is used if you require authentication of all users.
* *
* Note: "/admin" always requires authentication. * Note: "/admin" always requires authentication.
*/ */
"requireAuthentication": false, "requireAuthentication": "${REQUIRE_AUTHENTICATION:false}",
/* /*
* Require authorization by a module, or a user with is_admin set, see below. * Require authorization by a module, or a user with is_admin set, see below.
*/ */
"requireAuthorization": false, "requireAuthorization": "${REQUIRE_AUTHORIZATION:false}",
/* /*
* When you use NGINX or another proxy/load-balancer set this to true. * When you use NGINX or another proxy/load-balancer set this to true.
@ -339,7 +339,7 @@
/* /*
* Privacy: disable IP logging * Privacy: disable IP logging
*/ */
"disableIPlogging": false, "disableIPlogging": "${DISABLE_IP_LOGGING:false}",
/* /*
* Time (in seconds) to automatically reconnect pad when a "Force reconnect" * Time (in seconds) to automatically reconnect pad when a "Force reconnect"
@ -347,7 +347,7 @@
* *
* Set to 0 to disable automatic reconnection. * Set to 0 to disable automatic reconnection.
*/ */
"automaticReconnectionTimeout": 0, "automaticReconnectionTimeout": "${AUTOMATIC_RECONNECTION_TIMEOUT:0}",
/* /*
* By default, when caret is moved out of viewport, it scrolls the minimum * By default, when caret is moved out of viewport, it scrolls the minimum
@ -365,21 +365,21 @@
* Set to 0 to disable extra scrolling * Set to 0 to disable extra scrolling
*/ */
"percentage": { "percentage": {
"editionAboveViewport": 0, "editionAboveViewport": "${FOCUS_LINE_PERCENTAGE_ABOVE:0}",
"editionBelowViewport": 0 "editionBelowViewport": "${FOCUS_LINE_PERCENTAGE_BELOW:0}"
}, },
/* /*
* Time (in milliseconds) used to animate the scroll transition. * Time (in milliseconds) used to animate the scroll transition.
* Set to 0 to disable animation * Set to 0 to disable animation
*/ */
"duration": 0, "duration": "${FOCUS_LINE_DURATION:0}",
/* /*
* Flag to control if it should scroll when user places the caret in the * Flag to control if it should scroll when user places the caret in the
* last line of the viewport * last line of the viewport
*/ */
"scrollWhenCaretIsInTheLastLineOfViewport": false, "scrollWhenCaretIsInTheLastLineOfViewport": "${FOCUS_LINE_CARET_SCROLL:false}",
/* /*
* Percentage of viewport height to be additionally scrolled when user * Percentage of viewport height to be additionally scrolled when user
@ -387,7 +387,7 @@
* *
* Set to 0 to let the scroll to be handled as default by Etherpad * Set to 0 to let the scroll to be handled as default by Etherpad
*/ */
"percentageToScrollWhenUserPressesArrowUp": 0 "percentageToScrollWhenUserPressesArrowUp": "${FOCUS_LINE_PERCENTAGE_ARROW_UP:0}"
}, },
/* /*
@ -426,7 +426,7 @@
* *
* WARNING: this will disable security on the instance. * WARNING: this will disable security on the instance.
*/ */
"loadTest": false, "loadTest": "${LOAD_TEST:false}",
/* /*
* Disable indentation on new line when previous line ends with some special * Disable indentation on new line when previous line ends with some special
@ -492,7 +492,7 @@
* *
* Do not enable on production machines. * Do not enable on production machines.
*/ */
"exposeVersion": false, "exposeVersion": "${EXPOSE_VERSION:false}",
/* /*
* The log level we are using. * The log level we are using.