Under the Radar

Under the Radar 14: Linux Servers for App Developers


00:00:00   welcome to under the radar a show but

00:00:01   independent ios and app development I'm

00:00:03   Marco Arment and I'm David Smith under

00:00:06   the radar is never longer than 30

00:00:07   minutes

00:00:08   so let's get started so last week we

00:00:10   mentioned at the end how we were gonna

00:00:12   tell this week tips and and stories and

00:00:15   setups of how to run your own Linux

00:00:17   servers because this is now you know in

00:00:19   the wake of the parse announcement last

00:00:21   week this is now kind of in the news and

00:00:22   we think it's kind of a core competency

00:00:24   that many app developers should know

00:00:26   just how to run your own servers and and

00:00:28   once you know this it enables your apps

00:00:30   to be better to be more capable and and

00:00:33   if you if you do kind of a standard

00:00:35   server route without doing these like

00:00:37   kind of more abstract proprietary

00:00:38   services like parse it gives you a lot

00:00:41   of flexibility with what you can do in

00:00:42   the future and it kind of decouples you

00:00:44   from depending on a particular third

00:00:47   party to keep their their platform going

00:00:48   yeah and this is probably fair

00:00:50   disclaimer to say this is going to be an

00:00:52   episode that goes a bit into the weeds

00:00:54   like Dennis had some pretty low level

00:00:56   stuff and if that's for you awesome if

00:00:59   it isn't for you you know maybe stick

00:01:01   around you might learn something and

00:01:02   know that you know some some episodes

00:01:04   are gonna be high level some episodes

00:01:06   are gonna be low level and hopefully we

00:01:08   can have a nice balance as a result so

00:01:10   at a high level it's probably worth

00:01:12   starting of just kind of talking about

00:01:13   the the spectrum of hosting before we

00:01:16   kind of end it before why we do it the

00:01:18   way we do it

00:01:19   so ultimately hosting see in many ways

00:01:22   comes down to levels of abstraction like

00:01:25   how abstracted away if they're like the

00:01:27   actual computer that you're running your

00:01:30   servers and your backends and systems on

00:01:32   how much that is abstracted away from

00:01:35   you so like at the lowest level you have

00:01:37   a but I think it would be called

00:01:38   colocation or something like that where

00:01:40   you have a computer that's like your

00:01:43   computer that you went to Best Buy or

00:01:45   whatever to buy and you're taking it and

00:01:47   you're putting it somewhere typically in

00:01:48   some kind of data center that you put in

00:01:50   a data center so that it has reliable

00:01:51   power and reliable internet and reliable

00:01:54   air-conditioning and all those types of

00:01:55   things but like it's your machine most

00:01:59   people don't do that I would really not

00:02:00   recommend doing something like that most

00:02:03   people with a very least we do but I

00:02:05   think most people call like bare metal

00:02:06   managed servers where it's not really

00:02:08   your machine it's a service that they

00:02:11   buy machines they manage machines if

00:02:13   harddrive dies in the machine they'll go

00:02:15   and fix it for you but it's you have

00:02:18   actual like a dedicated piece of

00:02:20   hardware you know a set of hard drives a

00:02:23   motherboard a CPU that's exactly yours

00:02:26   and you probably don't want that either

00:02:28   I've I've gone down that road it's fine

00:02:30   but it has a lot of difficulties that we

00:02:34   aren't really offset by its costs both

00:02:37   in monetary and like ease of use so most

00:02:40   people who didn't even doing any kind of

00:02:43   hosting themselves will use something

00:02:44   that's more like a VPS which stands for

00:02:47   virtual private server which is like

00:02:49   basically like it's a machine from your

00:02:52   apps perspective like you are your app

00:02:54   sees it's a hard drive it sees a CPU it

00:02:57   sees memory but all of those aren't

00:02:59   actually physical things they're it's

00:03:02   running on a shared environment with a

00:03:04   bunch of other systems that I'll see the

00:03:06   same things and share resources and you

00:03:09   know you can use something like the node

00:03:11   for this or digitalocean is another one

00:03:14   that's pretty common in many ways ec2

00:03:16   kind of runs like this but it's a bit

00:03:18   different but you have these kinds of

00:03:20   systems where you have a virtual Linux

00:03:23   machine that you can do and you have

00:03:24   some nice advantages that bit because

00:03:25   because it's virtual you can do things

00:03:28   like pick it up and move it around you

00:03:30   know like you take an image of your hard

00:03:32   drive and you can copy it onto another

00:03:33   one and things like that that are really

00:03:35   easy to manage and from a cost

00:03:38   perspective it's way cheaper because

00:03:40   you're sharing you know server resources

