Run an Appchain Node on GCP

Deploy and manage a Syndicate Appchain node on Google Cloud Platform

This integration is under active development. To help improve this guide or for technical support running your own Appchain Node, join our Discord. To report a bug, you can create a new issue in https://github.com/SyndicateProtocol/syndicate-appchains/issues.

Developer Requirements

This guide assumes that the reader is

  • familiar with containerization and Docker
  • comfortable using ssh to execute commands on a remote machine
  • proficient in running and maintaining infrastructure using a cloud provider such as GCP

Before getting started, ensure you have a Google Cloud Platform project with billing enabled.

This product uses the default compute service account in your GCP project. Ensure that service account has the Secret Manager Secret Accessor role before continuing.

Background

This guide allows you to easily deploy and manage a Syndicate Appchain Node on Google Cloud Platform (GCP).

Syndicate Appchain Nodes perform state derivation and block production for an existing Syndicate Appchain — allowing you to query blockchain data and submit transactions directly from your own infrastructure.

Your node will run components of the open source Syndicate Stack as well as the Arbitrum Nitro Stack.

Configure

Create a GCP Secret containing your full Syndicate Appchain node configuration. Use the template provided below and fill in all of the missing fields. Many of these values can be provided by Syndicate.

# Configure your Syndicate Appchain node here.
# Reach out to Syndicate for help generating the correct configuration for your specific appchain.

# --- Global Configuration ---
RUST_LOG=info
APPCHAIN_CHAIN_ID=

# --- Translator Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-translator/bin/synd-translator/src/config.rs
CONFIG_MANAGER_ADDRESS=

# --- Mchain Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-mchain/src/config.rs
SNAPSHOT_URL=

# --- Maestro Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-maestro/src/config.rs
CHAIN_RPC_URLS=

# --- Batch Sequencer Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-batch-sequencer/src/config.rs
SEQUENCING_RPC_URLS=
SEQUENCING_ADDRESS=
BATCHER_PRIVATE_KEY=

# --- Settlement Ingestor Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-chain-ingestor/src/config.rs
SETTLEMENT_INGESTOR_START_BLOCK=
SETTLEMENT_INGESTOR_WS_URLS=

# --- Sequencing Ingestor Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-chain-ingestor/src/config.rs
SEQUENCING_INGESTOR_START_BLOCK=
SEQUENCING_INGESTOR_WS_URLS=

# --- Proposer Configuration ---
# The full list of available configurations can be found here:
# https://github.com/SyndicateProtocol/syndicate-appchains/blob/main/synd-withdrawals/synd-proposer/pkg/config/config.go
SETTLEMENT_CHAIN_ID=
ENCLAVE_RPC_URL=
EIGEN_RPC_URL=
ETHEREUM_RPC_URL=
SETTLEMENT_RPC_URL=
SEQUENCING_RPC_URL=
TEE_MODULE_CONTRACT_ADDRESS=
APPCHAIN_BRIDGE_ADDRESS=
SEQUENCING_BRIDGE_ADDRESS=
SEQUENCING_CONTRACT_ADDRESS=
PRIVATE_KEY=

# --- Nitro Configuration ---
# Refer to the Arbitrum Nitro documentation for all available configuration options:
# https://docs.arbitrum.io/run-arbitrum-node/run-full-node
# Note: Syndicate Appchain nodes have not been tested with all possible Nitro configurations. If you add overrides here that are not
# recommended or provided by Syndicate, you may experience unexpected behavior with your node.
NITRO_LOG__LEVEL=INFO
NITRO_CHAIN_ID=
NITRO_CHAIN_NAME=
NITRO_CHAIN_INFO__JSON='[{...}]'

That secret will be pulled into the VM securely at runtime to configure your node.

Deploy

