From ea27fcb7221a9cccea6e1ebc04967a9946e72491 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 24 Sep 2025 12:10:41 +0000 Subject: [PATCH] feat: Complete Podman stack setup with working services MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed service dependencies (removed bootstrap dependency for runtime services) - Added landing service for documentation site at root path - Moved web-app to /app path, landing to / path - Fixed permission issues with lowercase 'z' SELinux context - Added kraiken-lib compilation in txn-bot container - Fixed TypeScript build for kraiken-lib with proper volumes - Updated entrypoint scripts to handle npm installs properly - Added locale fixes to Containerfiles - Changed Caddy port from 80 to 8081 for external access - Updated Docs link to point to local landing page All services now working: - Landing page at / - Web app at /app/ - GraphQL at /graphql - Transaction bot at /txn - Anvil RPC at /rpc/anvil 🤖 Generated with Claude Code Co-Authored-By: Claude --- containers/Caddyfile | 7 ++- containers/bootstrap.sh | 10 +++- containers/foundry.Containerfile | 3 ++ containers/landing-dev-entrypoint.sh | 18 +++++++ containers/node-dev.Containerfile | 2 + containers/ponder-dev-entrypoint.sh | 8 +-- containers/txn-bot-entrypoint.sh | 47 +++++++++++++++- ...entrypoint.sh => webapp-dev-entrypoint.sh} | 16 +++--- podman-compose.yml | 54 +++++++++++++------ web-app/src/components/layouts/Navbar.vue | 2 +- 10 files changed, 135 insertions(+), 32 deletions(-) create mode 100755 containers/landing-dev-entrypoint.sh rename containers/{frontend-dev-entrypoint.sh => webapp-dev-entrypoint.sh} (66%) diff --git a/containers/Caddyfile b/containers/Caddyfile index a8197c1..8216164 100644 --- a/containers/Caddyfile +++ b/containers/Caddyfile @@ -1,4 +1,7 @@ :80 { + route /app* { + reverse_proxy webapp:5173 + } route /graphql* { reverse_proxy ponder:42069 } @@ -6,10 +9,12 @@ reverse_proxy ponder:42069 } route /rpc/anvil* { + uri strip_prefix /rpc/anvil reverse_proxy anvil:8545 } route /txn* { + uri strip_prefix /txn reverse_proxy txn-bot:43069 } - reverse_proxy frontend:5173 + reverse_proxy landing:5174 } diff --git a/containers/bootstrap.sh b/containers/bootstrap.sh index c7b32c8..1f035b6 100755 --- a/containers/bootstrap.sh +++ b/containers/bootstrap.sh @@ -115,8 +115,14 @@ grant_recenter_access() { } call_recenter() { - log "Calling recenter()" - cast send --rpc-url "$ANVIL_RPC" --private-key "$DEPLOYER_PK" \ + local recenter_pk="$DEPLOYER_PK" + local recenter_addr="$DEPLOYER_ADDR" + if [[ -n "$TXNBOT_ADDRESS" ]]; then + recenter_pk="$TXNBOT_PRIVATE_KEY" + recenter_addr="$TXNBOT_ADDRESS" + fi + log "Calling recenter() via $recenter_addr" + cast send --rpc-url "$ANVIL_RPC" --private-key "$recenter_pk" \ "$LIQUIDITY_MANAGER" "recenter()" >>"$SETUP_LOG" 2>&1 } diff --git a/containers/foundry.Containerfile b/containers/foundry.Containerfile index 3b42feb..9f0e6f3 100644 --- a/containers/foundry.Containerfile +++ b/containers/foundry.Containerfile @@ -17,6 +17,9 @@ RUN apt-get update \ RUN useradd -m -u 1000 foundry USER foundry WORKDIR /home/foundry +ENV SHELL=/bin/bash +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 RUN curl -L https://foundry.paradigm.xyz | bash \ && /home/foundry/.foundry/bin/foundryup diff --git a/containers/landing-dev-entrypoint.sh b/containers/landing-dev-entrypoint.sh new file mode 100755 index 0000000..d8d3e46 --- /dev/null +++ b/containers/landing-dev-entrypoint.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR=/workspace +LANDING_DIR=$ROOT_DIR/landing + +cd "$LANDING_DIR" +echo "[landing-entrypoint] Installing dependencies..." +npm install --no-save --loglevel error 2>&1 || { + echo "[landing-entrypoint] npm install failed, trying with --force" + npm install --force --no-save --loglevel error +} + +export CHOKIDAR_USEPOLLING=${CHOKIDAR_USEPOLLING:-1} +export HOST=0.0.0.0 +export PORT=${PORT:-5174} + +exec npm run dev -- --host 0.0.0.0 --port 5174 \ No newline at end of file diff --git a/containers/node-dev.Containerfile b/containers/node-dev.Containerfile index 1490337..717feaf 100644 --- a/containers/node-dev.Containerfile +++ b/containers/node-dev.Containerfile @@ -6,6 +6,8 @@ RUN apt-get update \ USER node WORKDIR /workspace +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 ENV PATH="/workspace/node_modules/.bin:${PATH}" ENTRYPOINT ["dumb-init", "--"] diff --git a/containers/ponder-dev-entrypoint.sh b/containers/ponder-dev-entrypoint.sh index 9a79210..7ecfffb 100755 --- a/containers/ponder-dev-entrypoint.sh +++ b/containers/ponder-dev-entrypoint.sh @@ -11,9 +11,11 @@ while [[ ! -f "$CONTRACT_ENV" ]]; do done cd "$PONDER_WORKDIR" -if [[ ! -d node_modules ]]; then - npm install -fi +echo "[ponder-entrypoint] Installing dependencies..." +npm install --no-save --loglevel error 2>&1 || { + echo "[ponder-entrypoint] npm install failed, trying with --force" + npm install --force --no-save --loglevel error +} export CHOKIDAR_USEPOLLING=${CHOKIDAR_USEPOLLING:-1} export HOST=0.0.0.0 diff --git a/containers/txn-bot-entrypoint.sh b/containers/txn-bot-entrypoint.sh index 0f4a68c..9734aea 100755 --- a/containers/txn-bot-entrypoint.sh +++ b/containers/txn-bot-entrypoint.sh @@ -4,16 +4,59 @@ set -euo pipefail ROOT_DIR=/workspace TXNBOT_ENV_FILE=$ROOT_DIR/tmp/podman/txnBot.env BOT_DIR=$ROOT_DIR/services/txnBot +KRAIKEN_LIB_DIR=$ROOT_DIR/kraiken-lib while [[ ! -f "$TXNBOT_ENV_FILE" ]]; do echo "[txn-bot-entrypoint] waiting for env file" sleep 2 done -cd "$BOT_DIR" +# Build kraiken-lib first +echo "[txn-bot-entrypoint] Building kraiken-lib..." +cd "$KRAIKEN_LIB_DIR" + +# Install dependencies if needed if [[ ! -d node_modules ]]; then - npm install + echo "[txn-bot-entrypoint] Installing kraiken-lib dependencies..." + npm install --loglevel error fi +# Install TypeScript if not present +if [[ ! -f node_modules/.bin/tsc ]]; then + echo "[txn-bot-entrypoint] Installing TypeScript..." + npm install --loglevel error typescript +fi + +# Build TypeScript files (dist is now a volume, writable by node user) +echo "[txn-bot-entrypoint] Compiling TypeScript..." +if [[ ! -f dist/index.js ]]; then + echo "[txn-bot-entrypoint] Running tsc to compile kraiken-lib..." + ./node_modules/.bin/tsc \ + --outDir dist \ + --declaration \ + --module commonjs \ + --target es2020 \ + --skipLibCheck \ + --esModuleInterop \ + --allowSyntheticDefaultImports \ + --resolveJsonModule \ + src/index.ts src/helpers.ts src/subgraph.ts src/__generated__/graphql.ts 2>&1 | head -20 || { + echo "[txn-bot-entrypoint] TypeScript compilation had some issues, checking if files were created..." + } + + # Verify the main file exists + if [[ ! -f dist/index.js ]]; then + echo "[txn-bot-entrypoint] ERROR: Failed to compile kraiken-lib" + exit 1 + fi +fi + +cd "$BOT_DIR" +echo "[txn-bot-entrypoint] Installing txn-bot dependencies..." +npm install --no-save --loglevel error 2>&1 || { + echo "[txn-bot-entrypoint] npm install failed, trying with --force" + npm install --force --no-save --loglevel error +} + export TXN_BOT_ENV_FILE="$TXNBOT_ENV_FILE" exec npm run start diff --git a/containers/frontend-dev-entrypoint.sh b/containers/webapp-dev-entrypoint.sh similarity index 66% rename from containers/frontend-dev-entrypoint.sh rename to containers/webapp-dev-entrypoint.sh index c0f4e17..62ba72e 100755 --- a/containers/frontend-dev-entrypoint.sh +++ b/containers/webapp-dev-entrypoint.sh @@ -15,18 +15,20 @@ done source "$CONTRACT_ENV" cd "$APP_DIR" -if [[ ! -d node_modules ]]; then - npm install -fi +echo "[frontend-entrypoint] Installing dependencies..." +npm install --no-save --loglevel error 2>&1 || { + echo "[frontend-entrypoint] npm install failed, trying with --force" + npm install --force --no-save --loglevel error +} export VITE_DEFAULT_CHAIN_ID=${VITE_DEFAULT_CHAIN_ID:-31337} -export VITE_LOCAL_RPC_URL=${VITE_LOCAL_RPC_URL:-/rpc/anvil} +export VITE_LOCAL_RPC_URL=${VITE_LOCAL_RPC_URL:-/app/rpc/anvil} export VITE_LOCAL_RPC_PROXY_TARGET=${VITE_LOCAL_RPC_PROXY_TARGET:-http://anvil:8545} export VITE_KRAIKEN_ADDRESS=$KRAIKEN export VITE_STAKE_ADDRESS=$STAKE export VITE_SWAP_ROUTER=$SWAP_ROUTER -export VITE_PONDER_BASE_SEPOLIA_LOCAL_FORK=${VITE_PONDER_BASE_SEPOLIA_LOCAL_FORK:-/graphql} -export VITE_TXNBOT_BASE_SEPOLIA_LOCAL_FORK=${VITE_TXNBOT_BASE_SEPOLIA_LOCAL_FORK:-/txn} +export VITE_PONDER_BASE_SEPOLIA_LOCAL_FORK=${VITE_PONDER_BASE_SEPOLIA_LOCAL_FORK:-/app/graphql} +export VITE_TXNBOT_BASE_SEPOLIA_LOCAL_FORK=${VITE_TXNBOT_BASE_SEPOLIA_LOCAL_FORK:-/app/txn} export CHOKIDAR_USEPOLLING=${CHOKIDAR_USEPOLLING:-1} -exec npm run dev -- --host 0.0.0.0 --port 5173 +exec npm run dev -- --host 0.0.0.0 --port 5173 --base /app/ diff --git a/podman-compose.yml b/podman-compose.yml index 3bde1cb..d6ac08e 100644 --- a/podman-compose.yml +++ b/podman-compose.yml @@ -32,70 +32,92 @@ services: dockerfile: containers/node-dev.Containerfile entrypoint: ["/workspace/containers/ponder-dev-entrypoint.sh"] volumes: - - .:/workspace:Z + - .:/workspace:z - ponder-node-modules:/workspace/services/ponder/node_modules working_dir: /workspace environment: - CHOKIDAR_USEPOLLING=1 depends_on: - bootstrap: - condition: service_completed_successfully + - anvil expose: - "42069" restart: unless-stopped - frontend: + webapp: build: context: . dockerfile: containers/node-dev.Containerfile - entrypoint: ["/workspace/containers/frontend-dev-entrypoint.sh"] + entrypoint: ["/workspace/containers/webapp-dev-entrypoint.sh"] volumes: - - .:/workspace:Z - - frontend-node-modules:/workspace/web-app/node_modules + - .:/workspace:z + - webapp-node-modules:/workspace/web-app/node_modules working_dir: /workspace environment: - CHOKIDAR_USEPOLLING=1 depends_on: - bootstrap: - condition: service_completed_successfully + - anvil expose: - "5173" restart: unless-stopped + landing: + build: + context: . + dockerfile: containers/node-dev.Containerfile + entrypoint: ["/workspace/containers/landing-dev-entrypoint.sh"] + volumes: + - .:/workspace:z + - landing-node-modules:/workspace/landing/node_modules + working_dir: /workspace + environment: + - CHOKIDAR_USEPOLLING=1 + depends_on: + - anvil + expose: + - "5174" + restart: unless-stopped + txn-bot: build: context: . dockerfile: containers/node-dev.Containerfile entrypoint: ["/workspace/containers/txn-bot-entrypoint.sh"] volumes: - - .:/workspace:Z + - .:/workspace:z - txn-node-modules:/workspace/services/txnBot/node_modules + - kraiken-node-modules:/workspace/kraiken-lib/node_modules + - kraiken-dist:/workspace/kraiken-lib/dist working_dir: /workspace depends_on: - bootstrap: - condition: service_completed_successfully + - anvil + - ponder expose: - "43069" restart: unless-stopped caddy: - image: caddy:2.8 + image: docker.io/library/caddy:2.8 volumes: - ./containers/Caddyfile:/etc/caddy/Caddyfile:Z ports: - - "80:80" + - "0.0.0.0:8081:80" depends_on: anvil: condition: service_started ponder: condition: service_started - frontend: + webapp: + condition: service_started + landing: condition: service_started txn-bot: condition: service_started restart: unless-stopped volumes: - frontend-node-modules: + webapp-node-modules: + landing-node-modules: ponder-node-modules: txn-node-modules: + kraiken-node-modules: + kraiken-dist: diff --git a/web-app/src/components/layouts/Navbar.vue b/web-app/src/components/layouts/Navbar.vue index 393f554..c3aa851 100644 --- a/web-app/src/components/layouts/Navbar.vue +++ b/web-app/src/components/layouts/Navbar.vue @@ -17,7 +17,7 @@ {{ navbarRoute.title }} - Docs + Docs