Set Up Radicale

  1. Install nginx web-server and uwsgi server as front end for Radicale.

    apt-get update  
    apt-get install nginx-full uwsgi uwsgi-plugin-python apache2-utils
  2. Add a dedicated radicale user and add web-server user to the radicale group.

    adduser --system --group --home /var/lib/radicale radicale  
    adduser www-data radicale
  3. Tweak nginx web-server config.

    sed -e 's|# \(listen 443 ssl default_server;\)|\1|' -e 's|# \(listen [::]:443 ssl default_server;\)|\1|' -e 's|# \(include snippets/snakeoil.conf\)|\1|' -i /etc/nginx/sites-available/default
    sed -e 's|gzip on;|gzip off;|' -e 's|# server_tokens .*|server_tokens off;|' -i /etc/nginx/nginx.conf
  4. Add an nginx virtualhost. Replace SERVERNAME, IP4_ADDRESS, IP6_ADDRESS and valid SSL certificates as required.

    server{
        listen 80;
        listen [::]:80;
        server_name SERVERNAME;
        root /var/www/radicale;
        index index.html;
        rewrite ^ https://$server_name$request_uri? permanent;
    }
    
    server{
        listen 443 ssl;
        listen [::]:443 ssl;
    
        include snippets/snakeoil.conf;
    
        server_name SERVERNAME;
        root /var/www/radicale;
        index index.html;
    
        auth_basic "Restricted: Calendar Server";
        auth_basic_user_file htpasswd/radicale.txt;
    
        allow IP4_ADDRESS;
        allow IP6_ADDRESS;
        deny all;
    
        location / {
            uwsgi_pass unix:///var/run/uwsgi/app/radicale/socket;
            include uwsgi_params;
        }
    }
  5. Rename file as “radicale” and activate virtualhost with:

    mv /etc/nginx/sites-available/radicale.nginx /etc/nginx/sites-available/radicale
    ln -s /etc/nginx/sites-available/radicale /etc/nginx/sites-enabled/radicale
  6. Create a password file.

    mkdir -p /etc/nginx/htpasswd/
    htpasswd -c /etc/nginx/htpasswd/radicale USERNAME
  7. Configure uwsgi server

    cat > /etc/uwsgi/apps-available/radicale.ini <<EOF
    [uwsgi]
    workers = 1
    plugins = python
    chdir = /var/www/radicale/
    module = radicale_wsgi
    uid = radicale
    gid = radicale
    EOF
    
    ln -s /etc/uwsgi/apps-available/radical.ini /etc/uwsgi/apps-enabled/radical.ini
  8. Install Radicale (replace VERSION with the appropriate version number)

    cd /usr/local/src/
    wget http://pypi.python.org/packages/source/R/Radicale/Radicale-VERSION.tar.gz
    tar xzf Radicale-VERSION.tar.gz
    cd Radicale-VERSION/
    python setup.py install
  9. Configuration

    mkdir -p /etc/radicale
    cp config logging /etc/radicale
    sed -e 's|filesystem_folder =.*|filesystem_collections = /var/lib/radicale/collections|' -i /etc/radicale/config
    sed -e 's|handlers = console,file|handlers = file|' -i /etc/radicale/logging
    sed -e 's|args = ("/var/log/.*|args = ("/var/log/radicale/radicale.log",)|' -i /etc/radicale/logging
    mkdir -p /var/log/radicale/
    chown radicale:radicale /var/log/radicale/
    mkdir -p /var/www/radicale
    cp radicale.wsgi /var/www/radicale/radicale_wsgi.py
  10. Restart services

    systemctl restart nginx.service
    systemctl restart uwsgi.service

Upgrade Radicale

  1. Download and extract latest version.

    cd /usr/local/src/
    wget http://pypi.python.org/packages/source/R/Radicale/Radicale-VERSION.tar.gz
    tar xzf Radicale-VERSION.tar.gz
  2. Run set up script

    cd Radicale-VERSION/
    python setup.py install
  3. Restart the uwsgi server

    systemctl restart uwsgi.service
  4. That's it. You can delete the old version now.