tl;dr - There are lots of ways to get smarter about how you deploy. Ansible is one choice, it’s not the fanciest, but it’s amazing. NOTE This is not an introduction to ansible, please check out their official documentation if you want that. For most of my projects, I use a GNU Make Makefile based build process. I do that because it’s cross-platform, pretty well suppported/known (for people who build software), and easy to standardize on no matter what project I’m working on.
tl;dr - Undestand & use the short Ansible playbook at the bottom of this post UPDATE end_play is broken in the latest version of Ansible 2.3, more details at the end of the blog post I have a bunch of posts that are backlogged (raw versions written but not pulled together & edited in anyway), but I’m going to skip the queue to get this post I think is highly useful out.
While working on the The Start’s jobs backend, I found myself at the age-old problem of how to migrate my database (which is surprisingly SQLite). I looked at tools like flyway, migrate, but they all kind of seemed like more than I needed. If anything I was leaning towards migrate, but flyway is a very well-known and often used solution that it was also pretty appealing. In the end, I decided to just write a quick makefile target (basically a bash script) for a few reasons:
tl;dr:What if there was a write-ahead-logging layer above/outside the database? Then you could get CQRS+ES capabilities and assurnaces from your database without rewriting, and even abstract out the database as a whole, going as far as to create your own DSL for application-level changes, ADD_USER instead of INSERT … INTO USERS …* I spend a bunch of time thinking about how I can waste less time writing applications. Over time I’ve worked on various protoypes, with varying levels of completeness, but as I move across languages, frameworks, databases, and stacks, I always find myself solving the same problems, and having the same worries.
tldr;instead of now installing/using JIRA, Trello, Github, Jenkins/TravisCI, and Teamcity, I can just install one thing – Gitlab, spend a little time configuring it, and be ready to take your development process to the next 5 levels (if you’re not already there) Gitlab 9.4 was just released and I’m pretty excited about it. A lot of stuff that Gitlab is doing is really showing that they value empowering developers and pushing ops in The Right Direction ™ – for me that means towards automating deployment, and getting smarter about how we ship and test.
If you’re unfamiliar with Let’s Encrypt, it’s a project (I believe originally sponsored by the EFF) that creates a first of it’s kind free automated and open certificate authority. This means administrators who run websites can get free access to SSL certificates. In the past I’ve had to go to sites like StartSSL or purchase a certificate from my hosting provider (and of course, some still do), but Let’s Encrypt has been wonderful for me (I highly recommend donating to Let’s Encrypt).
Getting a dockerized instance of Ghost to use local SMTP When handling mail for a ghost instance, the official recommendation of the Ghost team is to use Mailgun. Since I have email set up on the server on which I’m running Ghost, despite the fact that Mailgun offers a pretty good free tier of services, it seems pretty extraneous/unnecessary to use mailgun just to send email from my own server.
Issues with TLS auth while Setting up Dovecot & Thunderbird Recently while doing some server-administration tasks (setting up the server, enabling email, TLS, etc) on a Ubuntu 14.04 system, I ran into some problems with dovecot. For some reason, no matter what I tried, I could not get Thunderbird to auto-configure properly with the newly stood up web server’s SMTP server (postfix + dovecot). Maybe interesting to note that I never really had these issues on Arch Linux servers that I mentain… maybe the starting documents/wiki is just that much better/more thorough.
Default Docker settings on ArchLinux RTFM. Seriously. The Arch Wiki is seriously one of the most informative wikis I’ve ever read, and has excellent guides. If I had read it closer, I would have avoided one problem I’m about to explain below. Change the default filesystem While running on a VPS, I ran into problems deleting containers that were once functional when I was using the default devicemapper driver. The fix for this was simple (and also in the arch manual), and basically consisted of changing the default file system driver to overlayfs.
Moving from Hugo to Wordpress This post is one I wrote a while back but never published, as I’ve found some free time now, I’m going through and putting together posts that I jotted down but never got to publishing. tldr; I picked Hugo and used SchumacherFM/wordpress-to-hugo-exporter to transfer everything from my wordpress site. Picking a static site generator The blog you’re looking at right now (as of January 2017) is a staticly generated site generated with Hugo.