00:03:42   and then above that you have things like

00:03:44   virtual server environments things like

00:03:46   a juror or Heroku or total abstractions

00:03:49   like cloud cater parse or those types of

00:03:51   things that are completely abstracting

00:03:53   away from you and if I said for most

00:03:56   people you probably want to start at a

00:03:57   VPS like you want to find out where

00:03:58   you're comfortable if you if the thought

00:04:00   of administering a Linux server even

00:04:02   after this episode is completely

00:04:04   overwhelming like maybe go to something

00:04:06   like Heroku or Azure where you have a

00:04:09   little bit of control over what you're

00:04:11   doing but mostly there's something there

00:04:13   but it's still at least general-purpose

00:04:15   but I think we both run for like reap

00:04:18   yes sir vers because once you know what

00:04:21   you're doing it's really cheap it's

00:04:23   really efficient and you have a lot of

00:04:25   flexibility that you could move

00:04:27   providers you can spin up new servers

00:04:29   and take them down really quickly and

00:04:31   easily and you know especially like the

00:04:34   cost is amazing it's incredible the

00:04:37   amount of performance you can get from a

00:04:38   really basic set up I mean at this point

00:04:40   I think I administer 19 Virtual Private

00:04:43   servers or something like that to ramai

00:04:45   apps and it's a pretty big number but

00:04:48   the actual load of that of actually

00:04:49   doing that is pretty straightforward oh

00:04:51   yeah and I mean and things have gotten

00:04:53   so cheap over the years like I now pay

00:04:54   for all of overcast which is something

00:04:57   like something like 11 VPS instances on

00:05:00   Linode I now pay for all of them what I

00:05:03   used to pay for one database server for

00:05:05   Instapaper back in the day and that

00:05:07   wasn't that long ago that's like five

00:05:08   years ago

00:05:09   so what you can get now with with at the

00:05:12   VPS level is just incredibly good

00:05:14   I was the biggest fan of bare metal

00:05:15   dedicated servers before but now even I

00:05:18   have converted because you can just you

00:05:20   know the competition especially between

00:05:22   Linode and digitalocean has has really

00:05:24   made incredibly fast Hardware available

00:05:26   for almost no money and it also makes it

00:05:29   much easier to learn because you know it

00:05:31   lets you and we'll get into this in a

00:05:33   little bit but it lets you you know if

00:05:34   you can just like in you know in a

00:05:37   simple command on a web interface so not

00:05:39   involving buying anything not involving

00:05:41   emailing anybody or placing any orders

00:05:43   with anybody just in a web interface you

00:05:45   can quickly create an instance of a

00:05:48   server then you can do things like let

00:05:50   me see how easy is it to set up PHP or

00:05:53   whatever like you can do things like

00:05:54   that or you can say you know I wonder

00:05:55   how whether whether this new district

00:05:58   district of linux makes more sense to me

00:05:59   or or I wonder if my software will run

00:06:01   on this other distro or this other web

00:06:03   server or whatever you can just spin up

00:06:05   a new instance in minutes and you know

00:06:08   run your install script and and you know

00:06:10   try poke around try things out see what

00:06:12   works you would you know see what breaks

00:06:14   and if if at any point you decide this

00:06:17   wasn't for you or this didn't go well

00:06:18   you can just delete the instance and

00:06:20   you've paid up to that point maybe 50

00:06:23   cents like it's it's crazy how easy this

00:06:26   is to to both administer servers and to

00:06:29   learn how to administer servers now in

00:06:31   the world of VPS yeah because it's

00:06:33   lovely think of most of these are

00:06:34   charged by hour of use or something like

00:06:38   that and so you can they're just kind of

00:06:39   like utility in that way they

00:06:41   you can just spin them up when you want

00:06:43   him but take him down when you don't

00:06:44   want them anymore and like it's very

00:06:47   straightforward and easy to do in a way

00:06:49   that is kind of scary the first time you

00:06:50   do it that you just like hit a button

00:06:52   and it's like oh here's a machine go

00:06:54   ahead and ssh into it and get started

00:06:56   yeah I mean it's so easy that like you

00:06:58   know one way you could have done it

00:06:59   before is by running something like

00:07:01   VMware fusion or parallels on your

00:07:03   computer and virtualizing little Linux

00:07:05   setups on your computer and doing that

00:07:07   but now it's so cheap and easy to go do

00:07:10   it on linen or digital ocean that it's

00:07:13   actually easier to do that than it is to

00:07:15   do it on your local computer like now I

00:07:18   do all my experimentation on VPS I don't

00:07:20   even have our tools agent software

00:07:21   installed anymore on my Mac yeah and I'm

00:07:23   the same way like the only thing I used

