Recapitulando
Ya están las carpetas de trabajo de los usuarios de la empresa en el servidor de desarrollo (Goldberg), el repositorio subversion local sincronizado con el de Dreamhost, y además se hace una exportación de todos los proyectos todas las noches. El siguiente paso es hacer una copia de seguridad de todo esto, junto con la configuración de Goldberg.
En la empresa donde trabajo actualmente, tienen un servidor Windows 2003 Server con una unidad de cinta que copia los contenidos de su disco duro y de algunos más en distintos ordenadores de la red interna (todos Windows, of course, a los usuarios de Mac y Linux que nos den!). Lo que voy a hacer es crear un script que coja el contenido de varias carpetas seleccionadas y las mande por FTP a una de las máquinas cuya información entra en la copia de seguridad.
Objetivos
Quiero que todas las noches se copien las carpetas importantes del servidor de desarrollo en otra máquina, via FTP.
Paso a Paso
La lista de carpetas a exportar las pongo en un fichero de texto ubicado en la carpeta /etc/scripts del servidor de desarrollo, con el nombre backup_folders. Las carpetas importantes en mi caso son:
/etc (ficheros de configuración del servidor)
/home/eddy (carpetas de trabajo de los usuarios)
.....
/var/exported_projects (copia en limpio de los proyectos)
/var/subversion (carpeta donde se encuentran los repositorios)
Por otro lado, tenemos en la oficina una máquina Windows con un servidor FTP instalado, sin cuentas, permitiendo la subida anónima de ficheros. La carpeta donde se almacenan las subidas entra en la copia en seguridad en cinta que realiza el servidor Windows 2003 Server de la empresa.
Automatización
El script backup.rb se encarga de realizar la tarea de comprimir las carpetas especificadas en el fichero /etc/scripts/backup_folders, especificado en la constante BACKUP_LIST_PATH, y enviarlas por ftp a una máquina especificada. Puedes bajarte estos scripts desde rubyforge.
folder_list_file = ARGV[0] || BACKUP_LIST_PATH
tmp_folder = ARGV[1] || '/tmp'
Net::FTP.open('192.168.50.102') do |ftp|
ftp.login
File.open(folder_list_file).readlines.each do |line|
line.chomp!
puts "tar #{line}"
line =~ /([_a-z]*)$/
filename = $1
`tar -cz #{line} > #{tmp_folder}/#{filename}.tgz`
ftp.putbinaryfile "#{tmp_folder}/#{filename}.tgz"
`rm #{tmp_folder}/#{filename}.tgz`
end
El script no tiene mucha ciencia: abre una conexión ftp con la máquina en cuestión, y para cada una de las carpetas especificadas realiza la compresión en la carpeta temporal del sistema, envía el fichero tgz creado a la máquina FTP y tras esto lo borra de la carpeta temporal.
Tras meter una entrada en el crontab para que todas las noches llame al script, ya solo queda revisar los emails que envia el servidor de desarrollo para comprobar que la copia se está realizando correctamente y dormir tranquilo!

0 comentarios:
Publicar un comentario en la entrada