diff --git a/.ide-debug/Dockerfile.debug b/.ide-debug/Dockerfile.debug deleted file mode 100644 index 1bcfd2a..0000000 --- a/.ide-debug/Dockerfile.debug +++ /dev/null @@ -1,16 +0,0 @@ -FROM golang:1.21 AS build - -# Build Delve -RUN go install github.com/go-delve/delve/cmd/dlv@latest - -WORKDIR /usr/src/app - -copy . . - -RUN go build -gcflags="all=-N -l" -v -o /usr/local/bin/app - -FROM ubuntu:22.04 -COPY --from=build /go/bin/dlv /usr/local/bin -COPY --from=build /usr/local/bin/app /usr/local/bin/ - -CMD ["dlv", "--listen=:40000", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/usr/local/bin/app"] diff --git a/.ide-debug/Remote Debug Cardinal port 40000.run.xml b/.ide-debug/Remote Debug Cardinal port 40000.run.xml deleted file mode 100644 index f131372..0000000 --- a/.ide-debug/Remote Debug Cardinal port 40000.run.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.ide-debug/docker-compose.debug.yml b/.ide-debug/docker-compose.debug.yml deleted file mode 100644 index f7228d6..0000000 --- a/.ide-debug/docker-compose.debug.yml +++ /dev/null @@ -1,160 +0,0 @@ -version: "3" -services: - cardinal: - build: - context: ../cardinal - dockerfile: Dockerfile.debug - depends_on: - - redis - expose: - - "3333" - ports: - - "3333:3333" - environment: - - CARDINAL_PORT=3333 - - CARDINAL_NAMESPACE=${CARDINAL_NAMESPACE} - - REDIS_ADDR=redis:6379 - - REDIS_MODE=normal - restart: unless-stopped - cap_add: - - SYS_PTRACE - security_opt: - - "seccomp:unconfined" - - evm: - container_name: evm_base_shard - environment: - # DA_AUTH_TOKEN is obtained from celestia client and passed in from world.toml. - # See https://docs.celestia.org/developers/node-tutorial#auth-token - - DA_AUTH_TOKEN=${DA_AUTH_TOKEN:-} - - DA_BASE_URL=${DA_BASE_URL:-http://celestia-devnet:26658} - - DA_NAMESPACE_ID=${DA_NAMESPACE_ID:-67480c4a88c4d12935d4} - - CHAIN_ID=${CHAIN_ID:-world-engine} - # KEY_MNEMONIC is a test mnemonic and should not be used in production. - # This mnemonic can be overwritten by setting the KEY_MNEMONIC environment variable. - - KEY_MNEMONIC=${KEY_MNEMONIC:-enact adjust liberty squirrel bulk ticket invest tissue antique window thank slam unknown fury script among bread social switch glide wool clog flag enroll} - - FAUCET_ADDR=${FAUCET_ADDR:-world142fg37yzx04cslgeflezzh83wa4xlmjpms0sg5} - - BLOCK_TIME=${BLOCK_TIME:-1s} - image: us-docker.pkg.dev/argus-labs/world-engine/chain:latest - expose: - - "1317" - - "26657" - - "9090" - - "9601" - - "8545" - ports: - - "1317:1317" - - "26657:26657" - - "9090:9090" - - "9601:9601" - - "8545:8545" - - nakama: - platform: linux/amd64 - image: us-docker.pkg.dev/argus-labs/world-engine/relay/nakama@sha256:60737f1de75b5e1dfe0f1eb557ebf6f8c691cc2812950dc4e3132242709ddc09 - container_name: nakama - depends_on: - postgres: - condition: service_healthy - cardinal: - condition: service_started - environment: - - CARDINAL_ADDR=${CARDINAL_ADDR:-cardinal:3333} - - CARDINAL_NAMESPACE=${CARDINAL_NAMESPACE} - - DB_PASSWORD=${DB_PASSWORD:-very_unsafe_password_replace_me} - entrypoint: - - "/bin/sh" - - "-ecx" - - > - /nakama/nakama migrate up --database.address postgres:$DB_PASSWORD@postgres:5432/nakama && - exec /nakama/nakama --config /nakama/data/config.yml --database.address postgres:$DB_PASSWORD@postgres:5432/nakama - # Replace entrypoint with the following when using cockroachdb instead of postgres. - # entrypoint: - # - "/bin/sh" - # - "-ecx" - # - > - # /nakama/nakama migrate up --database.address root:$DB_PASSWORD@cockroachdb:26257/nakama && - # exec /nakama/nakama --config /nakama/data/local.yml --database.address root:$DB_PASSWORD@cockroachdb:26257/nakama - extra_hosts: - - "host.docker.internal:host-gateway" - expose: - - "7349" - - "7350" - - "7351" - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:7350/"] - interval: 10s - timeout: 5s - retries: 5 - ports: - - "7349:7349" - - "7350:7350" - - "7351:7351" - restart: unless-stopped - - - nakama-db: - container_name: nakama_db - command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all - environment: - - POSTGRES_DB=nakama - - POSTGRES_PASSWORD=${DB_PASSWORD:-very_unsafe_password_replace_me} - expose: - - "8080" - - "5432" - image: postgres:12.2-alpine - ports: - - "5432:5432" - - "8080:8080" - healthcheck: - test: [ "CMD", "pg_isready", "-U", "postgres", "-d", "nakama" ] - interval: 3s - timeout: 3s - retries: 5 - volumes: - - data:/var/lib/postgresql/data - # Recommended: Use cockroachdb instead of postgres for production. - # container_name: nakama_db - # image: cockroachdb/cockroach:latest-v23.1 - # command: start-single-node --insecure --store=attrs=ssd,path=/var/lib/cockroach/,size=20% - # restart: "no" - # environment: - # - COCKROACH_DATABASE=nakama - # - COCKROACH_USER=root - # - COCKROACH_PASSWORD=${DB_PASSWORD:-very_unsafe_password_replace_me} - # volumes: - # - data:/var/lib/cockroach - # expose: - # - "8080" - # - "26257" - # ports: - # - "26257:26257" - # - "8080:8080" - # healthcheck: - # test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"] - # interval: 3s - # timeout: 3s - # retries: 5 - - redis: - container_name: redis - image: redis:latest - command: redis-server - expose: - - "6379" - ports: - - "6379:6379" - restart: always - - celestia-devnet: - container_name: celestia_devnet - image: ghcr.io/rollkit/local-celestia-devnet:v0.12.1 - restart: on-failure - ports: - - "26657" - - "26658" - - "26659" - - "9090" - -volumes: - data: diff --git a/cardinal/Dockerfile b/cardinal/Dockerfile index 0426cb0..9765bc0 100644 --- a/cardinal/Dockerfile +++ b/cardinal/Dockerfile @@ -1,12 +1,26 @@ +# Base Builder Stage FROM golang:1.21 AS builder -WORKDIR /usr/src/app +RUN go install github.com/go-delve/delve/cmd/dlv@latest -copy . . +WORKDIR /usr/src/app +COPY . . RUN go build -v -o /usr/local/bin/app +RUN go build -gcflags="all=-N -l" -v -o /usr/local/bin/app-debug + +# Runtime Debug Stage +FROM ubuntu:22.04 AS runtime-debug + +COPY --from=builder /go/bin/dlv /usr/local/bin +COPY --from=builder /usr/local/bin/app-debug /usr/local/bin/ + +CMD ["dlv", "--listen=:40000", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/usr/local/bin/app-debug"] + + +# Runtime Stage +FROM ubuntu:22.04 AS runtime -FROM ubuntu:22.04 COPY --from=builder /usr/local/bin/app /usr/local/bin/ CMD ["app"] diff --git a/docker-compose.yml b/docker-compose.yml index 3004394..1efd94c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,9 @@ version: "3" services: cardinal: container_name: cardinal - build: ./cardinal + build: + context: ./cardinal + target: runtime depends_on: - redis expose: @@ -10,7 +12,34 @@ services: ports: - "3333:3333" environment: - - CARDINAL_PORT=${CARDINAL_PORT} + - CARDINAL_PORT=${CARDINAL_PORT:-3333} + - CARDINAL_NAMESPACE=${CARDINAL_NAMESPACE} + - CARDINAL_MODE=${CARDINAL_MODE} + - REDIS_ADDRESS=${REDIS_ADDRESS:-redis:6379} + - REDIS_PASSWORD=${REDIS_PASSWORD} + - REDIS_MODE=normal + restart: unless-stopped + + cardinal-debug: + container_name: cardinal-debug + build: + context: ./cardinal + target: runtime-debug + ## Additional capabilities flag for debugging + cap_add: + - SYS_PTRACE + security_opt: + - "seccomp:unconfined" + depends_on: + - redis + expose: + - "3333" + - "40000" + ports: + - "3333:3333" + - "40000:40000" + environment: + - CARDINAL_PORT=${CARDINAL_PORT:-3333} - CARDINAL_NAMESPACE=${CARDINAL_NAMESPACE} - CARDINAL_MODE=${CARDINAL_MODE} - REDIS_ADDRESS=${REDIS_ADDRESS:-redis:6379} @@ -21,13 +50,13 @@ services: evm: container_name: evm_base_shard environment: - # DA_AUTH_TOKEN is obtained from celestia client and passed in from world.toml. + # DA_AUTH_TOKEN is obtained from celestia client and passed in from world.toml. # See https://docs.celestia.org/developers/node-tutorial#auth-token - - DA_AUTH_TOKEN=${DA_AUTH_TOKEN:-} + - DA_AUTH_TOKEN=${DA_AUTH_TOKEN:-} - DA_BASE_URL=${DA_BASE_URL:-http://celestia-devnet:26658} - DA_NAMESPACE_ID=${DA_NAMESPACE_ID:-67480c4a88c4d12935d4} - CHAIN_ID=${CHAIN_ID:-world-engine} - # KEY_MNEMONIC is a test mnemonic and should not be used in production. + # KEY_MNEMONIC is a test mnemonic and should not be used in production. # This mnemonic can be overwritten by setting the KEY_MNEMONIC environment variable. - KEY_MNEMONIC=${KEY_MNEMONIC:-enact adjust liberty squirrel bulk ticket invest tissue antique window thank slam unknown fury script among bread social switch glide wool clog flag enroll} - FAUCET_ADDR=${FAUCET_ADDR:-world142fg37yzx04cslgeflezzh83wa4xlmjpms0sg5} @@ -54,10 +83,8 @@ services: depends_on: nakama-db: condition: service_healthy - cardinal: - condition: service_started environment: - - CARDINAL_ADDR=${CARDINAL_ADDR:-cardinal:4040} + - CARDINAL_ADDR=${CARDINAL_ADDR:-cardinal:3333} - CARDINAL_NAMESPACE=${CARDINAL_NAMESPACE} - DB_PASSWORD=${DB_PASSWORD:-very_unsafe_password_replace_me} entrypoint: @@ -112,6 +139,7 @@ services: retries: 5 volumes: - data:/var/lib/postgresql/data + # Recommended: Use cockroachdb instead of postgres for production. # container_name: nakama_db # image: cockroachdb/cockroach:latest-v23.1 @@ -143,7 +171,7 @@ services: ports: - "6379:6379" restart: always - + celestia-devnet: container_name: celestia_devnet image: ghcr.io/rollkit/local-celestia-devnet:v0.12.1