Add a stack for running uniswap frontend on urbit #670
| @ -0,0 +1,49 @@ | ||||
| version: "3.2" | ||||
| 
 | ||||
| services: | ||||
|   uniswap-interface: | ||||
|     image: cerc/uniswap-interface:local | ||||
|     restart: on-failure | ||||
|     environment: | ||||
|       - REACT_APP_INFURA_KEY=${CERC_INFURA_KEY} | ||||
|       - REACT_APP_AWS_API_ENDPOINT=${CERC_UNISWAP_GQL} | ||||
|     command: ["./build-app.sh"] | ||||
|     volumes: | ||||
|       - app_builds:/app-builds | ||||
|       - ../config/uniswap-interface/build-app.sh:/app/build-app.sh | ||||
| 
 | ||||
|   uniswap-glob-host: | ||||
|     image: cerc/urbit-globs-host:local | ||||
|     restart: unless-stopped | ||||
|     depends_on: | ||||
|       uniswap-interface: | ||||
|         condition: service_completed_successfully | ||||
|     command: ["./host-uniswap-glob.sh"] | ||||
|     volumes: | ||||
|       - app_globs:/app-globs | ||||
|       - ../config/uniswap-interface/host-uniswap-glob.sh:/app/host-uniswap-glob.sh | ||||
|     ports: | ||||
|       - "3000" | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "3000"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
| 
 | ||||
|   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: | ||||
|   app_builds: | ||||
|   app_globs: | ||||
| @ -0,0 +1,26 @@ | ||||
| version: '3.7' | ||||
| 
 | ||||
| services: | ||||
|   urbit-fake-ship: | ||||
|     restart: unless-stopped | ||||
|     image: tloncorp/vere | ||||
|     entrypoint: ["bash", "-c", "./run-urbit-ship.sh && ./deploy-uniswap-app.sh && tail -f /dev/null"] | ||||
|     volumes: | ||||
|       - urbit_data:/urbit | ||||
|       - app_builds:/app-builds | ||||
|       - app_globs:/app-globs | ||||
|       - ../config/urbit/run-urbit-ship.sh:/urbit/run-urbit-ship.sh | ||||
|       - ../config/uniswap-interface/deploy-uniswap-app.sh:/urbit/deploy-uniswap-app.sh | ||||
|     ports: | ||||
|       - "80" | ||||
|     healthcheck: | ||||
|       test: ["CMD", "nc", "-v", "localhost", "80"] | ||||
|       interval: 20s | ||||
|       timeout: 5s | ||||
|       retries: 15 | ||||
|       start_period: 10s | ||||
| 
 | ||||
| volumes: | ||||
|   urbit_data: | ||||
|   app_builds: | ||||
|   app_globs: | ||||
							
								
								
									
										18
									
								
								stack_orchestrator/data/config/uniswap-interface/build-app.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								stack_orchestrator/data/config/uniswap-interface/build-app.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,18 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| set -e | ||||
| if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||||
|   set -x | ||||
| fi | ||||
| 
 | ||||
| # Check and exit if a deployment already exists (on restarts) | ||||
| if [ -d /app-builds/uniswap/build ]; then | ||||
|   echo "Build already exists, remove volume to rebuild" | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| yarn build | ||||
|  | ||||
| 
 | ||||
| # Move build to app-builds so urbit can deploy it | ||||
| mkdir /app-builds/uniswap | ||||
| cp -r ./build /app-builds/uniswap/ | ||||
							
								
								
									
										142
									
								
								stack_orchestrator/data/config/uniswap-interface/deploy-uniswap-app.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										142
									
								
								stack_orchestrator/data/config/uniswap-interface/deploy-uniswap-app.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,142 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||||
|   set -x | ||||
| fi | ||||
| 
 | ||||
| uniswap_app_build='/app-builds/uniswap/build' | ||||
| uniswap_desk_dir='/urbit/zod/uniswap' | ||||
| 
 | ||||
| if [ -d ${uniswap_desk_dir} ]; then | ||||
|   echo "Uniswap desk dir already exists, skipping deployment..." | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| # Fire curl requests to perform operations on the ship | ||||
| dojo () { | ||||
|   curl -s --data '{"source":{"dojo":"'"$1"'"},"sink":{"stdout":null}}' http://localhost:12321 | ||||
| } | ||||
| 
 | ||||