00:07:25   my Mac for when I'm doing this kind of

00:07:27   thing is like the first level of the

00:07:30   nice thing about using listen like Linux

00:07:32   is that it's you know these are the

00:07:34   basic underpinning is underneath our

00:07:36   Macs are like it's you know it's some

00:07:38   kind of UNIX space thing I couldn't tell

00:07:40   you all of the history of it but

00:07:41   functionally like your Mac is running

00:07:43   the same basic stack kernel the types of

00:07:46   things that your ultimate server is

00:07:48   gonna run and so like I use my Mac

00:07:50   because I can learn and kind of

00:07:52   prototype and try some of the things

00:07:54   that ultimately I'm gonna run on my

00:07:55   linic I might like main so server

00:07:57   locally like I have a development

00:07:58   database that runs on my on my machine I

00:08:00   have a web have a web server that runs

00:08:02   on my local machine which makes

00:08:04   prototyping really quick but as soon as

00:08:05   I want to do anything that's going to be

00:08:07   simulating my end environment I just

00:08:11   yeah I just spin up an instance and run

00:08:12   it and I have a couple of just instances

00:08:14   that you're just bringing up you're like

00:08:15   try it out if it works great if it

00:08:17   doesn't you know you can just delete it

00:08:18   and start again so wait once you've

00:08:21   decided you're going to build and build

00:08:23   in a Linux instance and get started like

00:08:26   I'm the actual process is pretty

00:08:29   straightforward she'll go to a virtual

00:08:30   private server provider and just sort of

00:08:34   you'll be set up your instance it'll

00:08:36   give you some credentials and an IP

00:08:37   address and a few things that you'll

00:08:38   have for like how to log into it and

00:08:40   then you just log in and get started and

00:08:42   for most applications you're going to

00:08:44   install at least two things on that

00:08:46   you're going to install a web server and

00:08:48   a database of some kind and starting out

00:08:52   you could probably put them both on the

00:08:53   same machine

00:08:54   eventually you'll probably do a thing

00:08:56   where you'll split the web database onto

00:08:58   its own machine and put a one or more

00:09:00   web servers in front of it but if you

00:09:03   know the very least you're going to

00:09:04   install some kind of web server

00:09:05   environment some kind of database the

00:09:07   web server that you choose it's entirely

00:09:09   up to you like I use Ruby on Rails for

00:09:12   all my backends I think all of your

00:09:13   ziering PHP yeah I mean and I have many

00:09:16   opinions on like how you choose these

00:09:18   tools I will summarize them for the sake

00:09:21   of this being a short show I will

00:09:23   summarize them as what you want most of

00:09:26   all when choosing server software if you

00:09:28   don't want to be administering and

00:09:29   tweaking with your server constantly

00:09:31   what you want is old boring and popular

00:09:34   those three things old boring and

00:09:37   popular new and trendy does not

00:09:39   necessarily always mean better in this

00:09:42   case you know especially like what what

00:09:45   makes some people think that the new

00:09:46   stuff is better is vague claims of it

00:09:49   being quote scalable and beware of any

00:09:52   claims of things being scalable because

00:09:55   in reality scaling web services up not

00:09:59   only is it the kind of thing that you

00:10:00   will probably never need for almost any

00:10:02   project that you do but when you do need

00:10:04   it it is way more complicated and there

00:10:08   is no silver bullet for scaling there is

00:10:10   nothing that automatically scales unless

00:10:13   it also automatically scales on for all

00:10:14   of your money away but there there is

00:10:16   nothing that automatically and easily

00:10:18   scales scaling is always complicated and

00:10:20   always tricky it's just you know the new

00:10:22   things that claim scalability just scale

00:10:24   differently and it the challenges are

00:10:27   just different challenges the newer

00:10:29   something is the trendy or new or

00:10:31   something is that means you know the

00:10:35   fewer people have experience with it and

00:10:37   and the the fewer large installations it

00:10:41   has and so that means there's less

00:10:43   knowledge in the world about how it

00:10:45   fails or what the anti-patterns

00:10:47   of it might be so as you go a lower

00:10:50   level in the stack being this kind of

00:10:52   conservative preferring things that are

00:10:54   old boring and popular it becomes more

00:10:55   important so like if you want to use

00:10:58   like a brand new cutting-edge CSS

00:11:00   library go for it doesn't matter really

00:11:02   you know if it works for you go for it

00:11:04   your risk is pretty low there but you

00:11:06   you probably would not want to use

00:11:08   a beta version of the Linux kernel you

00:11:11   know it's like as you go down the stack

00:11:13   you want to be more conservative because

00:11:15   it's just it's just kind of a bad idea

