cfr #121 Co-authored-by: Christophe Siraut <d@tobald.eu.org> Co-authored-by: bkfox <thomas bkfox net> Co-authored-by: Thomas Kairos <thomas@bkfox.net> Reviewed-on: #131 Co-authored-by: Chris Tactic <ctactic@noreply.git.radiocampus.be> Co-committed-by: Chris Tactic <ctactic@noreply.git.radiocampus.be>
149 lines
5.7 KiB
Markdown
149 lines
5.7 KiB
Markdown

|
|
|
|
A platform to manage radio schedules, website content, and more. It uses the power of great tools like Django or Liquidsoap.
|
|
|
|
This project is distributed under GPL version 3. More information in the LICENSE file, except for some files whose license is indicated inside source code.
|
|
|
|
## Features
|
|
* **streams**: multiple random music streams when no program is played. We also can specify a time range and frequency for each;
|
|
* **diffusions**: generate diffusions time slot for programs that have schedule informations. Check for conflicts and rerun.
|
|
* **liquidsoap**: create a configuration to use liquidsoap as a stream generator. Also provides interface and control to it;
|
|
* **sounds**: each programs have a folder for its podcast. Aircox detects updates, can run quality check, import related playlist (timestamped or position in track list). Sounds can be defined as excerpts or as archives.
|
|
* **log**: keep a trace of every played/loaded sounds on the stream generator.
|
|
* **admin**: admin user interface.
|
|
* **cms**: content management system.
|
|
|
|
|
|
## Architecture and concepts
|
|
Aircox is divided in two main modules:
|
|
* `aircox`: basics of Aircox (programs, diffusions, sounds, etc. management); interface for managing a website with Aircox elements (playlists, timetable, players on the website);
|
|
* `aircox_streamer`: interact with application to generate audio stream (LiquidSoap);
|
|
|
|
## Development setup
|
|
Start installing a virtual environment :
|
|
|
|
```
|
|
virtualenv venv
|
|
source venv/bin/activate
|
|
pip install -r requirements.txt
|
|
pip install -r requirements_tests.txt
|
|
```
|
|
|
|
Then copy the default settings and initiate the database :
|
|
|
|
```
|
|
cp instance/settings/sample.py instance/settings/settings.py
|
|
python -c "from django.core.management.utils import get_random_secret_key; print('SECRET_KEY = \"%s\"' % get_random_secret_key())" >> instance/settings/settings.py
|
|
DJANGO_SETTINGS_MODULE=instance.settings.dev ./manage.py migrate
|
|
```
|
|
|
|
Finally test and run the instance using development settings, and point your browser to http://localhost:8000 :
|
|
|
|
```
|
|
DJANGO_SETTINGS_MODULE=instance.settings.dev pytest
|
|
DJANGO_SETTINGS_MODULE=instance.settings.dev ./manage.py runserver
|
|
```
|
|
|
|
Before requesting a merge, enable pre-commit :
|
|
|
|
```
|
|
pip install pre-commit
|
|
pre-commit install
|
|
```
|
|
|
|
## Installation
|
|
Running Aircox on production involves:
|
|
* Aircox modules and a running Django project;
|
|
* a supervisor for common tasks (sounds monitoring, stream control, etc.) -- `supervisord`;
|
|
* a wsgi and an HTTP server -- `gunicorn`, `nginx`;
|
|
* a database supported by Django (MySQL, SQLite, PostGresSQL);
|
|
|
|
### Scripts
|
|
Are included various configuration scripts that can be used to ease setup. They
|
|
assume that the project is present in `/srv/apps/aircox`:
|
|
|
|
* cron: daily cron configuration for the generation of the diffusions
|
|
* supervisorctl: audio stream generation, website, sounds monitoring
|
|
* nginx: sample config file (must be adapted)
|
|
|
|
The scripts are written with a combination of `cron`, `supervisord`, `nginx`
|
|
and `gunicorn` in mind.
|
|
|
|
|
|
### Dependencies
|
|
For python dependencies take a peek at the `requirements.txt` file, plus
|
|
dependencies specific to Django (e.g. for database: `mysqlclient` for MySql
|
|
database server).
|
|
|
|
External applications & modules:
|
|
* `liquidsoap`: `aircox` (generation of the audio streams)
|
|
* `sox`: `aircox` (check sounds quality and metadatas)
|
|
* `gunicorn`: WSGI server to be used in production (installed along as dependency)
|
|
* `supervisord`: supervisor
|
|
* note there might be external dependencies for python's Pillow too
|
|
* sqlite, mysql or any database library that you need to run a database, that is supported by Django (+ eventual python deps)
|
|
* gzip: archive logs
|
|
|
|
Development dependencies:
|
|
* `npm`, `webpack`: thoses are used for assets managements and development.
|
|
|
|
### Setup environment
|
|
All scripts and files assumes that:
|
|
- you have cloned aircox in `/srv/apps/` (such as `/srv/apps/aircox/README.md`)
|
|
- you have a supervisor running (we have scripts for `supervisord`)
|
|
- you use `gunicorn` as WSGI server (otherwise, you'll need to remove it from the requirement list)
|
|
|
|
This installation process uses a virtualenv, including all provided scripts.
|
|
|
|
```
|
|
# setup virtual env and activate
|
|
virtualenv venv
|
|
source venv/bin/activate
|
|
# install requirements
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### Configuration
|
|
You must write a settings.py file in the `instance/settings` directory (you can just
|
|
copy and paste `instance/settings/sample.py`. There still is configuration
|
|
required in this file, check it in for more info.
|
|
|
|
|
|
### Installation and first run
|
|
Create the database if needed, and generate the tables:
|
|
|
|
```bash
|
|
# apply dependencies' migrations
|
|
./manage.py makemigrations
|
|
# create the database
|
|
./manage.py migrate --fake-initial
|
|
# create a super-user (needed in order to access the administration)
|
|
./manage.py createsuperuser
|
|
```
|
|
|
|
You must then configure the programs, schedules and audio streams. Start the
|
|
server from this directory:
|
|
|
|
```bash
|
|
./manage.py runserver
|
|
```
|
|
|
|
You can access to the django admin interface at `http://127.0.0.1:8000/admin`.
|
|
|
|
From the admin interface:
|
|
* create a Station
|
|
* create all the Programs and complete their Schedules
|
|
* defines Outputs for the streamer (look at Liquidsoap documentation for
|
|
more information on how to configure it)
|
|
|
|
Once the configuration is okay, you must start the *controllers monitor*,
|
|
that creates configuration file for the audio streams using the new information
|
|
and that runs the appropriate application (note that you dont need to restart it
|
|
after adding a program that is based on schedules).
|
|
|
|
If you use supervisord and our script with it, you can use the services defined
|
|
in it instead of running commands manually.
|
|
|
|
## More informations
|
|
There are extra informations in `aircox/README.md` and `aircox_streamer/README.md`.
|