This is going to be a somewhat loaded question. I am programming in a company that has been around since 1962. A lot of things, especially computer / network stuff, is very dated. Let me give a bit more background.
The company already operates a Windows server. On the server, many computers have files in shared network drives, and there are some programs too. This is how company wide access to things like accounting and inventory is granted, and how files are shared. Unfortunately, there has never been a strong sysadmin play a part in any of the design. The accounting system is running on Foxpro. Files are totally chaotic. The employees seem to know their way around in general, but in order to grow and scale, we need to quickly get a handle on this network. Some of the things I see a need for:
- A relational database, accessible via all computers on the network which will store:
- Files (ie drawings, quotes, pictures of completed projects, etc.)
- Employees (then we can start doing things like computerized time card entry)
- Invoices, Payments Receivable and Inventory
- Password management
- Job tracking
I'd like to build custom applications on top of this database to power everything, and build APIs that allow our websites to interact with our in-house stuff. Obviously I must leave existing systems intact as I build new ones. I'm coming from a web background...and am very comfortable with Unix (I've administered dozens of servers that serve websites), PHP, and front end development. I'd like to stick with those open source technologies I already know well.
The biggest question in my mind is where to start. Do I buy a server rack and just start building a totally new network? Do I push everyone to the new network once ready, or try to use both at the same time somehow and slowly migrate away from the old?
I realize this could be a project that takes a year or more. I'd really appreciate some guidance - any resources on system design, how I get started, whatever. I'm willing to put in the work - I just need help creating a vision.
Please don't take offense to this but I strongly suggest you bring in a local area IT consulting firm that specializes in systems and network administration. I also came from a programming background many moons ago and learned many hard lessons on the do's and don'ts of managing a networked server environment. I (thankfully) had alot of mentors and help over the years, because without it, who knows what kind of smoldering wreckage would be left behind.
Moving right along now to your original question: I see two mistakes, one being Linux: don't get me wrong, I love Linux and use it in all kinds of various roles, but as a sole server in a small company that (again, no offense) doesn't have a full-time sysadmin is asking for trouble. Finding competent Linux administrators (and it's even harder to find ones that follow best practices) is not easy. Down the road, if you leave or you hire a new person to take over your duties, who's going to look after it?
Assuming you're under 75 end-users, I would strongly recommend Microsoft Small Business Server 2011 Standard on solid tier-1 hardware (like Dell, HP, IBM) with a 3-year on-site/4-hour replacement warranty. Have at least a RAID 1 mirrored array for the data (and another for the system if you can afford it). Get at least 8GB of RAM, 12GB is better. Invest in an offline/off-site backup: you can start with a couple of external drives or a tape drive, but something you can take off-site with you every night.
I'm also not sold on your suggestion for a custom "all-in-one" database: there are so many better, more viable software options out there, that unless you have some very specific niche requirements that only a custom solution can provide, you'd be much better off using a well-supported 3rd-party offering. You have to resist the "I can write something" programmer urges and think about supporting this solution long-term.
And finally, I think you and your employer need to decide what you role is going to be at this company. It sounds like you're new there and while you're right, they likely do need to upgrade their systems, you don't want to bite off more than you can chew and fail to provide whatever it was that you were hired there to do.
EDIT
There's a lot of opinions floating around right now, so I'm going to take a step back and hopefully provide some platform-agnostic advice that will be of use to you regardless of what you end up going with:
Do a complete inventory of all systems and devices; check warranty status of hardware (if it's a Dell, IBM, etc. you should be able use the service tag to get a warranty check; if it's a white box server, they may still have some sort of identifier, but you'll have to call to find out what the status is most likely).
Do a complete inventory of data: Don't trust that they have no data on their C: drives; they probably do, actually they probably have PST files all over the place of old mail. Find out what's critical, what's being backed up, what's not being backed up, how it's being backed up and whether anything is taken off-site or not. FIX THIS FIRST. RIGHT NOW. If they have no backup setup, go buy an external USB drive at a Big Box store for now and use NTBackup (it's likely on that server already) and do a full backup and take it off-site with you. If they have backup in place, go do a test restore (see below).
Check patch levels on all systems (get #2 sorted out first!): not just Windows Updates, but Java and all Adobe products especially and update accordingly (might want to do #4 first so you know what machines are higher-priority than others. i.e. that workstation for the part-time staff member could stand a botched update much more than the accountant who cuts the pay checks).
Talk to your users: find out what's working well, what's not working, get a feel for everyone's level of change tolerance, their comfort level with IT (you may be recruiting a helper to get things in order), and any wish lists they may have. Understand their business processes; as a sysadmin, your priority should be ensuring that the systems the business depends on to function are working in good order and to do that, you need to know how everyone uses those systems.
After #1, you should have an idea of how the network's setup. Look for any old hubs that can be replaced; you'll want at least 10/100 everywhere, switch-wise. Check the firewall/router (make sure there is one), check for any open wi-fi access points, etc.
If you do go the Linux route, stick with a distro that's well-supported by the community (Ubuntu would be a good choice) and set it up on whatever hardware you can afford (as you know, a LAMP box could be an off-lease P4 workstation for now) and as isolated from the currently-working system as possible. As a learning exercise (and could pay huge dividends in a disaster recovery scenario), try to get the core applications that are running on the current server working on another Windows box first -- use your full backup you did in #2 to do a test restore; have fun with that :)
As for your test setup, you can opt to buy something beefy with lots of RAM and then you can virtualize (ESXi is free, so is XenServer, so is VirtualBox) but if the current server is Windows 2003 or older, you can likely get that FoxPro application working on an off-lease Windows XP workstation for cheap.
Now pat yourself on the back; you now have good backups; you also did a test restore and now have a better understanding of how everything works together. You also likely have a (long) priority TODO list that'll keep you busy for the foreseeable future.
Oh and when that's all done, you now have a test environment you can start building your Utopian "dream" system... or maybe take a vacation :)
While I generally prefer Linux on the server side, this is definitely not one of those situations. Stick with Windows, and you will never know the horrors of managing Windows permissions with POSIX ACLs. Don't dump files into databases, and your backups will be much easier. Build a clean Active Directory environment, and you will have time to take long lunches instead of changing users' passwords in a dozen of places every time they forget them.
You're actually trying to reinvent all kinds of wheels here:
And I guarantee you that if you do try to write everything from scratch instead, your company will lose more money, your users will hate you, and your job security will be severely reduced.
I wanted to wait a bit to see what others answered but from what I can gather from your question and responses I would have a hard time justifying building out a server infrastructure at all. I would take a look at the office 365 small business solution (http://www.microsoft.com/en-us/office365/online-software.aspx) which sounds like it's exactly what you need. You don't have windows server management experience but clearly are comfortable using MS products. For all the database tasks you want to accomplish you can use sharepoint for (you also get MS acess online for those light but custom needs) Cost per user starts at $6. And if you are looking to go to dynamix great plains even that is available in a hosted solution (here is one google picked - http://www.mygpcloud.com/accounting-solutions/business-essentials.aspx).
In a nutshell I really think it's a tough call for a small business without alot of expertise to justify the expenses required to own your own infrastructure.
UPDATE:
there has been something bothering me about this question and it finally dawned on me that you are looking for looking to solve techinical problem rather than looking at business problems. EG you mention in the original post that you want to store files in a database. Why? Is there some business reason to do so? What was wrong with the fileshare? I think that before you consider things like platform and software choices it would make sense to take a look at business needs and evaluate what the potential solutions are for each set of requirements.
I would expect one of the more seasoned and eloquent people here to write a really long and authoritative post in response to your question. However, here's my best stab at it:
Step 1 : Do some research, count the number of users, the total amount of data, how is it protected from failure? Step 2 : Inventory existing hardware, count everything, servers, routers, switches, hopefully no hubs). Step 3: (My personal favorite) Decide if you can offload some services to an external provider in a cost effective fashion. For instance, for small organizations hosted e-mail is a nice thing not to have to worry about management overhead. Step 4: Determine which hardware and software are required to keep business as normal, and if there are any existing problems such as storage space, performance, etc. Step 5: Scope out a plan to remediate existing issues.
You're going to need to strike a balance here between what your business needs, what you want (to make your job easiest), and what sits nicely in between. If it were me, I'd start at the infrastructure and make sure the routing and switching is solid (read: not 10mb hubs). Then I'd gauge the age of the "server" and plan to replace it with a pair of redundant partners. If a single server has done the job for ages, a nice pair of systems would probably do the job well going forward.
As for migrating users over, that's simply a matter of planning. Like I said, start by taking inventory.
If I were you I'd start small and make incremental improvements that cost nothing but time.
I did something similar to what you're saying over 10 years ago. Although we started with 7 employees and grew to a peak of 30 odd. There was no IT system, so I put it together.
The system I put in place back then and maintained till around 5 years ago (apart from all the recent upgrades) is still in use today and the company is still operating. At one point, it was all Linux, but mainly because we couldn't afford a windows server.
Now it's Windows server with AD and internal DNS to provide resolution for local printers and so forth. A router/firewall which is actually freebsd and doing mail scanning etc although you could get away with using pfsense or much less.
By the way, Linux is great, but Samba is a real headache and even when configured correctly and working how it should it doesn't perform nearly as well as windows server does! At the time, there were important features missing and I believe still are. So do yourself a favor and go with Windows Server.
Don't upgrade the accounting system unless you really need to. Don't fix what aint broke. Is it meeting the company needs OK? or if not then consider an upgrade to something else.
Organizing files is simply a matter of providing some management of shares and things and teaching people where to put things. It can just be a manual process. Don't put them in a database, you'll regret doing that. With a database, backup & restore becomes difficult. What if you lose a file and just want to restore a single record containing that file? in the mean time you have added other records.. now you need to merge to get the one file back yuck!
My 2 cents unless you business is IT consulting. The ROI would better be spent having the business drive the technology and not the other way around. If you want a lab build a lab but if you to leverage technology to grow your business, hire a consultant, the TCO is lower.
@Calvin I live in a place like that. Our consultants came from the region, 2-3 hours away. Mostly they work remotely when we had a problem but come on site to do project implementation.
(writer's note: I cringe at using terms like ROI and TCO but IMHO they are relevant here).