00:11:16   to take risks lower down and I include

00:11:19   things like the database in that you

00:11:21   know MySQL and Postgres are great

00:11:23   they're battle-tested they are old

00:11:25   boring and popular that is what you want

00:11:28   in your database just like you wouldn't

00:11:30   want a trendy new kind of breaks on your

00:11:32   car like you want to time-tested breaks

00:11:35   that everyone knows works and everyone

00:11:37   knows that you aren't going to be

00:11:38   pushing the boundaries of them you know

00:11:40   you want a really boring database and I

00:11:44   would say you want a really boring

00:11:45   language - because let really new

00:11:47   cutting-edge languages are still in flux

00:11:50   and so if you want to have this kind of

00:11:53   like set it and forget it kind of server

00:11:55   approach you don't want to have to deal

00:11:57   with a young languages frequent changes

00:12:01   and frequent needs for being updated you

00:12:04   know you want to minimize anything that

00:12:06   will require your attention or that

00:12:08   might break your app so you want to

00:12:10   minimize the need for you know backward

00:12:12   compatible updates and things like that

00:12:14   or crashes and you know having to

00:12:16   install little bug fixes constantly for

00:12:18   the for the language of database you're

00:12:20   using you want to avoid all of that

00:12:22   because new really new means untested or

00:12:26   less tested another thing that you hit

00:12:28   with new stuff is in the language layer

00:12:31   new means that you have fewer

00:12:34   third-party libraries and and generally

00:12:36   less third-party code and this is a

00:12:38   problem like I I'm using PHP forever and

00:12:41   PHP third-party code is mostly garbage

00:12:43   but there is so much of it out there

00:12:45   that any any need that I have I can find

00:12:48   something to do it and it isn't always

00:12:50   good but I can find something and as

00:12:52   I've started writing some newer things

00:12:54   and go and go I like as a language

00:12:56   conceptually but there because it's such

00:12:59   a such a younger language and it isn't

00:13:01   that popular yet and might never become

00:13:03   popular who knows but because it's it's

00:13:05   younger and less popular there is very

00:13:08   little third-party go code for some very

00:13:11   common things that I keep meeting to do

00:13:12   and I keep every time I need to write

00:13:14   something new and go I hit this wall of

00:13:16   oh I'll just load up the you know

00:13:17   markdown module and I look and there's

00:13:19   like three of them that are all kind of

00:13:22   half

00:13:22   and you know and I haven't looked in a

00:13:24   while for markdown so maybe that's a bad

00:13:25   example but I keep hitting that wall

00:13:27   whenever I do anything in a new language

00:13:29   if oh I just want to see how oh how do I

00:13:31   resize an image oh well you kind of

00:13:33   can't unless you do this and so it's

00:13:36   always easier to use old boring and

00:13:38   popular stuff it may be less interesting

00:13:40   and if you are the kind of person who

00:13:42   wants you know cutting-edge languages

00:13:45   and who find that satisfying then you

00:13:48   will trade time and maintenance for that

00:13:50   and so if for the goal of

00:13:51   low-maintenance and and you know low

00:13:54   server maintenance I highly suggest that

00:13:56   you use other parts of your app to get

00:13:59   the kind of like newness out of your

00:14:01   system like yeah use the higher-level

00:14:02   parts or use maybe the iOS side of it if

00:14:04   if you have an iOS and a web app use

00:14:06   that side of it to do new cool stuff and

00:14:08   make the server as boring old and

00:14:11   popular as possible because the old

00:14:12   boring popular stuff works it really

00:14:15   works it hardly ever breaks and if and

00:14:18   you will never be the biggest person

00:14:20   using it because long before you know

00:14:22   even suppose that you build something

00:14:24   with old boring stuff suppose it gets

00:14:27   like the size of Etsy right Etsy is huge

00:14:29   it's not the biggest website on the on

00:14:31   the internet but it's huge right it gets

00:14:32   the size of Etsy if you get that big

00:14:35   will you be the biggest user of anything

00:14:39   in your stack because once you're the

00:14:40   biggest user of like your database or

00:14:42   something then you basically become a

00:14:45   developer of that database you will hit

00:14:47   all the bugs you will have to go in and

00:14:48   make patches yourself to customize

00:14:50   things that aren't working or that

00:14:51   aren't working well or aren't working

00:14:52   right for you you know so like Facebook

00:14:54   if Facebook rolls out tons of patches

00:14:57   and things Twitter has rolled out tons

00:14:58   of patches or things like memcache I

00:14:59   mean like there's there's all these like

00:15:01   big companies all these big web

00:15:02   companies end up having to basically

00:15:04   partially take over parts of the stack

00:15:06   that depend on open source wise and make

