aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/docs/src/learn/docker.md
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/docs/src/learn/docker.md')
-rw-r--r--subprojects/docs/src/learn/docker.md175
1 files changed, 175 insertions, 0 deletions
diff --git a/subprojects/docs/src/learn/docker.md b/subprojects/docs/src/learn/docker.md
new file mode 100644
index 00000000..0df87da8
--- /dev/null
+++ b/subprojects/docs/src/learn/docker.md
@@ -0,0 +1,175 @@
1---
2SPDX-FileCopyrightText: 2024 The Refinery Authors
3SPDX-License-Identifier: EPL-2.0
4sidebar_position: 100
5sidebar_label: Docker
6---
7
8# Running in Docker
9
10:::note
11
12Refinery can run as a cloud-based _Graph Solver as a Service_ without local installation.
13If you're just looking to try Refinery, our [online demo](https://refinery.services/) provides a seamless experience without installation.
14
15:::
16
17:::info
18
19Installing Refinery as a Docker container can support more advanced use cases, such as when generating models with more resources or a longer timeout.
20
21:::
22
23To generate larger models with a longer timeout, you can use our [Docker container](https://github.com/graphs4value/refinery/pkgs/container/refinery) on either `amd64` or `arm64` machines:
24
25```shell
26docker run --rm -it -p 8888:8888 ghcr.io/graphs4value/refinery
27```
28
29Once Docker pulls and starts the container, you can navigate to http://localhost:8888 to open the model generation interface and start editing.
30
31Alternatively, you can follow the [instructions to set up a local development environment](/develop/contributing) and compile and run Refinery from source.
32
33## Updating
34
35To take advantage of the latest updates, you can simply re-pull our Docker container from the GitHub Container Registry:
36
37```shell
38docker pull ghcr.io/graphs4value/refinery
39```
40
41Restart the container to make sure that you're running the last pulled version.
42
43## Environmental variables
44
45The Docker container supports the following environmental variables to customize its behavior.
46Customizing these variable should only be needed if you want to _increase resource limits_ or _expose you Refinery instance over the network_ for others.
47
48Notes for **local-only instances** are highlighted with the :arrow_right: arrow emoji.
49
50Important security notices for **public instances** are highlighted with the :warning: warning emoji.
51
52### Networking
53
54#### `REFINERY_LISTEN_HOST`
55
56Hostname to listen at for incoming HTTP connections.
57
58**Default value:** `0.0.0.0` (accepts connections on any IP address)
59
60#### `REFINERY_LISTEN_PORT`
61
62TCP port to listen at for incoming HTTP connections.
63
64Refinery doesn't support HTTPS connections out of the box, so there's no point in setting this to `443`. Use a [reverse proxy](https://en.wikipedia.org/wiki/Reverse_proxy) instead if you wish to expose Refinery to encrypted connections.
65
66If you change this value, don't forget to adjust the `-p 8888:8888` option of the `docker run` command to [expose](https://docs.docker.com/reference/cli/docker/container/run/#publish) the selected port.
67
68**Default value:** `8888`
69
70#### `REFINERY_PUBLIC_HOST`
71
72Publicly visible hostname of the Refinery instance.
73
74:arrow_right: For installations only accessed locally (i.e., `localhost:8888`) without any reverse proxy, you can safely leave this empty.
75
76:warning: You should set this to the publicly visible hostname of your Refinery instance if you wish to expose Refinery over the network. Most likely, this will be the hostname of a reverse proxy that terminates TLS connections. Our online demo sets this to [refinery.services](https://refinery.services/).
77
78**Default value:** _empty_
79
80#### `REFINERY_PUBLIC_PORT`
81
82Publicly visible port of the Refinery instance.
83
84:arrow_right: For installations only accessed locally (i.e., `localhost:8888`), this value is ignored because `REFINERY_PUBLC_HOST` is not set.
85
86**Default value:** `443`
87
88#### `REFINERY_ALLOWED_ORIGINS`
89
90Comma-separated list of allowed origins for incoming WebSocket connections. If this variable is empty, all incoming WebSocket connections are accepted.
91
92:arrow_right: For installations only accessed locally (i.e., `localhost:8888`) without any reverse proxy, you can safely leave this empty.
93
94:warning: The value inferred from `REFINERY_PUBLIC_HOST` and `REFINERY_PUBLIC_PORT` should be suitable for instances exposed over the network. For security reasons, public instances should never leave this empty.
95
96**Default value:** equal to `REFINERY_PUBLIC_HOST:REFINERY_PUBLIC_PORT` if they are both set, _empty_ otherwise
97
98### Timeouts
99
100#### `REFINERY_SEMANTICS_TIMEOUT_MS`
101
102Timeout for partial model semantics calculation in milliseconds.
103
104:arrow_right: Increase this if you have a slower machine and the editor times out before showing a preview of your partial model in the _Graph_ or _Table_ views.
105
106:warning: Increasing this timeout may increase server load. Excessively large timeout may allow users to overload you server by entering extremely complex partial models.
107
108**Default value:** `1000`
109
110#### `REFINERY_SEMANTICS_WARMUP_TIMEOUT_MS`
111
112Timeout for partial model semantics calculation in milliseconds when the server first start.
113
114Due to various initialization tasks, the first partial model semantics generation may take longer the `REFINERY_SEMANTICS_TIMEOUT_MS` and display a timeout error. This setting increases the timeout for the first generation, leading to seamless use even after server start (especially in auto-scaling setups).
115
116**Default value:** equal to 2 × `REFINERY_SEMANTICS_TIMEOUT`
117
118#### `REFINERY_MODEL_GENERATION_TIMEOUT_SEC`
119
120Timeout for model generation in seconds.
121
122:arrow_right: Adjust this value if you're generating very large models (> 10000 nodes) and need more time to complete a generation. Note that some _unsatisfiable_ model generation problems cannot be detected by Refinery and will result in model generation running for an arbitrarily long time without producing any solution.
123
124:warning: Long running model generation will block a [_model generation thread_](#refinery_model_generation_thread_count). Try to balance the number of threads and the timeout to avoid exhausting system resources, but keep the wait time for a free model generation thread for users reasonably short. Auto-scaling to multiple instances may help with bursty demand.
125
126**Default value:** `600` (10 minutes)
127
128### Threading
129
130:warning: Excessively large values may overload the server. Make sure that _all_ Refinery threads can run at the same time to avoid thread starvation.
131
132#### `REFINERY_XTEXT_THREAD_COUNT`
133
134Number of threads used for non-blocking text editing operations. A value of `0` allows an _unlimited_ number of threads by running each semantics calculation in a new thread.
135
136:warning: Excessively large values may overload the server. Make sure that _all_ Refinery threads can run at the same time to avoid thread starvation.
137
138**Default value:** `1`
139
140#### `REFINERY_XTEXT_LOCKING_THREAD_COUNT`
141
142Number of threads used for text editing operations that lock the document. A value of `0` allows an _unlimited_ number of threads by running each semantics calculation in a new thread.
143
144
145**Default value:** equal to `REFINERY_XTEXT_THREAD_COUNT`
146
147#### `REFINERY_XTEXT_SEMANTICS_THREAD_COUNT`
148
149Number of threads used for model semantics calculation. A value of `0` allows an _unlimited_ number of threads by running each semantics calculation in a new thread.
150
151Must be at least as large as `REFINERY_XTEXT_THREAD_COUNT`.
152
153:warning: Excessively large values may overload the server. Make sure that _all_ Refinery threads can run at the same time to avoid thread starvation.
154
155**Default value:** equal to `REFINERY_XTEXT_THREAD_COUNT`
156
157#### `REFINERY_MODEL_GENERATION_THREAD_COUNT`
158
159Number of threads used for model semantics calculation. A value of `0` allows an _unlimited_ number of threads by running each semantics calculation in a new thread.
160
161:warning: Excessively large values may overload the server. Make sure that _all_ Refinery threads can run at the same time to avoid thread starvation. Each model generation task may also demand a large amount of memory in addition to CPU time.
162
163**Default value:** equal to `REFINERY_XTEXT_THREAD_COUNT`
164
165### Libraries
166
167#### `REFINERY_LIBRARY_PATH`
168
169Modules (`.refinery` files) in this directory or colon-separated list of directories will be exposed to user via Refinery's `import` mechanism.
170
171:arrow_right: Use this in conjunction with the [mount volume (-v)](https://docs.docker.com/reference/cli/docker/container/run/#volume) option of `docker run` to work with multi-file projects in Refinery.
172
173:warning: Make sure you only expose files that you want to make public. It's best to expose a directory that contains nothing other that `.refinery` files to minimize potential information leaks.
174
175**Default value:** _empty_ (no directories are exposed)