<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps and application security enthusiast's notes</title><link>https://evgenyrudinsky.gitlab.io/</link><description>Recent content on DevOps and application security enthusiast's notes</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 20 Dec 2025 09:00:00 +0100</lastBuildDate><atom:link href="https://evgenyrudinsky.gitlab.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Azure Verified Modules: Enterprise-Grade Bicep Templates</title><link>https://evgenyrudinsky.gitlab.io/2025/12/20/azure-verified-modules-enterprise-grade-bicep-templates/</link><pubDate>Sat, 20 Dec 2025 09:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2025/12/20/azure-verified-modules-enterprise-grade-bicep-templates/</guid><description>&lt;p>Building infrastructure-as-code from scratch can be time-consuming and error-prone. In a &lt;a href="https://evgenyrudinsky.gitlab.io/2022/01/14/azure-resource-governance-with-project-bicep-and-template-specs/">previous article&lt;/a>, I covered how to govern Azure resources with Template Specs. Today, I want to introduce you to &lt;a href="https://aka.ms/AVM">Azure Verified Modules (AVM)&lt;/a> — Microsoft&amp;rsquo;s official library of pre-built, tested, and supported Bicep (and Terraform) modules that follow best practices out of the box.&lt;/p>
&lt;h2 id="what-are-azure-verified-modules">What are Azure Verified Modules? &lt;a href="#what-are-azure-verified-modules">#&lt;/a>&lt;/h2>&lt;p>Azure Verified Modules (AVM) is an initiative by Microsoft to provide a single source of truth for Infrastructure-as-Code modules. These modules are:&lt;/p></description></item><item><title>How to Deploy a Vue.js Static Site with Azure Developer CLI (azd)</title><link>https://evgenyrudinsky.gitlab.io/2025/04/28/how-to-deploy-a-vue.js-static-site-with-azure-developer-cli-azd/</link><pubDate>Mon, 28 Apr 2025 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2025/04/28/how-to-deploy-a-vue.js-static-site-with-azure-developer-cli-azd/</guid><description>&lt;p>Deploying modern front-end applications to the cloud should be simple, repeatable, and secure. In this article, I’ll show how to deploy a Vue.js static site to Azure using the &lt;a href="https://aka.ms/azure-dev">Azure Developer CLI (azd)&lt;/a>, based on my &lt;a href="https://github.com/erudinsky/azd-static-web-vuejs">azd-static-web-vuejs&lt;/a> template repository.&lt;/p>
&lt;h2 id="why-azure-developer-cli">Why Azure Developer CLI? &lt;a href="#why-azure-developer-cli">#&lt;/a>&lt;/h2>&lt;p>The Azure Developer CLI (&lt;code>azd&lt;/code>) is a tool that streamlines the process of provisioning Azure resources, deploying code, and managing environments. It’s especially useful for static web apps, as it combines infrastructure-as-code (Bicep), CI/CD, and local development workflows.&lt;/p></description></item><item><title>Azure SPN for automation</title><link>https://evgenyrudinsky.gitlab.io/2024/12/31/azure-spn-for-automation/</link><pubDate>Tue, 31 Dec 2024 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2024/12/31/azure-spn-for-automation/</guid><description>&lt;p>The purpose of this article is to showcase several authentication options for utilizing Azure resources in Continuous Integration (CI) pipelines. I&amp;rsquo;m going to use GitLab CI (any other DevOps platform would work as well). This guide demonstrates multiple authentication methods for integrating GitLab CI with Azure Cloud. These techniques can be applied to various scenarios, such as deploying infrastructure using Terraform or Azure Bicep. By exploring these authentication options, you&amp;rsquo;ll be better equipped to securely manage your Azure resources within your GitLab CI/CD pipelines.&lt;/p></description></item><item><title>Navigating Azure DevOps API: Retrieving Project Administrator Team Members</title><link>https://evgenyrudinsky.gitlab.io/2024/10/09/navigating-azure-devops-api-retrieving-project-administrator-team-members/</link><pubDate>Wed, 09 Oct 2024 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2024/10/09/navigating-azure-devops-api-retrieving-project-administrator-team-members/</guid><description>&lt;p>When managing projects in Azure DevOps, establishing proper governance and generating comprehensive reports often requires access to specific organizational data. One crucial piece of information is the membership of the default Project Administrator team, which is automatically created with each new project.&lt;/p>
&lt;p>However, working with the &lt;a href="https://learn.microsoft.com/rest/api/azure/devops/?view=azure-devops-rest-7.2?wt.mc_id=MVP_387222?">ADO API&lt;/a> can be challenging, especially when compared to other Microsoft APIs like Graph or Azure. The process of retrieving the Project Administrator team members involves multiple API calls across different endpoints, making it less straightforward than one might expect.&lt;/p></description></item><item><title>Leverage GitLab CI/CD Components for deployments in Azure</title><link>https://evgenyrudinsky.gitlab.io/2024/05/26/leverage-gitlab-ci/cd-components-for-deployments-in-azure/</link><pubDate>Sun, 26 May 2024 09:00:00 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2024/05/26/leverage-gitlab-ci/cd-components-for-deployments-in-azure/</guid><description>&lt;p>The GitLab&amp;rsquo;s CI/CD Catalog became recently &lt;a href="https://about.gitlab.com/blog/2024/05/08/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/">generally available&lt;/a> and therefore it&amp;rsquo;s time to build and share something useful and reusable for the community.&lt;/p>
&lt;h2 id="what-are-components">What are components? &lt;a href="#what-are-components">#&lt;/a>&lt;/h2>&lt;p>Components allow you to define reusable building blocks for your pipelines. They abstract away complexity and make pipelines more modular. Define a build component that can be reused across pipelines.&lt;/p>
&lt;p>At the time of writing this article only template-type components available (there is CI steps coming up next). This article is about template-type components.&lt;/p></description></item><item><title>Structuring terraform projects</title><link>https://evgenyrudinsky.gitlab.io/2023/10/20/structuring-terraform-projects/</link><pubDate>Fri, 20 Oct 2023 09:00:00 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2023/10/20/structuring-terraform-projects/</guid><description>&lt;p>Howdy! It&amp;rsquo;s been awhile since I wrote here, time to shake off the dust from a pen and put something useful! 😉&lt;/p>
&lt;p>In this article I&amp;rsquo;d like to share my thoughts on building terraform project in a way so that it fits the following:&lt;/p>
&lt;ul>
&lt;li>Clear structure;&lt;/li>
&lt;li>Reusable modules;&lt;/li>
&lt;li>Multiple environments.&lt;/li>
&lt;/ul>
&lt;p>⚠️ This article is very much abstracted from a particular use case (i.e. it does not necessarily need to be targeting a specific cloud provider or use a specific terraform provider), its idea can be applied to any use case. We are looking at the following structure:&lt;/p></description></item><item><title>I am joining GitLab</title><link>https://evgenyrudinsky.gitlab.io/2023/04/03/i-am-joining-gitlab/</link><pubDate>Mon, 03 Apr 2023 09:00:00 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2023/04/03/i-am-joining-gitlab/</guid><description>&lt;p>I am joining GitLab, the world where &lt;a href="https://about.gitlab.com/company/mission/#everyone-can-contribute">everyone can contribute&lt;/a> to live &lt;a href="https://about.gitlab.com/handbook/values/">six core values&lt;/a> (also known as CREDIT). 🎉&lt;/p>
&lt;p>&lt;a href="https://erudinsky.com/about/#background">Being through&lt;/a> various roles in the recent years, with all the broad experience gained, I am pretty sure about this choice and without doubts truly believe in the success of the company. I am joining the &lt;a href="https://about.gitlab.com/services/">Professional Services Team&lt;/a> to help our clients deliver the best products using GitLab&amp;rsquo;s DevOps platform. &lt;strong>Reducing time to market by accelerating the adoption of modern software delivery methods&lt;/strong> is our (and, of course, mine) main priority.&lt;/p></description></item><item><title>Building GitLab demo - part 1</title><link>https://evgenyrudinsky.gitlab.io/2022/10/28/building-gitlab-demo-part-1/</link><pubDate>Fri, 28 Oct 2022 00:07:00 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/10/28/building-gitlab-demo-part-1/</guid><description>&lt;p>In these series I&amp;rsquo;d like to share my thoughts on building quick and approachable GitLab demo using as much as possible features and capabilities with less effort and keep cost slim as well. You may also want to check &lt;a href="https://evgenyrudinsky.gitlab.io/2023/04/03/i-am-joining-gitlab/">my first 6 months reflection&lt;/a> on being part of the GitLab organisation.&lt;/p>
&lt;p>I start with a GitLab instance and for the demo I am going to use Community Edition (since it does not require any commitments, but the same approach is possible to apply to EE). This is a &lt;a href="https://about.gitlab.com/install/ce-or-ee/">good page&lt;/a> to figure out what editions are available.&lt;/p></description></item><item><title>Static site with Hugo and Gitlab Pages</title><link>https://evgenyrudinsky.gitlab.io/2022/09/30/static-site-with-hugo-and-gitlab-pages/</link><pubDate>Fri, 30 Sep 2022 17:00:00 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/09/30/static-site-with-hugo-and-gitlab-pages/</guid><description>&lt;p>The intention of this post is to document the process of building &lt;a href="https://evgenyrudinsky.gitlab.io/">this web site&lt;/a> and outline some great resources I used along the journey. This is a static site based on &lt;a href="https://gohugo.io/">Hugo&lt;/a> and runs using &lt;a href="https://docs.gitlab.com/ee/user/project/pages/">GitLab pages&lt;/a>. I have been fan of &lt;a href="https://erudinsky.com/2022/01/07/static-web-site-on-azure-with-azure-devops-and-bicep/">static&lt;/a> &lt;a href="https://erudinsky.com/2017/01/09/seo-friendly-aws-static-website-with-ssl/">sites&lt;/a> for a while.&lt;/p>
&lt;p>Back few years earlier I used Ruby on Rails framework, &lt;a href="https://evgenyrudinsky.gitlab.io/2017/05/15/how-to-run-rails-app-with-postgres-puma-and-nginx-in-docker/">Docker Compose&lt;/a> and lots of other technologies to run &lt;a href="https://web.archive.org/web/20180824002352/https://erudinsky.com">this site&lt;/a>. 🤦‍♂️ This is no longer needed as we can easily publish content without all thes complexities &amp;hellip;&lt;/p></description></item><item><title>Azure Policy as code with Bicep</title><link>https://evgenyrudinsky.gitlab.io/2022/09/20/azure-policy-as-code-with-bicep/</link><pubDate>Tue, 20 Sep 2022 07:00:00 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/09/20/azure-policy-as-code-with-bicep/</guid><description>&lt;p>&lt;a href="https://aka.ms/AzurePolicy">Azure Policy&lt;/a> is the way to enforce company&amp;rsquo;s standards and settle compliance properly at-scale. While it&amp;rsquo;s possible to do portal clickOps in small environments with little requirements, I found it&amp;rsquo;s error prone and cumbersome to deal with in anything that is bigger than just a personal Azure tenant and a demo subscription in it. :) In this article I want to walk through different aspects of policies, provide simple examples of deploying policies as code (Azure Bicep) and outline several resources that I used along the way in my journey. I highly recommend the following video (taken from &lt;a href="https://learn.microsoft.com/azure/governance/policy/overview#video-overview?wt.mc_id=MVP_387222?">here&lt;/a>) to get started with policies:&lt;/p></description></item><item><title>How to build and deploy to Azure with GitLab</title><link>https://evgenyrudinsky.gitlab.io/2022/09/08/how-to-build-and-deploy-to-azure-with-gitlab/</link><pubDate>Thu, 08 Sep 2022 20:09:57 +0200</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/09/08/how-to-build-and-deploy-to-azure-with-gitlab/</guid><description>&lt;p>In this short post you&amp;rsquo;ll find how to prepare your GitLab to deploy to Azure.&lt;/p>
&lt;h2 id="service-principal">Service principal &lt;a href="#service-principal">#&lt;/a>&lt;/h2>&lt;p>Generate Service Principal (aka App Registration) using azure CLI (either builtin shell or local terminal, you must be logged in with &lt;code>Owner&lt;/code> role credentials since we need to assign role to the scope):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>az ad sp create-for-rbac --name GitLabServicePrincipalName --role Owner --scopes /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4&lt;/span>&lt;span>&lt;span style="color:#ff79c6">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5&lt;/span>&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;appId&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;REDACTED&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6&lt;/span>&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;displayName&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;GitLabServicePrincipalName&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7&lt;/span>&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;password&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;REDACTED&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">8&lt;/span>&lt;span> &lt;span style="color:#f1fa8c">&amp;#34;tenant&amp;#34;&lt;/span>: &lt;span style="color:#f1fa8c">&amp;#34;&amp;lt;REDACTED&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">9&lt;/span>&lt;span>&lt;span style="color:#ff79c6">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Feel free to change scopes and role (i.e. custom role or subscription scope instead). Learn more how to generate SPN &lt;a href="https://learn.microsoft.com/cli/azure/azure-cli-sp-tutorial-1?tabs=bash&amp;amp;wt.mc_id=MVP_387222">here&lt;/a>.&lt;/p></description></item><item><title>How to make your own self-hosted VPN server using OpenVPN</title><link>https://evgenyrudinsky.gitlab.io/2022/03/11/how-to-make-your-own-self-hosted-vpn-server-using-openvpn/</link><pubDate>Fri, 11 Mar 2022 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/03/11/how-to-make-your-own-self-hosted-vpn-server-using-openvpn/</guid><description>&lt;p>In this article you&amp;rsquo;ll get end-to-end instructions on how to create and operate a self-hosted VPN server using &lt;a href="https://openvpn.net/source-code/">OpenVPN&lt;/a> community edition under 5 minutes for just 4 euros per month with unlimited number of connected clients. In this article you&amp;rsquo;ll also learn how to configure a client&amp;rsquo;s profile so you can get connected and use your self-hosted VPN server using either your computer or telephone. I&amp;rsquo;ll try to write as approachable as possible so anyone with decent computer knowledge can go through this and set it up. In the light of some recent changes in my motherland country it is important for people to stay connected with the rest of the world and follow broader sources of information for making personal opinions, avoid group thinking and maintain clear understanding of things happening around.&lt;/p></description></item><item><title>Quality controls in Azure DevOps with Prisma Cloud</title><link>https://evgenyrudinsky.gitlab.io/2022/01/21/quality-controls-in-azure-devops-with-prisma-cloud/</link><pubDate>Fri, 21 Jan 2022 09:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/01/21/quality-controls-in-azure-devops-with-prisma-cloud/</guid><description>&lt;p>This time I want to focus on quality by implementing CVE and compliance scan tool as well as the control gate on a release stage in Azure DevOps leveraging Prisma Cloud platform by Palo Alto Networks.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>├── README.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>├── binaries
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3&lt;/span>&lt;span>│   └── twistcli
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4&lt;/span>&lt;span>├── pipelines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5&lt;/span>&lt;span>│   └── azure-pipelines.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6&lt;/span>&lt;span>└── src
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7&lt;/span>&lt;span> └── Dockerfile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I would like to build my code using Azure DevOps pipelines and fail earlier as possible in case:&lt;/p></description></item><item><title>Azure resource governance with project Bicep and template specs</title><link>https://evgenyrudinsky.gitlab.io/2022/01/14/azure-resource-governance-with-project-bicep-and-template-specs/</link><pubDate>Fri, 14 Jan 2022 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/01/14/azure-resource-governance-with-project-bicep-and-template-specs/</guid><description>&lt;p>Last week I was setting up a &lt;a href="https://evgenyrudinsky.gitlab.io/2022/01/07/static-web-site-on-azure-with-azure-devops-and-bicep/">static web site using Azure DevOps and Bicep&lt;/a> consuming templates from git. This approach might not be the best option for a large environment with multiple teams as we&amp;rsquo;ll run into several challenges trying to share and (re)use the templates. Fortunately, Microsoft has a better place for the template. It&amp;rsquo;s called &lt;a href="https://learn.microsoft.com/azure/azure-resource-manager/templates/template-specs?tabs=azure-powershell&amp;amp;wt.mc_id=MVP_387222">Azure Resource Manager template specs&lt;/a>, which is a regular resource with type &lt;code>Microsoft.Resources/templateSpecs&lt;/code> that has several benefits including ability to store templates with different versions (both ARM and Bicep are supported), manage access through Azure RBAC, template&amp;rsquo;s consumer does not need full access to it and can deploy resource just passing parameters.&lt;/p></description></item><item><title>Static web site on Azure with Azure DevOps and Bicep</title><link>https://evgenyrudinsky.gitlab.io/2022/01/07/static-web-site-on-azure-with-azure-devops-and-bicep/</link><pubDate>Fri, 07 Jan 2022 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2022/01/07/static-web-site-on-azure-with-azure-devops-and-bicep/</guid><description>&lt;p>In this sprint I&amp;rsquo;ll be setting up landing page (aka comming soon page or pre-launch page &amp;hellip; static web site using Azure to be precise). The purpose of the exercise is to learn Microsoft&amp;rsquo;s capabilities around this topic. By the way, few years ago I wrote &lt;a href="https://evgenyrudinsky.gitlab.io/2017/01/09/seo-friendly-aws-static-website-with-ssl/">similar post&lt;/a> for AWS services ;-)&lt;/p>
&lt;blockquote>
&lt;p>All code from this sprint is &lt;a href="https://github.com/erudinsky/Azure-Bicep-Workshop">here&lt;/a>&lt;/p>&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1&lt;/span>&lt;span>├── README.md
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2&lt;/span>&lt;span>├── pipelines
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3&lt;/span>&lt;span>│   └── azure-pipelines.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4&lt;/span>&lt;span>├── src
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5&lt;/span>&lt;span>│   ├── cake.png
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6&lt;/span>&lt;span>│   ├── error.html
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7&lt;/span>&lt;span>│   └── index.html
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8&lt;/span>&lt;span>└── templates
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9&lt;/span>&lt;span> ├── main.bicep
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10&lt;/span>&lt;span> ├── modules
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11&lt;/span>&lt;span> │   ├── cdn.bicep
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12&lt;/span>&lt;span> │   ├── scripts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13&lt;/span>&lt;span> │   │   └── staticweb.sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14&lt;/span>&lt;span> │   └── storage-with-static-web.bicep
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15&lt;/span>&lt;span> └── parameters.dev.json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>I have the following objectives for this sprint:&lt;/p></description></item><item><title>Authenticate With Azure Container Registry From Azure Kubernetes Service</title><link>https://evgenyrudinsky.gitlab.io/2021/10/10/authenticate-with-azure-container-registry-from-azure-kubernetes-service/</link><pubDate>Sun, 10 Oct 2021 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2021/10/10/authenticate-with-azure-container-registry-from-azure-kubernetes-service/</guid><description>&lt;p>As an engineer I want to pull container images that are part of my pods&amp;rsquo; deployments to &lt;strong>Azure Kubernetes Service&lt;/strong> (further - AKS) from private container registry &lt;strong>Azure Container Registry&lt;/strong> (further - ACR). I have created &lt;strong>Azure Resource Group&lt;/strong> (further - RG), AKS and ACR. I have submitted my very first manifest with pod using kubectl, but all I can see is that my pod creation is endlessly pending&amp;hellip;&lt;/p>
&lt;p>By the way, if you don&amp;rsquo;t want to read this, you can watch this :)&lt;/p></description></item><item><title>Build and release Docker Compose using Azure DevOps</title><link>https://evgenyrudinsky.gitlab.io/2019/12/01/build-and-release-docker-compose-using-azure-devops/</link><pubDate>Sun, 01 Dec 2019 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2019/12/01/build-and-release-docker-compose-using-azure-devops/</guid><description>&lt;p>I&amp;rsquo;ve been fighting a bit with &lt;a href="https://learn.microsoft.com/azure/devops/pipelines/tasks/build/docker-compose?view=azure-devops&amp;amp;wt.mc_id=MVP_387222">some&lt;/a> of the Azure DevOps pipeline &lt;a href="https://learn.microsoft.com/azure/devops/pipelines/tasks/build/docker?view=azure-devops&amp;amp;wt.mc_id=MVP_387222">tasks&lt;/a> trying to configure end-to-end solution for one of my side project. It is based on a good old Docker Compose and I am pretty happy with how it works in &lt;a href="https://docs.docker.com/compose/production/">production&lt;/a>. What I wanted to do is schematically described down below.&lt;/p>
&lt;p>&lt;img src="docker-compose-cicd-with-azure-devops-microsoft.png" alt="Docker Compose CI/CD with Azure DevOps">&lt;/p>
&lt;h2 id="what-is-azure-devops">What is Azure DevOps &lt;a href="#what-is-azure-devops">#&lt;/a>&lt;/h2>&lt;p>&lt;a href="https://azure.microsoft.comservices/devops/?wt.mc_id=MVP_387222?">Azure DevOps&lt;/a> helps to plan smarter, collaborate better, and ship faster with a set of modern dev services. It&amp;rsquo;s a end-to-end solution for any software development cycle. Anyone can use it even for &lt;a href="https://azure.microsoft.compricing/details/devops/azure-devops-services/?wt.mc_id=MVP_387222?">free&lt;/a> with some limitations/conditions of usage (public projects, limited pipeline minutes per month etc). And it&amp;rsquo;s free unlimited git!&lt;/p></description></item><item><title>How to Use S3 compatible Minio with Cloudberry</title><link>https://evgenyrudinsky.gitlab.io/2018/01/22/how-to-use-s3-compatible-minio-with-cloudberry/</link><pubDate>Mon, 22 Jan 2018 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2018/01/22/how-to-use-s3-compatible-minio-with-cloudberry/</guid><description>&lt;p>Here at CloudBerry, where one of the goal I have is to help partners decide, pick and build right configuration for dealing with computers data when they need backup solution. FTP, SCP, WebDav and some other proprietary protocols have been here forever, where simplicity and flexibility made them number one in data protection and management fields as primary target configurations. But, there is big BUT! Time flies, we can afford tens or even hundreds mbps bi-direction circuits, where target configuration apart disk IOPs may become primary bottleneck. I would consider above protocols as legacy since they have number of limitations and slow due to architecture of data transfers. And this is where something else come up.
Minio gets more and more scores as part of seamless storage system for self-hosted configurations. Quick example where you would follow this guide, — you offer backup and DR services, you have bunch of unused disks (JBOD), few NASes and huge spot of free space on one of your legendary legacy server, which is still alive and you can&amp;rsquo;t just throw it away since it is still powerful and can do the job.&lt;/p></description></item><item><title>Episode 2: Build your own free PBX with Asterisk</title><link>https://evgenyrudinsky.gitlab.io/2017/11/18/episode-2-build-your-own-free-pbx-with-asterisk/</link><pubDate>Sat, 18 Nov 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/11/18/episode-2-build-your-own-free-pbx-with-asterisk/</guid><description>&lt;p>Welcome to the second Episode of the AWS Free tier series. This is going to be part one (total three parts), where we are going to build our PBX carcass based on free AWS EC2. The goal of this episode is to show how you can leverage AWS environment in full throttle and get super handy services for your daily usage. We will be using EC2, S3, DynamoDB for building robust and very very secure telephony system.&lt;/p></description></item><item><title>AWS EC2 user data script windows</title><link>https://evgenyrudinsky.gitlab.io/2017/09/27/aws-ec2-user-data-script-windows/</link><pubDate>Wed, 27 Sep 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/09/27/aws-ec2-user-data-script-windows/</guid><description>&lt;p>Another interesting customer case at CloudBerry Lab brought me to Amazon EC2 User Data script back again. I used to make it in the past for Linux (check this article about &lt;a href="https://erudinsky.com/2017/09/21/ec2-user-data-script-example">EC2 user data script example&lt;/a>). Now the task is similar, but OS is different.&lt;/p>
&lt;h2 id="the-challenge">The challenge &lt;a href="#the-challenge">#&lt;/a>&lt;/h2>&lt;p>We need to have application installed into the Guest OS in our EC2 instance on launch. In order to do this we need to walk through the following steps:&lt;/p></description></item><item><title>EC2 user data script example</title><link>https://evgenyrudinsky.gitlab.io/2017/09/21/ec2-user-data-script-example/</link><pubDate>Thu, 21 Sep 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/09/21/ec2-user-data-script-example/</guid><description>&lt;p>Some time ago I &lt;a href="https://evgenyrudinsky.gitlab.io/2016/09/14/aws-ec2-linux-backup">wrote&lt;/a> about Linux agent from CloudBerry Lab. This time I want to pack all together and show advanced capabilities of AWS.&lt;/p>
&lt;p>When we launch &lt;a href="https://aws.amazon.com/ec2/">AWS EC2&lt;/a> (compute instance in the cloud) we may want to have something pre-installed (or pre-done) before we get into this VM and start working. Let me give you an example. I do launch instances with Linux OS quite often for various reason (customer&amp;rsquo;s demo, testing applications, testing software etc) and I want to have number of steps without my intervention after launch. To be precise I need my software installed when I SSH into my either CentOS or Debian. Think wide now, don&amp;rsquo;t be locked in my software. Use anything you&amp;rsquo;d love to have. Well &lt;a href="http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html">this&lt;/a> is good article on how to have PHP installed. In my article I&amp;rsquo;d like to have &lt;a href="https://www.cloudberrylab.com/backup/linux.aspx">CBL for Linux&lt;/a> installed with storage configured and backup plan scheduled. Sound cool, right? Let&amp;rsquo;s do it.&lt;/p></description></item><item><title>How to send SMS using Amazon SNS and Python</title><link>https://evgenyrudinsky.gitlab.io/2017/09/14/how-to-send-sms-using-amazon-sns-and-python/</link><pubDate>Thu, 14 Sep 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/09/14/how-to-send-sms-using-amazon-sns-and-python/</guid><description>&lt;p>We live in the World of messengers and this might be not relevant tutorial, however this is not true. Sometimes we may need short text message to notify someone about something (for example, someone with not fancy phone or someone who does not have Internet available on their phone or we just need to send short message about accident on the server or just to send message to our grandparents). With that in mind, let&amp;rsquo;s take a look at &lt;a href="https://aws.amazon.com/sns/">Amazon SNS&lt;/a> service with SMS option.&lt;/p></description></item><item><title>AWS EFS Windows</title><link>https://evgenyrudinsky.gitlab.io/2017/08/30/aws-efs-windows/</link><pubDate>Wed, 30 Aug 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/08/30/aws-efs-windows/</guid><description>&lt;blockquote>
&lt;p>This article was written more than 5 years ago and it was just an experiment &amp;hellip;&lt;/p>&lt;/blockquote>
&lt;p>Elastic File System (&lt;a href="https://aws.amazon.com/efs/">EFS&lt;/a>) from Amazon was introduced at the end of 2016 (at &lt;a href="https://reinvent.awsevents.com/">re:Invent 2016&lt;/a>) and in fact adds great value to cloud compute services like EC2. If you are not aware of this new service, in short - it is file share that you can mount to your cloud (or even on-prem servers connected to your VPC through Direct Connect service). Simply saying you can do &lt;code>mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 &amp;lt;ip-of-your-efs&amp;gt;:/ /tmp&lt;/code>. This is copy/paste from AWS console with recommendation on mounting file share to Linux instance (of course you need to have NFS client with v4.1 support). And you can do this to multiple EC2 instances as well (even more - you can add this into Advanced details -&amp;gt; User&amp;rsquo;s data for launching new instances with EFS attached by default for all new instances). Something like this:&lt;/p></description></item><item><title>How to Run Rails App With Postgres Puma and Nginx in Docker</title><link>https://evgenyrudinsky.gitlab.io/2017/05/15/how-to-run-rails-app-with-postgres-puma-and-nginx-in-docker/</link><pubDate>Mon, 15 May 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/05/15/how-to-run-rails-app-with-postgres-puma-and-nginx-in-docker/</guid><description>&lt;p>I would probably need to start this post with &amp;ldquo;why?&amp;rdquo; entry, however I leave it for other &lt;a href="https://medium.com/@nagarwal/why-use-docker-for-development-f3d1d1b61b05">nice&lt;/a> &lt;a href="https://medium.com/travis-on-docker/why-and-how-to-use-docker-for-development-a156c1de3b24">articles&lt;/a> around this topic. I recently moved all my development from local environment (mac) to containers and have moved this web-site in production to containers (3 containers) with AmazonEC2 driver for docker-machine. This post contains boilerplates for Rails, PostgreSQL, nginx and some other configuration parts. I will be using Docker Compose.&lt;/p>
&lt;h2 id="install-docker-on-mac">Install Docker on mac &lt;a href="#install-docker-on-mac">#&lt;/a>&lt;/h2>&lt;p>I don&amp;rsquo;t think this needs to be explain since you can &lt;a href="https://docs.docker.com/docker-for-mac/install/">check this&lt;/a> and it&amp;rsquo;s done in 2 minutes. If you do Docker for other operation system, check the same link, there are options for Windows and Linux environments. I would move to the next step once you have the below outputs as well (versions might be slightly different since they are rolling out updates frequently):&lt;/p></description></item><item><title>SEO friendly AWS static website with SSL</title><link>https://evgenyrudinsky.gitlab.io/2017/01/09/seo-friendly-aws-static-website-with-ssl/</link><pubDate>Mon, 09 Jan 2017 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2017/01/09/seo-friendly-aws-static-website-with-ssl/</guid><description>&lt;blockquote>
&lt;p>👉 This post was written in 2017. I am sure there are much better ways to arrange static web site. For instance I recently posted the following article: &lt;a href="https://evgenyrudinsky.gitlab.io/2022/01/07/static-web-site-on-azure-with-azure-devops-and-bicep/">Static web site on Azure with Azure DevOps and Bicep&lt;/a> which you may want to check! ✌️&lt;/p>&lt;/blockquote>
&lt;p>Q: What is static website?
A: It is website without dynamic data.&lt;/p>
&lt;p>A: What is dynamic data?
Q: Well, it is data that can or can&amp;rsquo;t be changed due to user&amp;rsquo;s (visitor) interactions, user&amp;rsquo;s (visitor) location, some internal conditions (for example whether conditions, currency exchange rate) and so-on.&lt;/p></description></item><item><title>How to backup PostgreSQL on Ubuntu to the cloud of your choice?</title><link>https://evgenyrudinsky.gitlab.io/2016/12/30/how-to-backup-postgresql-on-ubuntu-to-the-cloud-of-your-choice/</link><pubDate>Fri, 30 Dec 2016 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2016/12/30/how-to-backup-postgresql-on-ubuntu-to-the-cloud-of-your-choice/</guid><description>&lt;p>PostgreSQL is very popular solution as backend for many web projects (I believe there are other reasons to use PSQL for data store). I recently wrote short note about PSQL dump, but I&amp;rsquo;d love to extend its capabilities by offloading it to the separate storage (rather than keeping dumps in the production compute instance). Essentially, what I am going to describe here is how to backup PostgreSQL databases to the cloud (public) storage. I will use two different options: &lt;a href="https://aws.amazon.com/s3/">Amazon Simple Storage Service (S3)&lt;/a> and &lt;a href="https://cloud.google.com/storage/docs/storage-classes">Google Cloud Platform (GCP)&lt;/a> and Nearline storage class (may be even Coldline to cut costs).&lt;/p></description></item><item><title>Conveyoring Files for Backup Cloudberry Backup With Prepost Scripts</title><link>https://evgenyrudinsky.gitlab.io/2016/12/21/conveyoring-files-for-backup-cloudberry-backup-with-prepost-scripts/</link><pubDate>Wed, 21 Dec 2016 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2016/12/21/conveyoring-files-for-backup-cloudberry-backup-with-prepost-scripts/</guid><description>&lt;p>Working with customers is always great experience and obviously it is one of the biggest way to learn new things. One of the case I&amp;rsquo;ve been working on (being CloudBerry Lab solutions architect member) had interesting requirements. Customer wanted to offload all their video data (exported surveillance content from their cameras) off to &lt;a href="https://aws.amazon.com/s3/storage-classes/">Amazon S3 with Infrequent Access storage class&lt;/a>. This is very simple, but the interesting part is that amount of data depended on the time of the day and .. all these files are exported by third-party to certain directory on the server with &lt;a href="http://www.cloudberrylab.com/backup">cloud backup tool&lt;/a> and you never knew their total size and more over you see those files (names), but you couldn&amp;rsquo;t touch them until they became over certain size. Last statement gave me really good strategy and the following iterations came up on board as acceptable solution.&lt;/p></description></item><item><title>AWS EC2 Linux backup</title><link>https://evgenyrudinsky.gitlab.io/2016/09/14/aws-ec2-linux-backup/</link><pubDate>Wed, 14 Sep 2016 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2016/09/14/aws-ec2-linux-backup/</guid><description>&lt;p>There is awesome &lt;a href="https://aws.amazon.com/amazon-linux-ami/">Amazon Linux AMI&lt;/a>, I think it is the most popular image that used for creating EC2 across all AWS regions. In fact you read / watch about it in every single tutorial / education course. I can just agree with all listed key features of it, but personally want to admit the following:&lt;/p>
&lt;p>&lt;img src="aws-ec2-linux-backup.jpg" alt="AWS EC2 Linux backup">&lt;/p>
&lt;ul>
&lt;li>Lightweight. Indeed, it&amp;rsquo;s super small and contains just really basic. In free tier it is supplied by GP2 8GiB (General Purpose SSD with up to 3000 IOPS) and for daily tasks that should be fine;&lt;/li>
&lt;li>Comes with built-in AWS CLI. This is what I really love! In few clicks with IAM role assigned ( (!!!) do NOT forget to do this launching your instance, otherwise you&amp;rsquo;ll miss that huge piece of Amazon);&lt;/li>
&lt;li>Stable and the most reliable. This might be just my opinion, but as it is driven by Amazon and community, it should be the most robust and mature.&lt;/li>
&lt;/ul>
&lt;p>The launch part should be super simple and in most cases people just follow the wizard (keep your pem key in the right place and chmod it to the lowest number you can). There are different use cases people have with this image (from hosting PBX to SQL / noSQL DBs or webservices with Apache / Nginx etc). It&amp;rsquo;s all about data actually and data should be saved and recoverable.&lt;/p></description></item><item><title>Minimal object storage S3 compatible</title><link>https://evgenyrudinsky.gitlab.io/2016/08/30/minimal-object-storage-s3-compatible/</link><pubDate>Tue, 30 Aug 2016 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2016/08/30/minimal-object-storage-s3-compatible/</guid><description>&lt;p>At Cloudberry lab I&amp;rsquo;ve met lots of cases where customers would like to use their FTP or even webDAV stack as backup destination. In some cases this become a nightmare and either backup window is not affordable (e.g. backup performance is not really awesome). I started to seek for alternative to this legacy architectures and, I guess, I found the first and the fly is good so far! &lt;a href="http://minio.io">Minio&lt;/a> — minimal object storage, what acts as generic s3 compatible storage.&lt;/p></description></item><item><title>Call recording Asterisk</title><link>https://evgenyrudinsky.gitlab.io/2016/08/04/call-recording-asterisk/</link><pubDate>Thu, 04 Aug 2016 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2016/08/04/call-recording-asterisk/</guid><description>&lt;p>I was experimenting with Asterisk IP/PBX, which I have &lt;a href="https://evgenyrudinsky.gitlab.io/2015/12/21/how-to-install-asterisk-ippbx-on-debian-8x-jessie">explained how to deploy recently&lt;/a>. It was a bit tough after few years of not touching it, but eventually I did it. One of the major feature you need to have, running heavy loaded call-center, is call recording. And fortunately there is embedded feature in this soft switch called MixMonitor. Well, there are few limitations, but using Linux and 3d party we can easily get rid of them (i.e. I want mp3 format for all my recordings instead of GSM or others).&lt;/p></description></item><item><title>Mount AWS S3 bucket to your Debian</title><link>https://evgenyrudinsky.gitlab.io/2016/07/27/mount-aws-s3-bucket-to-your-debian/</link><pubDate>Wed, 27 Jul 2016 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2016/07/27/mount-aws-s3-bucket-to-your-debian/</guid><description>&lt;p>This is really nice to have as it can extend Linux file system with unlimited capacity for assets / logs / recorded call etc. The key is &lt;a href="https://github.com/s3fs-fuse/s3fs-fuse">S3FS&lt;/a>!&lt;/p>
&lt;p>Ok, let&amp;rsquo;s get started.&lt;/p>
&lt;ul>
&lt;li>Create bucket in S3 and IAM user with full S3 access;&lt;/li>
&lt;li>Install dependencies;&lt;/li>
&lt;li>Install S3FS;&lt;/li>
&lt;li>Save access and secret key;&lt;/li>
&lt;li>Mount bucket;&lt;/li>
&lt;li>Profit!&lt;/li>
&lt;/ul>
&lt;p>The following dependencies you will need:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>apt-get install build-essential git libfuse-dev libcurl4-openssl-dev libxml2-dev mime-support automake libtool pkg-config libssl-dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Clone S3FS to your Linux FS:&lt;/p></description></item><item><title>Compile G729 for Asterisk from binaries</title><link>https://evgenyrudinsky.gitlab.io/2015/12/22/compile-g729-for-asterisk-from-binaries/</link><pubDate>Tue, 22 Dec 2015 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2015/12/22/compile-g729-for-asterisk-from-binaries/</guid><description>&lt;p>&lt;a href="http://asterisk.hosting.lv/">This&lt;/a> is quite popular source of binaries for enabling premium G.729 module (&lt;code>codec_g729.so&lt;/code>) in Asterisk. Let&amp;rsquo;s enable this module for &lt;a href="https://evgenyrudinsky.gitlab.io/2015/12/21/how-to-install-asterisk-ippbx-on-debian-8x-jessie">our recently installed Asterisk v13&lt;/a>.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites &lt;a href="#prerequisites">#&lt;/a>&lt;/h2>&lt;p>In order to install this codec we need some prerequisites. Let&amp;rsquo;s get them and install. We can either wget it or clone from git. Does not matter. BCG729 is the lib we need.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>&lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> /usr/src/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.0.tar.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3&lt;/span>&lt;span>tar xzf bcg729-1.0.0.tar.gz
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4&lt;/span>&lt;span>&lt;span style="color:#8be9fd;font-style:italic">cd&lt;/span> bcg729-1.0.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5&lt;/span>&lt;span>./configure --libdir&lt;span style="color:#ff79c6">=&lt;/span>/lib
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">6&lt;/span>&lt;span>make
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">7&lt;/span>&lt;span>make install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="binaries">Binaries &lt;a href="#binaries">#&lt;/a>&lt;/h2>&lt;p>Let&amp;rsquo;s check our CPU type, Asterisk version&lt;/p></description></item><item><title>Fail2ban with Asterisk 13</title><link>https://evgenyrudinsky.gitlab.io/2015/12/22/fail2ban-with-asterisk-13/</link><pubDate>Tue, 22 Dec 2015 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2015/12/22/fail2ban-with-asterisk-13/</guid><description>&lt;p>Even having fresh AWS EC2 instance with either fixed or not IP, I start seeing constant attempts to get access to my SIP server. Brute force attacks are very famous and now I&amp;rsquo;m going to change this in my server by setting Fail2Ban in place.&lt;/p>
&lt;h2 id="prepare-asterisk-loggerconf">Prepare Asterisk (logger.conf) &lt;a href="#prepare-asterisk-loggerconf">#&lt;/a>&lt;/h2>&lt;p>Uncomment the following in your &lt;code>/etc/asterisk/logger.conf&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-markdown" data-lang="markdown">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>[general]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>dateformat = %F %T
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3&lt;/span>&lt;span>...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4&lt;/span>&lt;span>[logfiles]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5&lt;/span>&lt;span>security = security
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="installing-and-configuring-fail2ban-using-apt-get-manager">Installing and configuring fail2ban using apt-get manager &lt;a href="#installing-and-configuring-fail2ban-using-apt-get-manager">#&lt;/a>&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>sudo apt-get update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>apt-get install fail2ban
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once finished, let&amp;rsquo;s add the following to the end of &lt;code>/etc/fail2ban/jail.conf&lt;/code>. Feel free to change numbers (they are self-explained).&lt;/p></description></item><item><title>How to install Asterisk IPPBX on Debian 8x jessie</title><link>https://evgenyrudinsky.gitlab.io/2015/12/21/how-to-install-asterisk-ippbx-on-debian-8x-jessie/</link><pubDate>Mon, 21 Dec 2015 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2015/12/21/how-to-install-asterisk-ippbx-on-debian-8x-jessie/</guid><description>&lt;p>I must admit, I did it last time in 2009 and was not aware of new generations at all. That time I used to work with Asterisk 1.4. Let&amp;rsquo;s see what has been missed. :)&lt;/p>
&lt;h2 id="prerequisites">Prerequisites &lt;a href="#prerequisites">#&lt;/a>&lt;/h2>&lt;p>Let&amp;rsquo;s update packages and install some dependencies.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1&lt;/span>&lt;span>apt-get update
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2&lt;/span>&lt;span>apt-get install build-essential -y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3&lt;/span>&lt;span>apt-get install git-core subversion libjansson-dev sqlite autoconf automake libtool libxml2-dev libncurses5-dev -y
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="installation-of-asterisk-13">Installation of Asterisk 13 &lt;a href="#installation-of-asterisk-13">#&lt;/a>&lt;/h2>&lt;p>Now we are ready to download and compile our PBX. Let&amp;rsquo;s quickly do this.&lt;/p></description></item><item><title>Fixing invalid locale settings in Debian 8</title><link>https://evgenyrudinsky.gitlab.io/2015/09/21/fixing-invalid-locale-settings-in-debian-8/</link><pubDate>Mon, 21 Sep 2015 07:00:00 +0100</pubDate><guid>https://evgenyrudinsky.gitlab.io/2015/09/21/fixing-invalid-locale-settings-in-debian-8/</guid><description>&lt;p>You might have met this before. Indeed! Very annoying. This is due to unset of locale variable in Debian environment specifically for Perl applications.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1&lt;/span>&lt;span>Can&amp;#39;t &lt;span style="color:#8be9fd;font-style:italic">set&lt;/span> locale; make sure &lt;span style="color:#8be9fd;font-style:italic">$LC_&lt;/span>* and &lt;span style="color:#8be9fd;font-style:italic">$LANG&lt;/span> are correct!
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2&lt;/span>&lt;span>perl: warning: Setting locale failed.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3&lt;/span>&lt;span>perl: warning: Please check that your locale settings:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4&lt;/span>&lt;span>&lt;span style="color:#8be9fd;font-style:italic">LANGUAGE&lt;/span> &lt;span style="color:#ff79c6">=&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">unset&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5&lt;/span>&lt;span>&lt;span style="color:#8be9fd;font-style:italic">LC_ALL&lt;/span> &lt;span style="color:#ff79c6">=&lt;/span> &lt;span style="color:#ff79c6">(&lt;/span>&lt;span style="color:#8be9fd;font-style:italic">unset&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6&lt;/span>&lt;span>&lt;span style="color:#8be9fd;font-style:italic">LC_CTYPE&lt;/span> &lt;span style="color:#ff79c6">=&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;UTF-8&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7&lt;/span>&lt;span>&lt;span style="color:#8be9fd;font-style:italic">LANG&lt;/span> &lt;span style="color:#ff79c6">=&lt;/span> &lt;span style="color:#f1fa8c">&amp;#34;en_US.UTF-8&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8&lt;/span>&lt;span>are supported and installed on your system.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9&lt;/span>&lt;span>perl: warning: Falling back to a fallback locale &lt;span style="color:#ff79c6">(&lt;/span>&lt;span style="color:#f1fa8c">&amp;#34;en_US.UTF-8&amp;#34;&lt;/span>&lt;span style="color:#ff79c6">)&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10&lt;/span>&lt;span>locale: Cannot &lt;span style="color:#8be9fd;font-style:italic">set&lt;/span> LC_CTYPE to default locale: No such file or directory
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11&lt;/span>&lt;span>locale: Cannot &lt;span style="color:#8be9fd;font-style:italic">set&lt;/span> LC_ALL to default locale: No such file or directory
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To solve the above issue you need&lt;/p></description></item></channel></rss>