00:15:09   their own contributions and fixes

00:15:10   because they hit tons of bugs you never

00:15:12   want to be the biggest user of anything

00:15:14   in your stack and you know when you

00:15:16   start out of course you won't be the

00:15:17   biggest user of basically anything but

00:15:19   you could become the biggest user like

00:15:20   you'd be surprised you know you hear

00:15:22   about new trendy things but you'd be

00:15:24   surprised how few big companies actually

00:15:27   use them so you never want to be that

00:15:29   because he was ever anything you want

00:15:30   Facebook to have fixed every bug in that

00:15:32   stack years before you ever hit it

00:15:35   yeah I think we're ready rubber both

00:15:36   coming at it from the perspective of

00:15:38   being apt developers like what makes our

00:15:40   apps cool is not the back end stack

00:15:42   that's got nothing to do with like the

00:15:45   thing that I'm gonna be marketing my app

00:15:46   has like my customer shouldn't care no

00:15:49   one like it's only it exists for the

00:15:52   sole purpose of just getting a job done

00:15:54   like my most of my backends are the most

00:15:56   ridiculously boring simple applications

00:15:59   as I can possibly make it I put all the

00:16:01   much logic and smarts as I can in the

00:16:04   apps itself like the database is just

00:16:06   it's mostly just a nice wrapper for a

00:16:08   database and something that's simple and

00:16:10   straightforward that I can set up and

00:16:12   then I never think about again like the

00:16:16   only time I ever really think about my

00:16:17   databases is or like my servers is like

00:16:20   when there's some big security thing

00:16:22   that I need to make sure was Auto

00:16:23   updated or I'm adding major new

00:16:26   functionality to the front end to my

00:16:28   applications and then I have to go back

00:16:30   and like you know add something to it

00:16:33   but otherwise I just wanted as simple

00:16:34   and basic as can be it's just like a big

00:16:36   dish just like a big database that I

00:16:38   just a database that I can put things in

00:16:39   and then later get them out and as long

00:16:41   as it can do that I'm good and if

00:16:43   anything what are you 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:50   or anything comes up you can just search

00:16:52   the web and you have hundreds of answers

00:16:55   from the thousands of other people who

00:16:57   have used that already and have

00:16:58   documented it like three years earlier I

00:17:00   think like it's just it's so much easier

00:17:03   to to make your your your server-side

00:17:06   stack something that you can easily

00:17:08   forget about most of the time and you

00:17:10   know you don't even have to deal with it

00:17:12   exactly and I guess once you decide on

00:17:16   which one you want to do it's like it

00:17:17   the process from there is honestly

00:17:18   pretty straightforward you pick

00:17:19   something you install it usually these

00:17:22   kind of things that are pretty

00:17:23   straightforward install process like if

00:17:25   you're you know there's you be some kind

00:17:27   of version of like go get me my sequel

00:17:30   go get me Postgres go get me nginx go

00:17:33   get me apache and the server will go get

00:17:36   it install it configure it you'll change

00:17:38   a few configuration files and you'll be

00:17:40   up and running because it's boring and

00:17:42   the process that I'm getting it set up

00:17:46   has been done by thousands of people so

00:17:48   everything's

00:17:48   automated inscripted and the only thing

00:17:51   that I had mentioned there is one thing

00:17:52   that I learned early on is once I've set

00:17:54   up a server the first kind of what the

00:17:56   first time for I always a document how I

00:17:59   did it like the steps I did and then I

00:18:01   will usually destroy what I did the

00:18:02   first time and do it again

00:18:03   to make sure I actually know what I'm

00:18:05   doing to avoid the situation where down

00:18:07   the road you are trying to like recreate

00:18:09   a web server and you can never get it to

00:18:11   work quite right and it turns out it's

00:18:13   because the first time you did it you

00:18:15   did this step that you forgot to

00:18:16   document and so that was like no one

00:18:19   will approach first little pro tip is

00:18:21   like the first time you when you think

00:18:22   you got it right that's great

00:18:24   now do it again because if you if it

00:18:26   works the second time then you know you

00:18:28   actually understand your city or your

00:18:29   setup and could we'll be able to do it

00:18:31   multiple times if down the road you need

00:18:33   to because when you need to do it down

00:18:34   the road it's usually under some kind of

00:18:36   duress because you're like wow things

00:18:39   are going really well I needed another

00:18:40   web server to keep up with the load like

00:18:43   that's a good thing but it's also a bit

00:18:44   of an urgent thing yeah and VPS does

00:18:46   make this so much easier because not

00:18:47   only can you like you know you can just

00:18:49   clone whatsoever you already have if you

00:18:50   need to but also like you can do things

