Separate out GQL proxy server from uniswap-urbit stack (#681)

* Separate out uniswap gql proxy in a stack

* Use proxy server from watcher-ts

* Add a flag to enable/disable the proxy server

* Update env configuratoin for uniswap urbit app stack

* Update stack file for uniswap urbit app stack

* Fix env variables in instructions
This commit is contained in:
prathamesh0 2023-12-06 10:41:10 +05:30 committed by GitHub
parent f27da19808
commit 6bef0c5b2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 144 additions and 18 deletions

View File

@ -0,0 +1,22 @@
version: "3.2"
services:
proxy-server:
image: cerc/watcher-ts:local
restart: on-failure
working_dir: /app/packages/cli
environment:
ENABLE_PROXY: ${ENABLE_PROXY:-true}
PROXY_UPSTREAM: ${CERC_PROXY_UPSTREAM}
PROXY_ORIGIN_HEADER: ${CERC_PROXY_ORIGIN_HEADER}
command: ["sh", "-c", "./run.sh"]
volumes:
- ../config/proxy-server/run.sh:/app/packages/cli/run.sh
ports:
- "4000"
healthcheck:
test: ["CMD", "nc", "-v", "localhost", "4000"]
interval: 20s
timeout: 5s
retries: 15
start_period: 10s

View File

@ -12,19 +12,6 @@ services:
- app_builds:/app-builds - app_builds:/app-builds
- ../config/uniswap-interface/build-app.sh:/app/build-app.sh - ../config/uniswap-interface/build-app.sh:/app/build-app.sh
uniswap-gql-proxy:
image: cerc/uniswap-interface:local
restart: on-failure
command: ["bash", "-c", "yarn proxy-gql"]
ports:
- "4000"
healthcheck:
test: ["CMD", "nc", "-v", "localhost", "4000"]
interval: 20s
timeout: 5s
retries: 15
start_period: 10s
volumes: volumes:
app_builds: app_builds:
app_globs: app_globs:

View File

@ -0,0 +1,9 @@
#!/bin/sh
if [ "$ENABLE_PROXY" = "true" ]; then
echo "Proxy server enabled"
yarn proxy
else
echo "Proxy server disabled, exiting"
exit 0
fi

View File

@ -0,0 +1,79 @@
# Proxy Server
Instructions to setup and deploy a HTTP proxy server
## Setup
Clone required repository:
```bash
laconic-so --stack proxy-server setup-repositories --pull
# If this throws an error as a result of being already checked out to a branch/tag in a repo, remove the repositories mentioned below and re-run the command
```
Build the container image:
```bash
laconic-so --stack proxy-server build-containers
```
## Create a deployment
* First, create a spec file for the deployment, which will allow mapping the stack's ports and volumes to the host:
```bash
laconic-so --stack proxy-server deploy init --output proxy-server-spec.yml
```
* Edit `network` in spec file to map container ports to same ports in host:
```yml
...
network:
ports:
proxy-server:
- '4000:4000'
...
```
* Once you've made any needed changes to the spec file, create a deployment from it:
```bash
laconic-so --stack proxy-server deploy create --spec-file proxy-server-spec.yml --deployment-dir proxy-server-deployment
```
* Inside the deployment directory, open the file `config.env` and set the following env variables:
```bash
# Whether to run the proxy server (Optional) (Default: true)
ENABLE_PROXY=
# Upstream endpoint
# (Eg. https://api.example.org)
CERC_PROXY_UPSTREAM=
# Origin header to be used (Optional)
# (Eg. https://app.example.org)
CERC_PROXY_ORIGIN_HEADER=
```
## Start the stack
Start the deployment:
```bash
laconic-so deployment --dir proxy-server-deployment start
```
* List and check the health status of the container using `docker ps`
* The proxy server will now be listening at http://localhost:4000
## Clean up
To stop the service running in background:
```bash
laconic-so deployment --dir proxy-server-deployment stop
```

View File

@ -0,0 +1,8 @@
version: "0.1"
name: proxy-server
repos:
- github.com/cerc-io/watcher-ts@v0.2.78
containers:
- cerc/watcher-ts
pods:
- proxy-server

View File

@ -41,7 +41,7 @@ network:
ports: ports:
urbit-fake-ship: urbit-fake-ship:
- '8080:80' - '8080:80'
uniswap-gql-proxy: proxy-server:
- '4000:4000' - '4000:4000'
ipfs-glob-host: ipfs-glob-host:
- '8081:8080' - '8081:8080'
@ -64,7 +64,7 @@ laconic-so --stack uniswap-urbit-app deploy create --spec-file uniswap-urbit-app
## Set env variables ## Set env variables
Inside the deployment directory, open the file `config.env` and add variable for infura key : Inside the deployment directory, open the file `config.env` and set the following env variables:
```bash ```bash
# External RPC endpoints # External RPC endpoints
@ -73,10 +73,28 @@ Inside the deployment directory, open the file `config.env` and add variable for
# Uniswap API GQL Endpoint # Uniswap API GQL Endpoint
# Set this to GQL proxy server endpoint for uniswap app # Set this to GQL proxy server endpoint for uniswap app
# (Eg. http://localhost:4000/graphql) # (Eg. http://localhost:4000/v1/graphql)
# (Eg. https://abc.xyz.com/v1/graphql)
CERC_UNISWAP_GQL= CERC_UNISWAP_GQL=
# Optional IPFS endpoints: # Optional
# Whether to run the proxy GQL server
# (Disable only if proxy not required to be run) (Default: true)
ENABLE_PROXY=
# Proxy server configuration
# Used only if proxy is enabled
# Upstream API URL
# (Eg. https://api.example.org)
CERC_PROXY_UPSTREAM=https://api.uniswap.org
# Origin header to be used in the proxy
# (Eg. https://app.example.org)
CERC_PROXY_ORIGIN_HEADER=https://app.uniswap.org
# IPFS configuration
# IFPS endpoint to host the glob file on # IFPS endpoint to host the glob file on
# (Default: http://ipfs-glob-host:5001 pointing to in-stack IPFS node) # (Default: http://ipfs-glob-host:5001 pointing to in-stack IPFS node)
@ -120,7 +138,7 @@ laconic-so deployment --dir uniswap-urbit-app-deployment start
## Clean up ## Clean up
To stop all uniswap-urbit-app services running in the background, while preserving chain data: To stop all uniswap-urbit-app services running in the background, while preserving data:
```bash ```bash
laconic-so deployment --dir uniswap-urbit-app-deployment stop laconic-so deployment --dir uniswap-urbit-app-deployment stop

View File

@ -2,9 +2,12 @@ version: "0.1"
name: uniswap-urbit-app name: uniswap-urbit-app
repos: repos:
- github.com/cerc-io/uniswap-interface@laconic # TODO: Use release - github.com/cerc-io/uniswap-interface@laconic # TODO: Use release
- github.com/cerc-io/watcher-ts@v0.2.78
containers: containers:
- cerc/uniswap-interface - cerc/uniswap-interface
- cerc/watcher-ts
- cerc/urbit-globs-host - cerc/urbit-globs-host
pods: pods:
- uniswap-interface - uniswap-interface
- proxy-server
- uniswap-urbit - uniswap-urbit