3.6 KiB
Docker migration guide
Funkwhale used to offer two Docker-based installation methods. The multi-container method separates each services into its own container. The mono-container method kept all services into a single container.
The project deprecated the mono-container method as of Funkwhale 1.3.0. We decided not to continue supporting it for the following reasons:
- It required a lot of maintenance when upgrading dependencies.
- It offers no advantages over the multi-container method. Not separating the processes defeats the point of containerization.
Follow this guide to migrate a mono-container installation to a multi-container setup.
Back up your Funkwhale directory
-
Before you begin, log in as your
funkwhale
usersudo -u funkwhale -H bash
-
Create a full backup of your
/srv/funkwhale
directory.cd /srv/ cp funkwhale funkwhale.bak
-
Go to the original
/srv/funkwhale
folder to run the migration.cd /srv/funkwhale
Dump your Funkwhale database
-
Create a backup of your Funkwhale database. We will import this into the new postgres container later.
docker-compose exec funkwhale /usr/bin/pg_dumpall -U funkwhale > db_dump.sql
Stop your Funkwhale instance
-
Stop all Funkwhale services. This ensures that no data is changed while you migrate your instance.
docker-compose down
Prepare the multi-container setup
-
Export the Funkwhale version you want to install.
export FUNKWHALE_VERSION={sub-ref}`version`
-
Download the required template files.
curl -L -o docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml" 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"
Update your instance env file
-
Take a backup of your current
.env
file.mv .env .env.bak
-
Download the
.env
file template.curl -L -o .env "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/env.prod.sample"
-
Change the permissions on your
.env
file.chmod 600 .env
-
Replace the version number in your new
.env
file.sed -i "s/FUNKWHALE_VERSION=latest/FUNKWHALE_VERSION=$FUNKWHALE_VERSION/" .env
-
Copy the settings from your old
.env
file to your new.env
file. These will be added to the bottom of the file. Check the file and remove any duplicated settings after copying.cat .env.bak >> .env
-
Update the database URL in your new
.env
file.echo "DATABASE_URL=postgresql://funkwhale@postgres:5432/funkwhale" >> .env
Migrate your database
-
Start up your new database container.
docker-compose up -d postgres
-
Import your database dump into the new container.
cat db_dump.sql | docker-compose exec -T postgres psql -U postgres
-
Run the database migrations.
docker-compose run --rm api python manage.py migrate
Start your Funkwhale instance
Once you have imported your database and run migrations, you can start all containers.
docker-compose up -d