00:18:52   like you know automate this with a big

00:18:54   shell script as you as you figure out

00:18:56   like this is what I do like whenever I

00:18:57   have to install you know something new

00:18:58   or change something I format everything

00:19:01   I'm doing as a shell script as I'm going

00:19:02   and then I can then I can rerun it on a

00:19:05   fresh server from a VPS like you know it

00:19:08   just what you said that you can kind of

00:19:09   verify your work and it's it's so much

00:19:12   easier man it's like doing this and I

00:19:15   should also say like anything that is

00:19:17   not really easy to install from a

00:19:19   package manager like if if suppose

00:19:21   you're looking at you know I'm looking

00:19:23   at some PHP library to manipulate an

00:19:25   image or something you know that this is

00:19:27   just a weird example and if there's like

00:19:29   three of them and one of them is in the

00:19:32   repository that my server comes with

00:19:34   like the the UM or apt-get repo like one

00:19:37   of them is in the repo and I can install

00:19:39   it with what with you know one word on

00:19:41   the command line and one of them needs

00:19:43   to be built from source I'm going with

00:19:44   the one in the repo because like that's

00:19:47   like anything as a general rule of thumb

00:19:49   anything that you need to build from

00:19:51   source or manually download from

00:19:53   somewhere that is not in your package

00:19:54   manager try to avoid needing that and

00:19:58   and everything becomes a lot easier and

00:20:00   package managers are not flawless you

00:20:01   know sometimes

00:20:02   you'll hit some weird conflict but

00:20:04   that's very rare

00:20:06   if you especially if you stick with the

00:20:07   with like the the default repositories

00:20:09   that come configured with it because

00:20:11   those are so heavily tested by other

00:20:14   people and again old boring and popular

00:20:16   that you might not be able to use the

00:20:17   newest version of something or or a

00:20:19   cutting-edge feature of something or or

00:20:20   an obscure module of something but if

00:20:23   you can if you can get away with not

00:20:24   using it you are saving yourself time in

00:20:26   the future

00:20:27   exactly we're sponsored this week by our

00:20:30   friends at a glue the intranet you will

00:20:32   actually like with a glue you don't have

00:20:34   to be stuck at your desk to do your work

00:20:36   you can manage your task list from your

00:20:37   laptop during a meeting you can share

00:20:39   status updates from your phone as you're

00:20:40   leaving a client site you can even

00:20:42   access the latest version of a file from

00:20:43   your home whether you're wearing pants

00:20:46   or pajamas or anything nobody will even

00:20:47   know these days everything is mobile

00:20:50   your work should be - now if you've ever

00:20:52   looked at a corporate intranet you can

00:20:54   possibly thought whoever designed this

00:20:56   must truly hate me and everyone I know

00:20:57   with a glue those days are over

00:21:00   igloo Internet's are actually places you

00:21:02   want to be they're surprisingly

00:21:04   configurable you can even customize it

00:21:06   and rebrand it to give it the look and

00:21:07   feel of your team they have group spaces

00:21:09   role-based access permissions easy to

00:21:11   use drag-and-drop widget editors so you

00:21:13   can reorganize the whole platform to fit

00:21:14   exactly how your teams work now of

00:21:16   course today Mobile is everywhere igloo

00:21:19   is great on mobile they are fully

00:21:21   responsive they work on every device any

00:21:23   screen size new devices come out they

00:21:25   work on day one and they have all these

00:21:27   great integrations with modern services

00:21:29   that you actually use things like box

00:21:31   Google Drive Dropbox all of this is

00:21:33   integrated into one big easy to secure

00:21:36   platform they do things like 256 bit

00:21:39   encryption single sign-on Active

00:21:40   Directory integrations you if you know

00:21:42   what any of those things are you know

00:21:44   how safe and secure a glue is so share

00:21:46   your files with your co-workers for

00:21:47   everyone to collaborate on do everything

00:21:49   you want inside your intranet with a

00:21:51   glue break away from the internet that

00:21:52   you hate go sign up for a glue right now

00:21:54   and you can try for free for any team

00:21:56   with 210 people for as long as you want

00:21:58   so I put a glue software comm slash

00:22:01   radar once again that's a glue software

00:22:03   comm slash radar start your free trial

00:22:05   today thank you so much to a Lou for

00:22:06   supporting under the radar and all of

00:22:08   real afm okay so once you now have this

00:22:12   the server set up its running your

00:22:15   systems up and going

00:22:16   the thing that of course seems worth

00:22:18   pointing out is some of the lessons

00:22:20   we've learned about how things typically

00:22:23   go wrong when they actually you know

00:22:26   said if you got this deployed you got it

