From 25945b8fead989cca09a23983623b63ce36dcc0c Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Mon, 8 Jan 2024 20:11:17 -0600 Subject: feat: total re-write from Emacs org-mode to Zola markdown --- .../blog/2023-06-08-self-hosting-baikal-server.md | 159 +++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 content/blog/2023-06-08-self-hosting-baikal-server.md (limited to 'content/blog/2023-06-08-self-hosting-baikal-server.md') diff --git a/content/blog/2023-06-08-self-hosting-baikal-server.md b/content/blog/2023-06-08-self-hosting-baikal-server.md new file mode 100644 index 0000000..ceb0e89 --- /dev/null +++ b/content/blog/2023-06-08-self-hosting-baikal-server.md @@ -0,0 +1,159 @@ ++++ +date = 2023-06-08 +title = "Self-Hosting Baïkal Server (CalDAV & CardDAV)" +description = "A guide to self-hosting the Baïkal application on your own server." ++++ + +## What is Baïkal? + +[Baïkal](https://sabre.io/baikal/) is a lightweight CalDAV + CardDAV +server that you can self-host on your own machine. While I have tried (& +failed) to get this CalDAV + CardDAV server running before, it was quite +easy this time. Not really sure what I did differently this time, but +I'm documenting my process here to ensure I don't forget. + +## Installation + +First, create a folder on your server and open a +`docker-compose.yml` file for editing: + +```sh +mkdir baikal && cd baikal +nano docker-compose.yml +``` + +Within this file, you'll need to paste the information below. You can +customize the `ports` section to use any port on your server +to pass through to port 80 in the container. You can also edit the +`volumes` section to use docker volumes instead of local +folders. + +```conf +version: "2" +services: + baikal: + image: ckulka/baikal:nginx + restart: always + ports: + - "8567:80" + volumes: + - ./config:/var/www/baikal/config + - ./data:/var/www/baikal/Specific +``` + +Once finished with editing, save and close the file. Then, launch the +docker container: + +```sh +sudo docker-compose up -d +``` + +## Intial Setup + +As long as no issues came up when starting the container, you should be +able to visit the server's set-up page at +`http://:`. The application will ask you to +create an administrator account and choose the database type for your +storage. Personally, I opted to use SQLite. + +Make sure the administrator credentials are adequate to protect against +common attacks. + +## Creating Users + +Once you've set up the application, you will be greeted by the +Dashboard page, which will show the version of the app, status of the +admin/CalDAV/CardDAV services, and the number of users, calendars, +events, address books, and contacts. + +![Baïkal +Dashboard](https://img.cleberg.net/blog/20230608-baikal/baikal-dashboard.png) + +To create a new user, navigate to the `Users and resources` +page. This process is as simple as entering a username, password, and +email. + +Once a user has been created, you can create any number of calendars and +address books for user, as well as inspect their information. + +## Setting Up a Public URL + +Once your application is working locally, you can open access remotely +via a URL by using a reverse-proxy like Nginx. + +As a prerequisite, you must own a domain name and set up DNS records to +point a domain name to the server hosting Baïkal. + +Start by navigating to your web server's configuration directory and +create a new file for this application. + +```sh +cd /etc/nginx/sites-available/ +nano dav +``` + +Within this file, paste in the configuration from below and change +`dav.example.com` to match the URL you'll be using. + +```conf +server { + if ($host ~ ^[^.]+\.example\.com$) { + return 301 https://$host$request_uri; + } + + listen [::]:80; + listen 80; + server_name dav.example.com; + return 404; +} + +server { + listen [::]:443 ssl http2; + listen 443 ssl http2; + server_name dav.example.com; + access_log /var/log/nginx/dav.access.log; + error_log /var/log/nginx/dav.error.log; + + location / { + proxy_http_version 1.1; + proxy_pass http://localhost:8567; + proxy_set_header Host $host; + } + + ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; +} +``` + +For Nginx on Ubuntu, you'll need to symlink the configuration file to +the `sites-enabled` directory and then restart Nginx. + +```sh +sudo ln -s /etc/nginx/sites-available/dav /etc/nginx/sites-enabled/dav +sudo systemctl restart nginx.service +``` + +At this point, the Baïkal server should be available over the internet +at the URL configured above! + +## Configuring Clients + +Lastly, configuring clients and applications is essential to making sure +the DAV server is being fully utilized. + +You can also use the `Users and resources` page to inspect a +user's personal link to their calendars and address books by clicking +the info (i) button. It will show a URI like +`/dav.php/calendars/your-user/default/`. + +However, I found that the following URL works for most applications: +`/dav.php/principals/your-user/`. + +I used the `principals` URL above for Thunderbird (calendar, +tasks, and contacts), as well as iOS (calendar, tasks, and contacts) and +everything works flawlessly so far. + +Syncing is quick between the server and clients, and I haven't seen any +disruptions in the service or data integrity. -- cgit v1.2.3-70-g09d2