Docker installation =================== Docker is the easiest way to get a Funkwhale instance up and running. We support two types of Docker deployments: - :ref:`Mono-container `: all processes live in the same container (database, nginx, redis, etc.). It's easier to deploy and to integrate with container management systems like Portainer. However, it's not possible to scale this type of deployment on multiple servers. - :ref:`Multi-container `: each process lives in a dedicated container. This setup is more involved but also more flexible and scalable. .. note:: We do not distribute Docker images for non-amd64 architectures yet. However, :doc:`you can easily build those images yourself following our instructions `, and come back to this installation guide once the build is over. .. _docker-mono-container: Mono-container installation --------------------------- .. note:: This installation method was contributed by @thetarkus, at https://github.com/thetarkus/docker-funkwhale First, ensure you have `Docker `_ installed. Create the user and the directory: .. code-block:: shell sudo useradd -r -s /usr/bin/nologin -m -d /srv/funkwhale -U -G docker funkwhale cd /srv/funkwhale Log in as the newly created user from now on: .. code-block:: shell sudo -u funkwhale -H bash Export the `version you want `_ to deploy (e.g., ``0.19.1``): .. parsed-literal:: export FUNKWHALE_VERSION="|version|" Create an env file to store a few important configuration options: .. code-block:: shell touch .env chmod 600 .env # reduce permissions on the .env file since it contains sensitive data cat > .env <`_ and `docker-compose `_ installed. Export the `version you want `_ to deploy (e.g., ``0.19.1``): .. parsed-literal:: export FUNKWHALE_VERSION="|version|" Download the sample docker-compose file: .. parsed-literal:: mkdir /srv/funkwhale cd /srv/funkwhale mkdir nginx curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.nginx.template" curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker.funkwhale_proxy.conf" curl -L -o docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml" At this point, the architecture of ``/srv/funkwhale`` should look like that: :: . ├── docker-compose.yml └── nginx ├── funkwhale_proxy.conf └── funkwhale.template Create your env file: .. parsed-literal:: curl -L -o .env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/env.prod.sample" sed -i "s/FUNKWHALE_VERSION=latest/FUNKWHALE_VERSION=$FUNKWHALE_VERSION/" .env chmod 600 .env # reduce permissions on the .env file since it contains sensitive data sudo nano .env Ensure to edit it to match your needs (this file is heavily commented), in particular ``DJANGO_SECRET_KEY`` and ``FUNKWHALE_HOSTNAME``. You should take a look at the `configuration reference `_ for more detailed information regarding each setting. Then, you should be able to pull the required images: .. code-block:: bash docker-compose pull Run the database container and the initial migrations: .. code-block:: bash docker-compose up -d postgres docker-compose run --rm api python manage.py migrate .. warning:: You may sometimes get the following warning while applying migrations:: "Your models have changes that are not yet reflected in a migration, and so won't be applied." This is a warning, not an error, and it can be safely ignored. Never run the ``makemigrations`` command yourself. Create your admin user: .. code-block:: bash docker-compose run --rm api python manage.py createsuperuser Then launch the whole thing: .. code-block:: bash docker-compose up -d Now, you just need to configure your :ref:`reverse-proxy `. Don't worry, it's quite easy. About music acquisition ----------------------- If you want to :doc:`import music located on the server <../admin/importing-music>`, you can put it in the ``data/music`` directory and it will become readable by the importer.