--- title: Configuration sidebar_position: 5 --- To configure LibreTime, you need to edit the `/etc/libretime/config.yml` file. This page describe the available options to configure your installation. Don't forget to restart the services after you made changes to the configuration file: ``` sudo systemctl restart libretime.target ``` :::tip When upgrading, if [`yq`](https://mikefarah.gitbook.io/yq/) is installed on your system, you can easily keep your configuration file schema in sync, without losing your configuration values: ```bash # Load your existing configuration values and merge them on top # of the default configuration file yq '. *= (load("/etc/libretime/config.yml") | ... comments="")' \ installer/config.yml > update-config.yml # Check what has been updated diff -y /etc/libretime/config.yml update-config.yml # Move the updated configuration file in place sudo cp update-config.yml /etc/libretime/config.yml ``` ::: ## General The `general` section configure anything related to the legacy and API services. ```yml general: # The public url. # > this field is REQUIRED public_url: "https://example.com" # The internal API authentication key. # > this field is REQUIRED api_key: "some_random_generated_secret!" # The Django API secret key. # > this field is REQUIRED secret_key: "some_random_generated_secret!" # List of origins allowed to access resources on the server, # the [general.public_url] origin is automatically included. # > default is [] allowed_cors_origins: [] # The server timezone, should be a lookup key in the IANA time zone database, # for example Europe/Berlin. # > default is UTC timezone: UTC # How many hours ahead Playout should cache scheduled media files. # > default is 1 cache_ahead_hours: 1 # Authentication adaptor to use for the legacy service, specify a class like # LibreTime_Auth_Adaptor_FreeIpa to replace the built-in adaptor. # > default is local auth: "local" ``` ## Storage The `storage` section configure the project storage. ```yml storage: # Path of the storage directory. Make sure to update the Nginx configuration after # updating the storage path. # > default is /srv/libretime path: "/srv/libretime" ``` :::caution After editing the `storage.path` field, make sure to update the LibreTime Nginx configuration file with the new value. In the example below, we are changing the path from `/srv/libretime` to `/mnt/data`: ```patch ... # Internal path for serving media files from the API. location /api/_media { internal; # This alias path must match the 'storage.path' configuration field. - alias /srv/libretime; + alias /mnt/data; } ``` ::: ## Database The `database` section configure the PostgreSQL connection. :::caution Before editing this section be sure to update the PostgreSQL server with the desired values. #### Changing a PostgreSQL user password You can change the `libretime` PostgreSQL user password using: ```bash sudo -u postgres psql -c "ALTER USER libretime PASSWORD 'new-password';" ``` ::: ```yml database: # The hostname of the PostgreSQL server. # > default is localhost host: "localhost" # The port of the PostgreSQL server. # > default is 5432 port: 5432 # The name of the PostgreSQL database. # > default is libretime name: "libretime" # The username of the PostgreSQL user. # > default is libretime user: "libretime" # The password of the PostgreSQL user. # > default is libretime password: "some_random_generated_secret!" ``` ## RabbitMQ The `rabbitmq` section configure the RabbitMQ connection. :::caution Before editing this section be sure to update the RabbitMQ server with the desired values. #### Changing a RabbitMq user password You can change the `libretime` RabbitMQ user password using: ```bash sudo rabbitmqctl change_password "libretime" "new-password" ``` ::: ```yml rabbitmq: # The hostname of the RabbitMQ server. # > default is localhost host: "localhost" # The port of the RabbitMQ server. # > default is 5672 port: 5672 # The virtual host of RabbitMQ server. # > default is /libretime vhost: "/libretime" # The username of the RabbitMQ user. # > default is libretime user: "libretime" # The password of the RabbitMQ user. # > default is libretime password: "some_random_generated_secret!" ``` ## Email The `email` section configure a SMTP server used to send emails. ```yml email: # Sender email address to use when sending emails. # > default is no-reply@libretime.org from_address: no-reply@libretime.org # The hostname of the SMTP server. # > default is localhost host: localhost # The port of the SMTP server. # > default is 25 port: 25 # Whether to use an insecure connection, an SSL/TLS (implicit) connection (generally # on port 465) or a STARTTLS (explicit) connection (generally on port 587) when # talking to the SMTP server. # > must be one of (ssl/tls, starttls) encryption: # The username to use for the SMTP server. # > default is "" user: "" # The password to use for the SMTP server. # > default is "" password: "" # Timeout in seconds for blocking operations like the connection attempt. timeout: # The path to a PEM-formatted certificate chain file to use for the connection. cert_file: # The path to a PEM-formatted private key file to use for the connection. key_file: ``` :::info Below are 2 common email configuration example: ```yml email: host: mail.gandi.net port: 587 encryption: starttls user: some_user password: some_password! ``` ```yml email: host: mail.gandi.net port: 465 encryption: ssl/tls user: some_user password: some_password! ``` ::: ## Playout The `playout` section configure anything related to the playout service. :::caution When changing the `playout.liquidsoap_*` entries, make sure to also configure the `liquidsoap.server_listen_*` entries accordingly. ::: ```yml playout: # Liquidsoap connection host. # > default is localhost liquidsoap_host: "localhost" # Liquidsoap connection port. # > default is 1234 liquidsoap_port: 1234 # The format for recordings. # > must be one of (ogg, mp3) # > default is ogg record_file_format: ogg # The bitrate for recordings. # > default is 256 record_bitrate: 256 # The samplerate for recordings. # > default is 44100 record_samplerate: 44100 # The number of channels for recordings. # > default is 2 record_channels: 2 # The sample size for recordings. # > default is 16 record_sample_size: 16 ``` ## Liquidsoap The `liquidsoap` section configure anything related to the liquidsoap service. :::caution When changing the `liquidsoap.server_listen_*` entries, make sure to also configure the `playout.liquidsoap_*` entries accordingly. ::: ```yml liquidsoap: # Liquidsoap server listen address. # > default is 127.0.0.1 server_listen_address: "127.0.0.1" # Liquidsoap server listen port. # > default is 1234 server_listen_port: 1234 # Input harbor listen address. # > default is ["0.0.0.0"] harbor_listen_address: ["0.0.0.0"] # Input harbor tls certificate path. harbor_ssl_certificate: # Input harbor tls certificate private key path. harbor_ssl_private_key: # Input harbor tls certificate password. harbor_ssl_password: ``` ## Stream The `stream` section configures anything related to the input and output streams. ```yml stream: inputs: # See the [stream.inputs] section. outputs: # See the [stream.outputs] section. ``` :::info To help you simplify your stream configuration, you can use yaml anchors to define a common properties and reuse them in your output definitions: ```yml stream: outputs: # This can be reused to define multiple outputs without duplicating data .default_icecast_output: &default_icecast_output source_password: "hackme" admin_password: "hackme" name: "LibreTime!" description: "LibreTime Radio!" website: "https://libretime.org" genre: "various" icecast: - <<: *default_icecast_output enabled: true mount: "main.ogg" audio: format: "ogg" bitrate: 256 - <<: *default_icecast_output enabled: true mount: "main.mp3" audio: format: "mp3" bitrate: 256 ``` ::: ### Inputs The `stream.inputs` section configures anything related to the input streams. ```yml stream: # Inputs sources. inputs: # Main harbor input. main: # Harbor input public url. If not defined, the value will be generated from # the [general.public_url] hostname, the input port and mount. public_url: # Mount point for the main harbor input. # > default is main mount: "main" # Listen port for the main harbor input. # > default is 8001 port: 8001 # Whether the input harbor is secured with the tls certificate. # > default is false secure: false # Show harbor input. show: # Harbor input public url. If not defined, the value will be generated from # the [general.public_url] hostname, the input port and mount. public_url: # Mount point for the show harbor input. # > default is show mount: "show" # Listen port for the show harbor input. # > default is 8002 port: 8002 # Whether the input harbor is secured with the tls certificate. # > default is false secure: false ``` ### Outputs The `stream.outputs` section configures anything related to the output streams. ```yml stream: # Output streams. outputs: icecast: # See the [stream.outputs.icecast] section. shoutcast: # See the [stream.outputs.shoutcast] section. system: # See the [stream.outputs.system] section. ``` #### Icecast The `stream.outputs.icecast` section configures the icecast output streams. :::warning If you configure more than 2 icecast stream on a **single icecast server**, make sure to raise the icecast sources limit: ```xml 2 ``` ::: ```yml stream: outputs: # Icecast output streams. # > max items is 3 icecast: - # Whether the output is enabled. # > default is false enabled: false # Output public url, If not defined, the value will be generated from # the [general.public_url] hostname, the output port and mount. public_url: # Icecast server host. # > default is localhost host: "localhost" # Icecast server port. # > default is 8000 port: 8000 # Icecast server mount point. # > this field is REQUIRED mount: "main" # Icecast source user. # > default is source source_user: "source" # Icecast source password. # > this field is REQUIRED source_password: "hackme" # Icecast admin user. # > default is admin admin_user: "admin" # Icecast admin password. If not defined, statistics won't be collected. admin_password: "hackme" # Icecast output audio. audio: # Icecast output audio format. # > must be one of (aac, mp3, ogg, opus) # > this field is REQUIRED format: "ogg" # Icecast output audio bitrate. # > must be one of (32, 48, 64, 96, 128, 160, 192, 224, 256, 320) # > this field is REQUIRED bitrate: 256 # format=ogg only field: Embed metadata (track title, artist, and show name) # in the output stream. Some bugged players will disconnect from the stream # after every songs when playing ogg streams that have metadata information # enabled. # > default is false enable_metadata: false # Icecast stream name. name: "LibreTime!" # Icecast stream description. description: "LibreTime Radio!" # Icecast stream website. website: "https://libretime.org" # Icecast stream genre. genre: "various" # Whether the stream should be used for mobile devices. # > default is false mobile: false ``` #### Shoutcast The `stream.outputs.shoutcast` section configures the shoutcast output streams. ```yml stream: outputs: # Shoutcast output streams. # > max items is 1 shoutcast: - # Whether the output is enabled. # > default is false enabled: false # Output public url. If not defined, the value will be generated from # the [general.public_url] hostname and the output port. public_url: # Shoutcast server host. # > default is localhost host: "localhost" # Shoutcast server port. # > default is 8000 port: 8000 # Shoutcast source user. # > default is source source_user: "source" # Shoutcast source password. # > this field is REQUIRED source_password: "hackme" # Shoutcast admin user. # > default is admin admin_user: "admin" # Shoutcast admin password. If not defined, statistics won't be collected. admin_password: "hackme" # Shoutcast output audio. audio: # Shoutcast output audio format. # > must be one of (aac, mp3) # > this field is REQUIRED format: "mp3" # Shoutcast output audio bitrate. # > must be one of (32, 48, 64, 96, 128, 160, 192, 224, 256, 320) # > this field is REQUIRED bitrate: 256 # Shoutcast stream name. name: "LibreTime!" # Shoutcast stream website. website: "https://libretime.org" # Shoutcast stream genre. genre: "various" # Whether the stream should be used for mobile devices. # > default is false mobile: false ``` #### System The `stream.outputs.system` section configures the system outputs. ```yml stream: outputs: # System outputs. # > max items is 1 system: - # Whether the output is enabled. # > default is false enabled: true # System output kind. # > must be one of (alsa, ao, oss, portaudio, pulseaudio) # > default is pulseaudio kind: "pulseaudio" # System output device. # > only available for kind=(alsa, pulseaudio) device: "alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink" ``` ## LDAP The `ldap` section provide additional configuration for the authentication mechanism defined in `general.auth`, please see the [custom authentication documentation](./custom-authentication.md) for more details. ```yml ldap: # Hostname of LDAP server. hostname: "ldap.example.org" # Complete DN of user used to bind to LDAP. binddn: "uid=libretime,cn=sysaccounts,cn=etc,dc=int,dc=example,dc=org" # Password for binddn user. password: "hackme" # Domain part of username. account_domain: "INT.EXAMPLE.ORG" # Base search DN. basedn: "cn=users,cn=accounts,dc=int,dc=example,dc=org" # Name of the uid field for searching. Usually uid, may be cn. filter_field: "uid" # Map user types to LDAP groups. Assign user types based on the group of a given user # Key format is groupmap_*. groupmap_superadmin: "cn=superadmin,cn=groups,cn=accounts,dc=int,dc=example,dc=org" groupmap_admin: "cn=admin,cn=groups,cn=accounts,dc=int,dc=example,dc=org" groupmap_program_manager: "cn=program_manager,cn=groups,cn=accounts,dc=int,dc=example,dc=org" groupmap_host: "cn=host,cn=groups,cn=accounts,dc=int,dc=example,dc=org" groupmap_guest: "cn=guest,cn=groups,cn=accounts,dc=int,dc=example,dc=org" ```