Hemos migrado una gran cantidad de código fuente a git y estamos muy contentos con nuestra solución actual. Nos gustaría tener nuestros archivos de configuración del servidor versionados en el mismo sistema, pero hay algunas cosas que no funcionan de la manera que nos gustaría y espero que alguien pueda compartir su experiencia aquí.
Esta pregunta es similar a ¿ Usar el control de revisión para los archivos de configuración del servidor? , pero tenemos algunos requisitos especiales que no funcionan con las sugerencias sobre esa pregunta.
La configuración actual usa subversion para los archivos de configuración. El repositorio correspondiente se parece a esto
/ # raíz del repositorio + - www.domain.com/ # configuración para www El | \ - etc / El | \ - apache2 / + - dev.domain.com/ # configuración para dev El | + - etc / El | \--optar/ El | \ - app1 / El | \ - configuración conf / # para app1 en dev \ - staging.domain.com/ # configuración para la puesta en escena
Con subversion esto funcionaría bien, porque es posible simplemente verificar un subdirectorio de un repositorio. Además, puede usar svn: externals para señalar una estructura común para varias configuraciones de configuración diferentes. Solo tuvimos que lidiar con los archivos .svn en todos los directorios versionados. Git, por otro lado , no tiene svn: las comprobaciones externas y dispersas siempre requieren que la ruta desde la raíz al directorio real sea la misma.
Al analizar la migración a git, traté de escribir los requisitos principales para el control de versiones de configuración del servidor:
- solo queremos un repositorio único
- debería ser posible empujar fácilmente los cambios al control remoto central
- los conjuntos de cambios deben contener el autor real
¿Hay una buena manera de tener toda la configuración en un repositorio y solo tener una subruta como copia de trabajo? Actualmente estoy considerando dos enfoques, pero quería hacer esta pregunta aquí primero
- Si el repositorio .git está en una ubicación fija, por ejemplo, en algún lugar de / var , podríamos vincularnos a la subruta desde el directorio de trabajo "objetivo". El problema principal: no sabría una forma de "vincular" desde / etc a otro directorio para importar solo el contenido, excepto la simulación de archivos individuales
- Encontré otra alternativa en esta pregunta SO , sugiriendo tener múltiples ramas en un repositorio. Esto ciertamente aumentaría la complejidad, pero podría vernos intentarlo de esta manera.
El uso de git en una sola máquina para la gestión de archivos de configuración funciona bien, pero creo que debe haber alguien que lo esté usando de la forma en que nos gustaría usarlo.
Gracias
Kariem
fuente
/
debido a los permisos de escritura.On a new machine, clone the git repo and check out the branch for that machine type
. ¿Puedo hacer que otras sucursales sean inaccesibles (por razones de seguridad)?Un poco molesto, pero parece que un gancho de recepción podría hacer el trabajo
El repositorio principal se almacena en / var / master,
el enlace lo clona en / var / localclone y
luego copia los detalles específicos del host. Debería
configurar el enlace .git / post-recepción localmente en cada servidor (con la configuración adecuada)
También parece que quiere algo más como títere o chef que git para esto, esto le permitiría ejecutar git para administrar las configuraciones y módulos de forma centralizada y hacer que puppet \ chef administre la implementación y la verificación por usted
fuente
aquí es un trabajo rápido en el que pensé
1. Tener un repositorio central en digamos
/var/repo
2. Poner archivos que sean globales a todos los dominios en ese directorio.
3. Cree ramas para cada subdominio
/var/repo/subdomain1
,/var/repo/subdomain2
etc.4. Cree un enlace de publicación donde cualquier inserción a la rama se combine con el maestro.
Entonces, cuando cambie la configuración
/var/repo/subdomain2
, se fusionará inmediatamente con master para que pueda extraer el repositorio por completo y tener todos los archivos de configuración.Cuando desee extraer configuraciones de subdominios individuales, simplemente extraiga la rama correspondiente.
Cómo poner sus archivos de configuración
/var/repo/*
es algo completamente diferente (pestañas cron, se me ocurre)~ $
fuente