Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add stack for running osmosis frontend app #673

Merged
merged 13 commits into from
Dec 11, 2023
2 changes: 1 addition & 1 deletion stack_orchestrator/data/compose/docker-compose-kubo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: "3.2"
# See: https://docs.ipfs.tech/install/run-ipfs-inside-docker/#set-up
services:
ipfs:
image: ipfs/kubo:master-2023-02-20-714a968
image: ipfs/kubo:v0.24.0
restart: always
volumes:
- ipfs-import:/import
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
version: "3.2"

services:
osmosis-front-end:
image: cerc/osmosis-front-end:local
restart: on-failure
environment:
- NEXT_PUBLIC_WEB_API_BASE_URL=${CERC_WEB_API_BASE_URL}
working_dir: /app/packages/web
command: ["./build-app.sh"]
volumes:
- ../config/osmosis/build-app.sh:/app/packages/web/build-app.sh
- app_builds:/app-builds

nginx:
image: nginx:1.23-alpine
restart: always
depends_on:
osmosis-front-end:
condition: service_completed_successfully
volumes:
- ../config/osmosis/nginx:/etc/nginx/conf.d
- app_builds:/usr/share/nginx
ports:
- "80"
healthcheck:
test: ["CMD", "nc", "-vz", "localhost", "80"]
interval: 20s
timeout: 5s
retries: 15
start_period: 5s

volumes:
app_builds:
18 changes: 18 additions & 0 deletions stack_orchestrator/data/config/osmosis/build-app.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/sh

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/osmosis/build ]; then
echo "Build already exists, remove volume to rebuild"
exit 0
fi

yarn build:static

