miércoles, 22 de julio de 2009

Appliance Redmine con Ubuntu JeOS (2-Configurando Webmin)


Esta es la 2ª parte de cómo crear un appliance de Redmine 0.8.4 con Ubuntu Jeos 8.04.3 y Webmin usando el Bitnami Redmine Stack. Este artículo se centra en la integración de los tres para obtener una plataforma estable y manejable. Todos los pantallazos de Webmin son usando el tema Stressfree.

Una vez creada y funcionando la máquina virtual (ver entrada anterior), hay que asegurarse de que dure dura, asi que vamos a "endurecerla" mediante Webmin, una herramienta para manejar servidores que, bien manejada, ayuda mucho a la administración. Primero vamos a borrar los módulos que no se usan en el appliance, desde Webmin ==> Configuración de Webmin ==> Modulos de Webmin ==> Delete (ojo, por dependencias entre sí no se pueden borrar de golpe):
  • Linux Bootup Configuration
  • LDAP Users and Groups
  • PHP Configuration
  • Kerberos5
  • LDAP Client
  • SMART Drive Status
  • Sendmail Mail Server
  • System Logs NG
  • Shoreline Firewall
  • TCP Wrappers
  • SpamAssassin Mail Filter
  • WU-FTP Server
  • Webalizer Logfile Analysis
  • Squid Proxy Server
  • Squid Report Generator
  • Usermin Configuration
  • Voicemail Server
  • idmapd daemon
  • Security Sentries
  • QMail Mail Server
  • ProFTPD Server
  • Procmail Mail Filter
  • SSL Tunnels
  • Samba Windows File Sharing
  • Postfix Mail Server
  • PostgreSQL Database Server
  • NIS Client and Server
  • OpenSLP Server
  • PPP Dialin Server
  • PPP Dialup Client
  • PPTP VPN Client
  • PPTP VPN Server
  • Printer Administration
  • MON Service Monitor
  • NFS Exports
  • Exim Mailserver
  • Filter and Forward Mail
  • Majordomo List Manager
  • Frox FTP Proxy
  • HTTP Tunnel
  • Heartbeat Monitor
  • IPsec VPN Configuration
  • Jabber IM Server
  • LDAP Server
  • Extended Internet Services
  • MySQL Database Server
  • Fetchmail Mail Retrieval
  • Cluster Usermin Servers
  • Cluster Users and Groups
  • Cluster Webmin Servers
  • Cluster Copy Files
  • Configuration Engine
  • Cluster Cron Jobs
  • DHCP Server
  • Cluster Shell Commands
  • Disk Quotas
  • Cluster Software Packages
  • Dovecot IMAP/POP3 Server
  • BIND DNS Server
  • Bacula Backup System
  • CD Burner
  • CVS Server
  • Cluster Change Passwords
  • ADSL Client
Luego, como hay que enterarse si pasa algo "anormal" y tener prueba de ello en la Bandeja de Entrada, se crean las alertas básicas de aviso entrando en Otros ==> Estado de Sistema y Servidor:


Lo primero de todo es configurar el envío de alertas mediante email y que revise cada x tiempo los monitores que añadiremos a continuación:


El primer monitor que añadimos es Alive System, que indica los encendidos/apagados,


luego añadimos el de Espacio en disco, para indicarle sobre "\" (todo el disco) que avise cuando haya menos de 1 Gb. libre (por ejemplo),


Estado de Interfaz de Red indica si hay conexión de red,


Media de Carga indica cuando hay un consumo de recursos (CPU) excesivo,


Memoria Libre no tiene mayor explicación,


Chequear Proceso sirve para comprobar si hay un comando en ejecución; usaremos /opt/ruby/bin/.ruby.bin /opt/ruby/bin/mongrel_rails start para comprobar que el clúster de Mongrel está activo, indicando en Número de procesos que deben existir para que el monitor lo considere como ejecutándose el nº de nodos de Mongrel que tengamos iniciados,


y ya sólo falta el Servidor Web Apache,


con lo que nos tiene que quedar esta bonita pantalla