To deploy a Syndicate Appchain node on the Google Cloud Platform, perform the following steps.

  1. Access the "Syndicate Appchain Node" product in the Google Cloud Web3 Portal or Marketplace and click the Launch button.

  2. Select the Terraform deployment tab and provide a name for this VM and configure the service account.

  3. In the VM Instance Configuration section, enter or select appropriate values:

    • Zone: Select a zone close to your users (e.g., us-central1-a)
    • Machine type: n2-standard-8 (8 vCPUs, 32 GB RAM) minimum recommended for production. Refer to the Nitro documentation for system requirements based on your specific node config.
    • Disks:
      • Syndicate Data Disk: 100GB minimum recommended for production
      • Nitro Data Disk: 200GB minimum recommended for production. Refer to the Nitro documentation for system requirements based on your specific node config.
    • Networking: Optionally expose this RPC to the internet with an ephemeral external IP address. Can be used for quick development and testing. Leave unchecked to manage your networking/firewall configuration separately (recommended for production environments).
    • Node Configuration: Enter the name of the GCP Secret you created in the 'Configure' section above. It must exist in the same GCP Project as this Syndicate Appchain Node instance.
  4. Click the Deploy button and wait for the console to confirm the resources are running.

Wait for Sync

Wait for the node to sync to the latest block. This could take minutes or hours depending on how far behind the node is. Look in the GCP Logs Explorer for container logs relating to sync status / block number.

Also look for any crashlooping containers in the Logs explorer. You can also SSH to the VM and run standard docker commands to inspect the health of these containers.

Once the node is synced, it is ready for use!

Access Your Node

If you enabled public access above, then your VM exposes the following Syndicate Appchain RPC endpoints externally:

  • HTTP: http://[EXTERNAL_IP]:8545
  • WebSocket: ws://[EXTERNAL_IP]:8548

Depending on your existing VPC configuration, you may need to create a firewall rule to allow internet traffic to this node. Consider adding a firewall rule like this:

   gcloud compute firewall-rules create allow-tcp-8545 \
      --network=default \
      --direction=INGRESS \
      --action=ALLOW \
      --rules=tcp:8545 \
      --source-ranges=0.0.0.0/0

Test that the node is accessible from the internet:

   curl -X POST http://[EXTERNAL_IP]:8545 \
   -H "Content-Type: application/json" \
   -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

If you did not enable public access above, then your node is only accessible from within the VPC:

  • HTTP: http://[INTERNAL_IP]:8545
  • WebSocket: ws://[INTERNAL_IP]:8548

DNS and Load Balancing (Optional)

For production deployments, consider placing your Appchain node(s) behind a load balancer with a custom domain (e.g., rpc.yourdomain.com).

GCP Load Balancer Setup

Create an Application Load Balancer under Network Services > Load Balancing:

WebSocket traffic uses port 8548. To support WebSocket connections, configure a separate ALB for this port.

Note the load balancer's external IP address after creation.

DNS Configuration

Add an A record pointing to the load balancer's IP address for your desired subdomain (e.g., rpc.yourdomain.com). Refer to your DNS provider's documentation.

Test

Your Syndicate Appchain node(s) should now be accessible from your custom domain URL. Try sending the same eth_blockNumber from earlier to test it.

Managing Your Node

All of the node components run as Docker containers in the VM. They are configured in the /opt/rpc-node/docker-compose.yml and /opt/rpc-node/.env files.

Once the node is running and healthy, there should not be any regular management or maintenance needed. But if you need to reconfigure, restart, or troubleshoot any of these services, you can do so using Docker commands within the VM.

# View running containers
sudo docker ps

# Force restart a container
sudo docker compose up -d --force-recreate <container_name>

Observability

Basic observability is integrated into these Syndicate Appchain Nodes out-of-the-box. Just open the Observability tab in the Compute Engine menu in the GCP console to see metrics and logs for this node.

You can use that data to create dashboards and alerting policies such as logs-based alerting to monitor this node's health.


Additional Support

If you encounter problems running your Syndicate Appchain node that aren't mentioned in this guide, reach out to our Discord for additional support.