##################### Grafana Configuration Example #####################
#
# Everything has defaults so you only need to uncomment things you want to
# change

#################################### Server ####################################
[server]
# Protocol (http or https)
protocol = http

# The ip address to bind to, empty will bind to all interfaces
;http_addr =

# The http port to use
http_port = 3000

# The public facing domain name used to access grafana from a browser
domain = mon2.skia.org

# The full public facing url
root_url = https://mon2.skia.org/

#################################### Database ####################################
[database]
# Either "mysql", "postgres" or "sqlite3", it's your choice
type = sqlite3
path = grafana.db

#################################### Security ####################################
[security]
# default admin user, created on startup
admin_user = admin

# default admin password, can be changed before first start of grafana, or in profile settings
# We can set to a well known value since the service runs behind Identity-Aware Proxy and
# all allowed users are trusted.
admin_password = admin

#################################### Users ####################################
[users]
# Enable user signup / registration
allow_sign_up = true

# Allow non admin users to create organizations
allow_org_create = false

# Set to true to automatically assign new users to the default organization (id 1)
auto_assign_org = true

# Default role new users will be automatically assigned (if disabled above is set to true)
auto_assign_org_role = Editor

