libretime/docs/host-configuration.md

10 KiB

layout title blurb
docs Host configuration After installation, follow these instructions to set up your LibreTime server or VM

Quick Links:

The streaming host configuration for LibreTime is shown in the file /etc/airtime/liquidsoap.cfg which is automatically generated by the Streams page, found on the System menu of the LibreTime administration interface. For this reason, you would not normally edit the streaming configuration manually, as any changes are likely to be overwritten by the administration interface.

Database and RabbitMQ hosts

Optionally, you may wish to edit the file /etc/airtime/airtime.conf to set the PostgreSQL database host, and the username and password to connect to the database with:

sudo nano /etc/airtime/airtime.conf

You can also set options for RabbitMQ messaging, the LibreTime server and SoundCloud uploads in this file, although you should not normally need to adjust the defaults unless you are running a large LibreTime system distributed across multiple servers. To run the LibreTime server in demo mode, which changes the greeting on the login page and prevents user accounts from being created or modified, set the value of demo to 1.

[database]
host = localhost
dbname = airtime
dbuser = airtime
dbpass = airtime

[rabbitmq]
host = 127.0.0.1
port = 5672
user = airtime
password = XXXXXXXXXXXXXXXXXXXX
vhost = /airtime

[general]
api_key = XXXXXXXXXXXXXXXXXXXXX
web_server_user = www-data
airtime_dir = /usr/share/airtime
base_url = libretime.example.com
base_port = 80
base_dir = /
cache_ahead_hours = 1

[monit]
monit_user = guest
monit_password = airtime

[soundcloud]
connection_retries = 3
time_between_retries = 60

[demo]
demo = 0

Save and close the file with Ctrl+O and Ctrl+X. In order to update the configuration used by the various components of LibreTime, run the following commands

sudo systemctl restart libretime-liquidsoap
sudo systemctl restart libretime-playout
sudo systemctl restart libretime-celery
sudo systemctl restart libretime-analyzer

Changing the default PostgreSQL passwords

Two of the most important passwords that should be changed immediately after installation are the passwords used by the PostgreSQL database. It is strongly recommended that you do this before exposing your server to the internet beyond your internal network.

  1. Login to PostgreSQL with sudo -u postgres psql. The PostgreSQL shell - postgres=# - means that you have logged in successfully.
  2. Change the admin password with ALTER USER postgres PASSWORD 'myPassword';, where myPassword is the new password. Make sure to include the semicolon at the end! A response of ALTER ROLE means that the command ran successfully.
  3. Change the password for the airtime user with ALTER USER airtime WITH PASSWORD 'new_password'; A response of ALTER ROLE means that the command ran successfully.
  4. If all is successful, logout of PostgreSQL with \q, go back to /etc/airtime/airtime.conf to edit the password in the config file, and restart all services mentioned in the previous section.

API client configuration

The LibreTime API enables many types of information about the broadcast schedule and configuration to be retrieved from the LibreTime server. Other than the live-info and week-info data fetched by website widgets (see the chapter Exporting the schedule), all API requests must be authenticated using the secret API key stored in the file /etc/airtime/api_client.cfg on the LibreTime server. This key is autogenerated during LibreTime installation and should be unique for each server.

If you intend to use the LibreTime API across a public network, for security reasons it is highly recommended that all API requests are sent over encrypted https: and that the web server is configured to accept requests to the api/ directory from specific host names or IP addresses only.

The format of API requests is:

https://libretime.example.com/api/api-action/format/json/api_key/XXXXXX

where api-action is the type of request and XXXXXX is the secret API key. Available actions include:

  • on-air-light - return true if the station is on air
  • status - get the status of LibreTime components and resource usage
  • version - returns the version of LibreTime installed
  • get-files-without-silan-value - list files for which silence detection has not yet been performed
  • get-stream-setting - gets the settings of LibreTime output streams
  • get-stream-parameters - gets the parameters of LibreTime output streams

For example, using the action get-stream-setting returns the following output for the first configured stream:

{"keyname":"s1_type","value":"ogg","type":"string"},

{"keyname":"s1_host","value":"streaming.example.com","type":"string"},

{"keyname":"s1_port","value":"8000","type":"integer"},

