Every company has their own tech stack, we’re no different. We prefer free and open source software when choosing what software we use. As a small start-up company, we may not use much, but we like it that way. Keep it simple 🙂
Preferred OS: Debian is our preferred OS for anything that we use. We really like Debian because it’s stable and dist-upgrades are possible unlike CentOS, where you can’t move from 5 -> 6 or 6 -> 7 for example. Debian is simple and we like how the kernels are provided, stable and not updated too often like Ubuntu kernels. We hate filling up /boot with a ton of kernels and having to remove old ones constantly. With Debian, this isn’t really an issue.
Preferred Hypervisor: Proxmox is our favorite virtualization environment. Why? Because it’s very easy to configure and use. We have more experience with KVM than other hypervisors, such as Xen. Proxmox makes KVM very easy, and we like the web UI quite a lot. Proxmox is relatively stable and we’ve been using it for many years internally. Our KVM products run on Proxmox, and will for the foreseeable future. We may experiment with OpenStack on our journey though.
Preferred Hardware: Supermicro is our go-to hardware vendor. They generally don’t lock down things like Dell and HP do. The firmware for their hardware is freely available without a subscription, which we like a lot. Their hardware is also very reliable. While there are some common issues, such as strange boot issues or backplanes going bad, they’re much better than Dell or HP in our opinions. For network stuff, we like Arista products, as they seem to support open standards more than Cisco does.
Configuration Management: Ansible is our go-to for managing our configuration and deployments across servers. We use Ansible for anything that we can. It’s preferred over other solutions because of its simplicity and that it uses SSH, and lets be honest, some of us actually like YAML! Ansible is amazing, we love the amount of Ansible roles and playbooks that the community has created. There’s plenty of Ansible modules as well. We currently maintain a few of our own Ansible roles used to configure iptables rules, install node_exporter and apply sysctl configs across our servers. We currently have over 14 Ansible playbooks with variables to maintain various things across our internal infrastructure. We wouldn’t have it any other way!
Monitoring: We currently use Prometheus + AlertManager + Grafana + node_exporter to monitor all of our servers. Prometheus scrapes metrics from node_exporter on every server every 10 seconds, while AlertManager sends us alerts via email and Mattermost. We can see all of our metrics in Grafana. We originally used LibreNMS but it had many limitations and we hated its PHP way of doing things. Running snmpd on every server was annoying and the metrics gathered weren’t that detailed compared to what node_exporter exports. We also use Uptime Robot as 2nd line monitoring to do simple port and ping checks on our servers. Uptime Robot notifies us by email, Mattermost and sometimes SMS depending on how critical it is. We’ve come to love our monitoring setup. It’s simple, easy to deploy and maintain.
Code: Crystal is our favorite programming language for our projects. It’s fast and it’s similar to Ruby, which we’re fans of. To quote our developer, Nathaniel “Crystal is what Ruby would like if it were statically typed and compiled. While Crystal marketed as having C-like performance, in reality using benchmarks its performance is closer to that of Rust and Golang, sometimes outperforming both.” Nathaniel also says “One of the appeals of Crystal to me is the compiler detects things like nil-unsafe code and will throw a compiler error rather than a runtime error if code isn’t nil-safe.” As you could imagine, we really liked this about Crystal. Our old code was primarily written in Ruby, but we slowly transitioned to Crystal. You may be wondering how we’re using Crystal today. We currently use Crystal in combination with the Amber web framework to run our service management panel.
If you’d like to read the rest of Nathaniel’s post, go here! In that post, Nathaniel shares thoughts and first experiences with Crystal and Amber.
All in all, we currently have a pretty simple tech stack here at ULayer. As we grow, we’ll expand and bring on more technologies. We’d love to chat more about this in the future!