I’m having trouble trying to decide what kind of setup I want for work.
Background: (for some perspective)
I work with a family member who is an experience DB developer/admin, and we are basically running our own consulting firm with intentions to expand in the next month or so. Anyway, I’m still pretty new to web/software development and there isn’t really any sort specific title or skill that I have as of yet…The intention, I guess, is to be a web developer as well as a DB dev/admin.
My problem:
I want to switch over to the linux OS, but I’m not sure how I want my setup to be. Ideally, I’d like to separate my work and play, but I’m not sure if that is the most efficient plan. Also, I’m wondering about the complications with having to use MS SQL since that what most of our clients use, and I also like to play games with a couple friends on occasion.
I like the idea of having a laptop as my work machine, and then have a docking station for wen I get home and need to work more.
Currently, I have a Lenovo E560 laptop (2.3GHZ, 16GB RAM, 500GB SSD), and my personal desktop with the old AMD Bulldozer at 3.8GHZ, 16GB RAM. My laptop is running Windows 7 Pro, and my desktop is running Windows 10. I’m not opposed to building a new workstation as I’d like to upgrade to the new Ryzen processor.
Note: I was unsure how to categorize this, so I’m sorry if this topic is in the wrong thread.
Not sure why anyone would want to do this. Putting everything in a VM gives you huge overhead and it’s just another layer of abstraction that complicates things.
Don’t really have a budget, but I’m willing to spend good money on a machine.
When you say run stuff on VMs, do you mean personal stuff or work stuff? Also, why would I do that? For example if I was running a linux machine and had a windows VM, and I’m doing some DBA work on the windows VM, how would I save my work?
huh, so could actually work? I really don’t know much about virtualization, but if it allows me to separate my DBA work with Windows and dev work with Linux that would be pretty nice. I’m not familiar as to how much of a pain it would be though.
Would this type of setup be better than have a few totally separate machines? Such as a work laptop and a personal desktop?
was referring to work stuff, like client websites, projects, databases, and so forth. these things should not be on your desktop OS. they should be on VMs that are very similar to their production environments.
The only problem with multiple machines is you have to use a docking station. If you use a docking station you can switch back and forth, but if you use 2 displays… Which everyone should. You’ll essentially have 1 screen useless half the time. You do however have the ability to use the same mouse and keyboard. Or you can just have 2 mice and 2 keyboards next to each other 1 for each.
Another option is Virtualization. Which is very easy to set up. It may take you about 30 minutes to get the OS installed and all that but once its up you are good. But if you use 1 monitor you will have to either split the screen or switch fullscreen back and forth, still the same mouse and keyboard though. And even with dual displays you cant just move your’e mouse back and forth and drag and drop.
Honestly I’ll have to make a thread about this because its 2017 there should be an easier way than either VM or docking station because both are not as seemless especially for dual monitors.
I think VMs are youre best route though.
Edit: If you go the 2 mice and keyboard route 1 for each machine you’ll basically be acting like this
If your trying to transition from Windows to Linux, all I’m going to suggest is that you figure out how to work in the operating system in your spare time and only once you feel really, really confident about it, do you make the switch. Linux is great and there are a lot of cool things you can do, but don’t jump head first into it on your work and play machines prior to having figured stuff out and gotten used to the OS in your spare time.
Ok, so if I wanted to go the virtualization route, how would working on my laptop work…or should I just have the laptop running VMs too?
To clarify my point, if I’m working on my laptop and want to then start working on my desktop how would I go about doing that? I mean for coding I can always pull requests from a repository. Not sure about DBA though.
you should maintain separate machines for work vs. play?
no. a nice desktop as your primary machine, a laptop for when you’re about. if you want to keep your work machine(s) strictly work and your play machine(s) strictly play, that’s fine, but probably not necessary. this part is not about work vs. play.
you should virtualize your work and/or play OS?
no. there’s little point to this (unless you’re running linux, and your “play” OS is windows). if you’re disciplined enough, work and play can simply be separated by the clock. if not, it’s probably more than enough to just have separate user logins.
you should virtualize each client project/whatever for development?
yes. this allows you to keep each project separate (from each other, and from your desktop) and also gives you a consistent, reproducible, disposable environment for your work. Make each VM as close as possible to the production target (same OS, same packages, everything; in fact, it’s great if you can build your VM and production server using the same process).
you should actually be “switching to” each of these VMs to work on specific projects?
no. treat these just like you treat the production servers. you don’t install your editor, etc. there and RDP to it to do your work. these VMs shouldn’t even have a graphical desktop. use SSH. Your editor, etc. belong on your primary desktop. With VMs, each project directory on your desktop can be shared with the corresponding VM, so you don’t even have to manually copy files over.
yes; in fact that’s one of the awesome things about VMs: they are reproducible. there is exactly zero effort in making a second VM on your laptop which is exactly the same as the original VM on your desktop.
as for your “DBA work,” what do you mean? You’re developing DBs? Or maintaining DBs that are already in production? If the latter, what tools/software do you need for this — is it a windows-only deal?
if so, then yeah, maybe you do need a graphical windows VM for some of your work. That wouldn’t be project-specific, though. it would just be like a second desktop. you almost certainly don’t need a second monitor or any kind of passthrough for this VM, though; it can just be windowed. you might even be able to make it “seamless” (there are a few L1T/ former TekSyndicate videos about this).
It’s one thing if you’re using containers (think docker or lxc) for running services that you’re going to blow away in 2 days, but running an entire vm on your debian box just to run evolution and chromium is a bit silly.
I can see where you come from here, but I think it’s a bit extreme.
It’s really, really not. Not if this is your job. This is the only way to fly. Especially if you’re working on more than one machine/with coworkers.
Containers are fine too. But note, “entire VMs” are not heavy. For the most part we’re talking about 512MB and one CPU. They cost almost nothing. I run 6 - 8 daily on an i5 laptop with 8GB RAM. You hardly notice it.
As a Linux admin, I normally run one VM. This VM is literally for Outlook and Skype for Business. Everything else I do is on my local machine either in a virtualenv (python) or a lxc container if I need to run something special. My machine has a 4970k and 32GB of ram and on a regular basis, I’m swapping, but that’s just the way it works out.
The only time I run an additional VM is when I’m building a new openstack image.
To give OP some advice, rather than barging into a thread and shitting on those who do, let me say this:
If you’re building web projects for clients, you’re going to need a few things:
Organization
Version control
A certain level of transparency
reproducible builds
In order to do this, I use git and gitlab to track my code, issues and handling CI builds. You can literally run gitlab on a raspberry pi if you want, but it wouldn’t be recommended for long-term since an SD card wears fast.
Step 1. Don’t let Steam start up automatically.
Step 2. Do work instead
Step 3. Profit.
For now, you want a VM for this. I highly recommend setting up a dedicated work VM. An up to date Windows Server installed, with an up to date SQL Server installed. In the future, SQL Server will be available on Linux. Starting with SQL Server 2017, I believe.
Right now the experts describe it as boring, but in a very good way. Currently there’s nothing interesting about SQL Server on Linux. If you’re connecting via SQL Server Management Studio, there’s no difference to connecting to SQL Server on Windows vs Linux. Let’s hope it stays that way. SQL Server is one of the few MS products I like.
FYI, running SQL Server on a VM with limited resources will have some benefits to you as a developer. You’ll learn very quickly to trim the fat from the database, lest your database start taking too long to respond. I feel like database design is damn near a lost art. Everyone’s just like, “We’ll throw some tables together and let Oracle worry about making it fast for us!” Then those of us left to support them end up looking at schemas that aren’t even 1NF, and contemplating whether we want to figure the mess out or just eat a gun instead.
Neither do I. It’s the “with friends” part I worry about. Personally I love a lot of the games that are multiplayerable. Hell, I have more hours in Don’t Starve than I do in Skyrim. My friends on the other hand… Yeah, not so much. Borderlands is about the only title that bridges the gap there.
because VMs are easy to reproduce, so you’re not trying to do work on several slightly (or not so slightly) different versions of something. you (and your coworkers) have a consistent environment for dev work across all your machines.
Apparently I’m not making my point clearly. Again, I am not talking about running another desktop VM. I am certainly not talking about running a Windows desktop in a VM. I’m talking about running VMs for each project.
For the project itself, not for a desktop OS to work on the project. Use your main desktop.
e.g., for a web project, it would be a tiny headless linux VM with a webserver, a database, php or whatever, and so forth. it is NOT a whole graphical desktop env for you to jump onto and start up your ide, web browser, and all that junk.
see @Levitance 's post (the part regarding running MSSQL in a VM). this is what I’m talking about (though Windows Server, yes, might need more than 512MB; don’t know (don’t use). your linux-based VMs won’t.).