Vagrant in production

2019-02-01 05:22发布

问题:

I've been reading about Vagrant, and I find it quite useful for my development. I am currently managing a series of services (mail, web, LDAP, file sharing, etc.), and often one of these falls and needs a quick backup. Is it possible (and recommended) to use Vagrant for these purposes?

So far I've virtual machines installed like real machines.

I would also like to know about an alternative to Vagrant which would allow me to setup a simple configuration file and put a virtual machine, for example, with Zimbra, and quickly have an alternate mail server, enable RabbitMQ, etc.

回答1:

Vagrant should be used more like a staging environment to test your infrastructure changes. It should be your test bed for automated infrastructure changes.

The way we use it at my company is like so:

  1. Create VMs for our managed servers in Vagrant.
  2. Create puppet definitions for each server.
  3. Create cucumber tests for each server.
  4. Make infrastructure changes via puppet and add cucumber tests.
  5. Launch our servers to test for failures.
  6. Fix bugs, release and/or back to step 4.

Basically when we're happy with our changes, we'll pull our puppet changes into production to make it happen.

I'd not recommend using vagrant to manage VMs for real production. I'd use something else like razor, virsh, OpenStack or one of the many other vm management systems out there.



回答2:

This page suggests that the Vagrant push command is meant for deploying to production:

https://www.hashicorp.com/blog/vagrant-push-one-command-to-deploy-any-application/

"Additionally, multiple config.push.define declarations can be in a Vagrantfile to define multiple pushes, perhaps one to staging and one to production, for example."



回答3:

Hashicorp just published Otto, which is meant to be the Vagrant's successor. It is designed to support deployment environments.

From their Github page:

The key features of Otto are:

  • Automatic development environments: Otto detects your application type and builds a development environment tailored specifically for that application, with zero or minimal configuration. If your application depends on other services (such as a database), it'll automatically configure and start those services in your development environment for you.

  • Built for Microservices: Otto understands dependencies and versioning and can automatically deploy and configure an application and all of its dependencies for any environment. An application only needs to tell Otto its immediate dependencies; dependencies of dependencies are automatically detected and configured.

  • Deployment: Otto knows how to deploy applications as well develop them. Whether your application is a modern microservice, a legacy monolith, or something in between, Otto can deploy your application to any environment.

  • Docker: Otto can use Docker to download and start dependencies for development to simplify microservices. Applications can be containerized automatically to make deployments easier without changing the developer workflow.

  • Production-hardened tooling: Otto uses production-hardened tooling to build development environments (Vagrant), launch servers (Terraform), configure services (Consul), and more. Otto builds on tools that powers the world's largest websites. Otto automatically installs and manages all of this tooling, so you don't have to.



回答4:

As mentioned by @andrerpena, Otto is the successor of Vagrant.

From www.ottoproject.io :

Otto can deploy your application. Users of Vagrant for years have wanted a way to deploy their Vagrant environments to production. Unfortunately, the Vagrantfile doesn't contain enough information to build a proper production environment with industry best practices. An Appfile is made to encode this knowledge, and deployment is a single command away.