How to organize servers for web development?

I am creating multiple servers for developing websites. I want this to be organized in a fairly standard way. How do you organize your servers to develop relatively small sites, each with a little unique code?

Some of the details I'm worried about include (but are not limited to):

  • What separate servers are there for the development process? What is their purpose?

  • Where is your main source repository located?

  • Where is development work done?

  • Where is testing done?

+2


source to share


3 answers


What separate servers are there for the development process? What is their purpose?

  • SCM server , for example. SVN, Git, CVS - central repository of sources, usually only internal access.
  • CI server for example. CruiseControl, Hudson - Continuous Integration Server for automated build / test.
  • FileServer , for example. Samba, Windows Shared Directory - for storing embedded artifacts, sharing downloads between development team
  • Test / staging / production servers - machines built to the same hard / software specification to run your actual application.

Where is your main source repository located?

Usually internal access can share this computer for another purpose, for example. DI.

Where is development work done?



It is best for each developer to use a local machine and then integrate the changes through SCM and CI.

Where is testing done?

Usually postponed on the server for testing. Typically, at each stage, as testing progresses, many environments and builds are promoted at each stage:

  • Test Machine - for testing assemblies, usually reflects the setting of the devlopers machine.
  • A stationary machine - for builds that pass basic tests - this server will be more of a mirror of a live production system.
  • Pre-live is an additional server that will be provided to business users for testing before the server is fully live.
  • Live / Production - Builds will be promoted to this server when accepted by testers and the business.
+1


source


At work, we sometimes have two people working on the same site, so it looks like this:

  • Each site is under Microsoft Source Safe and we most often work with local copies on our own computers and test them. Fortunately, Visual Studio 2008 makes it easy to work with the Embedded Web Server.

  • When we want to test the internal connection with multiple users, we deploy it to our own development server. (We will always do this prior to deployment to production.)

  • When we want one of the hired consultants to view the site before going into production, we could deploy it to our production server, but with a special host header separating it from the real site, for example. staging.yourdomain.com (This step is often skipped).

  • As a final step, we are deploying to a production server in the datacenter.



I've tried variations of this over the years. But it only requires 2 physical servers and a developer workstation. Yet it is structured enough to be a reliable process for us.

+1


source


1) What are the separate servers in relation to the development process? What is their purpose?

In my experience, the only concept / idea that should make a difference is that all environments (server => development, staging, production) should be, if not quite similar, OS-specific, webserver versions. service packs, fixes, fixes, etc. Now it may or may not be possible to have a minimum of 3 (or more) different environments, but this is generally the norm from my experience. On the hardware side, since they are very similar or identical, they shouldn't pose any problems in the future.

2) Where is your main source of storage?

Isolation from Internet access and heavily guarded. Lots of firewall rules to protect it from unwanted access attempts. Only developers should have access to the repository.

3) Where is development work done?

In large projects or in organizations, development is usually performed locally on the programmer's computer or using source repositories (SVN, CVS, VSS, etc.), a copy of the work is done locally.

4) Where is testing done?

Some people test their development environment, others test in "staged", which makes sense to me. Pick one of the two and just stick with it. Personally, I think staging is a place for testing to avoid version changes if developers make development changes.

How do you organize your servers to develop relatively small sites, each with a slightly unique code?

Basically, web stores organize their environments as: development => dev, staging => stage, production => prod. Developers work locally on their own machine, and once their additions / changes are complete, they commit the changes to the original repository. Some stores do something called CI (Continuous Integration), so after every commit a developer makes, the CI server is automatically rebuilt to the site. This helps developers / testers to see if anything has broken from developer changes.

Typically, these changes are published to their developer environment for all the developers with whom they work. When developers reach a certain milestone and milestone and want to start testing, they "push" the version of their site into the staging environment for testers to work out while developers can continue working in dev.

Once everyone is content with everything that happens in the production stage, they promote the production version on prod. Changes should only go one way: dev-> stage-> prod. If you want to make changes to production, start with dev, then test them in production, then push them to production. It is a pain, but it keeps things in line and prevents numerous headaches. You'd be surprised how many companies are just making changes to production, and months / years later they have trouble syncing their environment when only the next protocol saves them a lot of pain.

If you talk about your job as "small", as simple or not as complex than some dynamic pages and some database calls, I would say try going for 3 environments, but you could get away with 2 environments (staging and production). You can make your own computer a so-called development environment.

+1


source







All Articles