Monica CRM is a privacy-focused personal relationship manager. Successfully configuring outbound email is essential for notifications and automations. One of the most common issues for new users is encountering errors related to SSL or STARTTLS when setting up SMTP delivery. This guide provides step-by-step instructions, optimal configuration examples using environment variables, and explanations to help ensure your Monica CRM deployment sends emails reliably.
Posts for: #Technical
Evolution of DNS and the Cursed systemd-resolved
Looking back at our technical beginnings, most of us remember relying on the resolv.conf file. This small but powerful file was our window into the world of DNS—it was our personal guide, helping us translate domain names into IP addresses. Every administrator, whether experienced or a novice, had to work with it at some point. Then systemd arrived, bringing systemd-resolved, and our beloved resolv.conf started behaving like an old friend who suddenly decided not to be as reliable as we thought.
Self-Hosted GitHub Action Runner on Kubernetes
I recently set up a self-hosted GitHub Action Runner on Kubernetes using the Action Runner Controller, aiming for more control over my CI/CD pipeline. This involved configuring Kubernetes with DNS, ingress, and microk8s, and securing my private Docker registry with TLS and a custom Certificate Authority.
Create GitHub App and Secrets
On your repository, go to Developer settings and create and install a GitHub App. You will obtain the necessary details for creating a Kubernetes secret:
SSH in Visual Studio Code with KeePass
Remote SSH extension in Visual Studio Code allows you to directly edit files on a Linux machine and access the Linux console from your Windows workstation. For the best comfort when accessing a remote SSH server from Visual Studio Code, use KeePass with KeeAgent, which works as an SSH agent. Why Use KeePass and KeeAgent?
WebSocket Connection to WireGuard
In some countries (e.g. Egypt) or some hotels, VPN connections are blocked and the only possibility is to tunnel them through WebSocket. In this article, I will focus on that.
How I Used HashiCorp Vault and External Secrets Operator
When building a Kubernetes deployment for an application using MySQL, I initially considered using a ConfigMap to store my database connection details. However, I quickly ran into a problem: ConfigMaps are not designed for sensitive data like passwords, and more importantly, I was using Argo CD for GitOps.
RPI Zero Ethernet Gadget Mode
Using USB Gadget Mode on Raspberry Pi Zero for SSH/RDP Access on Windows 11
The Raspberry Pi Zero is a versatile device that can be configured to act as a USB Ethernet gadget, allowing you to connect to it via SSH or RDP over a single USB cable. This is especially useful when you want a direct network connection without additional hardware. In this article, we will guide you through setting up the Pi Zero in USB gadget mode and installing the necessary Windows 11 drivers for seamless connectivity.
Loki, Promtail and Syslog
On my home server, I was slowly getting annoyed that I didn’t really have an idea of what was happening in the syslog, and when an application, for example, throws an Out of memory error, I simply don’t know about it. That’s why I decided to send syslog to Promtail, which pushes it to Loki (Grafana) and processes it.
Outdated library in my scraper
Today I discovered that a container in my home Kubernetes crashed, which is responsible for downloading the price of the SP500 ETF fund, which is then taken by Prometheus and passed to my Grafana.
MicroK8s and DockerHub
If you work with Docker, you’ve surely noticed recently that DockerHub requires authentication when you download a bit more from it. In this article, I’ve decided to describe how to handle this in connection with MicroK8s.
The first thing we need to modify is the file /var/snap/microk8s/current/args/certs.d/docker.io/hosts.toml. If any subdirectory or file doesn’t exist, create it. The file should look like this:
server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]
[host."https://registry-1.docker.io".auth]
username = "YOUR_DOCKERHUB_USERNAME"
identitytoken = "dckr_pat_TOKEN"
You need to generate a token on the DockerHub website. You can do this by clicking on Account -> Personal Access Tokens