14: Linux Servers for App Developers
00:00:00
◼
►
Welcome to Under the Radar, a show about independent iOS and app development.
00:00:03
◼
►
I'm Marco Arment.
00:00:04
◼
►
And I'm David Smith.
00:00:06
◼
►
Under the Radar is never longer than 30 minutes, so let's get started.
00:00:09
◼
►
So last week we mentioned at the end how we were going to tell this week tips and stories
00:00:15
◼
►
and setups of how to run your own Linux servers.
00:00:18
◼
►
Because this is now, you know, in the wake of the parse announcement last week, this
00:00:21
◼
►
is now kind of in the news, and we think it's kind of a core competency that many app developers
00:00:25
◼
►
should know just how to run your own servers.
00:00:27
◼
►
And once you know this, it enables your apps to be better,
00:00:31
◼
►
to be more capable.
00:00:33
◼
►
And if you do kind of a standard server route
00:00:36
◼
►
without doing these kind of more abstract proprietary services
00:00:39
◼
►
like Parse, it gives you a lot of flexibility
00:00:41
◼
►
with what you can do in the future.
00:00:43
◼
►
And it kind of decouples you from depending
00:00:45
◼
►
on a particular third party to keep their platform going.
00:00:49
◼
►
And this is probably a fair disclaimer to say.
00:00:51
◼
►
This is going to be an episode that
00:00:52
◼
►
that goes a bit into the weeds,
00:00:54
◼
►
like down at some pretty low level stuff,
00:00:57
◼
►
and if that's for you, awesome.
00:00:59
◼
►
If it isn't for you, maybe stick around,
00:01:01
◼
►
you might learn something, and know that some episodes
00:01:04
◼
►
are gonna be high level,
00:01:05
◼
►
some episodes are gonna be low level,
00:01:07
◼
►
and hopefully we can have a nice balance as a result.
00:01:10
◼
►
So at a high level, it's probably worth starting
00:01:12
◼
►
of just kind of talking about the spectrum of hosting
00:01:16
◼
►
before we kind of end up with why we do it
00:01:18
◼
►
the way we do it.
00:01:19
◼
►
So ultimately, hosting, in many ways, comes down to levels of abstraction, like how abstracted
00:01:26
◼
►
away the actual computer that you're running your servers and your backends and systems
00:01:32
◼
►
on, how much that is abstracted away from you.
00:01:35
◼
►
So at the lowest level, you have what I think would be called co-location or something like
00:01:39
◼
►
that, where you have a computer that's your computer that you went to Best Buy or whatever
00:01:45
◼
►
to buy, and you're taking it and you're putting it somewhere, typically in some kind of data
00:01:49
◼
►
center that you put in a data center so that it has reliable power and reliable internet
00:01:53
◼
►
and reliable air conditioning and all those types of things. But like it's your machine.
00:01:57
◼
►
Most people don't do that. I would really not recommend doing something like that.
00:02:02
◼
►
Most people with the very least we do, but I think most people call like bare metal
00:02:06
◼
►
managed servers where it's not really your machine. It's a service that they buy machines,
00:02:12
◼
►
they manage machines. If a hard drive dies in the machine, they'll go and fix it for you.
00:02:16
◼
►
but it's you have actual like a dedicated piece of hardware
00:02:21
◼
►
you know a set of hard drives, a motherboard, a CPU that's exactly yours
00:02:26
◼
►
and you probably don't want that either I've gone down that road
00:02:29
◼
►
it's fine but it has a lot of
00:02:32
◼
►
difficulties that you aren't really offset by its costs both
00:02:37
◼
►
in monetary and like ease of use so most people
00:02:41
◼
►
who do any kind of hosting themselves will use something that's more
00:02:45
◼
►
like a VPS, which stands for Virtual Private Server, which is basically like, it's a machine
00:02:52
◼
►
from your app's perspective.
00:02:53
◼
►
You are, your app sees a hard drive, it sees a CPU, it sees memory, but all of those aren't
00:02:59
◼
►
actually physical things.
00:03:02
◼
►
It's running on a shared environment with a bunch of other systems that all see the
00:03:06
◼
►
same things and share resources.
00:03:09
◼
►
And you can use something like Linode for this, or DigitalOcean is another one that's
00:03:14
◼
►
That's pretty common in many ways.
00:03:16
◼
►
EC2 kind of runs like this, but it's a bit different.
00:03:19
◼
►
But you have these kinds of systems where you have a virtual Linux machine that you
00:03:23
◼
►
can do, and you have some nice advantages with that because it's virtual.
00:03:27
◼
►
You can do things like pick it up and move it around.
00:03:30
◼
►
You take an image of your hard drive and you can copy it onto another one, and things like
00:03:35
◼
►
that that are really easy to manage.
00:03:37
◼
►
And from a cost perspective, it's way cheaper because you're sharing server resources.
00:03:43
◼
►
And then above that you have things like virtual server environments, things like Azure or
00:03:46
◼
►
Heroku, or total abstractions like CloudKit or Parse or those types of things that are
00:03:52
◼
►
completely abstracting away from you.
00:03:55
◼
►
And like I said, for most people you probably want to start at a VPS.
00:03:57
◼
►
Like you want to find out where you're comfortable if the thought of administering a Linux server
00:04:02
◼
►
even after this episode is completely overwhelming.
00:04:05
◼
►
Like maybe go to something like Heroku or Azure where you have a little bit of control
00:04:10
◼
►
over what you're doing, but mostly there's something there, but it's still at least general
00:04:15
◼
►
purpose. But I think we both run VPS servers because once you know what you're doing, it's
00:04:22
◼
►
really cheap, it's really efficient, and you have a lot of flexibility that you could move
00:04:27
◼
►
providers, you can spin up new servers and take them down really quickly and easily,
00:04:32
◼
►
and especially the cost is amazing. It's incredible the amount of performance you can get from
00:04:38
◼
►
from a really basic setup.
00:04:39
◼
►
I mean, at this point, I think I administer
00:04:41
◼
►
19 virtual private servers or something like that
00:04:44
◼
►
to run my apps, and it's a pretty big number,
00:04:47
◼
►
but the actual load of that,
00:04:49
◼
►
of actually doing that is pretty straightforward.
00:04:51
◼
►
- Oh yeah, and I mean, things have gotten so cheap
00:04:53
◼
►
over the years, like I now pay for all of Overcast,
00:04:56
◼
►
which is something like 11 VPS instances on Linode.
00:05:01
◼
►
I now pay for all of them what I used to pay
00:05:03
◼
►
for one database server for Instapaper back in the day,
00:05:07
◼
►
and that wasn't that long ago.
00:05:08
◼
►
That was like five years ago.
00:05:10
◼
►
So what you can get now at the VPS level
00:05:12
◼
►
is just incredibly good.
00:05:14
◼
►
I was the biggest fan of bare metal dedicated servers before
00:05:17
◼
►
but now even I have converted because you can just,
00:05:20
◼
►
you know, the competition especially between Linode
00:05:22
◼
►
and DigitalOcean has really made incredibly fast
00:05:26
◼
►
hardware available for almost no money.
00:05:28
◼
►
And it also makes it much easier to learn
00:05:30
◼
►
because it lets you, and we'll get into this
00:05:32
◼
►
in a little bit, but it lets you,
00:05:34
◼
►
you know, if you can just like,
00:05:35
◼
►
in a simple command on a web interface,
00:05:38
◼
►
so not involving buying anything,
00:05:40
◼
►
not involving emailing anybody
00:05:42
◼
►
or placing any orders with anybody,
00:05:44
◼
►
just in a web interface you can quickly create
00:05:47
◼
►
an instance of a server, then you can do things like,
00:05:49
◼
►
oh, let me see how easy is it to set up PHP or whatever.
00:05:53
◼
►
Like you can do things like that,
00:05:54
◼
►
or you can say, I wonder how,
00:05:56
◼
►
whether this new distro of Linux makes more sense to me,
00:05:59
◼
►
or I wonder if my software will run on this other distro
00:06:02
◼
►
or this other web server or whatever.
00:06:04
◼
►
you can just spin up a new instance in minutes
00:06:07
◼
►
and run your install script and poke around,
00:06:11
◼
►
try things out, see what works, see what breaks.
00:06:15
◼
►
And if at any point you decide this wasn't for you
00:06:18
◼
►
or this didn't go well, you can just delete the instance
00:06:20
◼
►
and you've paid up to that point maybe 50 cents.
00:06:24
◼
►
Like it's crazy how easy this is
00:06:27
◼
►
to both administer servers and to learn
00:06:29
◼
►
how to administer servers now in the world of VPSs.
00:06:33
◼
►
- Yeah, 'cause it's lovely to think of,
00:06:34
◼
►
most of these are charged by hour of use
00:06:37
◼
►
or something like that, and so you can,
00:06:39
◼
►
they're just kind of like utility in that way,
00:06:41
◼
►
that you can just spin them up when you want 'em,
00:06:43
◼
►
spin, take 'em down when you don't want 'em anymore,
00:06:45
◼
►
and like, it's very straightforward and easy to do
00:06:48
◼
►
in a way that is kind of scary the first time you do it,
00:06:51
◼
►
that you just like hit a button and it's like,
00:06:52
◼
►
oh, here's a machine.
00:06:54
◼
►
Go ahead and SSH into it and get started.
00:06:57
◼
►
- Yeah, I mean, it's so easy that like,
00:06:58
◼
►
you know, one way you could've done it before
00:07:00
◼
►
is by running something like VMware Fusion or Parallels
00:07:02
◼
►
on your computer and virtualizing little Linux setups
00:07:06
◼
►
on your computer and doing that.
00:07:08
◼
►
But now it's so cheap and easy to go do it
00:07:10
◼
►
on Linode or DigitalOcean that it's actually easier
00:07:14
◼
►
to do that than it is to do it on your local computer.
00:07:18
◼
►
Now I do all my experimentation on VPSs.
00:07:20
◼
►
I don't even have virtualization software installed
00:07:21
◼
►
anymore on my Mac.
00:07:23
◼
►
- Yeah, and I'm the same way.
00:07:24
◼
►
The only thing I use my Mac for when I'm doing
00:07:26
◼
►
this kind of thing is the first level of,
00:07:30
◼
►
the nice thing about using something like Linux
00:07:32
◼
►
is that the basic underpinnings underneath our Macs
00:07:36
◼
►
are like it's some kind of Unix-based thing.
00:07:40
◼
►
I couldn't tell you all of the history of it,
00:07:41
◼
►
but functionally, your Mac is running
00:07:43
◼
►
the same basic stack kernel types of things
00:07:46
◼
►
that your ultimate server is gonna run.
00:07:49
◼
►
And so I use my Mac because I can learn
00:07:52
◼
►
and kind of prototype and try some of the things
00:07:54
◼
►
that ultimately I'm gonna run on my main server locally.
00:07:57
◼
►
I have a development database that runs on my machine.
00:08:01
◼
►
I have a web server that runs on my local machine,
00:08:03
◼
►
which makes prototyping really quick.
00:08:05
◼
►
But as soon as I wanna do anything
00:08:06
◼
►
that's going to be simulating my end environment,
00:08:10
◼
►
I just spin up an instance and run it.
00:08:12
◼
►
And I have a couple of just instances
00:08:14
◼
►
that you just bring up, like try it out.
00:08:16
◼
►
If it works, great.
00:08:17
◼
►
If it doesn't, you can just delete it and start again.
00:08:20
◼
►
So once you've decided you're gonna build
00:08:23
◼
►
a Linux instance and get started,
00:08:26
◼
►
and that actual process is pretty straightforward.
00:08:29
◼
►
you'll go to a virtual private server provider, and just sort of you'll set up your instance,
00:08:35
◼
►
it'll give you some credentials and an IP address and a few things that you'll have
00:08:39
◼
►
for like how to log into it, and then you just log in and get started. And for most
00:08:43
◼
►
applications, you're going to install at least two things on that. You're going to install
00:08:47
◼
►
a web server and a database of some kind. And starting out, you could probably put them
00:08:52
◼
►
both on the same machine. Eventually, you'll probably do a thing where you'll split the
00:08:57
◼
►
the web database onto its own machine
00:08:59
◼
►
and put one or more web servers in front of it.
00:09:02
◼
►
But at the very least, you're gonna install
00:09:04
◼
►
some kind of web server environment,
00:09:05
◼
►
some kind of database.
00:09:07
◼
►
The web server that you choose is entirely up to you.
00:09:09
◼
►
Like, I use Ruby on Rails for all my backends.
00:09:12
◼
►
I think all of yours are in PHP.
00:09:14
◼
►
- Yeah, I mean, and I have many opinions
00:09:17
◼
►
on how you choose these tools.
00:09:20
◼
►
I will summarize them, for the sake of this
00:09:21
◼
►
being a short show, I will summarize them
00:09:23
◼
►
as what you want most of all when choosing server software,
00:09:27
◼
►
if you don't wanna be administering and tweaking
00:09:30
◼
►
with your server constantly,
00:09:31
◼
►
what you want is old, boring, and popular.
00:09:35
◼
►
Those three things, old, boring, and popular.
00:09:38
◼
►
New and trendy does not necessarily always mean better.
00:09:41
◼
►
In this case, you know, especially like,
00:09:44
◼
►
what makes some people think that the new stuff is better
00:09:47
◼
►
is vague claims of it being quote, scalable,
00:09:51
◼
►
And beware of any claims of things being scalable, because in reality, scaling web services up,
00:09:58
◼
►
not only is it the kind of thing that you will probably never need for almost any project
00:10:02
◼
►
that you do, but when you do need it, it is way more complicated. And there is no silver
00:10:08
◼
►
bullet for scaling. There is nothing that automatically scales, unless it also automatically
00:10:13
◼
►
scales all of your money away. But there is nothing that automatically and easily scales.
00:10:18
◼
►
Scaling is always complicated and always tricky. It's just, you know, the new things that
00:10:22
◼
►
claim scalability just scale differently. And the challenges are just different challenges.
00:10:29
◼
►
The newer something is, the trendier or newer something is, that means, you know, the fewer
00:10:35
◼
►
people have experience with it and the fewer large installations it has. And so that means
00:10:43
◼
►
there's less knowledge in the world about how it fails or what the anti-patterns of
00:10:47
◼
►
it might be. So as you go lower level in the stack, being this kind of conservative, preferring
00:10:53
◼
►
things that are old, boring and popular becomes more important. So like if you want to use
00:10:58
◼
►
like a brand new cutting edge CSS library, go for it. It doesn't matter really. You
00:11:02
◼
►
know, if it works for you, go for it. Your risk is pretty low there. But you probably
00:11:07
◼
►
would not want to use a beta version of the Linux kernel. You know, so like as you go
00:11:12
◼
►
down the stack, you want to be more conservative because it's just kind of a bad idea to
00:11:17
◼
►
to take risks lower down.
00:11:18
◼
►
And I include things like the database in that.
00:11:21
◼
►
MySQL and Postgres are great.
00:11:24
◼
►
They're battle tested, they are old, boring, and popular.
00:11:27
◼
►
That is what you want in your database.
00:11:30
◼
►
Just like you wouldn't want a trendy new kind of brakes
00:11:32
◼
►
on your car.
00:11:33
◼
►
Like you want time tested brakes that everyone knows works
00:11:37
◼
►
and everyone knows that you aren't gonna be pushing
00:11:38
◼
►
the boundaries of them.
00:11:40
◼
►
You want a really boring database.
00:11:43
◼
►
And I would say you want a really boring language too
00:11:46
◼
►
because really new cutting edge languages are still in flux.
00:11:51
◼
►
And so if you want to have this kind of like set it
00:11:54
◼
►
and forget it kind of server approach,
00:11:56
◼
►
you don't want to have to deal with
00:11:58
◼
►
a young languages frequent changes
00:12:01
◼
►
and frequent needs for being updated.
00:12:04
◼
►
You know, you want to minimize anything
00:12:06
◼
►
that will require your attention
00:12:08
◼
►
or that might break your app.
00:12:09
◼
►
So you wanna minimize the need for, you know,
00:12:12
◼
►
backwards incompatible updates and things like that
00:12:15
◼
►
or crashes and having to install little bug fixes constantly for the language or database
00:12:20
◼
►
you're using, you want to avoid all of that. Because new really, new means untested or
00:12:26
◼
►
less tested. Another thing that you hit with new stuff is in the language layer, new means
00:12:33
◼
►
that you have fewer third party libraries and generally less third party code. And this
00:12:38
◼
►
is a problem like, I've been using PHP forever and PHP third party code is mostly garbage,
00:12:43
◼
►
but there is so much of it out there that any need that I have, I can find something
00:12:49
◼
►
to do it. And it isn't always good, but I can find something. And as I've started
00:12:53
◼
►
writing some newer things in Go, and Go I like as a language conceptually, but because
00:12:58
◼
►
it's such a younger language and it isn't that popular yet, and might never become popular,
00:13:04
◼
►
who knows, but because it's younger and less popular, there is very little third-party
00:13:08
◼
►
already go code for some very common things that I keep needing to do. And I keep, every
00:13:13
◼
►
time I need to write something new in Go, I hit this wall of, "Oh, I'll just load up
00:13:17
◼
►
the markdown module." And I look and there's like three of them that are all kind of half
00:13:22
◼
►
baked and, you know, and I haven't listened in a while for markdown, so maybe that's a
00:13:25
◼
►
bad example. But I keep hitting that wall whenever I do anything in a new language of,
00:13:29
◼
►
"Oh, I just want to see how, oh, how do I resize an image? Oh, well, you kind of can't,
00:13:33
◼
►
"Oh, unless you do this."
00:13:35
◼
►
So it's always easier to use old, boring, and popular stuff.
00:13:39
◼
►
It may be less interesting,
00:13:40
◼
►
and if you are the kind of person
00:13:42
◼
►
who wants cutting edge languages
00:13:45
◼
►
and who finds that satisfying,
00:13:46
◼
►
then you will trade time and maintenance for that.
00:13:50
◼
►
And so for the goal of low maintenance
00:13:52
◼
►
and low server maintenance,
00:13:55
◼
►
I highly suggest that you use other parts of your app
00:13:58
◼
►
to get the kind of newness out of your system.
00:14:01
◼
►
Like yeah, use the higher level parts
00:14:03
◼
►
use maybe the iOS side of it if you have an iOS and a web app, use that side of it to
00:14:07
◼
►
do new cool stuff and make the server as boring, old and popular as possible. Because old,
00:14:12
◼
►
boring, popular stuff works. It really works. It hardly ever breaks and you will never be
00:14:19
◼
►
the biggest person using it because long before, you know, even suppose that you build something
00:14:24
◼
►
with old, boring stuff. Suppose it gets like the size of Etsy, right? Etsy is huge. It's
00:14:29
◼
►
It's not the biggest website on the internet,
00:14:31
◼
►
but it's huge, right?
00:14:32
◼
►
It gets the size of Etsy.
00:14:34
◼
►
If you get that big, will you be the biggest user
00:14:38
◼
►
of anything in your stack?
00:14:40
◼
►
Because once you're the biggest user
00:14:41
◼
►
of your database or something,
00:14:43
◼
►
then you basically become a developer of that database.
00:14:46
◼
►
You will hit all the bugs, you will have to go in
00:14:48
◼
►
and make patches yourself to customize things
00:14:50
◼
►
that aren't working well or aren't working right for you.
00:14:54
◼
►
So Facebook rolls out tons of patches and things.
00:14:57
◼
►
Twitter has rolled out tons of patches
00:14:58
◼
►
things like Memcache, I mean like there's all these big companies, all these big web
00:15:02
◼
►
companies end up having to basically partially take over parts of the stack they depend on
00:15:07
◼
►
open source wise and make their own contributions and fixes because they hit tons of bugs. You
00:15:12
◼
►
never want to be the biggest user of anything in your stack. And you know, when you start
00:15:16
◼
►
out of course you won't be the biggest user of basically anything, but you could become
00:15:19
◼
►
the biggest user. Like you'd be surprised, you know, you hear about new trendy things,
00:15:24
◼
►
but you'd be surprised how few big companies
00:15:27
◼
►
actually use them, so you never want to be the biggest
00:15:29
◼
►
user of anything, you want Facebook to have fixed
00:15:32
◼
►
every bug in that stack years before you ever hit it.
00:15:35
◼
►
- Yeah, and I think we're both coming at it
00:15:37
◼
►
from the perspective of being app developers,
00:15:39
◼
►
like what makes our apps cool is not the backend stack.
00:15:42
◼
►
That's got nothing to do with the thing that I'm gonna
00:15:45
◼
►
be marketing my app as.
00:15:47
◼
►
Like my customer shouldn't care, it's only,
00:15:51
◼
►
it exists for the sole purpose of just getting
00:15:53
◼
►
job done. Most of my backends are the most ridiculously boring, simple applications that
00:15:59
◼
►
I can possibly make it. I put as much logic and smarts as I can in the apps itself. The
00:16:06
◼
►
database is mostly just a nice wrapper for a database, and something that's simple and
00:16:10
◼
►
straightforward that I can set up and then I never think about again. The only time I
00:16:16
◼
►
ever really think about my servers is when there's some big security thing that I need
00:16:22
◼
►
to make sure it was auto-updated,
00:16:24
◼
►
or I'm adding major new functionality to the front end,
00:16:27
◼
►
to my applications, and then I have to go back
00:16:30
◼
►
and add something to it.
00:16:33
◼
►
But otherwise, I just want it as simple and basic as can be.
00:16:35
◼
►
It's just like a big database that I can put things in
00:16:39
◼
►
and then later get them out.
00:16:41
◼
►
And as long as I can do that, I'm good.
00:16:43
◼
►
- And if anything, when you're using old, boring,
00:16:45
◼
►
and popular, if anything ever goes wrong,
00:16:48
◼
►
or if you have any questions whatsoever,
00:16:51
◼
►
or anything comes up, you can just search the web
00:16:53
◼
►
and you have hundreds of answers from the thousands
00:16:56
◼
►
of other people who have used that already
00:16:58
◼
►
and have documented it like three years earlier.
00:17:01
◼
►
It's so much easier to make your server side stack
00:17:06
◼
►
something that you can easily forget about most of the time
00:17:10
◼
►
and you don't even have to deal with it.
00:17:13
◼
►
And I guess once you decide on which one you wanna do,
00:17:16
◼
►
it's like the process from there is honestly
00:17:18
◼
►
pretty straightforward.
00:17:19
◼
►
you pick something, you install it. Usually these kind of things are a pretty straightforward
00:17:24
◼
►
install process. Like, if you're, there should be some kind of conversion of like,
00:17:28
◼
►
"Go get me MySQL, go get me Postgres, go get me Nginx, go get me Apache," and the server will go
00:17:36
◼
►
get it, install it, configure it, you'll change a few configuration files, and you'll be up and
00:17:40
◼
►
running because it's boring. And the process of getting it set up has been done by thousands of
00:17:47
◼
►
people so everything's automated and scripted and the only thing that I'd mentioned there
00:17:51
◼
►
is one thing that I learned early on is once I set up a server the first time for I always
00:17:58
◼
►
document how I did it like the steps I did and then I will usually destroy what I did
00:18:02
◼
►
the first time and do it again to make sure I actually know what I'm doing to avoid the
00:18:06
◼
►
situation where down the road you are trying to like recreate a web server and you can
00:18:11
◼
►
never get it to work quite right and it turns out it's because the first time you did it
00:18:15
◼
►
you did this step that you forgot to document.
00:18:17
◼
►
And so that was my first little pro tip,
00:18:21
◼
►
is the first time when you think you got it right, that's great.
00:18:24
◼
►
Now do it again.
00:18:25
◼
►
Because if it works the second time,
00:18:27
◼
►
then you know you actually understand your setup
00:18:30
◼
►
and will be able to do it multiple times
00:18:32
◼
►
if down the road you need to.
00:18:33
◼
►
Because when you need to do it down the road,
00:18:35
◼
►
it's usually under some kind of duress, because you're like,
00:18:39
◼
►
wow, things are going really well.
00:18:40
◼
►
I need another web server to keep up with the load.
00:18:43
◼
►
Like that's a good thing, but it's also a bit of an urgent thing.
00:18:45
◼
►
Yeah, and VPSs make this so much easier because not only can you like, you know, you can just
00:18:49
◼
►
clone a server you already have if you need to, but also like you can do things like,
00:18:53
◼
►
you know, automate this with a big shell script as you figure out, like this is what I do,
00:18:56
◼
►
whenever I have to install something new or change something, I format everything I'm
00:19:01
◼
►
doing as a shell script as I'm going, and then I can rerun it on a fresh server from
00:19:07
◼
►
a VPS, like you know, so it's just like what you said, that you can kind of verify your
00:19:10
◼
►
work and it's so much easier.
00:19:12
◼
►
Oh man, it's like doing this, and I should also say,
00:19:15
◼
►
like, anything that is not really easy to install
00:19:19
◼
►
from a package manager, like, if,
00:19:21
◼
►
suppose you're looking at, you know,
00:19:23
◼
►
I'm looking at some PHP library to manipulate an image
00:19:26
◼
►
or something, you know, this is just a weird example.
00:19:28
◼
►
And if there's like three of them,
00:19:30
◼
►
and one of them is in the repository
00:19:33
◼
►
that my server comes with, like the yum or apt-get repo,
00:19:36
◼
►
like, one of them is in the repo,
00:19:38
◼
►
and I can install it with one word on the command line,
00:19:42
◼
►
and one of them needs to be built from source,
00:19:44
◼
►
I'm going with the one in the repo.
00:19:46
◼
►
Because that's like, anything, as a general rule of thumb,
00:19:50
◼
►
anything that you need to build from source
00:19:52
◼
►
or manually download from somewhere
00:19:53
◼
►
that is not in your package manager,
00:19:55
◼
►
try to avoid needing that.
00:19:58
◼
►
And everything becomes a lot easier.
00:20:00
◼
►
And package managers are not flawless.
00:20:01
◼
►
Sometimes you'll hit some weird conflict,
00:20:04
◼
►
but that's very rare, especially if you stick
00:20:07
◼
►
with the default repositories that come configured with it,
00:20:11
◼
►
because those are so heavily tested by other people,
00:20:14
◼
►
as again, old, boring, and popular,
00:20:16
◼
►
that you might not be able to use the newest version
00:20:18
◼
►
of something or a cutting edge feature of something
00:20:20
◼
►
or an obscure module of something.
00:20:22
◼
►
But if you can get away with not using it,
00:20:25
◼
►
you are saving yourself time in the future.
00:20:28
◼
►
- We're sponsored this week by our friends at Igloo,
00:20:31
◼
►
the intranet you will actually like.
00:20:33
◼
►
With Igloo, you don't have to be stuck at your desk
00:20:35
◼
►
to do your work.
00:20:36
◼
►
You can manage your task list from your laptop
00:20:37
◼
►
during a meeting, you can share status updates
00:20:39
◼
►
from your phone as you're leaving a client site. You can even access the latest version
00:20:43
◼
►
of a file from your home. Whether you're wearing pants or pajamas or anything, nobody will
00:20:47
◼
►
even know. These days, everything is mobile. Your work should be too. Now, if you've ever
00:20:52
◼
►
looked at a corporate intranet, you've possibly thought, "Whoever designed this must truly
00:20:56
◼
►
hate me and everyone I know." With Igloo, those days are over. Igloo internets are actually
00:21:02
◼
►
places you want to be. They're surprisingly configurable. You can even customize it and
00:21:06
◼
►
and rebranded to give it the look and feel of your team.
00:21:08
◼
►
They have group spaces, role-based access permissions,
00:21:10
◼
►
easy to use drag and drop widget editors,
00:21:13
◼
►
so you can reorganize the whole platform
00:21:14
◼
►
to fit exactly how your teams work.
00:21:16
◼
►
Now of course today, mobile is everywhere.
00:21:18
◼
►
Igloo is great on mobile.
00:21:20
◼
►
They are fully responsive, they work on every device,
00:21:22
◼
►
at any screen size.
00:21:24
◼
►
New devices come out, they work on day one,
00:21:26
◼
►
and they have all these great integrations
00:21:28
◼
►
with modern services that you actually use.
00:21:30
◼
►
Things like Box, Google Drive, Dropbox,
00:21:33
◼
►
All of this is integrated into one big,
00:21:35
◼
►
easy to secure platform.
00:21:37
◼
►
They do things like 256 bit encryption,
00:21:39
◼
►
single sign on, active directory integrations.
00:21:41
◼
►
You, if you know what any of those things are,
00:21:43
◼
►
you know how safe and secure igloo is.
00:21:46
◼
►
So share your files with your coworkers
00:21:47
◼
►
for everyone to collaborate on,
00:21:48
◼
►
do everything you want inside your intranet with igloo.
00:21:51
◼
►
Break away from the intranet that you hate.
00:21:53
◼
►
Go sign up for igloo right now
00:21:54
◼
►
and you can try it for free for any team
00:21:56
◼
►
with up to 10 people for as long as you want.
00:21:58
◼
►
Sign up at igloosoftware.com/radar.
00:22:02
◼
►
Once again, that's igloosoftware.com/radar.
00:22:04
◼
►
Start your free trial today.
00:22:05
◼
►
Thank you so much to igloo for supporting
00:22:07
◼
►
Under the Radar and all of Relay FM.
00:22:10
◼
►
- Okay, so once you now have the server set up,
00:22:14
◼
►
it's running, your system's up and going,
00:22:17
◼
►
the thing that of course seems worth pointing out
00:22:19
◼
►
is some of the lessons we've learned
00:22:21
◼
►
about how things typically go wrong
00:22:24
◼
►
when they actually, you know,
00:22:26
◼
►
so if you got this deployed, you got it running,
00:22:28
◼
►
hopefully you have something running to monitor it.
00:22:31
◼
►
I think I use Pingdom, I don't know what you use, but you have some kind of call where
00:22:35
◼
►
I also use Pingdom.
00:22:36
◼
►
There you go, they're a great service.
00:22:38
◼
►
You give them a URL and they will hit it.
00:22:41
◼
►
And one thing I always like with those kinds of URLs is don't point it to the root URL
00:22:47
◼
►
of your site to make sure that it's up.
00:22:50
◼
►
Have a special URL that it hits that will test your whole stack.
00:22:54
◼
►
So it will go down to the database, make sure the database is running.
00:22:57
◼
►
If you have a search query system, it'll go and hit that, and then report back results
00:23:03
◼
►
so that you're actually testing your whole thing.
00:23:05
◼
►
But you have something that's testing it.
00:23:08
◼
►
Every now and then you'll get a little message that says, "Oh, it's down.
00:23:12
◼
►
Why is that?"
00:23:14
◼
►
And usually, on the nice thing, it doesn't actually happen very often.
00:23:18
◼
►
For running as many services, I think we both run.
00:23:20
◼
►
Outages are pretty rare, things are pretty reliable and stable these days in general.
00:23:25
◼
►
and then you'll hit some kind of network outage in the data center, which you can't really
00:23:29
◼
►
do anything about.
00:23:30
◼
►
Which is awesome, because you can't do anything about it.
00:23:33
◼
►
You know, you go on Twitter and you apologize to your users, and you just wait for the host
00:23:39
◼
►
And that's great.
00:23:40
◼
►
It's, it's, there's nothing to be done.
00:23:41
◼
►
And that's going to happen no matter where you are, too.
00:23:43
◼
►
Like, originally I'd think, oh, well, you know, maybe I, if I was using something else,
00:23:47
◼
►
I wouldn't have this problem.
00:23:48
◼
►
But it's like, everything has this problem.
00:23:52
◼
►
I've been on a lot of hosts before.
00:23:53
◼
►
they've all had outages.
00:23:55
◼
►
>> Yeah, those are just built into it.
00:23:58
◼
►
But beyond that, there's not that many of things that happen.
00:24:01
◼
►
Usually the issues I run into, the most common thing that I'll hit is something like a machine
00:24:08
◼
►
will run out of disk space, which seems kind of basic, but it's happened to me several
00:24:11
◼
►
times where it turns out I have some log file that isn't being rotated correctly, and it's
00:24:18
◼
►
just like my machine is completely out of space.
00:24:20
◼
►
And so something—it'll just start falling over in a really confusing way.
00:24:24
◼
►
So I just go and check on my servers every now and then, and just make sure that they
00:24:29
◼
►
have space and the space isn't getting smaller and smaller, because most servers should just
00:24:32
◼
►
be very stable and unchanging.
00:24:35
◼
►
And once you do that, things are pretty good.
00:24:37
◼
►
And then you run into, unfortunately, the next most likely case of problems is probably
00:24:44
◼
►
what we would call human error.
00:24:46
◼
►
And unfortunately, you are the human that is causing the error.
00:24:51
◼
►
So when you're administering your own servers, you have all these little opportunities for
00:24:56
◼
►
you to do something that ends up breaking your backend.
00:25:00
◼
►
I've run a deployment to my RSS syncing system, Feed Wrangler, where I rolled a deployment
00:25:06
◼
►
out that dropped the main feed item table accidentally.
00:25:11
◼
►
That was an interesting test of how good my backup strategy was.
00:25:16
◼
►
and took the service down for four hours,
00:25:18
◼
►
but that's why you have backups,
00:25:20
◼
►
and that's why you eventually learn
00:25:23
◼
►
to be very, very, very careful
00:25:25
◼
►
whenever you're touching your production databases.
00:25:28
◼
►
- Yes, and yeah, database backup is very, very important.
00:25:32
◼
►
Every VPS provider I know of
00:25:34
◼
►
supports snapshotting the machine's backup.
00:25:36
◼
►
Usually you have to do something special
00:25:38
◼
►
to back up a database,
00:25:39
◼
►
because you can't just copy the file
00:25:41
◼
►
and have it be consistent,
00:25:42
◼
►
but there are tools for every popular database
00:25:44
◼
►
take snapshot backups of them and dump them into files or whatever. So look into that
00:25:48
◼
►
for your database of choice. For MySQL, it's definitely Extra Backup is the one I recommend
00:25:53
◼
►
from Percona. Postgres probably—you Postgres people, you're probably like, "Oh, well,
00:25:57
◼
►
it just automatically does this for you. You don't have to even think about it because
00:25:59
◼
►
Postgres is amazing, and MySQL is bad." Is that roughly correct?
00:26:04
◼
►
Not exactly. I use a thing called Wall-E as my backup system, which is—yeah, the nice
00:26:11
◼
►
thing about the most good backup systems too with databases is they can often allow you
00:26:16
◼
►
to do point-in-time recovery, which is really helpful for that kind of a human error problem,
00:26:23
◼
►
where you issued a particular command at a particular time and that destroyed all your
00:26:28
◼
►
data. So even if you had your backup, if you had a snapshot right afterwards, it's not
00:26:34
◼
►
like you need to recreate the database. You need to go back in time and undo queries.
00:26:38
◼
►
And so if you have a system where that uses point-in-time recovery, which I know Wally
00:26:43
◼
►
does and I'm sure there's MySQL things that do the same thing, you can kind of replay
00:26:47
◼
►
what your database was doing and recreate it just before you were an idiot.
00:26:51
◼
►
>> WESLEY CHUNG: Binary logging in MySQL.
00:26:52
◼
►
>> STEVEN SCOTT: Yeah, which is awesome.
00:26:53
◼
►
Being able to do that is a tremendously helpful thing.
00:26:57
◼
►
Hopefully you never use it, but I think given that we've both done it or done things like
00:27:02
◼
►
that, it will probably happen at some point and you just want to be prepared.
00:27:05
◼
►
>> WESLEY CHUNG; Oh, yeah.
00:27:06
◼
►
One thing also, earlier we talked about automating as much as possible with the setup. As much
00:27:11
◼
►
as you can, automate the health of your servers. Pingdom monitoring for the overall uptime
00:27:18
◼
►
of your app is great. One thing I do to prevent your disk space issue is I have two Pingdom
00:27:23
◼
►
alerts for any service I run. One of them is, is it up? And that one's on high alert.
00:27:27
◼
►
If anything goes down, like the main site is down, then everything of mine beeps and
00:27:34
◼
►
vibrates, like everything alerts me. But I also have a lower class one, usually called
00:27:39
◼
►
stats or vitals, where that hits a special URL which checks all the servers for things
00:27:45
◼
►
like low disk space and very high CPU load and things like that. And it gives Pingdom
00:27:51
◼
►
a down result if anything like that is out of whack and then it's logged in a place
00:27:57
◼
►
that I can see like what caused this. So I can see, oh, at noon every day this server
00:28:02
◼
►
has a really high load, or I can see,
00:28:05
◼
►
oh, this server right here has low disk space right now.
00:28:07
◼
►
So I'm never surprised by things like low disk space
00:28:11
◼
►
or very high load, because I have that automated
00:28:13
◼
►
and being automatically checked by another pingdom check.
00:28:16
◼
►
- Yeah, that's a great idea.
00:28:17
◼
►
Like, it's those types of things that you're just trying
00:28:20
◼
►
to think of ways to anticipate the problem
00:28:23
◼
►
before it happens.
00:28:24
◼
►
- Yeah, I mean, even like a low-tech version of that,
00:28:26
◼
►
which I've done on some servers,
00:28:27
◼
►
is you just put a cron job that runs every five minutes
00:28:30
◼
►
that emails you if disk space is too low.
00:28:32
◼
►
Worst case scenario, you wake up to a pile of 40 emails,
00:28:35
◼
►
okay, you go and fix it.
00:28:37
◼
►
So it's, yeah, it's great.
00:28:38
◼
►
There's so many easy ways to do this kind of automated
00:28:41
◼
►
maintenance of servers now.
00:28:43
◼
►
Running a server is really not as hard as you might think
00:28:47
◼
►
if you've never done it before.
00:28:48
◼
►
- Yeah, and I really think that if you can't,
00:28:51
◼
►
if the things that we're talking about this week
00:28:53
◼
►
sound scary, that's an important thing to get over
00:28:55
◼
►
and get used to and comfortable with.
00:28:58
◼
►
because as a developer, it feels like it's in some ways a very basic skill that if you
00:29:04
◼
►
can't do, you're kind of holding both your work back in terms of the level of complexity
00:29:12
◼
►
of the projects you can take on, as well as your career in terms of the things that you're
00:29:17
◼
►
able to do and the jobs that you could potentially get and those kinds of things.
00:29:22
◼
►
These are useful skills that don't go out of date.
00:29:24
◼
►
If you know at a basic level how to administer a server, that's always going to be useful
00:29:29
◼
►
and interesting.
00:29:30
◼
►
I don't think that's going away.
00:29:31
◼
►
As much as new high-level abstractions and things appear, that's cool and all, but
00:29:36
◼
►
Unix has been around for a very long time for very good reasons.
00:29:39
◼
►
All right, we're out of time this week.
00:29:41
◼
►
We'll probably cover more of these topics in the future or expand on them, so keep listening
00:29:44
◼
►
if you want more of this or anything else for that matter, because we are great and
00:29:48
◼
►
you should keep listening to our show.
00:29:49
◼
►
Thanks a lot for listening, everybody, and we'll talk to you next week.