<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mike Zornek</title>
    <link>https://mikezornek.com/tags/devops/</link>
    <description>Recent content in devops on Mike Zornek</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>mike@mikezornek.com (Mike Zornek)</managingEditor>
    <webMaster>mike@mikezornek.com (Mike Zornek)</webMaster>
    <lastBuildDate>Wed, 15 Oct 2025 10:40:25 -0400</lastBuildDate>
    
	<atom:link href="https://mikezornek.com/tags/devops/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>GitHub Copilot and Unhonored Branch Protection</title>
      <link>https://mikezornek.com/posts/2025/10/github-copilot-and-unhonored-branch-protection/</link>
      <pubDate>Wed, 15 Oct 2025 10:40:25 -0400</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2025/10/github-copilot-and-unhonored-branch-protection/</guid>
      <description>&lt;p&gt;I was using the GitHub Copilot web chat experience yesterday for client work. I needed to migrate some issues from a third-party CSV export into GitHub Issues. (It mostly worked, but there was still a lot of data massaging after the fact, which the chat could not do.)&lt;/p&gt;
&lt;p&gt;Early in the process, the chat took my command of &lt;code&gt;make the issues&lt;/code&gt; to make markdown files in an &lt;code&gt;issues&lt;/code&gt; folder on the &lt;code&gt;main&lt;/code&gt; branch instead of making actual GitHub Issues.&lt;/p&gt;
&lt;p&gt;This repo &lt;strong&gt;has&lt;/strong&gt; branch protection rules that should disallow direct commits on &lt;code&gt;main&lt;/code&gt;, but I guess &lt;a href=&#34;https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#about-branch-protection-rules&#34;&gt;because I am an organization admin&lt;/a&gt;, it just does it.&lt;/p&gt;
&lt;p&gt;This series of events kicked off unwanted deploys and commits. It was a solid reminder about the dangers of putting these MCP chat servers anywhere near production systems.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m starting to get marketing from Render as to the availability of its own &lt;a href=&#34;https://render.com/docs/mcp-server&#34;&gt;MCP services&lt;/a&gt;, and I&amp;rsquo;m very hesitant to use them.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>How to Use a Modern Version of Hugo on Render&#39;s Static Site Service</title>
      <link>https://mikezornek.com/posts/2025/4/modern-hugo-on-render-static-site/</link>
      <pubDate>Thu, 17 Apr 2025 11:03:15 -0400</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2025/4/modern-hugo-on-render-static-site/</guid>
      <description>&lt;p&gt;I host this site at &lt;a href=&#34;https://render.com/&#34;&gt;Render.com&lt;/a&gt;. Specifically, I use Render&amp;rsquo;s &lt;a href=&#34;https://render.com/docs/static-sites&#34;&gt;Static Site product&lt;/a&gt;. It&amp;rsquo;s a good product and free for most usage. It features an auto-configured SSL certificate, global CDN, pull request previews, and many other nice things. I&amp;rsquo;m also paying Render to host some &lt;a href=&#34;https://rankedvote.app/&#34;&gt;Elixir things&lt;/a&gt; and enjoy the simplicity of fewer things to manage&lt;/p&gt;