00:22:27   running hopefully you have something

00:22:29   running to monitor it I think I use

00:22:32   Pingdom I don't know what you use but

00:22:34   you have some kind of call where I also

00:22:35   use big dumb there you go they're a

00:22:37   great service it just you give them a

00:22:39   URL and they will hit it and one thing I

00:22:41   always like with those kinds of URLs is

00:22:44   don't point it to like the root URL of

00:22:47   your site to make sure that it's up like

00:22:50   have a special URL that it hits that

00:22:52   will test your whole stack you know so

00:22:54   it'll go down to the database make sure

00:22:55   the database is running it if you have

00:22:58   like a certain search you know query

00:23:00   system like it'll go and hit that and

00:23:02   then report back results so that you're

00:23:04   actually testing your whole thing but

00:23:05   you know you have something that's

00:23:07   testing it every now and then you'll get

00:23:09   a little message that says oh it's down

00:23:11   like why is that and usually on the nice

00:23:16   thing like it doesn't actually happen

00:23:17   very often like for running of as many

00:23:19   services I think we both run like

00:23:20   outages are pretty rare things are

00:23:22   pretty reliable and stable these days

00:23:23   like in general like you every now and

00:23:25   then you'll hit some kind of network

00:23:27   outage in the data center which you

00:23:29   can't really do anything about which is

00:23:31   awesome because you can't do anything

00:23:32   about it yeah you know you go you go on

00:23:34   Twitter and you apologize to your users

00:23:35   and you just wait for the host to fix it

00:23:37   yeah and that's great it's it's there's

00:23:40   nothing to be done and that's gonna

00:23:41   happen no matter where you are to like

00:23:43   originally I think oh well you know

00:23:46   maybe I if I was using something else I

00:23:48   wouldn't have this problem but it's like

00:23:49   everything has this problem like I've

00:23:52   been on a lot of hosts before they've

00:23:53   all had outages yeah like those are just

00:23:56   built into it but like beyond that

00:23:59   there's not that many of things that

00:24:00   happen like usually the issues I run

00:24:02   into you like the most common thing that

00:24:04   I'll hit is something like a machine

00:24:08   will run out of disk space which seems

00:24:10   kind of basic but it's happened to me

00:24:11   several times where I turns out I have

00:24:13   some log file that isn't being rotated

00:24:15   correctly and it's you know it's just

00:24:18   like my machine it's completely out of

00:24:19   space and so some things it'll just like

00:24:22   start falling over in a really confusing

00:24:23   way so I just go and check on my servers

00:24:26   every now and then and just like make

00:24:28   sure that they have space and the space

00:24:30   isn't

00:24:30   getting smaller and smaller because most

00:24:31   servers should just be very stable and

00:24:33   unchanging and once you do that things

00:24:36   are pretty good and then you run into

00:24:39   unfortunately the the next most likely

00:24:42   case of problems is probably what we

00:24:44   would call human error and unfortunately

00:24:48   you are the human that is causing the

00:24:50   error

00:24:51   so we've when you're administering your

00:24:53   own servers you have all these little

00:24:55   opportunities for you to do something

00:24:57   that ends up breaking your back-end I've

00:25:01   run a deployment to one of my to my via

00:25:03   RSS syncing system feed Wrangler or I

00:25:05   roll the deployment out that dropped the

00:25:08   main feed item table accidentally that

00:25:11   was that was an interesting test of how

00:25:13   good my backup strategy was and took the

00:25:16   service down for four hours but you know

00:25:19   that's why you have backups and that's

00:25:21   why you eventually learned to be very

00:25:23   very very careful whenever you're

00:25:26   touching your production databases yes

00:25:29   yeah database backup is very very

00:25:31   important

00:25:32   every VPS provider I know of supports

00:25:35   snapshotting the machines backup usually

00:25:37   you have to do something special to

00:25:38   backup a database because you can't just

00:25:40   like copy the file and have it be

00:25:42   consistent but there are tools for every

00:25:43   popular database to take like snapshot

00:25:45   backups of them and dump them into files

00:25:47   or whatever so so look into that for

00:25:49   your database of choice for MySQL it's

00:25:51   definitely a extra backup as the one I

00:25:53   recommend from Percona Postgres probably

00:25:55   you Postgres people you probably go oh

00:25:57   just automatically does this for you you

00:25:58   don't have to even think about it cuz

00:25:59   Postgres is amazing in MySQL you know

00:26:01   bad but right is that is that roughly

00:26:03   correct not exactly I used a thing

00:26:05   called Wally as my backup system which

00:26:10   is yeah like the nice thing about a most

00:26:12   good backup systems to with databases is

00:26:15   they can often allow you to do point in

