Hitobito Helps You Manage Communities with Complex Group Hierarchies

August 16, 2021 1:48:11 103.85 MB Downloads: 0

In this episode of Running in Production, Matthias Viehweger goes over building a service to help organize groups of people. It’s built with Ruby on Rails and is hosted on OpenShift with Kubernetes. It’s been running in production since 2012.

Matthias talks about building a Rails Engine abstraction, creating a multi-repo monolith, using Sphinx for full text search, making the most of Kubernetes / OpenShift and lots more.

Topics Include

  • 6:23 – There’s an open source version of it along with a hosted SAAS app
  • 9:10 – Motivation for using Ruby on Rails and updating from v4 to v6 over time
  • 12:18 – Using Action Mailer and Delayed Job to send and receive emails
  • 16:40 – A few other gems being used in the project
  • 19:25 – 86 models in the core app and 275 extra for a specific Scout site (~70k LOC too)
  • 22:49 – How billing is handled for the hosted SAAS app (it’s through invoices)
  • 24:54 – Handling integrations by exporting data
  • 26:31 – It’s a multi-repo monolithic application, what the “core” and “wagon” are
  • 32:02 – There’s mostly server rendered templates with a bit of JS on the front-end
  • 35:00 – Full text search is handled with the Thinking Sphinx gem
  • 37:09 – There’s a separate MySQL database for each tenant
  • 42:35 – Tech stack run down so far and how memcached is being used
  • 44:58 – The app is set up to use Docker Compose in dev but Matthias doesn’t use it
  • 48:05 – It’s hosted on APPUiO which is a hosted version of OpenShift
  • 50:20 – We’re all YAML engineers, configuring Kubernetes and DB migrations
  • 1:03:04 – Kustomize is being used instead of Helm for templating YAML files
  • 1:05:20 – The Kubernetes related code is in its own git repo
  • 1:08:01 – From developing a feature locally to pushing it to production
  • 1:19:38 – Resource limits are defined in the Kubernetes config files
  • 1:27:40 – Backing up the database with daily Kubernetes cron jobs
  • 1:31:02 – Developers are treated like grown ups when it comes to customer data
  • 1:34:48 – Handling logging and alerting with Prometheus, Grafana and Kubernetes
  • 1:40:51 – Handling DNS with DNSimple and SSL certificates with Let’s Encrypt
  • 1:44:05 – Best tips? Start with a specific thing instead of making a generic thing
  • 1:46:45 – Check out https://hitobito.com/ and their GitHub account, Matthias is also on GitHub, Twitter and he has a site at http://kronn.de/, also Puzzle is the company he works for

Links

📄 References ⚙️ Tech Stack 🛠 Libraries Used

Support the Show

This episode does not have a sponsor and this podcast is a labor of love. If you want to support the show, the best way to do it is to purchase one of my courses or suggest one to a friend.

  • Dive into Docker is a video course that takes you from not knowing what Docker is to being able to confidently use Docker and Docker Compose for your own apps. Long gone are the days of "but it works on my machine!". A bunch of follow along labs are included.
  • Build a SAAS App with Flask is a video course where we build a real world SAAS app that accepts payments, has a custom admin, includes high test coverage and goes over how to implement and apply 50+ common web app features. There's over 20+ hours of video.