&lt;p&gt;When you read the docs, Render provides instructions on what to do &lt;a href=&#34;https://render.com/docs/deploy-hugo&#34;&gt;if you are using Hugo&lt;/a&gt; to build your static site. Unfortunately, their version of Hugo is locked and a bit dated as I type this. (I observed version &lt;code&gt;0.124.0&lt;/code&gt; when the current version of Hugo is &lt;code&gt;1.46.5&lt;/code&gt;.) Some other static allow you to set a &lt;code&gt;HUGO_VERSION&lt;/code&gt; environment variable, but sadly Render does not support this.&lt;/p&gt;
&lt;p&gt;Render allows you to supply a custom build command, and I&amp;rsquo;ve taken the opportunity to install an updated version of Hugo per deployment so I can keep it current. Here is the script and some other notes to keep in mind.&lt;/p&gt;
&lt;h2 id=&#34;using-a-custom-build-command&#34;&gt;Using a custom build command&lt;/h2&gt;
&lt;p&gt;You can read more &lt;a href=&#34;https://render.com/docs/deploys#build-command&#34;&gt;official docs&lt;/a&gt; about the build command, but in short, you set it up in the &lt;code&gt;Settings&lt;/code&gt; for your site. Instead of a single command, you can point it to a build shell script from your project&amp;rsquo;s repo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;render-settings.png&#34; alt=&#34;Render Setting web page&#34; title=&#34;A screenshot of Render&#39;s settings page for the site, showing a line to enter a build command.&#34;&gt;&lt;/p&gt;
&lt;p&gt;My &lt;a href=&#34;https://github.com/zorn/mikezornek.com/blob/63fbcfc5687e778afeafb7d7520a14e0c6cc7437/bin/build.sh#L1&#34;&gt;build script&lt;/a&gt; looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This script is used by Render to build the app for production deployment.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# set up an exit on error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -o errexit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Save the initial directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ORIGINAL_DIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$PWD&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Install npm dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Installing npm dependencies...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install --verbose
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Install specific version of Hugo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HUGO_VERSION&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.145.0&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# Change this to your required version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Installing Hugo &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HUGO_VERSION&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Create directory for Hugo download and installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HOME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/bin&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p /tmp/hugo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /tmp/hugo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Download and install specific Hugo version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget -q https://github.com/gohugoio/hugo/releases/download/v&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HUGO_VERSION&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;/hugo_extended_&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HUGO_VERSION&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;_Linux-64bit.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xzf hugo_extended_&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HUGO_VERSION&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;_Linux-64bit.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Move Hugo to a directory you have permission for&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mv hugo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HOME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/bin/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Add the bin directory to PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;HOME&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/bin:&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PATH&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Verify installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Return to project directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$ORIGINAL_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Now you can add your Hugo build commands here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hugo --logLevel info
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In addition to installing Hugo, I also install some npm packages, including Tailwind and the Tailwind Typography plugin, which I am using for my Hugo template HTML. One thing to keep in mind here is that Render does &lt;a href=&#34;https://render.com/docs/node-version&#34;&gt;honor and expect&lt;/a&gt; a &lt;code&gt;NODE_VERSION&lt;/code&gt; inside your environment settings to hint what version of node to use. This static site was defaulting to a pretty old version of node when I started without a &lt;code&gt;NODE_VERSION&lt;/code&gt; environment variable, and that seems to be &lt;a href=&#34;https://render.com/docs/node-version#history-of-default-nodejs-versions&#34;&gt;based on when the static site service was initialized&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I do a bit of extra logging to help me debug, but overall, this script is pretty straightforward. Make sure to grant execution permissions with &lt;code&gt;chmod a+x build.sh&lt;/code&gt; to the shell script when composing it.&lt;/p&gt;
&lt;h2 id=&#34;inefficiencies&#34;&gt;Inefficiencies&lt;/h2&gt;
&lt;p&gt;Installing Hugo (and node things) for every deployment is excessive and will be charged against my &lt;a href=&#34;https://render.com/docs/build-pipeline#pipeline-minutes&#34;&gt;pipeline minutes&lt;/a&gt;, but for the simple needs of this site, which is published a few times a month I doubt it will add up to anything much. If you want to optimize this, consider Dockerizing the deployment and perhaps even assembling the static content in a continuous integration system like GitHub Actions. (I was planning on that at first, but this build command approach was more straightforward for now.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Github Action Talk</title>
      <link>https://mikezornek.com/posts/2023/2/github-action-talk/</link>
      <pubDate>Tue, 28 Feb 2023 13:52:26 -0500</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2023/2/github-action-talk/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m going to be doing a talk about GitHub Actions for ElixirClub: &lt;a href=&#34;https://www.elixirclub.org/c/topic-events/github-actions&#34;&gt;Creating Your First Elixir/Phoenix CI Check with GitHub Actions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The talk is free and open to the public. RSVP and join us on Zoom Wednesday, March 8th from 7:00 PM to 08:00 PM (EST).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This talk is for people curious about the basics of GitHub Actions and how they can utilize this automation tool to better verify code changes within their Elixir projects. The event will consist of a lecture, live audience exercises on GitHub, and close with time for questions.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.github.com/en/actions&#34;&gt;GitHub Actions&lt;/a&gt; enables you to build custom automations right within your GitHub repo. These automations can be used for Continuous Integration checks (verifying the app builds with no warnings, all the tests pass, etc), Continuous Deployment (package your app for release, execute the release, etc.), and many other creative workflows. The service is free for public repos and has a generous allocation for free-account private repos.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;rsvp&#34;&gt;&lt;a href=&#34;https://www.elixirclub.org/c/topic-events/github-actions&#34;&gt;RSVP&lt;/a&gt;&lt;/h2&gt;
