Skip to main content

Radicale - Calendar, Contacts, and Syncing

Radicale is an awesome open source, self hosted project that is absolutely great for creating shared calendars for the family, or a group of people / team.


What You'll Need

  • Docker and Docker-Compose
  • (optional) NGinX-Proxy-Manager (or a reverse proxy of your choice)
  • (optional) A domain name for your Radicale install
  • About 10 minutes of time

Installing Docker-CE and Docker-Compose

If you already have Docker and Docker-Compose installed, feel free to skip down to the next section.

You may want to install some pre-requisite softwre as well:

Debian / Ubuntu

sudo apt install git curl wget

Fedora / Redhat

dnf install git curl wget


sudo pacman -Sy git curl wget

You can easily install Docker-CE, Docker-Compose, Portainer-CE, and NGinX Proxy manager by using this quick install script I created and maintain on Github.  Just use the command:


To download the script to your desired host.

Change the permissios to make the script executable:

chmod +x ./

and then run the script with the command:


When run, the script will prompt you to select your host operating system, then will ask you which bits of software you want to install.

Simply enter 'y' for each thing you want to install.

For instance, you may want to answer 'y' to NGinX Proxy Manager, and Portainer-CE if you don't already use these in your system.

At some point, you'll be asked for your super user (sudo) password as well.

Allow the script to complete installation.

At this point, you might want to log out and back in, as this will allow you to use the docker and docker-compose commands without the need of sudo in front of them.

Installation of Radicale

You need to generate the hashed password for each user you want to have access to your Radicale install, so use the site below, or one that you know or trust, or the linux command line to generate a bcrypt password has with round 10.

bcrypt generator

Next, we need to create the folder structure for the radicale install. I use docker/< application name >. so in this case it would be mkdir -p docker/radicale

Next, we need a "data" folder inside the "radicale" folder we just created, and we'll need a file named "users" inside the "data" folder.

mkdir -p docker/radicale/data

cd docker/radicale/data

nano users

Inside the users file, you'll add a line for each user you want to have a separate calendar and login.  The line should be setup like the following:


You would, put multiple lines for multiple users, like the following:


Save the file with CTRL + O, press Enter to confirm, and then exit the nano text editor with CTRL + X, then move back one directory level to the docker/radicale folder:

cd ..

Now create a new text file called "docker-compose.yml"

nano docker-compose.yml

Paste the following code block into the docker-compose.yml file.

# docker-compose.yml
version: '3.7'

    image: cupcakearmy/radicale:1
    container_name: rad2
    restart: unless-stopped
      - ./data:/data
      - 5232:5232

In the above file, change the left side of the port mapping 5232:5232 if needed.  If you already have port 5232 in use on your host machine, change the left side port only, to an unused port, otherwise leave it as is.

Now, save the file with CTRL + O, then press Enter to confirm, and exit the text editor with CTRL + X.

Now we can run our docker-compose command, to bring up our Radicale application.

docker-compose up -d && docker-compose logs -f

The first part of the above command, docker-compose up -d, pulls the latest image for Radicale from this repository, and starts it running in the background.

The second part of the command, docker-compose logs -f, will then show us the output in the terminal as the application runs.  I like to do this in order to see if any errors come up, and in this case it's useful when initially trying to login using your usernames and passwords to see if we have setup the values and file properly.

If you login with the username and password with no issues...well done.  You may want to log out, and enter an invalid username and password combo, to ensure you are not passed into Radicale anyway.

Next, you can setup a Reverse proxy for your Radicale instance as well. Check out the video for how to do that.

Support my Channel and Content

Support my Channel and ongoing efforts through Patreon: