Skip to content
Snippets Groups Projects
README.md 6.85 KiB
Newer Older
Eliot Berriot's avatar
Eliot Berriot committed
Funkwhale ansible role
======================
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
An ansible role to install and update [Funkwhale](https://funkwhale.audio).
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
Summary
-------

Using this role, you can install and upgrade a Funkwhale pod, closely matching our [standard installation guide](https://docs.funkwhale.audio/installation/debian.html). The role will take care of:

- Installing and configure dependencies and packages
- Install and configure PostgreSQL, Redis and Nginx (optional)
- Install and configure Funkwhale and it's dependencies
- Install and configure a SSL certificate with Let's Encrypt (optional)

Installation and usage
----------------------
Install ansible:

```
pip install --user ansible
```

Create a directory for ansible files:

    mkdir ~/ansible-funkwhale
    cd ansible-funkwhale

Create a playbook requirements and inventory file:

    touch requirements.yml
    touch playbook.yml
    touch inventory.ini
Eliot Berriot's avatar
Eliot Berriot committed
    ansible.cfg

Add the following to `requirements.yml`:

```
- src: git+https://dev.funkwhale.audio/funkwhale/ansible
  name: funkwhale
  version: master
```

Install the role:

```
ansible-galaxy install -r requirements.yml
```

Eliot Berriot's avatar
Eliot Berriot committed
Add the following to `ansible.cfg`:

```
[defaults]
# Needed to use become with unprevileged users,
# see https://docs.ansible.com/ansible/latest/user_guide/become.html#becoming-an-unprivileged-user
allow_world_readable_tmpfiles=true
```

Add the following to `playbook.yml`:
Eliot Berriot's avatar
Eliot Berriot committed

```yaml
- hosts: funkwhale-servers
Eliot Berriot's avatar
Eliot Berriot committed
  roles:
    - role: funkwhale
      funkwhale_hostname: yourdomain.funkwhale
      funkwhale_version: 0.18.3
      funkwhale_letsencrypt_email: contact@youremail.com
```
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
See below for a full documentation on available variables.
Eliot Berriot's avatar
Eliot Berriot committed

Add your server to `inventory.ini`:

```ini
[funkwhale-servers]
your-server-ip-or-domain
```

Launch the installation (in check mode, so nothing is applied):

```
ansible-playbook --ask-become-pass -i inventory.ini playbook.yml --check --diff
```
*On some hosts, you may need to install the `python-apt` package for check mode to work*.

This command will show you the changes that would be applied to your system. If you are confortable with them,
rerun the same command without the `--check` flag.


Eliot Berriot's avatar
Eliot Berriot committed
Role Variables
--------------

Eliot Berriot's avatar
Eliot Berriot committed
**Required variables**

| name                          | Example                       | Description                                   |
| ----------------------------- | ----------------------------- | --------------------------------------------- |
| `funkwhale_hostname`          | `yourdomain.funkwhale`        | The domain name of your Funkwhale pod         |
| `funkwhale_version`           | `0.18.3`                      | The version to install/upgrade to. You can also use `develop` to run the development branch         |
| `funkwhale_letsencrypt_email` | `contact@youremail.com`       | The email to associate with your Let's Encrypt certificate (not needed if you set `funkwhale_letsencrypt_enabled: false`, see below) |

**Optional variables**
Eliot Berriot's avatar
Eliot Berriot committed
| name                                    | Default                       | Description                                   |
| --------------------------------------- | ----------------------------- | --------------------------------------------- |
| `funkwhale_api_ip`                      | `127.0.0.1`                   | IP adress to bind the Funkwhale server to |
| `funkwhale_api_port`                    | `5000`                        | Port to bind the Funkwhale server to |
| `funkwhale_config_path`                 | `/srv/funkwhale/config`       | Path to Funkwhale's configuration directory |
| `funkwhale_database_managed`            | `true`                        | If `true`, the role will manage the database server and Funkwhale's database  |
| `funkwhale_database_name`               | `funkwhale`                   | Name of the Funkwhale database to use |
| `funkwhale_database_user`               | `funkwhale`                   | Postgresql username to login as |
| `funkwhale_env_vars`                    | `[]`                          | List of environment variables to append to the generated `.env` file. Example: `["AWS_ACCESS_KEY_ID=myawsid", "AWS_SECRET_ACCESS_KEY=myawskey"]` |
| `funkwhale_external_storage_enabled`    | `false`                       | If `true`, set up the proper configuration to use an extenal storage for media files |
| `funkwhale_install_path`                | `/srv/funkwhale`              | Path were frontend, api and virtualenv files should be stored (**no trailing slash**) |
| `funkwhale_letsencrypt_certbot_flags`   | `null`                        | Additional flags to pass to `certbot` |
| `funkwhale_letsencrypt_enabled`         | `true`                        | If `true`, will configure SSL with certbot and Let's Encrypt |
| `funkwhale_media_path`                  | `/srv/funkwhale/data/media`   | Path were audio and uploaded files should be stored (**no trailing slash**)  |
| `funkwhale_music_path`                  | `/srv/funkwhale/data/music`   | Path to your existing music library, to use with [CLI import](https://docs.funkwhale.audio/admin/importing-music.html) (**no trailing slash**) |
| `funkwhale_nginx_managed`               | `true`                        | If `true`, will install and configure nginx |
| `funkwhale_nginx_max_body_size`         | `100M`                        | Value of nginx's `max_body_size` parameter to use |
| `funkwhale_protocol`                    | `https`                       | If set to `https`, will configure Funkwhale and Nginx to work behind HTTPS. Use `http` to completely disable SSL. |
| `funkwhale_redis_managed`               | `true`                        | If `true`, will install and configure redis |
| `funkwhale_ssl_cert_path`               | ``                            | Path to an existing SSL certificate to use (use in combination with `funkwhale_letsencrypt_enabled: false`) |
| `funkwhale_ssl_key_path`                | ``                            | Path to an existing SSL key to use (use in combination with `funkwhale_letsencrypt_enabled: false`) |
| `funkwhale_static_path`                 | `/srv/funkwhale/data/static`  | Path were Funkwhale static files should be stored |
| `funkwhale_systemd_after`               | `redis.service postgresql.service` | Configuration used for Systemd `After=` directive. Modify it if you have a database or redis server on a separate host   |
| `funkwhale_systemd_service_name`        | `funkwhale`                   | Name of the generated Systemd service, e.g when calling `systemctl start <xxx>` |
| `funkwhale_username`                    | `funkwhale`                   | Username of the system user and owner of Funkwhale data, files and configuration |
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
Supported platforms
-------------------
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
- Debian 9
- More to come

Dependencies
------------
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
This roles has no other dependencies.
Eliot Berriot's avatar
Eliot Berriot committed

Eliot Berriot's avatar
Eliot Berriot committed
Todo
----

- Backups
- Superuser creation

Eliot Berriot's avatar
Eliot Berriot committed
License
-------

Eliot Berriot's avatar
Eliot Berriot committed
AGPL3
Eliot Berriot's avatar
Eliot Berriot committed

Author Information
------------------

Eliot Berriot's avatar
Eliot Berriot committed
Contact us at https://funkwhale.audio/community/