Vincent Ritter

Hello, I'm Vincent. I'm a dad, husband, geek and an independent software engineer. Check out the apps I make, personal ventures I'm currently pursuing, websites I worked on and other things like my blog posts and thoughts, my micro blog. There is also a now page, to keep me in check on what I'm working on right now.

Trying out not to drink coffee today. The headache is terrible... The human body sure is strong willed when it wants something.

I'm right handed and I always wore a watch on the right side. With the Apple Watch I had it always on the left wrist for some reason. Today I switched. Let's see how it goes. Sure feels wrong...

Apple News follow-up: I found a setting in Settings that restricts stories in the today view to only channels you follow. Now just to get rid of Spotlight (wishful)...

I really like the Apple News app... it's just a huge shame I can't stop the recommendation part. I just want news from whom I follow and nothing else. I don't care about football, or other outlets... Is that so hard to ask for? Spotlight... can I not turn it off? Would be such a great app if you could tweak it a little.

Upgraded to a new phone. Lost 4 days worth of Activity data in the process. Weird. Random. Frustrating. Not the end of the world though.

Felt inspired by Dark Mode in Mojave so I updated my dark mode on my site. Also fixed the background colour issue - although I think that is just a plain Safari bug of some sort.

Is there an iOS/Mac app that accepts web hooks and sends you a "push" notification when something comes in? I use Slack at the moment for that type of stuff...

The only thing is... website that don't specify a background colour... look like this in dark mode. Anyone know if there is a Safari API that can check if system dark mode is enabled?

I sure love dark mode in Mojave! It's pretty stable too. Development on it works without issue (web dev, Swift dev, npm, ruby etc). As is normal, it's a bit slow at times. Really happy with it so far though.

Our daughter had a successful operation yesterday and we are heading back home today. Totally thrilled. She’s a total trooper and has taken it really well.

Today is WWDC day. Really looking forward to it this evening (in Europe). To celebrate, Apple has charged me for another year as an Apple Developer.

My Stack

Something I always enjoyed reading was about the different set ups everyone is using day to day for their development needs. That includes their code editor of choice to the way they set up their servers, to their use of task managers.

The point of this post is to get into details of how I run my server infrastructure for my own things and a select few clients. I’ll also include the things I do to monitor and keep it all up. Not to mention critical response if something would go wrong.

This set up works for me, and only me. Your milage will vary and I urge you to seriously research best options for you.

It’s probably best I segment this out a little so that, in the end, you’ll have an overall picture of what is keeping everything going.

Servers

Let’s start with the most important, servers.

All my servers are hosted with Linode [referral link, non-referral link]. I tried Digital Ocean many years ago but eventually moved to Linode. I have this thing in my head where I think “Well, EVERYONE is talking about [insert cool new service/startup]… so let me try something different”. Probably not the best way to go about choosing a service.

Linode is and has been great. Their performance of their machines are way more consistent than Digital Ocean’s have been (when I used them). Sure, Digital Ocean were cheaper but that isn’t always better. Linode’s support is flawless and they really do help if there are problems, even when their system is having problems - their online management portal straight away lets you know with an automatic ticket. I don’t have to call them and ask “Do you have a problem?”.

I have 6 various Linode’s running. They all have their own tasks/functions (in general).

My main server, this one the site is hosted on, hosts around 7 sites including one client site and Simple Schedule. These talk to another server, which is a dedicated database server.

There are three dedicated instances for two clients. These are more powerful instances all designed to host one or two sites, each, well. They usually handle massive amount of traffic to them. One site generating up to 1 million views a month. By keeping them separate I can be at ease knowing that the engine runs smoothly without affecting other clients.

There is one more server that basically runs as an IKEv2 VPN server. I don’t use it much, but useful when I’m out and about with my phone and I want to connect to a VPN. I did, initially, have a OpenVPN instance installed on the database server. That turned out to be a bad move. On top, OpenVPN never really played nice with out of the box integration on both macOS and iOS.

The VPN server is also used to log into my servers, like SSH and SFTP. If you’re wondering, yes, I have SSH keys set up for each device.

Recently I decided to host static sites (around 10), that are based on Jekyll [link], on Netlify [link]. I’m really happy with it. So happy that I’ll be hosting the UI for Sublime Feed there, with the data layer back on Linode. It really removes any special set up or tweaking that I would otherwise have to do.

So that pretty much covers servers. I don’t use load balancers, yet, because I had no need so far.