</description>
    </item>
    
    <item>
      <title>Terraform on Linode Notes</title>
      <link>https://mikezornek.com/posts/2020/12/terraform-on-linode-notes/</link>
      <pubDate>Wed, 23 Dec 2020 05:54:53 -0500</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2020/12/terraform-on-linode-notes/</guid>
      <description>




&lt;video
  controls
  class=&#34;mb-0 w-full&#34;
  title=&#34;Terraform on Linode Notes&#34;
&gt;
  &lt;source src=&#34;https://f002.backblazeb2.com/file/mikezornek-com-media/terraform_on_linode_notes.mp4&#34; type=&#34;video/mp4&#34;&gt;
  Your browser does not seem to support the video format. You can
  &lt;a href=&#34;https://f002.backblazeb2.com/file/mikezornek-com-media/terraform_on_linode_notes.mp4&#34;&gt;download the MP4 file&lt;/a&gt;
  directly.
&lt;/video&gt;

&lt;div class=&#34;mt-2 flex justify-between&#34;&gt;
  &lt;a href=&#34;https://f002.backblazeb2.com/file/mikezornek-com-media/terraform_on_linode_notes.mp4&#34;&gt;Download MP4&lt;/a&gt;
  
    &lt;a href=&#34;https://www.youtube.com/watch?v=F6AKTyrMz88&#34;&gt;Watch on YouTube&lt;/a&gt;
  
&lt;/div&gt;

