Pregunta

Estoy pensando en usar Vagrant para desarrollar aplicaciones Django, pero estoy un poco confundido y no estoy seguro de si lo que me gustaría hacer es posible.

Instalé con éxito la caja Lucid32 y creé una nueva "instancia" de Vagrant, con un archivo vagabundo, algunos directorios compartidos y puertos reenviados.

  • El primer problema es que esto no me parece la mejor opción cuando trabaja en un equipo. ¿Cómo podemos (yo y otros 10 desarrolladores, por ejemplo) compartir el cuadro para que se comparta cada cambio? Por ejemplo, si en 6 meses necesitamos PostgreSQL, necesito que funcione sin tener que instalar PostgreSQL 11 veces.

  • Además, ¿cómo puedo hacer cosas (como: PostgreSQL, Django, este servicio, etc.) para comenzar cuando la caja ha comenzado? No creo que tenga que ssh y comenzar manualmente n veces todo el n cosas que necesito cada vez.

  • Y finalmente: no entiendo bien si cosas como Puppet y Chef están destinadas a sustituir completamente la instalación manual (a través de PIP o Apt-get, por ejemplo). ¿Es eso así?

Gracias.
Y lo siento por el mal inglés. :-)

¿Fue útil?

Solución

Diría que su elección de Vagrant ya fue un buen comienzo para lo que está buscando, pero ahora necesita profundizar un poco más en chef o títere, para automatizar aún más su proceso de aprovisionamiento.

Supongo que una buena opción en suosía sería poner primero a ambos, el Vagrantfile y el Manifiesto de Puppetas correspondiente bajo el control de versiones como parte de su proyecto. Además, todas las configuraciones relacionadas con esta máquina también deben colocarse en el control de versiones y/o estar disponibles a través de algún tipo de repositorio de artefactos.

En segundo lugar, establezca la regla en el equipo que cambia (al menos estos que deberían vivir por más tiempo) al entorno deben verificarse si se consideran listos para los otros miembros del equipo.

Con respecto a su segunda pregunta y volver a mi apertura: Puppet (que me gusta) o el chef son sus herramientas de elección y pueden ahorrarle mucho trabajo a usted y a sus colegas en el futuro. Me quedaré con Puppet aquí, ya que no conozco a Chef demasiado bien.

Con Puppet, puede administrar todo lo que desee, la instalación de paquetes, cambiar de configuración y garantizar que ciertos servicios se estén ejecutando, o en general que el sistema tenga el estado que desea que sea. Aún mejor, si usted u otro miembro del equipo hicieron algunos faques maliciosos en su caja, puede volver a revertir los cambios en su manifiesto vagabundo/títere, escriba

vagrant destroy && vagrant up

Y la caja se lleva fácilmente al último estado de versión.

Por ejemplo, tome el siguiente archivo de manifiesto:

package { "mysql-server-5.1":
  ensure => present
}

file { "/etc/mysql/my.cnf":
  owner => "root",
  content => "http://myrepository.local/myProject/configurations/mysql/my.cnf",
  require => Package["mysql-server-5.1"]
}

service { "mysql":
  ensure => running,
  subscribe => File["/etc/mysql/my.cnf"],
  require => File["/etc/mysql/my.cnf"]
}

Lo que esto hace es que, en primer lugar, verifica el mecanismo del paquete del sistema operativo en su cuadro (los nombres en el ejemplo asumen un ubuntu reciente) si el paquete "mysql-server-5.1" está instalado, y si no se instalará eso. A través del atributo 'requerir', la segunda directiva se ejecutará después de la primera (y solo si funcionó), cambiando la configuración de MySQL a la que también ha registrado y/o publicado en algún lugar al que pueda llegar (que también podría ser Pon en la misma carpeta que el Vagrantfile, y luego estará disponible en el cuadro debajo /Vagrant). El último paso, que nuevamente solo se ejecutará si la alteración de la configuración funcionó, asegurará que el servicio "MySQL" esté en funcionamiento o se reinicie si ya se estaba ejecutando cuando se cambió la configuración.

Ahora puedes conectar este manifiesto en tu archivo Vagrant:

Vagrant::Config.run do |config|

  config.vm.box = "lucid32"
  config.vm.box_url = "http://files.vagrantup.com/lucid32.box"

  config.vm.define "node1" do |cfg|
    cfg.vm.network "10.23.5.11"
    cfg.vm.provision :puppet do |puppet|
      puppet.manifests_path = "manifests"
      puppet.manifest_file = "node1.pp"
    end
  end
end

Con todos los cambios además de los 'intentando-tortugas' hechas en el entorno como este, se garantiza que todos los Mebers del equipo tienen la misma configuración fácilmente y reproducible solo a su alcance.

Personalmente, me gusta probar cosas en la caja a mano, y cuando encontré la configuración y la configuración correctas, traducirlo en un manifiesto de marionetas para tener si está listo para usar y compartir más tarde con los miembros del equipo.

Como Puppet (y Chef también) puede administrar casi todo lo que necesita (usuarios, trabajos cron, paquetes, servicios, archivos, ...) Es una buena opción para exactamente tales problemas, y tiene el beneficio incluso de poder usar Las configuraciones para preparar entornos de estadificación o prueba más adelante si lo desea. Son muchas más opciones con títere y una lectura la guía de idiomas Debería darle una buena idea de qué más puede hacer con él.

Espero poder ayudar :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top