mirror of
https://github.com/RoboSats/robosats.git
synced 2025-07-19 01:03:20 +00:00
Create RoboSats docker client app for soverign nodes (#216)
* Init robosats node app development * Add simple node app to dev docker-compose * Add multi-platform build for node client app
This commit is contained in:
75
.github/workflows/node-client-image.yml
vendored
Normal file
75
.github/workflows/node-client-image.yml
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
name: RoboSats Client Node App Image CI/CD
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
paths: ["frontend", "nodeapp"]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main" ]
|
||||||
|
paths: ["frontend", "nodeapp"]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
push_to_registry:
|
||||||
|
name: 'Push Docker image to Docker Hub'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: 'Download main.js Artifact'
|
||||||
|
uses: dawidd6/action-download-artifact@v2
|
||||||
|
with:
|
||||||
|
workflow: frontend-build.yml
|
||||||
|
workflow_conclusion: success
|
||||||
|
name: main-js
|
||||||
|
path: frontend/static/frontend/
|
||||||
|
|
||||||
|
- name: 'Log in to Docker Hub'
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: 'Extract metadata (tags, labels) for Docker'
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: recksato/robosats-client
|
||||||
|
tags: |
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
|
||||||
|
|
||||||
|
- name: 'Get Commit Hash'
|
||||||
|
id: commit
|
||||||
|
uses: pr-mpt/actions-commit-hash@v1
|
||||||
|
|
||||||
|
- name: 'Save Commit Long Hash to TXT File'
|
||||||
|
run: |
|
||||||
|
echo ${{ steps.commit.outputs.long }}>"commit_sha.txt"
|
||||||
|
|
||||||
|
- name: 'Set up QEMU'
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: 'Set up Docker Buildx'
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: 'Build and push Docker image'
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: ./nodeapp
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
recksato/robosats-client:${{ steps.commit.outputs.short }}
|
||||||
|
recksato/robosats-client:latest
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
|
@ -45,6 +45,16 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./frontend:/usr/src/frontend
|
- ./frontend:/usr/src/frontend
|
||||||
|
|
||||||
|
nodeapp: # Umbrel / Citadel app
|
||||||
|
build: ./nodeapp
|
||||||
|
container_name: nodeapp-dev
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
TOR_PROXY_IP: 127.0.0.1
|
||||||
|
TOP_PROXY_PORT: 9050
|
||||||
|
ROBOSATS_ONION: robosats6tkf3eva7x2voqso3a5wcorsnw34jveyxfqi2fu7oyheasid.onion
|
||||||
|
network_mode: service:tor
|
||||||
|
|
||||||
clean-orders:
|
clean-orders:
|
||||||
image: backend
|
image: backend
|
||||||
restart: always
|
restart: always
|
||||||
@ -108,7 +118,8 @@ services:
|
|||||||
- ./node/tor/data:/var/lib/tor
|
- ./node/tor/data:/var/lib/tor
|
||||||
- ./node/tor/config:/etc/tor
|
- ./node/tor/config:/etc/tor
|
||||||
ports:
|
ports:
|
||||||
- 8000:8000
|
- 8000:8000 # dev frontend build
|
||||||
|
- 12596:12596 # umbrel frontend
|
||||||
|
|
||||||
lnd:
|
lnd:
|
||||||
build: ./docker/lnd
|
build: ./docker/lnd
|
||||||
|
1
nodeapp/.dockerignore
Normal file
1
nodeapp/.dockerignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
README.md
|
14
nodeapp/Dockerfile
Normal file
14
nodeapp/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
FROM node:18-bullseye-slim
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/robosats
|
||||||
|
WORKDIR /usr/src/robosats
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y socat
|
||||||
|
RUN npm install http-server
|
||||||
|
|
||||||
|
EXPOSE 12596
|
||||||
|
|
||||||
|
CMD npm exec http-server -- . -p 12596 -P http://127.0.0.1:81 -i false -d false & nohup socat tcp4-LISTEN:81,reuseaddr,fork,keepalive,bind=127.0.0.1 SOCKS4A:${TOR_PROXY_IP:-127.0.0.1}:${ROBOSATS_ONION:-robosats6tkf3eva7x2voqso3a5wcorsnw34jveyxfqi2fu7oyheasid.onion}:80,socksport=${TOR_PROXY_PORT:-9050}
|
7
nodeapp/README.md
Normal file
7
nodeapp/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# RoboSats app for soverign nodes.
|
||||||
|
|
||||||
|
RoboSats app for soverign nodes ( Umbrel, Citadel, Start9 ...). This app serves the RoboSats frontend app directly from your own node and redirects all API requests to RoboSats P2P market coordinator through your node's TOR proxy.
|
||||||
|
|
||||||
|
At the moment it has no special integration with your local lightning wallet (e.g. LND). This can be achieved easily by installing a WebLN compatible extension in your browser (e.g. getAlby).
|
||||||
|
|
||||||
|
The container launches two processes: 1) A `socat` that will expose RoboSats coordinator API over HTTP using the docker orchestration Tor socks proxy and 2) a `http-server` that will serve all static files (including the Javascript client app) directly from your own node (should reduce loading times by a lot). Every request that cannot be served by your node http-server will be forwarded to the RoboSats coordinator (that is: API calls and Robot avatar images).
|
1
nodeapp/static
Symbolic link
1
nodeapp/static
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../frontend/static
|
Reference in New Issue
Block a user