&lt;p&gt;Over vacation I worked through a small project to use &lt;a href=&#34;https://www.terraform.io/&#34;&gt;Terraform&lt;/a&gt; on &lt;a href=&#34;https://www.linode.com/&#34;&gt;Linode&lt;/a&gt; to provision a new webserver for my personal website. The following is a collection of notes and resources from the experience.&lt;/p&gt;
&lt;h3 id=&#34;project-goals--areas-of-improvement&#34;&gt;Project Goals / Areas of Improvement:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Since the addition of the &lt;code&gt;guildflow.com&lt;/code&gt; static website, anyone who was attempting to load a HTTPS version of &lt;code&gt;mikezornek.com&lt;/code&gt; would be met with a security warning as the browser was attempting to load the SSL cert for &lt;code&gt;guildflow.com&lt;/code&gt; when serving up &lt;code&gt;mikezornek.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The lack of SSL to &lt;code&gt;mikezornek.com&lt;/code&gt; has historically &lt;a href=&#34;http://this.how/googleAndHttp/&#34;&gt;been intentional&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Linode serving my static sites uses Ubuntu 16.04 LTS, which is going to be &lt;a href=&#34;https://ubuntu.com/about/release-cycle&#34;&gt;EOL on April 30, 2021&lt;/a&gt; and so it&amp;rsquo;d be good to get one a new LTS version.&lt;/li&gt;
&lt;li&gt;This is a good excuse to experiment with &lt;a href=&#34;https://www.terraform.io/&#34;&gt;Terraform&lt;/a&gt;, which is something I&amp;rsquo;ve been learning in support of some possible Guildflow infrastructure updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;quick-review-of-the-mikezornekcom-infrastructure-and-deployment&#34;&gt;Quick Review of the MikeZornek.com Infrastructure and Deployment&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MikeZornek is a static site. I like static sites as they are cheaper to serve and easier to keep secure. I have used WordPress in the distant pass but I was lazy at keeping it updated and eventually it was hacked.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; is used to help build the static site.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://github.com/zorn/mikezornek.com&#34;&gt;git repo is public&lt;/a&gt; and hosted on GitHub.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve &lt;a href=&#34;https://github.com/zorn/mikezornek.com/blob/master/.circleci/config.yml&#34;&gt;setup CircleCI&lt;/a&gt; to detect changes on the repo&amp;rsquo;s &lt;code&gt;master&lt;/code&gt; branch and deploy any changes.&lt;/li&gt;
&lt;li&gt;The deploy is pretty basic but there are a few HTML/link checks.&lt;/li&gt;
&lt;li&gt;Once generated, the static files are copied to my Linode using &lt;code&gt;rsync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The historic Linode was hand crafted and used Apache as it&amp;rsquo;s web server.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;learning-terraform-resources&#34;&gt;Learning Terraform Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linode.com/docs/guides/applications/configuration-management/terraform/&#34;&gt;Linode-specific tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn the Linode &lt;a href=&#34;https://api.linode.com/v4/regions&#34;&gt;regions&lt;/a&gt; or &lt;a href=&#34;https://api.linode.com/v4/linode/types&#34;&gt;instance types&lt;/a&gt; through it&amp;rsquo;s API.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://terraformbook.com/&#34;&gt;The Terraform Book&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://registry.terraform.io/providers/linode/linode/latest/docs/resources/instance&#34;&gt;Linode Terraform provider docs.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linode.com/community/questions/11369/how-to-debug-stack-scripts&#34;&gt;Linode Community Questions: how to debug stack scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx&#34;&gt;Certbot for Ubuntu / ngnix prefers snap now.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://clubmate.fi/how-to-setup-and-manage-multiple-ssh-keys&#34;&gt;Managing multiple SSH keys.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;my-terraform-script&#34;&gt;My Terraform Script&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-tf&#34; data-lang=&#34;tf&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;provider&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linode&amp;#34;&lt;/span&gt; {&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;  # API Token
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abc123&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;resource&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linode_sshkey&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mikezornek_linode_ssh_key&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;label&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mikezornek_linode_ssh_key&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssh_key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; chomp(file(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~/.ssh/id_rsa_linode_mikezornek.pub&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;resource&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linode_stackscript&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;setup_mikezornek_prod&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;label&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;setup_mikezornek_prod&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;description&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;setups nginx and certbot for mikezornek&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;script&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; file(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;files/setup.sh&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;images&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linode/ubuntu20.04&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;is_public&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;resource&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linode_instance&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mikezornek_prod&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linode/ubuntu20.04&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;label&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mikezornek_prod&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mikezornek&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;region&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;us-east&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;g6-nanode-1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;authorized_keys&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#a6e22e&#34;&gt;linode_sshkey&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mikezornek_linode_ssh_key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ssh_key&lt;/span&gt;]&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;  # Leave the root password unset if want to keep it random
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root_pass&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abc123&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;backups_enabled&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;stackscript_id&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;linode_stackscript&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setup_mikezornek_prod&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;output&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;server_ip&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;linode_instance&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mikezornek_prod&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ip_address&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;output&lt;/code&gt; is useful if you want to ssh into your new linode instance right away with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ssh root@(terraform output server_ip)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;my-setup-bash-script&#34;&gt;My setup bash script&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# strict mode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -xeo pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exec &amp;gt; &amp;gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tee -i /var/log/stackscript.log&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FQDN&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mikezornek.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo Setting hostname to &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;FQDN&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;hostnamectl set-hostname &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;FQDN&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo Running apt-get update and upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt update &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo Installing nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install -y nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo Prep snap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;snap install core; snap refresh core
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo Install certbot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;snap install --classic certbot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# echo Setup certbot for nginx for the domain ${FQDN}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# we will do this manually after setup since the&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# domain should be pointing at this machine at the time of setup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# certbot --nginx --agree-tos -m zorn@zornlabs.com --verbose -d mikezornek.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo Starting nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo service nginx start
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo ALL DONE!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Observe the log file on your new server with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ tail -f /var/log/stackscript.log
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
    <item>
      <title>Terminal Tip: Quickly Launch Into Servers and Services</title>
      <link>https://mikezornek.com/posts/2019/1/terminal-tips-quickly--launch-into-servers-and-services/</link>
      <pubDate>Sat, 12 Jan 2019 12:00:00 -0500</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2019/1/terminal-tips-quickly--launch-into-servers-and-services/</guid>
      <description>&lt;p&gt;With my enjoyment of &lt;a href=&#34;https://elixir-lang.org/&#34;&gt;Elixir&lt;/a&gt; and things like &lt;a href=&#34;http://mikezornek.com/posts/2019/1/new-year-new-site/&#34;&gt;the new engine of this blog&lt;/a&gt; I find myself back in the Mac OS X Terminal more and more.&lt;/p&gt;
&lt;p&gt;One quick tip I think many might miss, is that you can launch new Terminal windows based on a profile. Out of the box the only difference for the default profiles is color themes, but for each profile you can have it execute a series of commands when the new window is created.&lt;/p&gt;
&lt;p&gt;For me, I like to use this to quickly jump to project folders or even quickly start up local servers. I also find it helpful to use different colors for different things, like say red for the web server, blue for the database and black for my main command line.&lt;/p&gt;
&lt;p&gt;Give it a shot and save yourself some repetitive typing.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;preferences.png&#34; alt=&#34;Terminal Preferences&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;new-window.png&#34; alt=&#34;New Terminal Window&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Hello from Linode</title>
      <link>https://mikezornek.com/posts/2018/4/hello-from-linode/</link>
      <pubDate>Sat, 07 Apr 2018 19:20:26 +0000</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2018/4/hello-from-linode/</guid>
      <description>&lt;p&gt;If you are reading this, then the DNS gods have shown you to my new &lt;a href=&#34;https://www.linode.com/&#34;&gt;Linode&lt;/a&gt; web server!&lt;/p&gt;
&lt;p&gt;Not really sure if I’m happy with WordPress in the long term, but I wanted to move this blog off my old server asap so I stuck with it through the migration. This was the last site to be moved off that old server and now I can close up that account and save $40 a month.&lt;/p&gt;
&lt;p&gt;Feels great to be back on Linode too. We used to use Linode back in the day during a old startup I was in (had a few app server nodes, node balancer, db node). I really like the raw access we get on Linode and that it feels like a real computer (unlike AWS which feels like witchcraft for me).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Setup Bots Status as a Screensaver</title>
      <link>https://mikezornek.com/posts/2013/12/setup-bots-status-as-a-screensaver/</link>
      <pubDate>Fri, 13 Dec 2013 03:55:24 +0000</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2013/12/setup-bots-status-as-a-screensaver/</guid>
      <description>&lt;p&gt;It’s time to turn off that family photo screensaver and switch to something that’s important, CI status screens!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://mikezornek.com/media/images/bots-big-screen.png&#34; alt=&#34;Bots Big Screen&#34; title=&#34;Bots Big Screen&#34;&gt;&lt;/p&gt;
&lt;p&gt;First up you’ll need this screensaver (or something similar), which can be configured to load a single or multiple websites up as a screensaver.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/liquidx/webviewscreensaver&#34;&gt;https://github.com/liquidx/webviewscreensaver&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sadly the screensaver bundle is not developer signed so if you are bit paranoid consider downloading, inspecting and building the thing from source. Or you could be like me and hit run inside of Security after the initial “can’t run, not signed” dialogue.&lt;/p&gt;
&lt;p&gt;Next you’ll need some URLs. I run both Xcode Bots and Jenkins off my Mac mini named GLaDOS and for those you’ll want URLs like:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://glados.local/xcode/bigscreen&#34;&gt;http://glados.local/xcode/bigscreen&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://glados.local:8080/view/Monitor/&#34;&gt;http://glados.local:8080/view/Monitor/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For Jenkins I’m currently using the &lt;a href=&#34;https://wiki.jenkins-ci.org/display/JENKINS/Build+Monitor+Plugin&#34;&gt;Build Monitor Plugin&lt;/a&gt; which is pretty basic but a nice start.&lt;/p&gt;
&lt;p&gt;Here’s to hoping all your returns from coffee breaks are bathed in green and passing tests.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Xcode Bots and Branches</title>
      <link>https://mikezornek.com/posts/2013/12/xcode-bots-and-branches/</link>
      <pubDate>Fri, 13 Dec 2013 02:58:05 +0000</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2013/12/xcode-bots-and-branches/</guid>
      <description>&lt;p&gt;Just a little quick tip tonight. If you create a Bot from within Xcode 5 it will assume that the branch you want this Bot to run on is the branch you are currently on. To change this, use the Xcode Bot Web interface. Select your Bot and look for the settings gear in the upper right and then edit the Bot, defining which branch you want to bot to run on.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://mikezornek.com/media/images/xcode-bot-web-settings.png&#34; alt=&#34;Xcode Bot Setting Gear&#34; title=&#34;Xcode Bot Setting Gear&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://mikezornek.com/media/images/xcode-bot-web-settings-details.png&#34; alt=&#34;Xcode Bot Setting Details&#34; title=&#34;Xcode Bot Setting Details&#34;&gt;&lt;/p&gt;
&lt;p&gt;I’m starting to revive an old side project of mine and it’s feeling good so far. I have Xcode Bots running tests and the static analyzer (all green baby!). I also have Jenkins deploying to HockeyApp when I merge &lt;code&gt;development&lt;/code&gt; into my &lt;code&gt;qa&lt;/code&gt; branch. Hope to share more details soon.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Updating Homebrew’s “httpListenAddress” Default for Jenkins</title>
      <link>https://mikezornek.com/posts/2013/11/updating-homebrews-httplistenaddress-default-for-jenkins/</link>
      <pubDate>Mon, 25 Nov 2013 02:49:20 +0000</pubDate>
      <author>mike@mikezornek.com (Mike Zornek)</author>
      <guid>https://mikezornek.com/posts/2013/11/updating-homebrews-httplistenaddress-default-for-jenkins/</guid>
      <description>&lt;p&gt;I’ve setup some Jenkins servers in the past for Ruby on Rails apps but these days we are trying to get things running for iOS deployment and testing at work.&lt;/p&gt;
&lt;p&gt;To experiment with some plugins and such I have my own Mac mini and installed Jenkins via Homebrew. Overall it’s working great though I was a bit stumped as to why I couldn’t load the Jenkins webpages outside of using &lt;code&gt;localhost:8080&lt;/code&gt; on the Mac mini itself. Worked fine last I did a clean install.&lt;/p&gt;
&lt;p&gt;Turns out the Launch Agent settings Homebrew gives you (located at &lt;code&gt;~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist&lt;/code&gt; for me) will launch with the following command line parameter &lt;code&gt;--httpListenAddress=127.0.0.1&lt;/code&gt;. Edit this to &lt;code&gt;0.0.0.0&lt;/code&gt; (the default) to allow all addresses.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I know this isn’t the most enjoyable blog post but wanted to post it as Google Food for others who might run into the issue.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Other related posts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.sailmaker.co.uk/blog/2013/04/02/advanced-jenkins-for-ios-and-mac/&#34;&gt;Advanced Jenkins for iOS and Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.thepete.net/blog/2012/07/22/running-frank-as-part-of-ios-ci/&#34;&gt;Running Frank as Part of iOS CI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>