#Devops
devops
"
-
DevOpsDays LA & SCaLE 21x
The conference was a real blast, packed with awesome talks, some seriously geeky stuff, and plenty of chances to mingle with vendors, developer relations teams, and other attendees. I picked up some gems along the way, like Paul Tevis dropping knowledge bombs on building a high-trust culture, the ongoing saga of secrets management, and how DevOps is now just part of doing business. I had some great discussions with fellow attendees about the importance of pushing quality checks to the left, and engaged with talks about the value of Open Source projects and their QA game. Oh, and let's not forget diving deep into potential security headaches like typo-squatting in AI and what that could mean for us. These events aren't just about filling our brains with new info; they're about forging real connections beyond our screens.
-
Develop for Environment Specific Configuration
I've observed a common pattern among junior developers regarding environment-specific configuration. Many junior developers misunderstand the need for a single environment-aware configuration and end up creating separate fields for development and production environments in their apps. They often misconstrue the need to store keys for different environments as a requirement to create two distinct fields in the admin, one for each environment. This leads to unnecessary duplication of logic to handle these different keys based on the environment.
-
Managing Jumpstart Pro Updates
Jumpstart Pro is a Ruby on Rails SaaS template that streamlines the creation of business-ready web applications, eliminating the need for repetitive coding and configurations. Despite its numerous advantages, maintaining the software can become complex or tedious as applications grow - primarily due to merge conflicts during updates. I share a few strategies I employ to simplify this process, including removing files from the git index that don't require updates, regenerating files like yarn.lock and Gemfile.lock, and refraining from altering core Jumpstart files. I also use a script post-merging to automate the regeneration of these files. These methods have significantly eased the application of Jumpstart Pro updates for me, and I believe they could be beneficial to other developers as well.
-
The Three Core Principles of DevOps
DevOps is a tried and true framework for creating software. It's not just about automating pipelines or assigning operations work to developers; it's a mental model built on key principles aimed at improving work processes. These principles, known as the "Three Ways of DevOps" from "The DevOps Handbook," include the Principle of Flow, the Principle of Feedback, and the Principle of Continuous Improvement. To sum it up, DevOps is a transformative mindset that, when properly implemented, can significantly enhance a company's ability to deliver high-quality software more efficiently. As a reminder, always think of the three F's: Flow, Feedback, and Fine-tuning.
-
Running Ruby on Rails on Docker
Let's explore a process for running Ruby on Rails in Docker with Nginx to handle serving static assets.
-
Execute Workflows with Path Filtering in CircleCI
Path filtering in CircleCI to reduce build times, overall cost, and to better support monorepo strategies.
-
AWS ACM Terraform Module with Variable SANs
A flexible terraform module for creating an AWS ACM with a variable number of additional SANs. GitHub Repo
-
A Terraform Directory Structure
Here is a directory structure that I am using for Terraform that I think works pretty well. The quick and dirty of it is to think of your configurations in terms of a organizational and systems hierarchy, and to design your plans to support that hierarchy. Each tier depends on and builds upon the previous tier.
-
Multi-Platform Git Diff and Merge Tools
Maintain a single .gitconfig between different operating systems by using proxy scripts for git diff and git merge tools.
-
My Personal Monorepo & Pipeline
I monorepo'd (can we verb that?) my personal projects. Here is how I did it, and why, and how you could approach doing the same thing.
-
Deploying a Simple Rails App with Ansible
Ruby on Rails is quickly becoming my framework of choice for my personal websites and projects. It's a pleasure to work with and has been easy to learn. But no framework is without its challenges. One of those challenges is of course deploying the app to a server. There are a lot of options for hosting and deploying a Rails app. But, I like to run my own servers which means I have to also take care of deploying to those servers. I'd prefer to be deploying images to AWS ECS but I don't need that kind of infrastructure for my personal website. It's just a blog it can suffer seconds of downtime when I deploy updates. So my approach these days is to use Ansible to handle the deploy steps.
-
How to Run Rails App Server with Systemd and Ansible
Create a systemd service to run your rails app server.
-
Simplify Terraform By Generating Configurations
Terraform is an awesome tool. To make it more awesome though we have wrapped it with some custom Ruby ERB templating to generate our terraform configurations from Yaml configurations.
-
Doing that DevOps thing
My first year at Blackbird has been good. My main goal in my first year was to migrate the monolithic system and infrastructure into something more scalable and reliable. Well this week was the week and we did it. We moved the last of the services over without any issue. I am grateful that I had the support I did and the team I did. I have learned an incredible amount from them. And ultimately, we killed it!
-
Capistrano tasks for Magento
Custom tasks for Capistrano that I am using to help manage a Magento website.
-
Setting up Git HTTP Backend for local collaboration
You want to share a topic branch with a colleague but do not want to push that branch upstream to Github/BitBucket/GitLab, etc. How do you do this? You could create a patch and email it. Or you could do it in the most crazy way possible and use Apache and allow your colleague to pull from your repo directly. This does take a bit more time to setup, but it would also be absolutely crazy dumb for everyone involved. Basically, let's setup a git server on your workstation!
-
My Pantheon + Jenkins Process
Here is a rough outline of my Pantheon + Jenkins process. I like my code in BitBucket. I also like Pantheon (check them out). The Pantheon workflow is all about being the source of truth for your code. This is fine, and actually I dig it because it promotes good practices. However, I, and my company, have many projects in BitBucket already, and am using Jenkins more and more for some Continuous Integration functions. We want to keep using BitBucket as our source of truth and our existing workflows, but also want to use Pantheon.
-
My VagrantFile
This is the Vagrantfile I am using for my development box at home and work. It is determines how much ram is available and how I want to allocate, how many CPUs are available, and configures the VM for me. I use NFS for shared folders. Finally, starting to use "hostupdater" to keep my host machines hosts file current.
-
Ohai Plugin for OpenVZ VMs to get public IP Address
Media Temple uses the OpenVZ virtualization system and I have quite a few Media Temple servers under Chef management. The one thing that has made management difficult is that by default during a Chef run ohai returns 127.0.0.1 as the default IP address which means I cannot run knife to execute commands from my workstation.
-
Setup Development Environment with Vagrant & Chef
I use Chef to manage and provision new staging and production servers in our company. It takes a lot of the headache out of managing multiple servers and allows me to fire up new web & data servers for our projects with ease. I have several cookbooks that I use to configure servers and to setup/configure websites. In a nutshell, it's rad, and website deployments have never been easier.