# [NATS](https://nats.io): A high-performance cloud native messaging system. %%LOGO%% `nats` is a high performance server for the NATS Messaging System. # Backward Compatibility The routing protocol has been dramatically improved and adds support for accounts and multi-tenancy. The new protocol is not backward compatible with servers pre v2.0.0. # Example usage ```bash # Run a NATS server # Each server exposes multiple ports # 4222 is for clients. # 8222 is an HTTP management port for information reporting. # 6222 is a routing port for clustering. # # To actually publish the ports when running the container, use the Docker port mapping # flag "docker run -p :" to publish and map one or more ports, # or the -P flag to publish all exposed ports and map them to high-order ports. # # This should not be confused with the NATS Server own -p parameter. # For instance, to run the NATS Server and have it listen on port 4444, # you would have to run like this: # # docker run -p 4444:4444 %%IMAGE%% -p 4444 # # Or, if you want to publish the port 4444 as a different port, for example 5555: # # docker run -p 5555:4444 %%IMAGE%% -p 4444 # # Check "docker run" for more information. $ docker run -d --name nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 %%IMAGE%% [INF] Starting nats-server version 2.0.4 [INF] Git commit [c8ca58e] [INF] Starting http monitor on 0.0.0.0:8222 [INF] Listening for client connections on 0.0.0.0:4222 [INF] Server id is NCEZYE4WBASAAYIPSVWVLU52TXVEN52TDN3KKHWDV33PQ32A6TLBQ7EA [INF] Server is ready [INF] Listening for route connections on 0.0.0.0:6222 ... # To run a second server and cluster them together.. # Note that since you are passing arguments, this overrides the CMD section # of the Dockerfile, so you need to pass all arguments, including the # config file. $ docker run -d --name=nats-2 --link nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 %%IMAGE%% -c nats-server.conf --routes=nats-route://ruser:T0pS3cr3t@nats-main:6222 # If you want to verify the routes are connected, try this instead: $ docker run -d --name=nats-2 --link nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 %%IMAGE%% -c nats-server.conf --routes=nats-route://ruser:T0pS3cr3t@nats-main:6222 -DV [INF] Starting nats-server version 2.0.4 [DBG] Go build version go1.12.8 [INF] Git commit [c8ca58e] [INF] Starting http monitor on 0.0.0.0:8222 [INF] Listening for client connections on 0.0.0.0:4222 [INF] Server id is NCCJ57DJMZETVT3QIIUQR7MIU5FXCCX7QHTYRDKWNMNYIG43K3Y74J3X [INF] Server is ready [DBG] Get non local IPs for "0.0.0.0" [DBG] ip=172.17.0.3 [INF] Listening for route connections on 0.0.0.0:6222 [DBG] Trying to connect to route on nats-main:6222 [DBG] 172.17.0.2:6222 - rid:1 - Route connect msg sent [INF] 172.17.0.2:6222 - rid:1 - Route connection created [DBG] 172.17.0.2:6222 - rid:1 - Registering remote route "NAXUH5CIXFGNRGFWSTZ2DJDJH3Y3X3LDM7RKZCELOUPCKVELMSFWECKS" [DBG] 172.17.0.2:6222 - rid:1 - Sent local subscriptions to route ``` The server will load the configuration file below. Any command line flags can override these values. ## Default Configuration File ```bash # Client port of 4222 on all interfaces port: 4222 # HTTP monitoring port monitor_port: 8222 # This is for clustering multiple servers together. cluster { # Route connections to be received on any interface on port 6222 port: 6222 # Routes are protected, so need to use them with --routes flag # e.g. --routes=nats-route://ruser:T0pS3cr3t@otherdockerhost:6222 authorization { user: ruser password: T0pS3cr3t timeout: 0.75 } # Routes are actively solicited and connected to from this server. # This Docker image has none by default, but you can pass a # flag to the nats-server docker image to create one to an existing server. routes = [] } ``` ## Commandline Options ```bash Server Options: -a, --addr Bind to host address (default: 0.0.0.0) -p, --port Use port for clients (default: 4222) -P, --pid File to store PID -m, --http_port Use port for http monitoring -ms,--https_port Use port for https monitoring -c, --config Configuration file -sl,--signal [=] Send signal to nats-server process (stop, quit, reopen, reload) can be either a PID (e.g. 1) or the path to a PID file (e.g. /var/run/nats-server.pid) --client_advertise Client URL to advertise to other servers -t Test configuration and exit Logging Options: -l, --log File to redirect log output -T, --logtime Timestamp log entries (default: true) -s, --syslog Log to syslog or windows event log -r, --remote_syslog Syslog server addr (udp://localhost:514) -D, --debug Enable debugging output -V, --trace Trace the raw protocol -DV Debug and trace Authorization Options: --user User required for connections --pass Password required for connections --auth Authorization token required for connections TLS Options: --tls Enable TLS, do not verify clients (default: false) --tlscert Server certificate file --tlskey Private key for server certificate --tlsverify Enable TLS, verify client certificates --tlscacert Client certificate CA for verification Cluster Options: --routes Routes to solicit and connect --cluster Cluster URL for solicited routes --no_advertise Advertise known cluster IPs to clients --cluster_advertise Cluster URL to advertise to other servers --connect_retries For implicit routes, number of connect retries Common Options: -h, --help Show this message -v, --version Show version --help_tls TLS help ```