Skip to content

Deploying Radicale

Introduction

Radicale is a small but powerful CalDAV (calendar) and CardDAV (contacts) server. With its minimalist design and zero external dependencies, Radicale provides a lightweight alternative to complex groupware solutions while remaining fully compatible with standard calendar and contact applications.

Key features of Radicale include:

  • CalDAV Support: Full calendar synchronization protocol
  • CardDAV Support: Contact synchronization protocol
  • Lightweight: Written in Python with minimal dependencies
  • File-Based Storage: Simple file storage, easy to backup
  • Multi-User: Support for multiple users and shared calendars
  • Authentication Options: LDAP, htpasswd, PAM, and more
  • HTTPS Ready: Built-in SSL/TLS support
  • Standards Compliant: Works with any CalDAV/CardDAV client
  • Web Interface: Basic web interface for management

This guide walks through deploying Radicale on Klutch.sh using Docker and configuring calendar/contact synchronization.

Prerequisites

Before deploying Radicale on Klutch.sh, ensure you have:

  • A Klutch.sh account
  • A GitHub account with a repository for your Radicale configuration
  • CalDAV/CardDAV compatible clients (Thunderbird, macOS Calendar, iOS, etc.)
  • Basic familiarity with Docker

Deploying Radicale on Klutch.sh

    Create Your Dockerfile

    Create a Dockerfile in your repository:

    FROM tomsquest/docker-radicale:latest
    # Copy custom configuration if present
    COPY config /config
    # Expose the web interface
    EXPOSE 5232
    # Volume for data persistence
    VOLUME /data

    Create Configuration Directory

    Create a config directory with the configuration file:

    config/config
    [server]
    hosts = 0.0.0.0:5232
    [auth]
    type = htpasswd
    htpasswd_filename = /data/users
    htpasswd_encryption = bcrypt
    [storage]
    filesystem_folder = /data/collections
    [logging]
    level = info
    [rights]
    type = from_file
    file = /config/rights

    Create Rights Configuration

    Create config/rights for access control:

    # Rights configuration
    [root]
    user: .+
    collection:
    permissions: R
    [principal]
    user: .+
    collection: {user}
    permissions: RW
    [calendars]
    user: .+
    collection: {user}/[^/]+
    permissions: rw

    Push Your Repository to GitHub

    Commit and push your files to your GitHub repository.

    Create a New Project on Klutch.sh

    Navigate to the Klutch.sh dashboard and create a new project named “radicale”.

    Create a New App

    Create a new app within your project and connect your GitHub repository.

    Configure HTTP Traffic

    In the deployment settings:

    • Select HTTP as the traffic type
    • Set the internal port to 5232

    Set Environment Variables

    Configure the following environment variables:

    VariableValue
    RADICALE_CONFIG/config/config

    Attach Persistent Volumes

    Add persistent storage:

    Mount PathRecommended SizePurpose
    /data5 GBCalendars, contacts, and user data

    Deploy Your Application

    Click Deploy to build and start your Radicale instance.

    Create Users

    After deployment, create user credentials:

    Terminal window
    htpasswd -B -c /data/users username

    Access Radicale

    Access the web interface at https://your-app-name.klutch.sh.

Client Configuration

macOS/iOS Calendar

  1. Open Settings > Calendar > Accounts
  2. Add CalDAV Account
  3. Server: your-app-name.klutch.sh
  4. Username and password as configured
  5. Use SSL: Enabled

Thunderbird

  1. Install TbSync and Provider for CalDAV & CardDAV
  2. Add CalDAV account
  3. Server URL: https://your-app-name.klutch.sh
  4. Enter credentials

Additional Resources

Conclusion

Deploying Radicale on Klutch.sh provides a lightweight, self-hosted calendar and contacts server with automatic builds, persistent storage, and secure HTTPS access. Sync your calendars and contacts across all devices while maintaining complete control over your personal data.