Skip to content

Commit 45878ed

Browse files
shesekLawrence Nahum
authored andcommitted
WebSocket frontend for the Electrum JSONRPC server
Using websocat: https://github.com/vi/websocat
1 parent 672438d commit 45878ed

File tree

6 files changed

+42
-4
lines changed

6 files changed

+42
-4
lines changed

Dockerfile.deps

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,20 @@ RUN source /root/.cargo/env \
7373
&& git checkout a808b51d0d9301fa82390b985c57551966001f9b \
7474
&& cp contrib/popular-scripts.txt /srv/explorer \
7575
&& cargo install --root /srv/explorer/electrs_bitcoin --locked --path . --features electrum-discovery \
76-
&& cargo install --root /srv/explorer/electrs_liquid --locked --path . --features electrum-discovery,liquid) \
77-
&& rm -fr /root/.cargo electrs \
76+
&& cargo install --root /srv/explorer/electrs_liquid --locked --path . --features electrum-discovery,liquid \
77+
) \
78+
&& rm -fr electrs \
7879
&& strip /srv/explorer/electrs_*/bin/electrs
7980

81+
# Install websocat v1.9.0 with none of the default features, which aren't needed (ssl, subprocess support and stdio support)
82+
RUN source /root/.cargo/env \
83+
&& git clone --no-checkout https://github.com/vi/websocat \
84+
&& (cd websocat \
85+
&& git checkout 9f301bd82bbb28e385a5020870738f98ab9010b1 \
86+
&& cargo install --root /srv/explorer/websocat --locked --path . --no-default-features \
87+
) \
88+
&& strip /srv/explorer/websocat/bin/websocat \
89+
&& rm -fr /root/.cargo websocat
8090

8191
# cleanup
8292
RUN apt-get --auto-remove remove -yqq --purge ${ESPLORA_BUILD_DEPS} manpages ${CORE_BUILD_DEPS} \

contrib/nginx.conf.in

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ upstream prerenderer {
2222
keepalive 300;
2323
}
2424

25+
upstream electrum_websocket {
26+
server unix:/var/electrum-websocket.sock;
27+
keepalive 300;
28+
}
29+
2530
server {
2631
listen 80;
2732
keepalive_requests 100000;
@@ -59,6 +64,15 @@ server {
5964
proxy_http_version 1.1;
6065
proxy_set_header Connection "";
6166
}
67+
location /{NGINX_PATH}electrum-websocket/ {
68+
limit_req zone=lightlimitzone burst=10 nodelay;
69+
proxy_pass http://electrum_websocket/;
70+
proxy_http_version 1.1;
71+
proxy_set_header Upgrade $http_upgrade;
72+
proxy_set_header Connection "upgrade";
73+
proxy_read_timeout 1d;
74+
proxy_send_timeout 1d;
75+
}
6276

6377
location = /{NGINX_PATH}nojs {
6478
return 301 " /{NGINX_PATH}nojs/";
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
u127.0.0.1:23394
2+
p8-

contrib/runits/websocket-log.runit

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
exec svlogd /data/logs/websocket

contrib/runits/websocket.runit

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/sh -e
2+
exec 2>&1
3+
exec /srv/explorer/websocat/bin/websocat -E -b l-ws-unix:/var/electrum-websocket.sock tcp:127.0.0.1:50001

run.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,18 +153,25 @@ function preprocess(){
153153
}
154154

155155
if [ "$MODE" == "explorer" ]; then
156-
mkdir -p /etc/service/prerenderer/log /etc/service/nginx/log /etc/service/electrs/log
157-
mkdir -p /data/logs/prerenderer /data/logs/nginx /data/logs/electrs
156+
mkdir -p /etc/service/{prerenderer,nginx,electrs,websocket}/log
157+
mkdir -p /data/logs/{prerenderer,nginx,electrs,websocket}
158+
158159
preprocess /srv/explorer/source/contrib/runits/electrs.runit /etc/service/electrs/run
159160
cp /srv/explorer/source/contrib/runits/electrs-log.runit /etc/service/electrs/log/run
160161
cp /srv/explorer/source/contrib/runits/electrs-log-config.runit /data/logs/electrs/config
162+
161163
cp /srv/explorer/source/contrib/runits/nginx.runit /etc/service/nginx/run
162164
cp /srv/explorer/source/contrib/runits/nginx-log.runit /etc/service/nginx/log/run
163165
cp /srv/explorer/source/contrib/runits/nginx-log-config.runit /data/logs/nginx/config
166+
164167
preprocess /srv/explorer/source/contrib/runits/prerenderer.runit /etc/service/prerenderer/run
165168
cp /srv/explorer/source/contrib/runits/prerenderer-log.runit /etc/service/prerenderer/log/run
166169
cp /srv/explorer/source/contrib/runits/prerenderer-log-config.runit /data/logs/prerenderer/config
167170
chmod +x /etc/service/prerenderer/run /etc/service/electrs/run
171+
172+
cp /srv/explorer/source/contrib/runits/websocket.runit /etc/service/websocket/run
173+
cp /srv/explorer/source/contrib/runits/websocket-log.runit /etc/service/websocket/log/run
174+
cp /srv/explorer/source/contrib/runits/websocket-log-config.runit /data/logs/websocket/config
168175
elif [ "$MODE" != "private-bridge" ] && [ "$MODE" != "public-bridge" ]; then
169176
echo "Mode can only be private-bridge, public-bridge or explorer"
170177
exit 1

0 commit comments

Comments
 (0)