Manage Calendar & Address Book Micro-services
Tags: cloud, docker, microservices, opensource
Published: 2023-03-28 21:04:31

Greetings gentle reader. Gratitude for returning to update your insights on various topics. I am Silent-Mobius, also known as Alex M. Schapelle, walking and babbling computer droid.

Within my short time my of existence, on this blue planet, I have learned that in case you are not paying for product, then you are product yourself... while that being true of my digital existence, much of services I use, are financed by me. Mainly due to [AI not being fully trusted](https://wh40k.lexicanum.com/wiki/Abominable_Intelligence).

Much of the services we use today, are seamlessly connected to one or more cloud providers, such as Google or Microsoft. Simple things, such calendar and address book are standardized by corporations which govern our quality of life, and we hook into the network of infinite computing grid of processing power.

When considering applications, almost any endpoint device, such as laptop or phone, can provide client to be used as mail, calendar and so on, yet problem with those are that there is no backing up those endpoint applications... unless once again you use cloud provider... que: enter [radicale](https://radicale.org/v3.html)
Radicale is calendar and phone back-end application that uses CardDav and CalDav protocols. These are extension of the WebDav, a HTTP-based protocol for data manipulation.

## Motivation for this effort 

For a very long period of time, I wanted to create my own cloud, based on simple services such as mail, calendar, contacts and many others which Google and Microsoft provide so graciously . 
Based on my knowledge of Linux OS distributions, with addition of constant search of interesting Open-Source projects, combined with my studies of __micro-service__ architectures, I wish to build eco-system that can enable me, the use of cloud, without using cloud-based providers.
Although __this project does not `builds`__ cloud serving platform out of thin air, yet it brings one step closer to building essential tools, which will enable us build my own cloud one day in the future, just like GNU and Linux Kernel were combined in early 90's.
This project is an experiment, which will lead me and you gentle reader, to something new, and hopefully, we'll enjoy our journey through it.

## Code

You can find environment of deployment that I have created based of the existing projects, mainly _nginx_ for being secured load-balancer serving as a connector to a _radicale_ CalDav/CardDav server. It is all managed with docker compose to be a POC, but also can be swapped with helm charts later to be deployed to K8s. The whole implementation saved at [gitlab](https://gitlab.com/silent-mobius/calendar-addressbook-server-deployment) and you are more then welcome to visit, suggest, open issues and add additional features that did not think about, by myself.... please use `Merge Request` do to all the above suggested.

## Structure

```sh
.
├── docker-compose.prod.yml
├── docker-compose.yml
├── gunicorn.conf
├── nginx.conf
├── radicale.conf
├── Dockerfile.cal
├── Dockerfile.https
├── LICENSE
└── README.md
```
> Note: `access.txt` file, with the password for radicale container, is required to create calendar image.

The application is structured as two container _micro-services_, one for secure connection with `nginx` web server that uses `https` protocol that passes the communication to `radicale` server that manages the calendar and address book data. It uses external volume backed up on `raid 50` storage. `Raid 50` is secured storage service provided by local ISP, to which only I and ISP have access.

Each container is build with its dedicated `Dockerfile`, and every container uses its own dedicated application configuration file. As mentioned, docker compose is in charge of handling the local run.

## Conclusion

I hope that this little fun project was an inspiration for you to go on adventure of your own with any software there is for your needs. One last for me to suggest would be: Do Try To Have Some Fun.