== Server Configuration

Dshackle server tries to load its configuration from `/etc/dshackle/dshackle.yaml`, if it can't find a file at that path
it tries to load file `dshackle.yaml` from current working directory.If none of them found server fails to run with an error.

.Example dshackle.yaml configuration:
[source,yaml]
----
version: v1
port: 2449
tls:
  enabled: true
  server:
    certificate: "server.crt"
    key: "server.p8.key"
  client:
    require: true
    ca: "ca.crt"
cluster:
  include: "upstreams.yaml"
----

It configures following:

- server is listening with gRCP API on `0.0.0.0:2449`
- TLS is enabled
- server certificate is located at `server.crt` with the key for it at `server.p8.key`
- the server requires a client authentication by TLS client certificate signed by `ca.crt` certificate
- no JSON RPC is configured
- upstreams configuration is configured in the file `upstreams.yaml`

.Configuration
|===
| Name | Example | Description

a| `version`
|
| Version of the format of the config

a| `port`
a| `port: 12449`
| Port to bind gRPC server. `2449` by default

a| `tls`
|
| TLS configuration for gRPC. See link:07-authentication.adoc[Authentication] for details

a| `proxy`
|
| Proxy configuration

a| `upstreams`
|
| Upstreams configuration
|===

=== Enabling JSON RPC proxy

.Example proxy:
[source,yaml]
----
version: v1
port: 2449

proxy:
  host: 0.0.0.0
  port: 8080
  routes:
    - id: eth
      blockchain: ethereum

cluster:
  include: "upstreams.yaml"
----

With that configuration Dshackle starts a JSON RPC proxy:

- JSON RPC server is listening on `0.0.0.0:8080`
- `http://0.0.0.0:8080/eth` provides access to Ethereum API routed to an available upstream

.Full configuration:
[source,yaml]
----
proxy:
  port: 8080
  tls:
    enabled: true
    server:
      certificate: server.crt
      key: server.p8.key
    client:
      require: true
      ca: ca.crt
  routes:
    - id: eth
      blockchain: ethereum
    - id: etc
      blockchain: ethereum_classic
----

.Proxy configuration
|===
| Name | Example | Description

a| `host`
a| `host: 0.0.0.0`
| Host to bind proxy server. `127.0.0.1` by default

a| `port`
a| `port: 8545`
| Port to bind proxy server. `8080` by default

a| `enabled`
a| `enabled: true`
| Enable/disable proxy server

a| `tls`
|
| TLS configuration for proxy. See link:07-authentication.adoc[Authentication] for details

a| `routes`
|
| List of endpoints to proxy
|===