Building my Self Hosted IT Infrastructure

Building my Self Hosted IT Infrastructure
Photo by imgix / Unsplash

Subscription, subscription, subscription. Unlike few years back when you could buy a thing, app or a service, these days everyone wants to sell you subscription. Yes, as a creator or when I look at it from business perspective, it makes sense. Instead of one time money coming in, business owners gets recurring income thus making their operations and spending more predictable. But for consumer, there are so many options to choose from. Along with that, most of the apps have overlapping services so you're most likely paying for a similar thing more than once.

So, for the above said reason, and because I love tinkering with stuff and open source software, I finally took up the task of hosting my own IT infrastructure on my PC. Wearing a project manager's hat, I know I'll be spending much more on this task than to just get a subscription, but who cares, I have my weekends to get frustrated by these tasks, just to get that satisfaction and bragging rights among my friends. So, let's get started, on this journey of pain and suffering.

P.S. - My server doesn't look anything like the cover image

Note: If you're interested in tutorial form of the services to host yourself, I've documented the steps on my wiki here. It does assume you have atleast some idea about linux, docker and networking and is not exactly beginner friendly.

What services do I need?

Before even getting started, I need to first list down the services which I use, along with few good to have services.

  1. Photos backup - Google Photos
  2. File Storage + File Editing - Google Drive + Google/Microsoft Office
  3. Documentation and Notes - Notion
  4. Mind Mapping - Wisemapping / Xmind / Edrawmind
  5. Blog - Substack
  6. Profile Website - Github Pages
  7. Project Management - Quire / Todoist / Proofhub
  8. Website Analytics - Google Analytics + Substack Analytics
  9. Wiki - Not currently hosting, but I want to host my own wiki for tutorials.

Most of the services above have a free version which I outgrew. So, I need something which I can host myself which are close alternatives to the above services.

Finding free and Open Source Alternatives

Opensource community is awesome. Build, distribute and contribute stuff just because it's fun to do so and someone else might have the same problem which you did. So, I started finding FOSS alternatives to the services which I use and compare those. Few criteria for comparison and selections were

  1. Cloud First - I want to access these files from my N devices and when I'm on move.
  2. Easily Hostable - Servers crash, I want something I can easily host. Preferably using Docker which I can easily migrate to a new system should the need arise.
  3. User Accounts - I want to share few of these services with my collaborators, friends and family as needed.
  4. User Friendly Interface - Easily migrate from old to new service without user hassle. Interface should ideally match the service which I was already using.
  5. Active Maintenance - App should either be old and stable or actively maintained.
  6. Data Migration - Easy Import/Export from and to other services. I don't liked to be locked in.

Note: App/ Service name in below sections are links that lead to homepage of the service.

Documentation Service

In past, I had used multiple sources of documentation and notes. From OneNote, google docs to Notion. Didn't stick with anything for too long but I loved Notion. Now, notion does have a free version for personal use, but I know I'd sooner need to share notes privately with collaborator's so it's easier to migrate now instead of when I've quite a lot of content on the service. There are a few features I'd love to have

  1. Keyboard friendly i.e. easy format change without needing to use my mouse.
  2. Hierarchy - Project can have N level of subpages and headings with easy migration
  3. Sharing - Share particular section with your team without exposing everything
  4. Templates and Integration - From github, draw.io to kanban boards, there is integration or template for mostly anything

Looking for options similar to Notion, I came across few services.

  1. Obsidian - Easy structured documents, stored as markdown with community integrations. Cons, Offline first i.e. no sync between devices (there are workarounds), no web interface and data organization problems.
  2. Outline - Very similar to notion, can be self hosted (but had lot of hassles to do that).
Outline screenshot
Outline

At end I ended up selecting Outline. It does take a while to setup but you can find working installation

Photos Backup

Google photos was ONE feature not included in google free tier which was keeping me subscribed to google one. Features I loved in google photos included clean interface, memories, sharing, face tagging and easy search. Having said that, photo and video sizes are constantly increasing, so I'd need to regularly upgrade the plan or compromise on what I could backup. I need something similar and found 3 well maintained options. They are very similar and you could ideally select any. I personally went with Immich.

  1. Immich - This app is closest alternative to google photos. Super similar user interface, has a mobile app, easy hosting and active maintenance. Except for the fact that it is under very heavy development and might introduce breaking change, all features seems to be there that I need. Easy migration from google photos using google takeout.
  2. NextCloud Memories - This app is an add on to NextCloud, similar interface.
  3. Photoprism - This app has all features except Android Native App (you can use Progressive Web App) and user management.
screenshots

Cloud Storage + File Editing

Need a service similar to google drive. Where I can add/edit/view documents and upload files to store and sync between devices. Also, ability for public sharing. I went with NextCloud.

NextCloud - As close alternative to google drive as I could find. Self host your data, add/edit and view files, add apps or plugins to add capabilities.

Nextcloud Files

Website Hosting

I was already hosting my profile / resume website at github pages. I wanted to migrate it to my own domain name rishabhrkaushik.com. The website itself is built on top of React (back when React was easier to grasp).

Website hosting can be done in multiple different ways with no significant impact when you're hosting a website with less traffic. For hosting, I settled on using NGINX server, dynamic IP, DNS (using namecheap), router for port forwarding along with hoops of SSL (let's encrypt), DDNS prevention and subdomains to host the built site. I'm planning on redesigning the same with updated data and design soon.

Rishabh Kaushik’s Portfolio
Rishabh Kaushik personal portfolio. Contains projects, skills, certifications, work experience and contact details etc.

https://rishabhrkaushik.com

Rishabh Kaushik’s Portfolio
Rishabh Kaushik personal portfolio. Contains projects, skills, certifications, work experience and contact details etc.

https://profile.rishabhrkaushik.com

Blog Hosting

Earlier, I used to publish my blog on Medium which was later migrated to Substack. Now, I wanted to migrate it to my own domain, blog.rishabhrkaushik.com. I am using Ghost as an alternative to design and host my blog.

Rishabh’s Blog
Science, Engineering, Philosophy and Stories

https://blog.rishabhrkaushik.com

Wiki Hosting

Coming soon! Wiki with tutorials and documentation for all projects I make. I wanted something markdown based with very less configuration or development time. There are multiple options, Quartz or Mkdocs will convert your markdown to static webpages. Mkdocs is slightly more configurable.

Rishabh’s Wiki

Project Management

From project planning, estimates, timelines and proposals to tracking tasks, time and bugs. Project Management tools are helpful specially when the team grows and I just wanted to practice the art. Features I wanted where less focus towards software development, gantt chart with dependency tracking. There are a ton of options, I am currently using openproject which is decent but few features are behind expensive paywall. Might switch later.

Plane.so - Friendly and familiar interface. More focused towards software development. Few options are situated deeper making access difficult.

OpenProject - Can be extended to traditional projects or non software based projects. Few features are behind paywall and some features are non intuitive.

Mind Mapping

Just hosting my own instance of wisemapping

Hosting your own services

Interested in doing something similar? Why not, here I'll be documenting my complete setup and procedure of replicating these services. What do you need? Time, Patience and Enthusiasm. Apart from that, just any PC, configurable router and internet connection. I'll be releasing 1-2 setups each week for next 4-6 weeks.

On the Software front, it'd be helpful to learn Docker, Linux and Networking before you embark on the journey. I cover some of it in the wiki but not everything

Project Introduction - Rishabh’s Wiki

Reach Out

Liked the article? Subscribe to my email news letters. Want to reach for feedback, suggestions or clarifications? Preferable communication method is LinkedIn at the moment. I'll soon be launching my discord channel.