Server management & backups & logging

All the servers are set up using the Laravel Forge [link] service. I really like the visual aspect of it and it works for me. On top, it allows me to quickly deploy a server with great defaults without much thought or headache. I don’t have to dabble around with config files or anything like that (except where I need to). It does a great job! Even for a Ruby based app, it works pretty well after some additional configuration.

Forge is optimised for Laravel apps. I wish something like this would exist for Ruby on Rails apps. Heroku doesn’t fall into that category as they run the servers… and I prefer to host myself.

Every server backs up daily via Linode’s built in backup service. You pay a small fee for a full snapshot of your server. Great if I had to restore the whole machine.

Each website backs up at different intervals, independent of the server, depending on the client/site. Each site’s user generated content, if not hosted via AWS S3 [link] with a CDN, backs up either hourly or nightly. Databases are also backed up at different intervals, usually nightly or hourly.

Backups, for now, are kept on AWS S3. I’d like to move this functionality to Backblaze B2 [link] - but am not ready to do that yet. I can grab anything from these backups when I need them via Transmit [link].

I keep backups, for any client, for a minimum of 6 months. So if they were to make a mistake now, they’ll probably notice next month that something is missing. If there were only the past few days of backups that would be hard to recover.

Each site repo has it’s own ‘backup’ folder that includes shell scripts that I then run as cron jobs depending on the needs of client/project. Or I just set my own defaults. In general, every site backs up to its own folder on S3, separated out by ‘assets’ and ‘db’. I don’t backup code files that are already in the repo.

For server logging I use Papertrail [link]. Until a few years ago I didn’t do any logging… Papertrail makes it painless and allows me to search through everything that goes on with the servers. If I wanted I can also have website errors be written out on the logs (which I do for some). Papertrail has saved my skin a few times, allowing me to react to a client query. Their UI is easy, their set up is easy. Highly recommended.

Uptime monitoring

With clients comes responsibility. Being independent I don’t have a massive budget for expensive uptime monitoring and I was looking for something besides Pingdom.

I came across updown.io [referral link, normal link]. It’s run by an independent developer, doesn’t cost the world and it’s really awesome! I’m happy I found it and I never had any problems with it. Support is also great!

Updown.io serves several purposes for me. It checks site uptime, checks SSL expiration (amongst others) and is really great at alerting me when something goes wrong. On top, it allows for public status pages which is really helpful. I usually send these to clients too (not that they use them). You can see mine here [http://status.vincentritter.com].

If there is a problem I usually get a Slack notification to my phone and watch. It is the only reason I have Slack installed on my phone, because it works really well. I have the option of an SMS message to my phone too; I don’t use it though. It also sends out an email, to whomever needs to be notified. It’s really flexible.

DNS

This one is important, because without it, nothing would actually work. Years ago I was a huge fan of CloudFlare… I had everything there. However I stumbled upon DNSimple [referral link, normal link] and started moving a select few domains over there. It was and is great!

Cloudflare was good, but I couldn’t shake this “MASSIVE CORPORATION” feeling. I prefer the little guys, that are growing, that are personal about their service. Whilst Cloudflare is free, DNSimple really blew me away.

It’s hard to explain, I really like them as a company. All their support staff are super nice. They all work remotely. Their site is simple to use. Their service is really ace and I never had any problems with it. They are there when something happens to their service and don’t hide.

Yes, you pay for the service, but to be honest… it’s worth every penny. As I said, free isn’t always the best.

I recently started moving my domains away from Gandi to DNSimple and hope to add more over the course of the year.

Just yesterday I was taking care of a site migration, including pointing a top level domain to a new server. DNSimple always amazes me on how quickly changes propagate. Something I found that Gandi, Linode or Cloudflare are usually slow to do. Even adding new records like A or TXT show up pretty much instantly - which other services see quickly too without waiting hours (for example validating MX settings or TXT validations).

Bringing it all together

With everything above, I make sure stuff stays up (where possible). I can rely on all these services and am happy to give them my money. It’s worth every penny.

If something went terribly wrong, I could spin up another server, transfer the IP address and be back up and running within minutes.

I run a tight ship for all sites irrespective of size or traffic, that’s how I would do it for myself and don’t skimp to find the cheapest solutions.

Let’s see where I’m at in the next few months with setting up Sublime Feed, with a multi server setup. Sure will be exciting.

If you found this article useful please feel free to use my referral links, which will support me and the awesome services.

Close