donde se puede apreciar de un rápido vistazo el estado del sistema. Por cierto, Apache figura mal porque no se ha configurado... en Servidores ==> Servidor Web Apache ==> Configuración del módulo, se pueden establecer los parámetros para que apunte al servidor web Apache que está instalado con Redmine:


Ahora vamos a tocar el Firewall por encima. Entramos en Red ==> Cortafuegos Linux y dejamos la siguiente configuración (ojo al orden de las reglas):


Ahora a mantener la hora sincronizada con un servidor externo, para que no haya problemas... Hardware ==> Hora del Sistema ==> Time Server Sync:


Ahora vamos a crear una serie de Comandos Personalizados que nos faciliten la vida, entrando en Otros ==> Comandos personalizados:


Estado de Redmine, comprobar el estado de los servicios: /opt/ctlscript.sh status
Parar Redmine, detener los procesos de Mongrel: /opt/ctlscript.sh stop redmine
Arrancar Redmine, iniciar los procesos de Mongrel: /opt/ctlscript.sh start redmine
Parar Apache, detener el servidor web: /opt/ctlscript.sh stop apache
Arrancar Apache, iniciar el servidor web: /opt/ctlscript.sh start apache
Contenido de carpeta files, ficheros subidos a Redmine: dir /opt/apps/redmine/files

Y también crearemos Editores de Archivo para facilitar las modificaciones a mano de archivos de configuración de Redmine:
  • Editar redmine.conf:


  • Editar database.yml:



Editar mongrel_cluster.yml:


Con esto se facilitan las modificaciones puntuales de Redmine, que luego viene el jefe con prisas y ya se sabe...

Y por supuesto, no olvidarse de rotar los logs de Redmine ni de Apache... ¿Que qué son los logs? Son los registros de la aplicación, muy útiles para analizar el uso y los errores de una aplicación, pero si no se hace nada con ellos pueden crecer hasta llenar el disco y eso es un problema. Aquí, una vez más, nos apoyamos en Webmin y la utilidad de rotación de logs, que cogerá esos ficheros cada n días, los comprimirá y, tras truncarlos (borrar su contenido), dejará los anteriores comprimidos (n copias) en la carpeta que le digamos. Es más, antes de ello parará la aplicación y a continuación la reiniciará (segundos), tanto en el caso de Apache como en el de Redmine. Vamos a ver cómo entrando en Sistema ==> Rotación de históricos (Logs) y añadiendo la de Apache en Agregar un nuevo archivo de bitácora para rotar:


Luego añadimos la rotación de logs para Redmine:


Con esto tenemos la rotación de logs controlada y sabemos que por aquí no va a romperse. Los ficheros quedan en una carpeta desde donde los podremos mover, enviar por email o dejarles que se borren (guarda un histórico de n rotaciones):


Y si nos queremos asegurar que funciona correctamente, abajo hay un botón de Rotar Ahora. Este es el aspecto de la carpeta de logs de Redmine antes de rotar:


Durante la rotación de los ficheros observamos la salida de los comandos que se ejecutan antes y después, en este caso parando Redmine antes de rotar e iniciándolo tras acabar el proceso (asi no se escapa nada):



El aspecto de la carpeta de logs de Redmine después de la rotación es este, donde puede apreciarse que los ficheros han quedado vacios:


¿Y dónde están ahora...? Comprimidos, en la carpeta que hemos indicado antes:


Por cierto, ejecutando esto diariamente se minimiza el uso de disco y se reciclan los procesos (al reiniciar los servicios), liberando memoria.

Si la política de la empresa te pide almacenar 6 meses de logs, ya sabes, a hacer copia de la carpeta todas las semanas; no recomiendo almacenar muchos logs dentro del appliance por la posible falta de espacio en disco y porque se almacenan mejor en un servidor de ficheros.

Y lo último que nos queda es comprobar que la rotación de logs está activa entrando en Sistema ==> Tareas Planificadas:


Y hasta aquí hemos llegado por hoy, consiguiendo que el appliance de Redmine gane en seguridad, estabilidad y facilidad de administración gracias a la integración con Webmin. En la próxima entrega veremos como optimizar el funcionamiento de Redmine para poder exprimirlo al máximo.