| hood () { | ||||
|   curl -s --data '{"source":{"dojo":"+hood/'"$1"'"},"sink":{"app":"hood"}}' http://localhost:12321 | ||||
| } | ||||
| 
 | ||||
| # Create/mount a uniswap desk | ||||
| hood "merge %uniswap our %landscape" | ||||
| hood "mount %uniswap" | ||||
| 
 | ||||
| # Loop until the uniswap build appears | ||||
| while [ ! -d ${uniswap_app_build} ]; do | ||||
|   echo "Uniswap app build not found, retrying in 5s..." | ||||
|   sleep 5 | ||||
| done | ||||
| echo "Build found..." | ||||
| 
 | ||||
| # Copy over build to desk data dir | ||||
| cp -r ${uniswap_app_build} ${uniswap_desk_dir} | ||||
| 
 | ||||
| # Create a mark file for .map file type | ||||
| cat << EOF > "${uniswap_desk_dir}/mar/map.hoon" | ||||
| :: | ||||
| ::::  /hoon/map/mar | ||||
|   ::  Mark for js source maps | ||||
| /?    310 | ||||
| :: | ||||
| =,  eyre | ||||
| |_  mud=@ | ||||
| ++  grow | ||||
|   |% | ||||
|   ++  mime  [/application/octet-stream (as-octs:mimes:html (@t mud))] | ||||
|   -- | ||||
| ++  grab | ||||
|   |%                                                    ::  convert from | ||||
|   ++  mime  |=([p=mite q=octs] (@t q.q)) | ||||
|   ++  noun  cord                                        ::  clam from %noun | ||||
|   -- | ||||
| ++  grad  %mime | ||||
| -- | ||||
| EOF | ||||
| 
 | ||||
| # Create a mark file for .woff file type | ||||
| cat << EOF > "${uniswap_desk_dir}/mar/woff.hoon" | ||||
| |_  dat=octs | ||||
| ++  grow | ||||
|   |% | ||||
|   ++  mime  [/font/woff dat] | ||||
|   -- | ||||
| ++  grab | ||||
|   |% | ||||
|   ++  mime  |=([=mite =octs] octs) | ||||
|   ++  noun  octs | ||||
|   -- | ||||
| ++  grad  %mime | ||||
| -- | ||||
| EOF | ||||
| 
 | ||||
| # Create a mark file for .ttf file type | ||||
| cat << EOF > "${uniswap_desk_dir}/mar/ttf.hoon" | ||||
| |_  dat=octs | ||||
| ++  grow | ||||
|   |% | ||||
|   ++  mime  [/font/ttf dat] | ||||
|   -- | ||||
| ++  grab | ||||
|   |% | ||||
|   ++  mime  |=([=mite =octs] octs) | ||||
|   ++  noun  octs | ||||
|   -- | ||||
| ++  grad  %mime | ||||
| -- | ||||
| EOF | ||||
| 
 | ||||
| rm "${uniswap_desk_dir}/desk.bill" | ||||
| rm "${uniswap_desk_dir}/desk.ship" | ||||
| 
 | ||||
| # Commit changes and create a glob | ||||
| hood "commit %uniswap" | ||||
| dojo "-landscape!make-glob %uniswap /build" | ||||
| 
 | ||||
