Configuration overview
Centrifugo expects JSON, TOML or YAML formats as format of configuration file. Thanks to brilliant Go library for application configuration - viper.
But first let's inspect all available command-line options:
centrifugo -h
You should see something like this as output:
Centrifugo. Real-time messaging (Websockets or SockJS) server in Go.
Usage:
[flags]
[command]
Available Commands:
version Centrifugo version number
checkconfig Check configuration file
genconfig Generate simple configuration file to start with
help Help about any command
Flags:
-a, --address string address to listen on
--admin enable admin socket
--admin_port string port to bind admin endpoints to (optional)
--api_port string port to bind api endpoints to (optional)
-c, --config string path to config file (default "config.json")
-d, --debug enable debug mode
-e, --engine string engine to use: memory or redis (default "memory")
--insecure start in insecure client mode
--insecure_admin use insecure admin mode – no auth required for admin socket
--insecure_api use insecure API mode
--log_file string optional log file - if not specified logs go to STDOUT
--log_level string set the log level: trace, debug, info, error, critical, fatal or none (default "info")
-n, --name string unique node name
--pid_file string optional path to create PID file
-p, --port string port to bind HTTP server to (default "8000")
--redis_api enable Redis API listener (Redis engine)
--redis_api_num_shards int Number of shards for redis API queue (Redis engine)
--redis_db string redis database (Redis engine) (default "0")
--redis_host string redis host (Redis engine) (default "127.0.0.1")
--redis_master_name string Name of Redis master Sentinel monitors (Redis engine)
--redis_password string redis auth password (Redis engine)
--redis_pool int Redis pool size (Redis engine) (default 256)
--redis_port string redis port (Redis engine) (default "6379")
--redis_sentinels string Comma separated list of Sentinels (Redis engine)
--redis_url string redis connection URL in format redis://:password@hostname:port/db (Redis engine)
--ssl accept SSL connections. This requires an X509 certificate and a key file
--ssl_cert string path to an X509 certificate file
--ssl_key string path to an X509 certificate key
-w, --web serve admin web interface application (warning: automatically enables admin socket)
--web_path string optional path to custom web interface application
Global Flags:
-h, --help help for
Use " help [command]" for more information about a command.
version
To show version and exit run:
centrifugo version
configuration JSON file example
But the subject of this section - configuration file. As was mentioned earlier it must be a file with valid JSON.
Let's look at configuration file example I personally use while developing Centrifugo:
{
"secret": "secret",
"namespaces": [
{
"name": "public",
"publish": true,
"watch": true,
"presence": true,
"join_leave": true,
"history_size": 10,
"history_lifetime": 30
}
],
"log_level": "debug"
}
Only secret options is required.
You will know about other options such as namespaces
in next sections.
So the minimal configuration file required is:
{
"secret": "secret"
}
But use strong secret in production!
TOML
Centrifugo also supports TOML format for configuration file:
centrifugo --config=config.toml
Where config.toml
contains:
log_level = "debug"
secret = "secret"
[[namespaces]]
name = "public"
publish = true
watch = true
presence = true
join_leave = true
history_size = 10
history_lifetime = 30
I.e. the same configuration as JSON file above.
YAML
And YAML config also supported. config.yaml
:
log_level: debug
secret: secret
namespaces:
- name: public
publish: true
watch: true
presence: true
join_leave: true
history_size: 10
history_lifetime: 30
With YAML remember to use spaces, not tabs when writing configuration file
multiple projects
Since Centrifugo 1.0.0 multiple projects not supported.
checkconfig
Centrifugo has special command to check configuration file checkconfig
:
centrifugo checkconfig --config=config.json
If any errors found during validation – program will exit with error message and exit status 1.
genconfig
Another command is genconfig
:
centrifugo genconfig -c config.json
It will generate the simplest configuration file for you automatically.
important command-line options
In next section we will talk about project settings in detail. But before jumping to it let's describe some of the most important options you can configure when running Centrifugo:
--address
– bind your Centrifugo to specific interface address (by default""
)--port
– port to bind Centrifugo to (by default8000
)--engine
– engine to use -memory
orredis
(by defaultmemory
). Read more about engines in next sections.--web
– path to directory of admin web interface application to serve--name
– give Centrifugo server node a name – this os optional as by default Centrifugo will use hostname and port number to construct node name.
There are more command line options – we will talk about some of them later. Note that all command-line options can be set via configuration file, but command-line options will be more valuable when set than configuration file's options. See description of viper – to see more details about configuration options priority.