{"keyname":"s1_mount","value":"airtime_128","type":"string"},

{"keyname":"s1_url","value":"http:\/\/airtime.sourcefabric.org","type":"string"},

{"keyname":"s1_description","value":"Airtime Radio! Stream
#1","type":"string"},

{"keyname":"s1_genre","value":"Screamo","type":"string"},

which is enough information to construct a player widget dynamically. (s1_url is the station's homepage, not the stream URL). The same information is provided with an s2_ prefix for the second stream, and s3_ prefix for the third stream.

Some API requests require the directory ID number to be specified as dir_id including:

  • list-all-files - list files in the specified directory
  • get-files-without-replay-gain - list files in the specified directory for which ReplayGain has not been calculated yet

For example, using a request such as:

 http://libretime.example.com/api/list-all-files/format/json/api_key/XXXXXX/dir_id/1/

returns the full path to each media file in the LibreTime storage directory:

    {"files":[
    "imported\/1\/Mark Ronson feat. Saigon\/Here Comes the Fuzz\/7-Diduntdidunt-unknown.flac",
    "imported\/1\/Jimi Tenor & Tony Allen\/Inspiration Information\/3-Selfish Gene-128kbps.mp3",
    "]}

If you have changed the base_url, base_port or base_dir setting in /etc/airtime/airtime.conf from the defaults, you will probably also have to update the Hostname settings in the file /etc/airtime/api_client.cfg accordingly.**

bin_dir = /usr/lib/airtime/api_clients
api_key = 'XXXXXXXXXXXXXXXXXXXX'
api_base = api
host = libretime.example.com
base_port = 80
base_dir = /

Apache max file size configuration

By default, the maximum upload file size is 500 MB, which may not be large enough for some stations, especially if they are uploading prerecorded shows. The setting for this is located in /etc/apache2/sites-available/airtime.config. Search for and update the following in megabytes:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

For quick reference, 1024 MB = 1 GB and 2048 MB = 2 GB, but most will be okay with rounding to the nearest thousand. After updating the config file, restart Apache by sudo systemctl apache restart.

Playout and recorder settings

Settings for pypo, the playout and recording engine used by LibreTime, are found in the file /etc/airtime/airtime.conf. After making changes to this file, you will have to issue the command:

sudo systemctl restart libretime-playout

for the changes to take effect.

############################################
# pypo - configuration                     #
############################################
# Set the type of client you are using.
# Currently supported types:
# 1) "obp" = Open Broadcast Platform
# 2) "airtime"
#
api_client = airtime

############################################
# Cache Directories                        #
# *include* trailing slash !!              #
############################################
cache_dir = /var/tmp/airtime/pypo/cache/
file_dir = /var/tmp/airtime/pypo/files/
tmp_dir = /var/tmp/airtime/pypo/tmp/

############################################
# Setup Directories                        #
# Do *not* include trailing slash !!       #
############################################
cache_base_dir = /var/tmp/airtime/pypo
bin_dir = /usr/lib/airtime/pypo
log_base_dir = /var/log/airtime
pypo_log_dir = /var/log/airtime/pypo
liquidsoap_log_dir = /var/log/airtime/pypo-liquidsoap

############################################
# Liquidsoap settings                      #
############################################
ls_host = 127.0.0.1
ls_port = 1234

############################################
# RabbitMQ settings                        #
############################################
rabbitmq_host = localhost
rabbitmq_user = airtime
rabbitmq_password = XXXXXXXXXXXXXXXXXXXX
rabbitmq_vhost = /airtime

############################################
# pypo preferences                         #
############################################
# Poll interval in seconds.
#
# This will rarely need to be changed because any schedule changes are
# automatically sent to pypo immediately.
#
# This is how often the poll script downloads new schedules and files from the
# server in the event that no changes are made to the schedule.
#
poll_interval = 3600# in seconds.

# Push interval in seconds.
#
# This is how often the push script checks whether it has something new to
# push to liquidsoap.
#
# It's hard to imagine a situation where this should be more than 1 second.
#
push_interval = 1# in seconds

# 'pre' or 'otf'. 'pre' cues while playlist preparation
# while 'otf' (on the fly) cues while loading into ls
# (needs the post_processor patch)
cue_style = pre