Configuring the server - Skullabs/kikaha GitHub Wiki
You can start using Kikaha without defining any configuration, since sensible default values are provided. Later on you might need to amend the settings to change the default behavior or adapt for specific runtime environments. Typical examples of settings that you might amend:
- Change listening port and address
- Defining authentication rules
- Configuring rewrite routes
- Configuring reverse proxy routes
Kikaha's configuration system was quite inspired on the Typesafe Config library. In fact, it served as the main configuration abstraction for Kikaha since its first version. Despite is was a very reliable and well tested library it also had a very verbose internal API, which made the code that relied on it hard to maintain. The new configuration abstraction is YML-based, but kept the best features from Config library, merging configuration files between modules.
Where configuration is read from?
Every Kikaha module has a META-INF/defaults.yml
file. These files should contain all required configuration a module should had. During the server bootstrap all defaults.yml
files found at the classpath are read and merged with all conf/application.conf
files. This allow developers to write their custom conf/application.yml
and place it on your project to change the server's default parameters.
If you are testing your source code, and need special configuration parameters in order to setup your test environment, you can create a file called conf/application-test.yml
. Any parameter set there will override those set at your conf/application.yml
.
Creating a configuration file for your project
Any file placed at the resources
folder will be available at the classpath of your application. You can create the conf/application.yml
at that folder and overwrite any server parameter you need to get your application up and running.
Once it is a simple YML file, you can also put any extra parameter you want on it. The bellow sample code shows you how to consume a configuration entry from your conf/application.yml
file.
package sample;
import javax.inject.*;
import kikaha.config.Config;
@Singleton
class ASingletonServiceThatCanReadTheConfiguration {
@Inject
Config config;
public String getIntegrationUsername(){
return config.getString( "my-conf.integration.username" );
}
}
Default configuration parameters
The bellow configuration file describes all the parameters Kikaha brings out-of-box. You can override it for any propose you need by creating your our conf/application.yml
file and defining some configuration entries.
# Default server configuration
server:
# Websocket configuration
websocket:
# The default Content serializer for websocket responses
default-serializer: "text/plain"
# The default Content unserializer for websocket requests
default-unserializer: "text/plain"
# Defines the max number of threads to handle incomming websocket requests
# If set to a number lower than 1, it will create a dynamic thread pool
# to handler requests.
worker-threads: -1
# HTTP listener configurations
http:
host: '0.0.0.0'
port: 9000
enabled: true
# HTTPS listener configurations
https:
host: '0.0.0.0'
port: 9001
keystore: "server.keystore"
truststore: "server.truststore"
cert-security-provider: "TLS"
keystore-security-provider: "JKS"
password: "password"
enabled: false
redirect-to-http: true
# Undertow internals
undertow:
io-threads: -1
worker-threads: -1
buffer-size: 1024
server-options:
ENABLE_STATISTICS: false
RECORD_REQUEST_START_TIME: false
socket-options:
BACKLOG: 20000
# Static asset routing
static:
enabled: false
# Smart routes
smart-routes:
# Rewrite routes (empty by default)
rewrite:
# Reverse proxy routes (empty by default)
reverse:
# Request filtering (empty by default)
filter:
# CORS support
cors:
enabled: false
always-allow-origin: false
always-allow-credentials: false
allowed-methods:
allowed-hosts:
# Authentication/Authorization
auth:
# Configuration for fixed-user-and-pass Identity Manager
fixed-auth:
username: "admin"
password: "admin"
role: "admin"
# Configuration for Form-based AuthMechanism
form-auth:
login-page: "/auth/"
error-page: "/auth/error/"
permission-denied-page: ""
security-context-factory: kikaha.core.modules.security.DefaultSecurityContextFactory
# Available IdentityManagers
identity-managers:
default: kikaha.core.modules.security.FixedUserAndPasswordIdentityManager
fixed: kikaha.core.modules.security.FixedUserAndPasswordIdentityManager
# Available AuthMechanisms
auth-mechanisms:
basic: kikaha.core.modules.security.BasicAuthenticationMechanism
form: kikaha.core.modules.security.FormAuthenticationMechanism
# Auth rules (empty by default)
rules:
# Configuration for Mustache templates
mustache:
cache-templates: false
# Configurations for micro-Routing API
urouting:
default-encoding: "UTF-8"
default-content-type: "text/plain"
exception-handler: kikaha.urouting.UnhandledExceptionHandler