1 minute read

blog thumbnail

Hello everyone! 👋

Welcome to another self-host article! This month we’re hosting a CalDAV and CardDAV server. Baïkal, the lightweight CalDAV+CardDAV server.

We’re going to host it in a Podman container on a Fedora server.

  • https://sabre.io/baikal/

Why Baïkal

https://mastodon.social/@nuculabs/114048999903398979

Baïkal has multi-user support and allows you to create users from the administration interface and each user has his own Calendars and Contacts address books.

It can be configured with a SQLite database or PostgrsSQL.

It also has a nice admin interface that allows you to add and remove users.

thumbnail

How-To Self Host

I’m using Podman and Fedora Server running on my old PC as the host. The easiest way for me to automate the self hosting process is to write an Ansible playbook.

You will need ansible installed. On Fedora:

sudo dnf install ansible

Then the typical dependencies:

ansible-galaxy collection install community.general
ansible-galaxy collection install containers.podman
ansible-galaxy collection install ansible.posix

If you’re not on Fedora you can install Ansible by browsing the instructions.

Once you have all the dependencies installed you can clone the following playbook and edit the variables in variables.yaml.

The playbook can be downloaded from my Forge.

setup_firewall: true # exposes the firewall ports
baikal:
  container_image: "docker.io/ckulka/baikal:nginx"
  port: 8069 # The port of the server
  base_directory: "/baikal" # the base directory /baikal
  data_directory: "data" # the data directory /baikal/data
  config_directory: "config" # the config directory /baikal/config
  mail: |
    defaults\n\
    auth           on\n\
    tls            on\n\
    tls_trust_file /etc/ssl/certs/ca-certificates.crt\n\
    account        default\n\
    host           host\n\
    port           587\n\
    from           [email protected]\n\
    user           user\n\
    password       pass\n\

Once you’ve downloaded the playbook and edited the variables. You will need to configure your webserver by editing inventory.ini.

Ansible will connect via SSH to example.com and using the user nuculabs which has sudo access.

[nuculabs]
example.com ansible_user=nuculabs

[local]
localhost

Once the inventory is configured you can run the playbook by running:

ansible-playbook -i inventory.ini playbook.yaml --ask-become-pass

When the playbook finishes, you should have a running Baïkal instance. You can then finish the installation by visiting example.com:8069 (the configured port).

I personally don’t expose the fedora server over the internet. I use a reverse proxy in front on it for services tha are being exposed. Baikal is not exposed in this instance, only accessible by VPN.

That’s about it!

Thank you for reading!