00:26:17   time recovery mmm which is really

00:26:20   helpful for that kind of a human error

00:26:22   problem where you issued a particular

00:26:24   command at a particular time and that

00:26:27   destroyed all your data so like even if

00:26:29   you had like your backup if you had a

00:26:32   snapshot right afterwards like wouldn't

00:26:33   you know it's like you need to recreate

00:26:35   the database you need to go back in time

00:26:36   and like undo queries and so if you have

00:26:39   an a system where that uses point in

00:26:42   time recovery which I don't like while

00:26:43   he does and I'm sure there's

00:26:44   sequal things to do the same thing like

00:26:45   you can kind of replay what your

00:26:47   database was doing and recreate it like

00:26:49   just before you were an idiot yeah bitch

00:26:51   binary logging in my school yeah which

00:26:53   is awesome being able to do that is a

00:26:55   tremendously helpful thing hopefully you

00:26:57   never use it but you know I think given

00:27:00   that we've both done it or done things

00:27:02   like that it probably happened at some

00:27:04   point and you just want to be prepared

00:27:05   oh yeah one thing also uh you know

00:27:08   earlier research about automating as

00:27:09   much as possible with the set up as much

00:27:11   as you can automate the the health of

00:27:14   your servers like you know Pingdom

00:27:16   monitoring for the overall uptime of

00:27:18   your app is great one thing I do to

00:27:20   prevent like your disk space issue is I

00:27:22   have to Pingdom alerts for any surface I

00:27:24   run one of them is is it up and that

00:27:26   one's on high alert if anything goes

00:27:28   down it that would like the main site is

00:27:31   down then everything of mine beeps and

00:27:34   vibrates like everything alerts me but I

00:27:36   also have have a lower class one usually

00:27:39   called stats or vitals where that hits a

00:27:41   special URL which checks all the servers

00:27:44   for things like low disk space and very

00:27:47   high CPU load and things like that and

00:27:49   it it gives Pingdom a down result if

00:27:53   anything like that is out of whack and

00:27:56   then it's logged in a place that I can

00:27:57   see like what caused this so I can see

00:27:59   Oh at you know at noon every day this

00:28:02   server has a really high load or I can

00:28:05   see oh this server right here has low

00:28:07   disk space right now so I'm never

00:28:08   surprised by things like low disk space

00:28:11   or very high load because I have that

00:28:12   automated and being automatically

00:28:14   checked by another Pingdom check yeah

00:28:16   that's a great idea like it's it's it's

00:28:18   those types of things that you're just

00:28:20   trying to think of ways to anticipate

00:28:22   the problem before it happens yeah I

00:28:24   mean even like a low-tech version of

00:28:25   that which I've done on some servers is

00:28:27   you just put a cron job that runs every

00:28:29   five minutes that emails you of disk

00:28:31   space is too low yeah worst case

00:28:33   scenario you wake up to a pile of 40

00:28:34   emails okay you go you go and fix it

00:28:36   like so it's yeah it's great there's so

00:28:39   many easy ways to do this kind of

00:28:40   automated maintenance of servers now

00:28:42   it's running a server is really not as

00:28:45   hard as you might think if you've never

00:28:47   done it before yeah and I really think

00:28:50   that if you can't if the things that

00:28:51   we're talking about this week sounds

00:28:53   scary like that's an important thing to

00:28:55   get over and get used to and comfortable

00:28:57   with

00:28:58   because as a developer it's just like it

00:29:01   feels like it's like in some ways like a

00:29:03   very basic skill that if you can't do

00:29:06   you're kind of holding both your your

00:29:09   work back in terms of the things that

00:29:10   the the level of complexity of other

00:29:12   projects you want you can take on as

00:29:15   well as your career in terms of like the

00:29:16   things that you're able to do and the

00:29:18   things that you know the jobs you could

00:29:20   potentially get and those kinds of

00:29:21   things like these are useful scales that

00:29:23   don't go out of date if you know at a

00:29:25   basic level like how to administer a

00:29:27   server that's always going to be useful

00:29:29   and interesting like I don't think

00:29:30   that's going away like as much as new

00:29:32   high level abstractions and things up

00:29:33   here like that's cool and all but like

00:29:36   UNIX has been around for a very long

00:29:38   time

00:29:38   for very good reasons all right we're

00:29:40   out of time this week we'll probably

00:29:41   cover more of these topics in the future

00:29:43   or expand on them so keep listening if

00:29:45   you want more of this or anything else

00:29:46   for that matter because we are great and

00:29:48   you can keep listening to our show

00:29:49   thanks a lot for listening everybody and

00:29:51   we'll talk to you next week

00:29:52   bye