Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
895 lines (727 sloc) 34.2 KB
<p>Listed below are all the directives that are supported in Shiny Server config files.</p>
<p><strong>Applies to</strong> indicates the kind of parent scope that this directive normally appears inside.</p>
<p><strong>Inheritable</strong> means that you can put this directive at a higher level in the hierarchy and it will be inherited by any children to which it might apply. Inherited directives can be overridden by using the directive again in a child scope.</p>
<ul class="directives">
<li>
<h3 class="code"><a name="run_as"></a>run_as</h3>
<p class="desc">The user the app should be run as. This user should have the minimal amount of privileges necessary to successfully run the application (i.e. read-only access to the Shiny application directory). Note that this directive cannot be used with <a class="code" href="#user_apps">user_apps</a>, as <code>user_apps</code> always run as the user who owns the application.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>users</td>
<td>String</td>
<td>multiple</td>
<td>The username that should be used to run the app. If using home_dirs, this can also be the special keyword <code>:HOME_USER:</code> which will instruct <code>home_dirs</code> to run as the user in whose home directory the application exists. If using a special keyword like <code>:HOME_USER:</code>, you can specify additional usernames afterwards which will be used when this directive is applied to hosting models other than <code>home_dirs</code>.</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="access_log"></a>access_log</h3>
<p class="desc">The file path of the HTTP access log.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>path</td>
<td>String</td>
<td>required</td>
<td>The file path where the access log should be written</td>
<td></td>
</tr>
<tr>
<td>format</td>
<td>String</td>
<td>optional</td>
<td>The log file format; see <a href="http://www.senchalabs.org/connect/logger.html">Connect documentation</a> under "Formats"</td>
<td>default</td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level<br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="server"></a>server</h3>
<p class="desc">Declares an HTTP server. You need one of these for each port/IP address combination this Shiny Server instance should listen on.</p>
<p class="noparams">This directive has no parameters.</p>
<p>
<label>Applies to:</label> Top-level<br/>
<label>Inheritable:</label> Yes<br/>
<label>Child directives:</label> <code><a href="#listen">listen</a></code>, <code><a href="#server_name">server_name</a></code><br/>
</p>
</li>
<li>
<h3 class="code"><a name="listen"></a>listen</h3>
<p class="desc">Directs the enclosing server scope to listen on the specified port/IP address combination.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>port</td>
<td>Integer</td>
<td>required</td>
<td>Port to listen on</td>
<td></td>
</tr>
<tr>
<td>host</td>
<td>String</td>
<td>optional</td>
<td>IPv4 address to listen on (<code>*</code> or <code>0.0.0.0</code> for all); hostnames are not currently allowed, please use raw IPv4 address only</td>
<td>*</td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#server">server</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="server_name"></a>server_name</h3>
<p class="desc">Directs the enclosing server scope to only honor requests that have the given host headers (i.e. virtual hosts).</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>names</td>
<td>String</td>
<td>multiple</td>
<td>The virtual hostname(s) to bind this server to</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#server">server</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="location"></a>location</h3>
<p class="desc">Creates a scope that configures the given URL as a website (<a class="code" href="#site_dir">site_dir</a>), specific application (<a class="code" href="#app_dir">app_dir</a>), autouser root (<a class="code" href="#user_apps">user_apps</a>), autouser root with <a class="code" href="#run_as">run_as</a> support (<a class="code" href="#user_dirs">user_dirs</a>), or redirect to a different URL (<a class="code" href="#redirect">redirect</a>).</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>path</td>
<td>String</td>
<td>required</td>
<td>The request path that this location should match</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
<label>Child directives:</label> <code><a href="#run_as">run_as</a></code>, <code><a href="#location">location</a></code>, <code><a href="#site_dir">site_dir</a></code>, <code><a href="#directory_index">directory_index</a></code>, <code><a href="#user_apps">user_apps</a></code>, <code><a href="#user_dirs">user_dirs</a></code>, <code><a href="#app_dir">app_dir</a></code>, <code><a href="#redirect">redirect</a></code>, <code><a href="#log_dir">log_dir</a></code>, <code><a href="#members_of">members_of</a></code>, <code><a href="#google_analytics_id">google_analytics_id</a></code>, <code><a href="#application">application</a></code>, <code><a href="#template_dir">template_dir</a></code><br/>
</p>
</li>
<li>
<h3 class="code"><a name="site_dir"></a>site_dir</h3>
<p class="desc">Configures the enclosing location scope to be a website that can contain both Shiny applications and unrelated static assets in a single directory tree.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>rootPath</td>
<td>String</td>
<td>required</td>
<td>The path to the root directory of the website</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="directory_index"></a>directory_index</h3>
<p class="desc">When enabled, if a directory is requested by the client and an <code>index.html</code> file is not present, a list of the directory contents is created automatically and returned to the client. If this directive is not present in a custom config file, the default behavior is to disable directory indexes. However, it is enabled if no config file is present at all (in other words, the default config file has it enabled).</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>enabled</td>
<td>Boolean</td>
<td>required</td>
<td>Whether directory contents should automatically displayed</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="user_apps"></a>user_apps</h3>
<p class="desc">DEPRECATED! This directive has been deprecated in favor of <a class="code" href="#user_dirs">user_dirs</a>, which offers more flexibility with regards to the <a class="code" href="#run_as">run_as</a> configuration. Configures the enclosing location scope to be an autouser root, meaning that applications will be served up from users' ~/ShinyApps directories and all Shiny processes will run as the user in whose directory the application is found.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>enabled</td>
<td>Boolean</td>
<td>optional</td>
<td>Whether this location should serve up all users' ~/ShinyApps directories</td>
<td>true</td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="user_dirs"></a>user_dirs</h3>
<p class="desc">Configures the enclosing location scope to be an autouser root, meaning that applications will be served up from users' ~/ShinyApps directories. This directive does respect an affiliated run_as setting, meaning that the applications will be executed as whichever user is configured in the applicable run_as setting. Note that many distributions, by default, will prohibit users from being able to access each other's home directories.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>enabled</td>
<td>Boolean</td>
<td>optional</td>
<td>Whether this location should serve up all users' ~/ShinyApps directories</td>
<td>true</td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="app_dir"></a>app_dir</h3>
<p class="desc">Configures the enclosing location scope to serve up the specified Shiny application.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>path</td>
<td>String</td>
<td>required</td>
<td>The path to the Shiny application directory</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="redirect"></a>redirect</h3>
<p class="desc">Configures the enclosing location to redirect all requests to the specified URL.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>url</td>
<td>String</td>
<td>required</td>
<td>The URL (or base URL) to redirect to</td>
<td></td>
</tr>
<tr>
<td>statusCode</td>
<td>Integer</td>
<td>optional</td>
<td>The status code to send with the response (usually 301 for permanent redirects or 302 for temporary redirects)</td>
<td>302</td>
</tr>
<tr>
<td>exact</td>
<td>Boolean</td>
<td>optional</td>
<td>Whether to match on the URL exactly; if false, any subpaths will match as well</td>
<td>true</td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="log_dir"></a>log_dir</h3>
<p class="desc">Directs the application to write error logs to the specified directory. Only applies to location scopes that are configured with <a class="code" href="#app_dir">app_dir</a> or <a class="code" href="#site_dir">site_dir</a>, as <a class="code" href="#user_apps">user_apps</a> (autouser) always writes error logs to <code>~/ShinyApps/log</code>.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>path</td>
<td>String</td>
<td>required</td>
<td>The path to which application log files should be written</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="members_of"></a>members_of</h3>
<p class="desc">Restricts a <a class="code" href="#user_apps">user_apps</a> or <a class="code" href="#user_dirs">user_dirs</a> (autouser) scope to require membership in one or more groups (or, if no arguments are passed, lifts group restrictions from a <a class="code" href="#members_of">members_of</a> directive in a parent scope).</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>groups</td>
<td>String</td>
<td>multiple</td>
<td>Users must be a member of at least one of these groups in order to deploy applications; if no groups are provided, then all users are allowed</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="google_analytics_id"></a>google_analytics_id</h3>
<p class="desc">Configure Google Analytics tracking code to be inserted in Shiny application pages.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>gaid</td>
<td>String</td>
<td>required</td>
<td>The Google tracking ID, for example, UA-18988-1</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="app_init_timeout"></a>app_init_timeout</h3>
<p class="desc">Defines the amount of time Shiny Server will wait for an R process to start before giving up.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>timeout</td>
<td>Integer</td>
<td>required</td>
<td>The number of seconds to wait for the application to start.</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code>, <code><a href="#application">application</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="app_idle_timeout"></a>app_idle_timeout</h3>
<p class="desc">Defines the amount of time an R process will persist with no connections before being terminated.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>timeout</td>
<td>Integer</td>
<td>required</td>
<td>The number of seconds to keep an empty R process alive before killing it.</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code>, <code><a href="#application">application</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="simple_scheduler"></a>simple_scheduler</h3>
<p class="desc">A basic scheduler which will spawn one single-threaded R worker for each application. If no scheduler is specified, this is the default scheduler.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>maxRequests</td>
<td>Integer</td>
<td>optional</td>
<td>The maximum number of requests to assign to this scheduler before it should start returning rejecting incoming traffic using a '503 - Service Unavailable' message. Once this threshold is hit, users attempting to initialize a new session will receive 503 errors.</td>
<td>100</td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code>, <code><a href="#application">application</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="allow_app_override"></a>allow_app_override</h3>
<p class="desc">If present, will allow users to override the global defaults for a scheduler by customizing the parameters associated with a scheduler or even the type of scheduler used.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>enabled</td>
<td>Boolean</td>
<td>optional</td>
<td>Whether or not this is enabled. Default is true.</td>
<td>true</td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level<br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="application"></a>application</h3>
<p class="desc">DEPRECATED. This setting is deprecated and no longer enforced in Shiny Server. It will be ignored.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>empty</td>
<td>String</td>
<td>required</td>
<td></td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
<label>Child directives:</label> <code><a href="#app_init_timeout">app_init_timeout</a></code>, <code><a href="#app_idle_timeout">app_idle_timeout</a></code>, <code><a href="#simple_scheduler">simple_scheduler</a></code><br/>
</p>
</li>
<li>
<h3 class="code"><a name="template_dir"></a>template_dir</h3>
<p class="desc">A directory containing custom templates to be used when generating pages in Shiny Server.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>dir</td>
<td>String</td>
<td>required</td>
<td>The directory containing HTML templates.</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level, <code><a href="#server">server</a></code>, <code><a href="#location">location</a></code><br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="disable_websockets"></a>disable_websockets</h3>
<p class="desc">Disable WebSockets on connections to the server. Some networks will not reliably support WebSockets, so this setting can be used to force Shiny Server to fall back to another protocol to communicate with the server. This is equivalent to adding 'websocket' to <code>disabled_protocols</code></p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>val</td>
<td>Boolean</td>
<td>optional</td>
<td>Whether or not WebSockets should be disabled.</td>
<td>true</td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level<br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
<li>
<h3 class="code"><a name="disable_protocols"></a>disable_protocols</h3>
<p class="desc">Disable some of the SockJS protocols used to establish a connection between your users and your server. Some network configurations cause problems with particular protocols; this option allows you to disable those.</p>
<table class="params">
<colgroup>
<col style="width: 105px"></col>
<col style="width: 90px"></col>
<col style="width: 90px"></col>
<col></col>
<col style="width: 90px"></col>
</colgroup>
<tr>
<th>Parameter</th>
<th>Data type</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
<tr>
<td>names</td>
<td>String</td>
<td>multiple</td>
<td>The protocol(s) to disable. Available protocols are: 'websocket', 'xdr-streaming', 'xhr-streaming', 'iframe-eventsource', 'iframe-htmlfile', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling'</td>
<td></td>
</tr>
</table>
<p>
<label>Applies to:</label> Top-level<br/>
<label>Inheritable:</label> Yes<br/>
</p>
</li>
</ul>
Something went wrong with that request. Please try again.