Control de versiones de los files de configuration de un server web

Entre mí y un arquitecto de networking administramos un grupo de serveres web (FreeBSD). Es responsable de todo lo relacionado con serveres / networkinges (IPs, Firewalls, usuarios / grupos, etc.) y soy responsable de todo lo relacionado con la web (Apache, PHP, MySQL). A veces las responsabilidades se superponen.

Varias veces se realizaron algunos cambios en los files de configuration que afectaron más o less al server y no pudimos averiguar cuál de nosotros realizó los cambios y por qué.

Yo, como desarrollador web, creo que sería una buena práctica poner los files bajo control de versiones (actualmente usamos Subversion), para que cada vez que cambiemos algo tengamos que comentar los cambios. Solucionará todos los problemas preguntándose quién hizo qué y por qué.

Los files de configuration particulares en los que estaba pensando eran:

  • configuration de firewall
  • configuration de apache (con extras)
  • php config (php.ini)
  • MySQL config (my.conf)

Ya sé que el control de la versión de la idea de los files de configuration del server se basa en otra pregunta formulada aquí . Mi única preocupación es cómo hacerlo correctamente en el lado del server web ya que los files están en diferentes ubicaciones. Poner todo /usr/local/etc bajo control de versión parece inútil, ya que contiene no solo los files de configuration.

Me preguntaba si no crear una nueva carpeta, por ejemplo /config que estaría bajo el control de la versión y que contendría todos los files de configuration que necesitamos y luego replace los originales con enlaces simbólicos a los que están en la carpeta /config . P.ej:

 /usr/local/etc/apache22/httpd.conf -> /config/apache22/httpd.conf 

Entonces la pregunta es: ¿es esta una buena idea y si no, cuál es la mejor solución?

Si usas GIT, entonces no funciona todo el /usr/local/etc bajo control de versión.

  • solo puedes rastrear un puñado de files si así lo eliges
  • el directory de trabajo con todos los files de configuration rastreados es apenas más grande en tamaño

Simplemente instale git, luego vaya a /usr/local/etc y escriba git init . Esto creará la carpeta .git en su location actual (básicamente haciendo de esta carpeta un repository).

A continuación, agregue los files de configuration que desea rastrear: git add firewall/firewall_config.conf apache2/httpd.conf etc y commit: git commit -m "Initial Configuration"

Sus files de configuration ahora están siendo rastreados.

¿Has mirado alguna de las herramientas de gestión para hacer exactamente este tipo de cosas? Recomiendo Puppet o Chef, habiéndolos usado en trabajos anteriores para hacer este tipo de cosas.

Como está versionando files de configuration confidenciales, recomendaría configurar un server interno de git como gitlab. Cree un repository git para cada server, o plantilla / image de server / etc. Ve al directory / y 'git init'.

Puede ser selectivo sobre lo que pone bajo control de versión usando solo 'git add / path / to / file para los files que va a personalizar.

Luego, 'git -m' commit comment 'y' git push -u origin master '.