# Deploy ## Run with Docker Compose Running the Serai infrastructure is easy with Docker. We utilize compose profiles to easily orchestrate various pieces of the infrastructure. **Example:** `docker compose --profile cluster-coins-sm up` All commands are assumed to be ran from `/deploy`, not the root folder. ### Profiles: * `bitcoin` - Bitcoin node * `monero` - Monero node * `ethereum` - Ethereum node * `coins` - Nodes for all external networks (BTC, ETH, XMR) * `message-queue` - The message queue service. * `processor` - Serai processor for one external network. * `coordinator` - Serai coordinator for the entire Serai stack. * `serai` - Serai node * `cluster-sm` - "Alice", "Bob", "Charlie", and "Dave" Serai nodes, all as validators (enough to achieve BFT with one faulty node) * `cluster-lg` - `cluster-sm` with non-validators "Eve" and "Ferdie" You can supply one or more profiles to the docker compose command to orchestrate the desired components. **Example:** `docker compose --profile coins --profile serai up` ## Orchestration Approach ### Builds The Serai infrastructure is locally compiled. This may take several minutes. Images for external networks download binaries, before verifying their checksums and signatures. **Stage 1 -- Builder** * Configure environment. * Get the binary. * Verify binary using GPG. * Decompress binary to prepare image. **Stage 2 -- Image** * Copy needed files from builder. * Move executables to bin folder. * Copy scripts folder. * Expose necessary ports. * Map necessary volumes. ### Entrypoint The Serai node and external networks' nodes are each started from an entrypoint script inside the `/scripts `folder. To update the scripts on the image you must rebuild the updated images using the `--build` flag after `up` in `docker compose`. **Example:** `docker compose --profile bitcoin up --build`