Is there a server admin guide for noobs?
Hi HN,
I was building this app the other day and because I'm a complete cloud server noob I deploy all my apps onto phpfog.com but there really lacking some features essential to my web app so I was really hoping to take the time to learn linux servers.
I've used rackspace in the past but nothing more than copying and pasting commands from a tutorial so when it comes to anything beyond the scope of what's in it I become stumped so I really need to learn how to fish in this case.
I want to become more acquainted with servers like Centos so does anybody know where I should get started?
Thanks a lot
37 comments
[ 3.3 ms ] story [ 88.3 ms ] threadOnly way is the old and tested one... force yourself to use it, till you "get it". I don't know anyone who learned it some other way. And I know lots of sysadmins (and I have all the skills, though I'm a "DevOp")
Essentially getting apache up and running and actually understanding the commands I'm using, other things are ssh, setting up FTP and another thing that daunts me incredibly is setting up the virtual host, I find it so easy to break things when I don't know what I'm doing.
There are probably a couple things I missed out on but a noob to ninja type ebook would be great.
Thanks a lot
If you want to learn linux server administration, IMHO the easiest (or at least the one which will make you learn) way is to try and use linux as a desktop for several months.
And don't go for something "easy" like ubuntu. Try Slackware, Arch Linux or Gentoo. This will force you to see what kind of knowledge you need, what kind of problems are common. Things like kernel tweaking, dependency resolving, filesystems, shells, etc.
Of course, you can continue to copy/paste from tutorials. It will probably work... to some degree... until things go wrong...
Buy yourself a cheap 'Low End Box' -> lowendbox.com and get a feel for linux. Once you feel you can happily control a server, then install it as your desktop so you don't by accident nuke your computer.
I find that being in a similar environment to your servers all day helps a lot. Try it :)
Honestly, I am becoming amazed how the attitude of I'll do it myself, especially in a learning environment is slowly seeping away.
"Server Administration" is not only "having the feel". Server administration is experience. If you haven't been in hell, you can't prepare for going there.
Of course, this is only true if one really wants to learn "system administration". If one wants to be able to fix problems when the whole office is standing on his head (systems not working). If one wants to just be able to deploy their "hobby project", then fine, go with the copy/paste way. You don't need anything more than that.
Do Linux server admins actually... change anything related to the Linux kernel?
I mean, I pretty much gave up on trying to understand Linux when the "certified" tech support at Rackspace couldn't figure out how to upgrade the version of PHP on my servers, apparently something to do with incompatibilities between the way the Red Hat PHP distribution was set up, and the official PHP one. And these are guys who have taken courses of years+ on configuring Linux, and that's still inadequate to achieve what would appear to me to be a trivial uninstall / reinstall.
Am I missing something here, or is Linux really this insanely hard to configure, to the point where I shoudn't even bother trying, and just leave it to the experts?
Let me give you an example of what kind of stuff you will come head to head with:
Recently I was installing and configuring a Riak cluster. I wanted to configure it to use multi backend with a large partition ring. What these are is not essential to our discussion here. What is essential is that I hit the riak user's limit for simultaneously open files. This is a thing controlled by the kernel, but configurable in userspace. If you are interested, you can find how to raise the limit by using Google.
This is the kind of "kernel tweaking" one usually needs to do. 1. How to make it work 2. how to make it persistent after server restart 3. WTF?! it's not the same in debian/ubuntu and Red Hat (half of the solutions I found don't work)
But the harder part is not finding the solution. The harder part is finding out what is the problem. In order to do so, you need to have experience. Know where are the logs, know which logs to look at. Know how different systems behave under such conditions (in my case, Erlang VM). Be proficient with shell tools for diagnostics. Be able to use emacs or vi(m) on the spot (you have no graphical environment) etc.
And there is no easy way in obtaining this skills. The only way is to get your hands dirty. Very dirty. Build systems, break systems, fix systems. You can't be good by just following tutorials, nor by using a sandboxed environment like a VPS.
Yes.
The Linux admins where I work have looked at TCP buffer settings, memory overcommit settings, and some other kernel level configurations. Last week, I was trying to determine for a user if the PF_SWAPOFF flag was being set on their process, and if memory was being harvested by the Out Of Memory Killer.
Linux is not really this hard to configure. What I'm describing is hyper-optimization and OS level troubleshooting. Most of my developer friends have a passing familiarity with Linux administration if they host their own web servers. One of them even runs Gentoo on some of his VPS's. However, once he gets past the level of "blog post to tell you how to fix this" he generally calls me. He gets paid to develop applications, not fiddle around with the VPS.
* What is a network interface?
* What is localhost?
* What is a reverse proxy? Why the hell does one need that? Apache didn't require to become one in order to run my PHP programs?
* What is a Makefile? What is a compiler?
* What is a SSH tunnel?
Now tell me, do you think it's a good idea for someone who doesn't understand these topics like the palm of their hand, to run their own server?
* restricting .htaccess and other folders
* escaping mysql requests from user input
* sanitizing user input
* handle DDoS attacks, spam prevention
* correctly setting exipration dates for caching
* DNS configuration (round robin, etc.)
* correct amount of worker process
Calomel.org has got an excellent guide for setting up your nginx server https://calomel.org/nginx.html
Once you get the hang of running on a virtual machine, use Puppet or Chef to learn how to automatically configure your servers when starting a new VM. This will save you a lot of time setting up your public VPS later.
An important difference between your local virtual machine and a VPS is that you will have to take some steps to secure a publically accessible server. Points to take into consideration here are: key vs password based SSH authentication, iptables firewall.
I've found the Linode library to be a good source of introductory documentation about setting up a VPS: http://library.linode.com
Running from a local machine is going to be really helpful.
I say CentOS or Ubuntu (w/out UI) is a good way to start. Those 2 distributions have many step by step solutions scattered on the web such as stackoveflow and forums posts. Slackware, Arch Linux or Gentoo are great for their target audience. IMHO they provides very little out of box for a noob and it's very easy to get lost in what you can set, break and/or fix. There is nothing more demoralizing that spending 2 days digging around the web for a problem that has numerous answers and you've no idea what everyone is on about.
Books are very useful guidelines, but getting your hands dirty is how you'll really learn.
Remember these and most other things are just window dressing.
- Install Virtual box ( or any other free VM hosts).
- Download CentOS.
- Set yourself a goal on what you need to achieve - e.g I need to run php version x with apache configured to do x y z tasks.
- Install CentOS as a VM ( you could skip these steps and run a cheap VPS as others have suggested) .
- Understand the various steps in the installation - Disk partition, Software selection etc. Don't just blindly select anything unless you understand what you are doing.
- Figure out what software you need to install to achieve your goal and install it one by one.
- Ever time you get struck, if you find some command to fix the issue, don't blindly copy paste it - understand what the issue is and figure out what the command you are trying to run is doing to fix the issue.
Once you have everything up and running, destroy the machine and start over with a slightly different goal.
Google is your friend! Good luck.
That's important advice: anytime you run up against a selection option and you don't know what you should choose or why the default is what is it, search for more information to understand what is going on. I believe you can teach yourself anything just by setting a goal and learning as you go (with plenty of time and acceptance for mistakes).
Also, keep a text file open and document each step with notes, urls and all the terminal commands you've used.
This treasure trove of quick-start guides for newbies enables you to learn a wide variety of software and ways to use the Linux operating system. There are several docs on using Linux, common command line tools, server/network administration, Bash programming guides, set up instructions for server software, and tons more. You will become a Linux ninja by reading and following through with these HOWTOs.
After that follow the advice of kcvv - take notes, rebuild VM's again and again building on your new knowledge.
What do I really need to do to secure an EC2 image, or an AppEngine application or a Heroku application?
Linode also has a library - http://library.linode.com/