Dockerized Installation

Requirements

Deployment

imageName="yourdockerhubname/calendar"; \
docker build -t "$imageName" --rm=true . && \
docker push "$imageName"

On the target server:

# This is the simplest mechanism to get around the permissions mismatch between
# Docker instances and the local file system
# This could've been resolved with a data volume; that's beyond the scope of 
# this setup

mkdir -p /home/calendar/db && \
chmod 777 /home/calendar/db && \
touch /home/calendar/db/db.sqlite && \
chmod 666 /home/calendar/db/db.sqlite
docker run --name "calendar.service" \
    --privileged=true \
    -h "calendar" \
    -e "CONTAINER_DOMAIN_NAME=yourdomain.name" \
    -v "$(pwd)/db":"/var/www/calendar_server/" \
    -p "8800:80" \
    -d "yourdockerhubname/calendar"
docker ps -a
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                  NAMES
83d209fefa91        yourdockerhubname/calendar   "/runapache2"       2 minutes ago       Up 2 minutes        0.0.0.0:8800->80/tcp   calendar.service

The installation is complete. Users, calendars, address books, etc. can all be managed now, like in this production instance.

Implementation notes

A full discussion of the implementation details is available from Robust Calendar Service Deployment with Baïkal / SabreDAV Calendar in 10 Minutes and the update/upgrade in less than 10 minutes follow up.