588 lines
16 KiB
Markdown
588 lines
16 KiB
Markdown
---
|
|
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
|
|
<icecast>
|
|
<limits>
|
|
<sources>2</sources>
|
|
</limits>
|
|
</icecast>
|
|
```
|
|
|
|
:::
|
|
|
|
```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"
|
|
```
|