Skip to content
Snippets Groups Projects
Select Git revision
  • develop default protected
  • 2405-front-buttont-trigger-third-party-hook
  • 2452-fetch-third-party-metadata
  • 2448-complete-tags
  • renovate/front-major-all-dependencies
  • renovate/front-all-dependencies
  • chore/2406-compose-modularity-scope
  • fix-schema-channel-metadata-choices
  • feat/2091-improve-visuals
  • stable protected
  • tempArne
  • 1.4.1-upgrade-release
  • 2416-revert-library-drop
  • 2408-troi-create-missing-tracks
  • wip/2091-improve-visuals
  • pin-mutagen-to-1.46
  • 2395-far-right-filter
  • fix-amd64-docker-build-gfortran
  • fix-plugins-dev-setup
  • flupsi/2804-new-upload-process
  • 2.0.0-alpha.2 protected
  • 2.0.0-alpha.1 protected
  • 1.4.1 protected
  • 1.4.0 protected
  • 1.4.0-rc2 protected
  • 1.4.0-rc1 protected
  • 1.3.4 protected
  • 1.3.3 protected
  • 1.3.2 protected
  • 1.3.1 protected
  • 1.3.0 protected
  • 1.3.0-rc6 protected
  • 1.3.0-rc5 protected
  • 1.3.0-rc4 protected
  • 1.2.10 protected
  • 1.3.0-rc3 protected
  • 1.3.0-rc2 protected
  • 1.3.0-rc1 protected
  • 1.2.9 protected
  • 1.2.8 protected
40 results

docker.md

Blame
  • Develop using Docker

    Funkwhale can be run in Docker containers for local development. You can work on any part of the Funkwhale codebase and run the container setup to test your changes. To work with Docker:

    1. Install Docker

    2. Install docker compose

    3. Clone the Funkwhale repository to your system. The develop branch is checked out by default

      ::::{tab-set}

      :::{tab-item} SSH

      git clone git@dev.funkwhale.audio/funkwhale/funkwhale.git
      cd funkwhale

      :::

      :::{tab-item} HTTPS

      git clone https://dev.funkwhale.audio/funkwhale/funkwhale.git
      cd funkwhale

      :::

      ::::

    Set up your Docker environment

    
    Funkwhale provides a `dev.yml` file that contains the required docker compose setup. You need to pass the `-f dev.yml` flag you run docker compose commands to ensure it uses this file. If you don't want to add this each time, you can export it as a `COMPOSE_FILE` variable:
    
    ```sh
    export COMPOSE_FILE=dev.yml
    ```
    

    To set up your Docker environment:

    1. Create a .env file to enable customization of your setup.

      touch .env
    2. Add the following variables to load images and enable access to Django admin pages:

      MEDIA_URL=http://localhost:8000/media/
      STATIC_URL=http://localhost:8000/staticfiles/
    3. Create a network for federation support

      sudo docker network create federation

    Once you've set everything up, you need to build the containers. Run this command any time there are upstream changes or dependency changes to ensure you're up-to-date.

    sudo docker compose -f dev.yml build

    Set up the database

    Funkwhale relies on a postgresql database to store information. To set this up, you need to run the funkwhale-manage migrate command:

    sudo docker compose -f dev.yml run --rm api funkwhale-manage migrate

    This command creates all the required tables. You need to run this whenever there are changes to the API schema. You can run this at any time without causing issues.

    Set up local data

    You need to create some local data to mimic a production environment.

    1. Create a superuser so you can log in to your local app:

      sudo docker compose -f dev.yml run --rm api funkwhale-manage fw users create --superuser
    2. Add some fake data to populate the database. The following command creates 25 artists with random albums, tracks, and metadata.

      artists=25 # Adds 25 fake artists
      command="from funkwhale_api.music import fake_data; fake_data.create_data($artists)"
      echo $command | sudo docker compose -f dev.yml run --rm -T api funkwhale-manage shell -i python

    Manage services

    Once you have set up your containers, launch all services to start working on them:

    sudo docker compose -f dev.yml up front api nginx celeryworker

    This gives you access to the following:

    • The Funkwhale webapp on http://localhost:8000
    • The Funkwhale API on http://localhost:8000/api/v1
    • The Django admin interface on http://localhost:8000/api/admin

    Once you're done with the containers, you can stop them all:

    sudo docker compose -f dev.yml stop

    If you want to destroy your containers, run the following:

    sudo docker compose -f dev.yml down -v

    Set up federation support

    Working on federation features requires some additional setup. You need to do the following:

    1. Update your DNS resolver to resolve all your .dev hostnames locally
    2. Set up a reverse proxy (such as traefik) to catch .dev requests with a TLS certificate
    3. Set up two or more local instances

    To resolve hostnames locally, run the following:

    ::::{tab-set}

    :::{tab-item} dnsmasq

    echo "address=/test/172.17.0.1" | sudo tee /etc/dnsmasq.d/test.conf
    sudo systemctl restart dnsmasq

    :::

    :::{tab-item} NetworkManager

    echo "address=/test/172.17.0.1" | sudo tee /etc/NetworkManager/dnsmasq.d/test.conf
    sudo systemctl restart NetworkManager

    :::

    ::::

    To add a wildcard certificate, copy the test certificate from the docker/ssl folder. This certificate is a wildcard for *.funkwhale.test

    sudo cp docker/ssl/test.crt /usr/local/share/ca-certificates/
    sudo update-ca-certificates

    To run a reverse proxy for your app:

    1. Add the following configuration to your .env file:

      # Remove any port binding so you can specify this per-instance
      VUE_PORT_BINDING=
      # Disable certificate validation
      EXTERNAL_REQUESTS_VERIFY_SSL=false
      # Ensure all links use https
      FUNKWHALE_PROTOCOL=https
      # Disable host ports binding for the nginx container so that traefik handles everything
      NGINX_PORTS_MAPPING=80
    2. Launch traefik using the bundled configuration:

      sudo docker compose -f docker/traefik.yml up -d
    3. Set up as many different projects as you need. Make sure the COMPOSE_PROJECT_NAME and VUE_PORT variables are unique per instance

      export COMPOSE_PROJECT_NAME=node2
      export VUE_PORT=1234  # this has to be unique for each instance
      sudo docker compose -f dev.yml run --rm api funkwhale-manage migrate
      sudo docker compose -f dev.yml run --rm api funkwhale-manage fw users create --superuser
      sudo docker compose -f dev.yml up nginx api front nginx api celeryworker

    You can access your project at https://{COMPOSE_PROJECT_NAME}.funkwhale.test.