My first point of advice is to not exclusively limit yourself to any one role.
It's great to be a specialist and have a deep knowledge in a particular skill
set (PHP, for instance). However, it is just as important to have a broad knowledge that spans across the rest of your domain.
In my experience most teams are not looking to hire someone that has the
knowledge to rewrite the core functionality of PHP, but rather someone that
can handle any problem that is thrown at them (although having that level of
knowledge would certainly not hurt). Or at least someone that can help solve
any issues that the team encounters. For instance, imagine a situation where
your application goes down and customers are being affected. You can either
throw your hands up and say "I have no idea what to do..." or you can SSH into
the server, start scanning logs, notice that the diskspace of a particular
filesystem is full and proceed to clean it out. This is a minor example but I
think the point is clear. With that basic knowledge, as a developer, you
could write a script that monitors that particular filesystem and cleans it
out once it reaches a certain threshold. You have now become that much more
valuable to your manager.
Another thing I have learned during my career, is that things move fast, and
if you don't keep up you are going to be left behind. The more you know about
your entire environment (including the business aspects) the better off you
are. That's not to say you need to be an expert in everything you do, but at
least have the knowledge to not be labeled as clueless. The more familiar
you are, the more adaptable you are, and the more valuable an asset you are
to your company.
To specifically answer your questions...
- What server elements should I know as a developer?
Be familiar with the entire application stack. Know what web server, database,
caching mechanisms, etc. that are being used. And which versions, too. Have
enough familiarity that you can recreate the environment on your own server.
Which, in and of itself, is vitaly important. You should strive to more or less
have the same environments in development and production, as it reduces
- As a developer what dealings do you have with the server?
This really depends on the team. In my particular case, the developers play a
huge role in staging the environments. We are the most familiar with the inner
workings of the application and so are in the best position to determine what
server technologies are in place to run it. I imagine not all teams have such
a hands on approach, but to have enough familiarity to be able to involve
yourself in the discussions is a great advantage. Specifically, in regards to
version control, you as the developer are highly affected by which technology
is chosen (Git, Subversion, Mercurial, etc.), and therefore should strive to
involve yourself in the decision process.
So, now what?
As for my suggestion as to how best to approach learning all of this? Move
your feet. Don't
worry about trying to read everything you can on the subject, most of it will
probably just leak out of your brain by the time you are finished. Instead
start developing something from the ground up. Start with Vagrant; it will
allow you to easily create and manage a virtual machine that you can use as your
new playground. Then, install a web server and a database and start creating. If
you have an idea for an app, perfect, go for it... if not, find a tutorial or
try to recreate an existing app. The point is just to become familiar with the
entire process. Also, as a PHP developer, be sure to check out PHP: The Right Way... it really contains a lot of excellent info. And most importantly, don't stress yourself out. I imagine you
followed the path of a developer because it's something you enjoy and are
passionate about... don't lose sight of that!