Taking control of your own data

Given the recent reports about Atlassian handing over control over their user's personal Trello account to their former employer I've recently started paying more attention to the way I store my personal data. While I've been enthusiastic about the idea of self-hosting various services for a while, reading the aforementioned news further pushed me to migrate to several self-hosted alternatives to popular online services.

Below I listed several self-hosted applications that I run for my personal needs. Hopefully this list will be able to help other people find alternatives to various online services and self-host as much of their data as possible.

As the recent events prove self-hosting is not only a matter of a worldview or philosophy but simply a basic step towards protecting your own data which as many people as possible should take. I can only imagine how disrupted someone's life could be by a cloud storage provider denying someone access to all their files or an email server maintainer simply locking them out of their only email account.

The software listed below is all deployed on my personal server which I physically own and manage myself. I make sure to use Docker in order to easily manage the software that I run. Official Docker images created by the authors of the software take precedence over custom solutions whenever possible but sometimes I am forced to create my own images if the official images are not available.

Email

I use mailcow to simplify the process of setting up my own email server. Mailcow is a ready-to-go dockerized setup comprised of all the necessary components such as an IMAP server or a spam filtering system. Mailcow comes with a nice management web interface allowing users to configure the vast majority of features without much effort. It also comes with a webmail client which will be useful for those who prefer using such clients instead of a locally installed email client. Personally in order to access all my email accounts in one place I connect to mailcow using Thunderbird or use the email client provided by my Nextcloud instance.

Unfortunately I am still not completely comfortable with using my own email server for professional purposes due to a common problem of Google eating people's emails. That is why for now I am using it mostly for non-critical communication.

Cloud storage

Currently I use Nextcloud as a replacement for services such as Google Drive which Nextcloud closely resembles. Nextcloud clients are available on all platforms that I use, sync my files to all my computers and make them available on my phone. Nextcloud provides many useful extensions called "apps" such as Mail which serves me as an online email client or Deck which for me is enough of a replacement for Trello.

A useful Nextcloud feature is generating publicly accessible links to shared files and sharing files directly with other Nextcloud users, including users at other instances. Those features are similar to the sharing features of Google Drive.

Other interesting extensions that I don't currently use include Calendar which can replace Google Calendar, Contacts which can replace Google Contacts, Mind Map which is a replacement for many mind mapping services or Tasks which are useful for creating reminders.

Before using Nextcloud for a long time I've been simply using sshfs to solve the problem of making my files available on all my machines but that solution is inherently slow and quite annoying if your network access isn't perfect. I also tried using Upspin however my experience with it was quite unfortunate despite doing my best to make it work - the configuration seems confusing, the software is slower even than sshfs and it is prone to data corruption when executing housekeeping tasks such as removing old files to recover storage space. Recently the project seems to have been abandoned by the developers despite its promising features. I've however had good experience with Syncthing which I used to synchronise files between my server and my phone - a task which is now accomplished by my Nextcloud instance.

Analytics

While I believe that using an analytics service hosted by a third party is unethical as it effectively constitutes sharing the data which belongs to the visitor of your website with other people unfortunately nowadays the self-hosted alternatives are not a good solution either. Most people including myself use browser plugins which block most analytics services which I fully encourage.

That is why I created Plum, a program which analyses webserver access logs in real-time in order to give me some insight about which content on my website is popular. Plum allows me to monitor the activity on my website in a non-invasive and reliable manner. My Plum instance can be seen in action here.

I also recommend goaccess, an alternative program which I've used previously. It can be used from the command line and exposes a web dashboard as well just like Plum. The only reason why I am not using it is related to the fact that I wanted to learn a couple of new technologies at the time and decided to create my own version while also changing the behaviour of my program to suit my needs.

Music

I use my own software called Eggplant as a simple way of hosting my own music. It is configured fully using the hierarchy of filesystem directories, optimizes the music for streaming in advance for better performance and comes with a clean interface. My Eggplant instance can be seen in action here.

As far as I know Funkwhale is a popular alternative program used by other people but I found it way too heavy and complicated for my needs.

Movies

I use Jellyfin in order to host movies and TV series. Jellyfin loads movies from the storage device, transcodes them on the fly to optimize them for streaming and serves them using a builtin online player. The web interface makes it possible to organise movies, view information about actors, download subtitles and so on. Jellyfin is fully open source and the comes with an official Docker image.

Temporary file hosting

As I use IRC as my main form of communication I often need to quickly upload a file or image somewhere in order to share it with other people. I developed Nya for that purpose. Nya provides a temporary file hosting for files which I don't want to store permanently in my Nextcould instance. After uploading a file the user receives a public, unlisted link to their file. The files are then automatically removed after 24 hours.

Group video chat

Jitsi is a self hosted alternative to services such as Google Meet or Zoom which I fully recommend. While I don't host it myself I often use a Jitsi instance maintained by my friend. Jitsi allows you to hold group video conversations, share your screen or watch YouTube videos together.

Group audio chat

Mumble works well for audio chat used while playing video games and as a general replacement for Discord or TeamSpeak. I also do not self-host it myself but extensively use an instance hosted by my friend.

Conclusion

While the choice of the software that I listed worked for me I think the best idea is to arrive at the solution which suits you the best via experimentation. There is a long list of self-hosted software available in the awesome-selfhosted repository. While I sometimes like to reinvent the wheel and go with my own solutions, given the multitude of open source projects out there you will most likely be able to find something suitable to your needs without creating it yourself.

2020-05-02