Creating an awesome SharePoint development environment on Windows 8

I have been using Windows 8 Professional with Hyper-V for about 2 months now, and I thought I would take a few minutes to post about my setup – as I think it works very well for SharePoint development. I’m not intending to say this is the best setup, but it works well for me and I’m sure there are others who may be wanting a similar setup.

I’ll try to break the post down into chunks, as there are several pieces to this puzzle.

The Laptop

My laptop is an HP EliteBook 8570w, with 32GB RAM and i7 quad-core processors. It is running Windows 8 Professional, and I use Hyper-V for my virtualization. The beauty of this setup is with Windows 8 and Hyper-V, I can actually use things like hibernation – where in the past i would’ve used Windows Server with the Desktop Experience. While it looked like Windows 7 and in reality worked really well, the one thing missing was the ability to hibernate. In addition, there were some things that just didn’t quite work on a Server OS.

Here’s a screenshot of Task Manager, as you can see, there’s a whole bunch of RAM as well as 4 Cores and 8 Logical processors. Pretty sweet eh? 🙂

The Hyper-V Setup

As mentioned above, Hyper-V is my virtualization platform of choice. The VMware folks will probably have plenty of arguments for why I could have used VMware instead, but Hyper-V is free and included with the Windows 8 Professional license. It works fantastically well and I can honestly say I’ve never had an issue with it for what I need it for.

Hyper-V is pretty simple to use, and in my case I’m using it to run a few VMs for different purposes. Here is what I have running currently:

Domain Controller – this is a Windows Server 2012 machine with 1GB of RAM. I’ve got a domain at AdventureWorks.com.

SharePoint 2010 – this is a Windows Server 2008 R2 machine with 10GB of RAM. It is sp2010.adventureworks.com.

SharePoint 2013 – this is a Windows Server 2012 machine with 12GB of RAM. It is sp2013.adventureworks.com

Office Web Apps 2013 – this is a Windows Server 2012 machine with 6GB of RAM. It is owa2013.adventureworks.com

The Networking

The piece that brings all of this together is networking. Since I am running this on a laptop with Windows 8 as my host operating system, it is important that my host have access to the internet. However, it’s also critical that my host can access each of my VMs without issues. Luckily, Hyper-V has a great solution to that problem.

Internal Network

Windows Hyper-V has a Virtual Switch Manager which allows for easy configuration of networking for your virtual machines. In my environment I have what I consider to be a fairly simple setup. I’m sure you can do some pretty complex networking, but I simply didn’t need to.

My requirements were:

My host must be able to access all VMs

My VMs must all be able to access each other

My VMs must all be able to access the web

With those requirements in mind, here’s how my Internal Network is configured:

Host

My host is using 10.0.10.100 as its IP address. Notice I’m using 10.0.10.1 as the DNS IP address, that’s the IP of my Domain Controller – which means I can use name resolution from my DC…

Domain Controller

My domain controller using 10.0.10.1 as its IP address, with itself as the DNS Server…

Other VMs

The other VMs all have IP addresses starting at 10.0.10.2 and up, and all of them use 10.0.10.1 (DC) as their DNS server. They are all joined to my AdventureWorks.com domain.

Hyper-V

Hyper-V networking is very simple for an Internal network, in fact it’s as simple as creating a new Virtual Switch using the type Internal. That’s it:

External Network

The External Network is pretty simple as well, it’s just bound to my physical wireless adapter – which allows all VMs to get a dynamic IP address from my wireless adapter. This allows them to access the internet for browsing, downloads, etc.

Putting it all together

Now that I’ve shown how the networking all works, let’s summarize. Using this setup allows me to run multiple environments with a single domain controller, and since I’m using domain-joined machines with a DNS server, I can setup networking as close as possible to a “real-world” scenario. Additionally, I’ve got adequate system resources to run SharePoint 2013 with Office Web Apps, so I can actually use search with document previews, I can do user profile synchronization with ADDS, etc.

Also, since networking from the host works as well – I can access all of my SharePoint sites from my favorite browser on my Windows 8 host, which includes PowerShell Web Access on my 2013 box. Here’s my 2010 Team site from Google Chrome:

Hi there, Great post…
I have a couple of quick questions: 1) I presume each of the sharepoint VMs is also running SQL? 2) full versions or express ? 3)I notice your host does not have a default gateway… so how does it get onto the internet? is your router also on 10.0.10.x 4) Can you therefore also use your office apps on your host to connect to one or other of the SharePoint servers? 5) Can other devices connected to your WIFI / router see the SharePoint servers too 6) what happens if your VM domain controller is not running? how does this affect your host PC hope this makes sense Cheers

Thanks Craig, regarding your questions:
1. Yes SQL is running on each Vm
2. Full enterprise versions are used, 2008 r2 for 2010 and 2012 for 2013
3. Host is only using a 10.0.10.x address to be able to access the VMs on the internal network, it gets to the web either through the actual wireless nic or the wired nic.
4. Yes
5. Yes and no, the 10.0.10.x addresses are only used for the hyper-v internal network, but I can hit the VMs from other devices using the dhcp address that the VMs get from their external nics.
6. My DC is always running, so I’ve not had to worry about that. If it went down I would probably revert to hosts files for name resolution.

Hi there ryan… still have a problem 🙂
I have a very similar rig to you and am setting up an almost identical environment
I am struggling a little though with the virtual networking element
your image shows the DC as having 10.10.10.1 as the default gateway
1) is this your local router? and is it connected via wifi or Ethernet?
2) in Hyper V manager are the VMs connected to the external or internal switch?
3) my VMs only show one Ethernet card not 2 like your image and it does not show the name of the domain… just unknown network

I have set my local router to 10.10.10.1 and the host is 10.10.10.2
I have created 2 switches internal and external
this creates 2 nics on the host as I would expect and I given the internal one the ip settings as per your image
but at the moment my DC is not happy 😦

any help would be great as I would really like to get this setup working

The 10.0.10 network is 100% configured through the hyper-v virtual switches. That is, there is no need to do anything outside of your laptop. My dc is at 10.0.10.1, so I set the default gateway to itself. This may not be a best practice, but it seems to work.

The dc is connected to wifi but not from the internal (10.x) network, it’s using an external network. When you setup virtual switches in hyper-v, it does the work for you. If you create an external network and point it to your wireless nic on your host, it will bridge it for you to create the additional adapters/nics.

Hi Ryan,
I bumped onto your artcicle as I was trying to setup a virtual development environment very similar as the one you have with Hyper-V under W8. I also ran into problems alike the ones Graig McGowan had. Your article gives me confidence that it must be possible, so I give it another try again.
I do still have another question (and be aware I’m not an network specialist) :
I would like to be able to connect up my “virtual” domain onto the development domain (which is a diffferent one) at the company I work for. Can you give me any advice on how to do such a thing, thereby keeping in mind that both my virtual domain runs it’s own AD controller as is the case within the domain at work. I appreciate any help, as it takes me a lot of time to find things out myself by trial and error.
Thanks for making your article public and I hope you can help me out !
Regards, Ronald Brink

If you’re just trying to get to the sites from a different network, you will want to try setting up a Hosts entry to point to the External IP of the VMs. For example, if your 2013 VM is running with both the Internal and External networks – your external will be something like 192.168.1.50 (just as an example). You could in theory create a hosts entry on any machine on the same 192.168 subnet to point to 192.168.1.50 and get to the site(s) that way.