| echo "Copying over glob file to mounted volume" | ||||
| mkdir -p /app-globs/uniswap | ||||
| cp /urbit/zod/.urb/put/* /app-globs/uniswap/ | ||||
| 
 | ||||
| glob_file=$(ls -1 -c zod/.urb/put | head -1) | ||||
| echo "Glob filename: ${glob_file}" | ||||
| 
 | ||||
| # Curl and wait for the glob to be hosted | ||||
| glob_url="http://uniswap-glob-host:3000/${glob_file}" | ||||
| 
 | ||||
| echo "Checking if glob file hosted at ${glob_url}" | ||||
| while true; do | ||||
|   response=$(curl -sL -w "%{http_code}" -o /dev/null "$glob_url") | ||||
| 
 | ||||
|   if [ $response -eq 200 ]; then | ||||
|     echo "File found at $glob_url" | ||||
|     break  # Exit the loop if the file is found | ||||
|   else | ||||
|     echo "File not found. Retrying in a few seconds..." | ||||
|     sleep 5 | ||||
|   fi | ||||
| done | ||||
| 
 | ||||
| glob_hash=$(echo "$glob_file" | sed "s/glob-\([a-z0-9\.]*\).glob/\1/") | ||||
| 
 | ||||
| # Update the docket file | ||||
| cat << EOF > "${uniswap_desk_dir}/desk.docket-0" | ||||
| :~  title+'Uniswap' | ||||
|     info+'Self-hosted uniswap frontend.' | ||||
|     color+0xcd.75df | ||||
|     image+'https://logowik.com/content/uploads/images/uniswap-uni7403.jpg' | ||||
|     base+'uniswap' | ||||
|     glob-http+['http://uniswap-glob-host:3000/${glob_file}' ${glob_hash}] | ||||
|     version+[0 0 1] | ||||
|     website+'https://uniswap.org/' | ||||
|     license+'MIT' | ||||
| == | ||||
| EOF | ||||
| 
 | ||||
| # Commit changes and install the app | ||||
| hood "commit %uniswap" | ||||
| hood "install our %uniswap" | ||||
| 
 | ||||
| echo "Uniswap app installed" | ||||
							
								
								
									
										23
									
								
								stack_orchestrator/data/config/uniswap-interface/host-uniswap-glob.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								stack_orchestrator/data/config/uniswap-interface/host-uniswap-glob.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,23 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| set -e | ||||
| if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||||
|   set -x | ||||
| fi | ||||
| 
 | ||||
| # Use config from mounted volume (when running web-app along with watcher stack) | ||||
| echo "Waiting for uniswap app glob" | ||||
| while [ ! -d /app-globs/uniswap ]; do | ||||
|   echo "Glob directory not found, retrying in 5 seconds..." | ||||
|   sleep 5 | ||||
| done | ||||
| 
 | ||||
| 
 | ||||
| # Copy to a new globs directory | ||||
| mkdir -p globs | ||||
| cp -r /app-globs/uniswap/* ./globs | ||||
| 
 | ||||
| # Serve the glob file | ||||
| cd globs | ||||
| echo "Hosting glob file at port 3000" | ||||
| python3 -m http.server 3000 --bind 0.0.0.0 | ||||
							
								
								
									
										109
									
								
								stack_orchestrator/data/config/uniswap-interface/install-uniswap-app.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										109
									
								
								stack_orchestrator/data/config/uniswap-interface/install-uniswap-app.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,109 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # $1: Glob file URL (eg. https://xyz.com/glob-abcd.glob) | ||||
| # $2: Uniswap desk dir (default: ./zod/uniswap) | ||||
| 
 | ||||
| if [ -z "$1" ]; then | ||||
|   echo "Glob file URL arg not provided" | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| glob_url=$1 | ||||
| glob_file=$(basename "$glob_url") | ||||
| glob_hash=$(echo "$glob_file" | sed "s/glob-\([a-z0-9\.]*\).glob/\1/") | ||||
| echo "Using glob file ${glob_file}" | ||||
| 
 | ||||
| # Default desk dir: ./zod/uniswap | ||||
| uniswap_desk_dir="${2:-./zod/uniswap}" | ||||
| 
 | ||||
| echo "Using ${uniswap_desk_dir} as the Uniswap desk dir path" | ||||
| 
 | ||||
| # Fire curl requests to perform operations on the ship | ||||
| dojo () { | ||||
|   curl -s --data '{"source":{"dojo":"'"$1"'"},"sink":{"stdout":null}}' http://localhost:12321 | ||||
| } | ||||
| 
 | ||||
| hood () { | ||||
|   curl -s --data '{"source":{"dojo":"+hood/'"$1"'"},"sink":{"app":"hood"}}' http://localhost:12321 | ||||
| } | ||||
| 
 | ||||
| # Create/mount a uniswap desk | ||||
| hood "merge %uniswap our %landscape" | ||||
| hood "mount %uniswap" | ||||
| 
 | ||||
| # Create a mark file for .map file type | ||||
| cat << EOF > "${uniswap_desk_dir}/mar/map.hoon" | ||||
| :: | ||||
| ::::  /hoon/map/mar | ||||
|   ::  Mark for js source maps | ||||
| /?    310 | ||||
| :: | ||||
| =,  eyre | ||||
| |_  mud=@ | ||||
| ++  grow | ||||
|   |% | ||||
|   ++  mime  [/application/octet-stream (as-octs:mimes:html (@t mud))] | ||||
|   -- | ||||
| ++  grab | ||||
|   |%                                                    ::  convert from | ||||
|   ++  mime  |=([p=mite q=octs] (@t q.q)) | ||||
|   ++  noun  cord                                        ::  clam from %noun | ||||
|   -- | ||||
| ++  grad  %mime | ||||
| -- | ||||
| EOF | ||||
| 
 | ||||
| # Create a mark file for .woff file type | ||||
| cat << EOF > "${uniswap_desk_dir}/mar/woff.hoon" | ||||
| |_  dat=octs | ||||
| ++  grow | ||||
|   |% | ||||
|   ++  mime  [/font/woff dat] | ||||
|   -- | ||||
| ++  grab | ||||
|   |% | ||||
|   ++  mime  |=([=mite =octs] octs) | ||||
|   ++  noun  octs | ||||
|   -- | ||||
| ++  grad  %mime | ||||
| -- | ||||
| EOF | ||||
| 
 | ||||
| # Create a mark file for .ttf file type | ||||
| cat << EOF > "${uniswap_desk_dir}/mar/ttf.hoon" | ||||
| |_  dat=octs | ||||
| ++  grow | ||||
|   |% | ||||
|   ++  mime  [/font/ttf dat] | ||||
|   -- | ||||
| ++  grab | ||||
|   |% | ||||
|   ++  mime  |=([=mite =octs] octs) | ||||
|   ++  noun  octs | ||||
|   -- | ||||
| ++  grad  %mime | ||||
| -- | ||||
| EOF | ||||
| 
 | ||||
| rm "${uniswap_desk_dir}/desk.bill" | ||||
| rm "${uniswap_desk_dir}/desk.ship" | ||||
| 
 | ||||
| # Update the docket file | ||||
| cat << EOF > "${uniswap_desk_dir}/desk.docket-0" | ||||
| :~  title+'Uniswap' | ||||
|     info+'Self-hosted uniswap frontend.' | ||||
|     color+0xcd.75df | ||||
|     image+'https://logowik.com/content/uploads/images/uniswap-uni7403.jpg' | ||||
|     base+'uniswap' | ||||
|     glob-http+['${glob_url}' ${glob_hash}] | ||||
|     version+[0 0 1] | ||||
|     website+'https://uniswap.org/' | ||||
|     license+'MIT' | ||||
| == | ||||
| EOF | ||||
| 
 | ||||
| # Commit changes and install the app | ||||
| hood "commit %uniswap" | ||||
| hood "install our %uniswap" | ||||
| 
 | ||||
| echo "Uniswap app installed" | ||||
							
								
								
									
										18
									
								
								stack_orchestrator/data/config/uniswap-interface/remote-deploy-uniswap.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								stack_orchestrator/data/config/uniswap-interface/remote-deploy-uniswap.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,18 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # $1: Remote user host | ||||
| # $2: Path to run the app installation in (where urbit ship dir is located) | ||||
| # $3: Glob file URL (eg. https://xyz.com/glob-abcd.glob) | ||||
| 
 | ||||
| if [ "$#" -ne 3 ]; then | ||||
|   echo "Usage: $0 <username@remote_host> </path/to/remote/folder> <glob_url>" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| remote_user_host="$1" | ||||
| remote_folder="$2" | ||||
| glob_url="$3" | ||||
| 
 | ||||
| installation_script="./install-uniswap-app.sh" | ||||
| 
 | ||||
| ssh "$remote_user_host" "cd $remote_folder && bash -s $glob_url" < "$installation_script" | ||||
							
								
								
									
										18
									
								
								stack_orchestrator/data/config/urbit/run-urbit-ship.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								stack_orchestrator/data/config/urbit/run-urbit-ship.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,18 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| set -e | ||||
| if [ -n "$CERC_SCRIPT_DEBUG" ]; then | ||||
|   set -x | ||||
| fi | ||||
| 
 | ||||
| pier_dir="/urbit/zod" | ||||
| 
 | ||||
| # Run urbit ship in daemon mode | ||||
| # Check if the directory exists | ||||
| if [ -d "$pier_dir" ]; then | ||||
|   echo "Pier directory already exists, rebooting..." | ||||
|   urbit -d zod | ||||
| else | ||||
|   echo "Creating a new fake ship..." | ||||
|   urbit -d -F zod | ||||
| fi | ||||
| @ -0,0 +1,10 @@ | ||||
| FROM node:18.17.1-alpine3.18 | ||||
| 
 | ||||
| RUN apk --update --no-cache add git make alpine-sdk bash | ||||
| 
 | ||||
| WORKDIR /app | ||||
| 
 | ||||
| COPY . . | ||||
| 
 | ||||
| RUN echo "Building uniswap-interface" && \ | ||||
|     yarn | ||||
							
								
								
									
										8
									
								
								stack_orchestrator/data/container-build/cerc-uniswap-interface/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								stack_orchestrator/data/container-build/cerc-uniswap-interface/build.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,8 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Build the uniswap-interface image | ||||
| source ${CERC_CONTAINER_BASE_DIR}/build-base.sh | ||||
| 
 | ||||
| # See: https://stackoverflow.com/a/246128/1701505 | ||||
| SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | ||||
| 
 | ||||
| docker build -t cerc/uniswap-interface:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/uniswap-interface | ||||
| @ -0,0 +1,7 @@ | ||||
| FROM python:3.13.0a2-alpine3.18 | ||||
| 
 | ||||
| RUN apk --update --no-cache add alpine-sdk jq bash curl wget | ||||
| 
 | ||||
| WORKDIR /app | ||||
| 
 | ||||
| ENTRYPOINT [ "bash" ] | ||||
							
								
								
									
										9
									
								
								stack_orchestrator/data/container-build/cerc-urbit-globs-host/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										9
									
								
								stack_orchestrator/data/container-build/cerc-urbit-globs-host/build.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,9 @@ | ||||
| #!/usr/bin/env bash | ||||
| # Build the urbit-globs-host image | ||||
| 
 | ||||
| source ${CERC_CONTAINER_BASE_DIR}/build-base.sh | ||||
| 
 | ||||
| # See: https://stackoverflow.com/a/246128/1701505 | ||||
| SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) | ||||
| 
 | ||||
| docker build -t cerc/urbit-globs-host:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${SCRIPT_DIR} | ||||
| @ -59,3 +59,4 @@ cerc/ponder | ||||
| cerc/nitro-rpc-client | ||||
| cerc/watcher-merkl-sushiswap-v3 | ||||
| cerc/watcher-sushiswap-v3 | ||||
| cerc/uniswap-interface | ||||
|  | ||||
| @ -49,3 +49,4 @@ github.com/cerc-io/mobymask-snap | ||||
| github.com/cerc-io/ponder | ||||
| github.com/cerc-io/merkl-sushiswap-v3-watcher-ts | ||||
| github.com/cerc-io/sushiswap-v3-watcher-ts | ||||
| github.com/cerc-io/uniswap-interface | ||||
|  | ||||
							
								
								
									
										122
									
								
								stack_orchestrator/data/stacks/uniswap-urbit-app/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								stack_orchestrator/data/stacks/uniswap-urbit-app/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,122 @@ | ||||
| # Self-hosted Uniswap Frontend | ||||
| 
 | ||||
| Instructions to setup and deploy Uniswap app on Urbit | ||||
| 
 | ||||
| Build and deploy: | ||||
| 
 | ||||
| - Urbit | ||||
| - Uniswap app | ||||
| 
 | ||||
| ## Setup | ||||
| 
 | ||||
| Clone required repositories: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so --stack uniswap-urbit-app 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 images: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so --stack uniswap-urbit-app build-containers | ||||
| ``` | ||||
| 
 | ||||
| ## Create a deployment | ||||
| 
 | ||||
| First, create a spec file for the deployment, which will map the stack's ports and volumes to the host: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so --stack uniswap-urbit-app deploy init --output uniswap-urbit-app-spec.yml | ||||
| 
				
					
						zramsay
						commented  there's a flag:  there's a flag: `--map-ports-to-host=localhost-same` | ||||
| ``` | ||||
| 
 | ||||
| ### Ports | ||||
| 
 | ||||
| Edit `network` in spec file to map container ports to same ports in host | ||||
| 
 | ||||
| ``` | ||||
| ... | ||||
| network: | ||||
|   ports: | ||||
|     urbit-fake-ship: | ||||
|       - '8080:80' | ||||
|     uniswap-glob-host: | ||||
|       - '3000:3000' | ||||
|     uniswap-gql-proxy: | ||||
|       - '4000:4000' | ||||
| ... | ||||
| ``` | ||||
| 
 | ||||
| ### Data volumes | ||||
| 
 | ||||
| Container data volumes are bind-mounted to specified paths in the host filesystem. | ||||
| The default setup (generated by `laconic-so deploy init`) places the volumes in the `./data` subdirectory of the deployment directory. The default mappings can be customized by editing the "spec" file generated by `laconic-so deploy init`. | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| Once you've made any needed changes to the spec file, create a deployment from it: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so --stack uniswap-urbit-app deploy create --spec-file uniswap-urbit-app-spec.yml --deployment-dir uniswap-urbit-app-deployment | ||||
| ``` | ||||
| 
 | ||||
| ## Set env variables | ||||
| 
 | ||||
| Inside the deployment directory, open the file `config.env` and add variable for infura key : | ||||
| 
 | ||||
|   ```bash | ||||
|   # External RPC endpoints | ||||
|   # https://docs.infura.io/getting-started#2-create-an-api-key | ||||
|   CERC_INFURA_KEY= | ||||
| 
 | ||||
|   # Uniswap API GQL Endpoint | ||||
|   # Set this to GQL proxy server endpoint for uniswap app | ||||
|   # (Eg. http://localhost:4000/graphql) | ||||
|   CERC_UNISWAP_GQL= | ||||
|   ``` | ||||
| 
 | ||||
| ## Start the stack | ||||
| 
 | ||||
| Start the deployment: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so deployment --dir uniswap-urbit-app-deployment start | ||||
| ``` | ||||
| 
 | ||||
| * List and check the health status of all the containers using `docker ps` and wait for them to be `healthy` | ||||
| 
 | ||||
| * Run the following to get login password for Urbit web interface: | ||||
| 
 | ||||
|   ```bash | ||||
|   laconic-so deployment --dir uniswap-urbit-app-deployment exec urbit-fake-ship "curl -s --data '{\"source\":{\"dojo\":\"+code\"},\"sink\":{\"stdout\":null}}' http://localhost:12321" | ||||
| 
 | ||||
|   # Expected output: "<PASSWORD>\n"% | ||||
|   ``` | ||||
| 
 | ||||
| * Open the Urbit web UI at http://localhost:8080 and use the `PASSWORD` from previous step to login | ||||
| 
 | ||||
| * The uniswap app is not available when starting stack for the first time. Check `urbit-fake-ship` logs to see that app has installed | ||||
|   ``` | ||||
|   laconic-so deployment --dir uniswap-urbit-app-deployment logs -f | ||||
| 
 | ||||
|   # Expected output: | ||||
|   # laconic-3ccf7ee79bdae874-urbit-fake-ship-1    | docket: fetching %http glob for %uniswap desk | ||||
|   # laconic-3ccf7ee79bdae874-urbit-fake-ship-1    | ">="">="Uniswap app installed | ||||
|   ``` | ||||
| 
 | ||||
| * The uniswap app will be now visible at http://localhost:8080 | ||||
| 
 | ||||
| ## Clean up | ||||
| 
 | ||||
| To stop all uniswap-urbit-app services running in the background, while preserving chain data: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so deployment --dir uniswap-urbit-app-deployment stop | ||||
| ``` | ||||
| 
 | ||||
| To stop all uniswap-urbit-app services and also delete data: | ||||
| 
 | ||||
| ```bash | ||||
| laconic-so deployment --dir uniswap-urbit-app-deployment stop --delete-volumes | ||||
| ``` | ||||
							
								
								
									
										10
									
								
								stack_orchestrator/data/stacks/uniswap-urbit-app/stack.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								stack_orchestrator/data/stacks/uniswap-urbit-app/stack.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| version: "0.1" | ||||
| name: uniswap-urbit-app | ||||
| repos: | ||||
|   - github.com/cerc-io/uniswap-interface@laconic # TODO: Use release | ||||
| containers: | ||||
|   - cerc/uniswap-interface | ||||
|   - cerc/urbit-globs-host | ||||
| pods: | ||||
|   - uniswap-interface | ||||
|   - uniswap-urbit | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	
ideally this would happen during a build step rather than at deploy time