---
layout: default
navsection: installguide
title: Install the websocket server
...
{% comment %}
Copyright (C) The Arvados Authors. All rights reserved.

SPDX-License-Identifier: CC-BY-SA-3.0
{% endcomment %}

The arvados-ws server provides event notifications to websocket clients. It can be installed anywhere with access to Postgres database and the Arvados API server, typically behind a web proxy that provides SSL support. See the "godoc page":http://godoc.org/github.com/arvados/arvados/services/ws for additional information.

# "Update config.yml":#update-config
# "Update nginx configuration":#update-nginx
# "Install arvados-ws package":#install-packages
# "Start the service":#start-service
# "Restart the API server and controller":#restart-api
# "Confirm working installation":#confirm-working

h2(#configure). Update config.yml

Edit the cluster config at @config.yml@ and set @Services.Websocket.ExternalURL@ and @Services.Websocket.InternalURLs@.  Replace @zzzzz@ with your cluster id.

<notextile>
<pre><code>    Services:
      Websocket:
        InternalURLs:
	  "http://localhost:8005"</span>: {}
        ExternalURL: <span class="userinput">wss://ws.ClusterID.example.com/websocket</span>
</span></code></pre>
</notextile>

h2(#update-nginx). Update Nginx configuration

The arvados-ws service will be accessible from anywhere on the internet, so we recommend using SSL for transport encryption.

Use a text editor to create a new file @/etc/nginx/conf.d/arvados-ws.conf@ with the following configuration.  Options that need attention are marked in <span class="userinput">red</span>.

<notextile><pre>
upstream arvados-ws {
  server                127.0.0.1:<span class="userinput">8005</span>;
}

server {
  listen                443 ssl;
  server_name           ws.<span class="userinput">ClusterID.example.com</span>;

  proxy_connect_timeout 90s;
  proxy_read_timeout    300s;

  ssl                   on;
  ssl_certificate       <span class="userinput">/YOUR/PATH/TO/cert.pem</span>;
  ssl_certificate_key   <span class="userinput">/YOUR/PATH/TO/cert.key</span>;

  location / {
    proxy_pass          http://arvados-ws;
    proxy_set_header    Upgrade         $http_upgrade;
    proxy_set_header    Connection      "upgrade";
    proxy_set_header    Host            $host;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
</pre></notextile>

{% assign arvados_component = 'arvados-ws' %}

{% include 'install_packages' %}

{% include 'start_service' %}

{% include 'restart_api' %}

h2(#confirm). Confirm working installation

Confirm the service is listening on its assigned port and responding to requests.

<notextile>
<pre><code>~$ <span class="userinput">curl https://<span class="userinput">ws.ClusterID.example.com</span>/websocket</span>
not websocket protocol
</code></pre>
</notextile>