<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Callr Tech Blog</title><link>https://blog.callr.tech/</link><description>Recent content on Callr Tech Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 25 Aug 2021 08:42:42 +0200</lastBuildDate><atom:link href="https://blog.callr.tech/index.xml" rel="self" type="application/rss+xml"/><item><title>CI/CD: Using GitLab and Ansible to deploy to Docker Swarm</title><link>https://blog.callr.tech/gitlab-ansible-docker-swarm-ci-cd/</link><pubDate>Wed, 25 Aug 2021 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/gitlab-ansible-docker-swarm-ci-cd/</guid><description>Yes, this is an article about Docker Swarm in 2021!
We have previously explained how we use GitLab CI and Ansible to deploy services.
In this post, we will show how we use the same setup (GitLab and Ansible) to build and deploy containers to Docker Swarm.
TL;DR We use GitLab CI to build and store a Docker image matching a Git tag We use Ansible (as a shell runner) to template our Docker Stack file We use the docker_stack module to deploy to Swarm Quick reminder GitLab is a web-based Git repository manager with CI/CD pipeline features.</description></item><item><title>Migrating from CircleCI to GitHub Actions</title><link>https://blog.callr.tech/migrating-from-circleci-to-github-actions-golang-docker/</link><pubDate>Tue, 24 Aug 2021 14:42:42 +0200</pubDate><guid>https://blog.callr.tech/migrating-from-circleci-to-github-actions-golang-docker/</guid><description>TL;DR Our GitHub action file thatisuday/go-cross-build to build cross-platform Go binaries skx/github-action-publish-binaries to attach artifacts to the GitHub release docker/setup-qemu-action@v1 to build docker images for multiple platforms docker/setup-buildx-action@v1 not required but recommended docker/metadata-action@v3 to attach labels and tags to the docker image docker/login-action@v1 to login to a Docker registry docker/build-push-action@v2 to build the Docker images and push them to the registry Our Previous CI Setup with CircleCI When we wrote our Kamailio Exporter, we chose to go the Prometheus way, which is the use of a Makefile and the promu tool.</description></item><item><title>FreeSWITCH exporter for Prometheus</title><link>https://blog.callr.tech/freeswitch-exporter-for-prometheus/</link><pubDate>Mon, 23 Aug 2021 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/freeswitch-exporter-for-prometheus/</guid><description>TL;DR The exporter is available here: https://github.com/florentchauveau/freeswitch_exporter Docker images are available here: https://hub.docker.com/r/florentchauveau/freeswitch_exporter/ MIT licensed Contributions welcome There&amp;rsquo;s also our Kamailio exporter The FreeSWITCH Exporter Why In a previous blog post, we explained why we are now using Prometheus, an open source systems monitoring.
FreeSWITCH does not provide a native exporter for Prometheus, we have to use an external one. At the time we were looking for one, the options were:</description></item><item><title>Dockerized Hugo with GitLab CI/CD</title><link>https://blog.callr.tech/static-blog-hugo-docker-gitlab/</link><pubDate>Fri, 24 May 2019 08:42:42 +0000</pubDate><guid>https://blog.callr.tech/static-blog-hugo-docker-gitlab/</guid><description>This article is the third of a series which examines the technical reasons behind the renewed interest for static websites, from both a content writer and a developer perspective.
Previous posts:
Static web - back to the roots? The Edge of the Static Web Hugo Hugo describes itself as &amp;ldquo;The world’s fastest framework for building websites&amp;rdquo;. Hugo is &amp;ldquo;one of the most popular open-source static site generators&amp;rdquo;.</description></item><item><title>The Edge of the Static Web</title><link>https://blog.callr.tech/static-website-performance-seo/</link><pubDate>Fri, 24 May 2019 08:42:42 +0000</pubDate><guid>https://blog.callr.tech/static-website-performance-seo/</guid><description>This article is the second of a series which examines the technical reasons behind the renewed interest for static websites, from both a content writer and a developer perspective.
It also provides you with useful tools and services to build a static website. If you want to learn more about the macro perspective behind the shift toward the static web, feel free to read: Static web - back to the roots?</description></item><item><title>Static web - back to the roots?</title><link>https://blog.callr.tech/static-web-roots/</link><pubDate>Fri, 24 May 2019 08:42:41 +0000</pubDate><guid>https://blog.callr.tech/static-web-roots/</guid><description>This article goes back to the early years of the web to understand why dynamic websites are so prevalent today. Then, we consider what static websites bring in terms of performance, editing speed, and organic results.
At first, the web was static.
The early days Internet was a place for tinkerers. Despite the frequent comparisons between MySpace and Facebook, the two services are fundamentally different. They are also a good representation of the &amp;ldquo;Internet Paradigm&amp;rdquo; of their respective time of fame.</description></item><item><title>Best practices for building docker images with GitLab CI</title><link>https://blog.callr.tech/building-docker-images-with-gitlab-ci-best-practices/</link><pubDate>Mon, 04 Mar 2019 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/building-docker-images-with-gitlab-ci-best-practices/</guid><description>Updated in 2021
At CALLR, we have been using GitLab for quite a while. We are also using more and more Docker containers. In this post, I&amp;rsquo;ll show you how we build docker images with a simple .gitlab-ci.yml file.
Let&amp;rsquo;s not waste any time.
The GitLab CI yaml configuration file Here is a .gitlab-ci.yml file that you can drop in directly without any modification in a project with a working Dockerfile.</description></item><item><title>Sharing our Kamailio exporter for Prometheus</title><link>https://blog.callr.tech/kamailio-exporter-for-prometheus/</link><pubDate>Tue, 09 Oct 2018 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/kamailio-exporter-for-prometheus/</guid><description>TL;DR The exporter is available here: https://github.com/florentchauveau/kamailio_exporter MIT licensed Exposes metrics from tm.stats,sl.stats,core.shmmem and dispatcher.list Contributions welcome We also shared our binrpc Go library Also, check out our FreeSWITCH exporter A bit of history A long time ago (in a g[&amp;hellip;]y), we were using Nagios. Over time, Nagios did not scale as we wish it did. A single instance of Nagios was struggeling at fetching metrics from thousands of servers.</description></item><item><title>CI/CD: Using GitLab + Docker + Ansible</title><link>https://blog.callr.tech/gitlab-ansible-docker-ci-cd/</link><pubDate>Thu, 20 Sep 2018 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/gitlab-ansible-docker-ci-cd/</guid><description>2021 Update: We now have shared how we use GitLab + Ansible to deploy to Docker Swarm.
At CALLR, we have been using GitLab and Ansible internally for quite a time. In this post, I&amp;rsquo;ll explain how we use both tools together with Docker to build an efficient CI/CD pipeline.
Quick reminder GitLab is a web-based Git repository manager with CI/CD pipeline features. Ansible is an automation tool for provisioning, configuration management, and application deployment.</description></item><item><title>Migrating from dep to Go 1.11+ modules</title><link>https://blog.callr.tech/migrating-from-dep-to-go-1.11-modules/</link><pubDate>Tue, 11 Sep 2018 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/migrating-from-dep-to-go-1.11-modules/</guid><description>TL;DR This method works with Go 1.11, 1.12, and should work with every 1.X future release.
move your code outside of GOPATH go mod init [module path]: this will import dependencies from Gopkg.lock. go mod tidy: this will remove unnecessary imports, and add indirect ones. rm -fr vendor/ go build: is everthing ok? rm -f Gopkg.lock Gopkg.toml git commit -m 'chore(dep): migrated from dep to Go 1.11 modules' Introduction Before Go 1.</description></item><item><title>Sharding writes with MySQL and increment offsets</title><link>https://blog.callr.tech/sharding-writes-with-mysql-increment-offsets/</link><pubDate>Wed, 29 Aug 2018 20:42:42 +0200</pubDate><guid>https://blog.callr.tech/sharding-writes-with-mysql-increment-offsets/</guid><description>TL;DR we shard writes and avoid conflicts using an increment offset on PKs each data center contains local write servers we use multi-source replication on read servers so they contain all the data from all data centers, partitioned by month At the beginning, things were simple We were using MySQL: one master for writing, and a few slaves for reading. Besides replication lag (more on that later), it worked fine.</description></item><item><title>Rate limiting for distributed systems with Redis and Lua</title><link>https://blog.callr.tech/rate-limiting-for-distributed-systems-with-redis-and-lua/</link><pubDate>Tue, 28 Aug 2018 20:42:42 +0200</pubDate><guid>https://blog.callr.tech/rate-limiting-for-distributed-systems-with-redis-and-lua/</guid><description>Very early in building the telecom platform at CALLR, we needed to implement rate limiting for calls and API requests.
You probably know the story of lazy developers that fetch items on the API within a loop, for ∞. We also have call centers that use auto dialers badly configured ; they send too many calls per second (CPS). They think that the more &amp;ldquo;simultaneous&amp;rdquo; calls they send, the more calls they will &amp;ldquo;process&amp;rdquo;.</description></item><item><title>Hello World</title><link>https://blog.callr.tech/hello-world/</link><pubDate>Tue, 28 Aug 2018 08:42:42 +0200</pubDate><guid>https://blog.callr.tech/hello-world/</guid><description>At CALLR, we have been working with many technologies, some ancient, some modern, and I think it is time to share some of our work with the world.
CALLR is a Global Voice and SMS telco carrier. We provide our services via an API, Web apps, and telecom gateways (SIP, IAX).
In these blog posts, we will share our experience with some technologies, tools, and methods. Things that failed, things that worked, things that scaled (and things that didn’t).</description></item></channel></rss>