# Move build to app-builds
mkdir -p /app-builds/osmosis
cp -r ./out /app-builds/osmosis/build
16 changes: 16 additions & 0 deletions stack_orchestrator/data/config/osmosis/nginx/web-app.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
server {
listen 80;
listen [::]:80;
server_name _;

error_page 500 502 503 504 /50x.html;

location / {
root /usr/share/nginx/osmosis/build;
index index.html index.htm index.nginx-debian.html;

# First attempt to serve request as file, then as html,
# then as directory, then fall back to displaying a 404.
try_files $uri $uri.html $uri/ /index.html =404;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Build the osmosis front end image
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
docker build -t cerc/osmosis-front-end:local -f ${CERC_REPO_BASE_DIR}/osmosis-frontend/docker/Dockerfile.static ${build_command_args} ${CERC_REPO_BASE_DIR}/osmosis-frontend
141 changes: 141 additions & 0 deletions stack_orchestrator/data/stacks/osmosis/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# self-hosted osmosis

Instructions to build and deploy:
- self-hosted gitea
- an ipfs node
- the osmosis front end
- a laconicd chain

## Setup

Clone required repositories:

```bash
laconic-so --stack osmosis setup-repositories

# If this throws an error as a result of being already checked out to a branch/tag in a repo, remove the repositories and re-run the command
```

Build the container images:

```
# support image for the gitea package registry
laconic-so --stack build-support build-containers

laconic-so --stack osmosis 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 osmosis deploy init --output osmosis-spec.yml
```

### Ports

Edit `network` in spec file to map container ports to same ports in host

```
...
network:
ports:
proxy-server:
- '4000:4000'
nginx:
- '3000:80'
```

### 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 osmosis deploy create --spec-file osmosis-spec.yml --deployment-dir osmosis-deployment
```

## Set env variables

Inside the deployment directory, open the file `config.env` and set the following env variables:

```bash
# Osmosis API base URL
# Set this to proxy server endpoint for uniswap app
# (Eg. http://localhost:4000 - in case stack is being run locally with proxy enabled)
# (Eg. https://abc.xyz.com - in case https://abc.xyz.com is pointed to the proxy endpoint)
CERC_WEB_API_BASE_URL=http://localhost:4000

# Optional

# Whether to run the proxy server
# (Disable only if proxy not required to be run) (Default: true)
CERC_ENABLE_PROXY=

# Proxy server configuration
# Used only if proxy is enabled

# Upstream API URL
CERC_PROXY_UPSTREAM=https://app.osmosis.zone
```

## Start the stack

Start the deployment:
```bash
laconic-so deployment --dir osmosis-deployment start
```

* List and check the health status of all the containers using `docker ps` and wait for them to be `healthy`

* The web app can be accessed at http://localhost:3000

## Laconic registry

Setup a test chain:
```
export CERC_NPM_REGISTRY_URL=https://git.vdb.to/api/packages/cerc-io/npm/

laconic-so --stack fixturenet-laconic-loaded setup-repositories --include git.vdb.to/cerc-io/laconicd,git.vdb.to/cerc-io/laconic-sdk,git.vdb.to/cerc-io/laconic-registry-cli,git.vdb.to/cerc-io/laconic-console

laconic-so --stack fixturenet-laconic-loaded build-containers

export LACONIC_HOSTED_ENDPOINT=http://<your-IP>

laconic-so --stack fixturenet-laconic-loaded deploy up
```

then `docker exec` into the `laconicd` container and either export the private key or create a new one and send funds to it. Use that private key for `LACONIC_HOTWALLET_KEY`.

## Clean up

To stop all osmosis services running in the background, while preserving data:

```bash
# Only stop the docker containers
laconic-so deployment --dir osmosis-deployment stop

# Run 'start' to restart the deployment
```

To stop all osmosis services and also delete data:

```bash
# Stop the docker containers
laconic-so deployment --dir osmosis-deployment stop --delete-volumes

# Remove deployment directory (deployment will have to be recreated for a re-run)
rm -r osmosis-deployment
```

To stop stack running Laconic registry

```bash
laconic-so --stack fixturenet-laconic-loaded deploy down

# Delete volumes
laconic-so --stack fixturenet-laconic-loaded deploy down --delete-volumes
```
30 changes: 30 additions & 0 deletions stack_orchestrator/data/stacks/osmosis/stack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
version: "0.1"
name: osmosis
repos:
# For gitea
# - git.vdb.to/cerc-io/hosting@names-for-so
# - gitea.com/gitea/act_runner
# For osmosis frontend
- github.com/cerc-io/[email protected]
- github.com/cerc-io/osmosis-frontend@laconic
containers:
# - cerc/act-runner
# - cerc/act-runner-task-executor
- cerc/watcher-ts
- cerc/osmosis-front-end
pods:
- kubo
- proxy-server
- osmosis-front-end
# TODO: Fix pod config for deployment command
# TODO: mirroring all of osmosis repos: https://git.vdb.to/cerc-io/hosting/pulls/42
# - name: gitea
# repository: cerc-io/hosting
# path: gitea
# pre_start_command: "run-this-first.sh"
# post_start_command: "initialize-gitea.sh"
# - name: act-runner
# repository: cerc-io/hosting
# path: act-runner
# pre_start_command: "pre_start.sh"
# post_start_command: "post_start.sh"
13 changes: 10 additions & 3 deletions stack_orchestrator/data/stacks/uniswap-urbit-app/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,9 @@ Inside the deployment directory, open the file `config.env` and set the followin

# Uniswap API GQL Endpoint
# Set this to GQL proxy server endpoint for uniswap app
# (Eg. http://localhost:4000/v1/graphql)
# (Eg. https://abc.xyz.com/v1/graphql)
CERC_UNISWAP_GQL=
# (Eg. http://localhost:4000/v1/graphql - in case stack is being run locally with proxy enabled)
# (Eg. https://abc.xyz.com/v1/graphql - in case https://abc.xyz.com is pointed to the proxy endpoint)
CERC_UNISWAP_GQL=http://localhost:4000/v1/graphql

# Optional

Expand Down Expand Up @@ -150,11 +150,18 @@ laconic-so deployment --dir uniswap-urbit-app-deployment start
To stop all uniswap-urbit-app services running in the background, while preserving data:

```bash
# Only stop the docker containers
laconic-so deployment --dir uniswap-urbit-app-deployment stop

# Run 'start' to restart the deployment
```

To stop all uniswap-urbit-app services and also delete data:

```bash
# Stop the docker containers
laconic-so deployment --dir uniswap-urbit-app-deployment stop --delete-volumes

# Remove deployment directory (deployment will have to be recreated for a re-run)
rm -r uniswap-urbit-app-deployment
```