jueves, 16 de abril de 2015

Instalación de Postgresql, Java, Jboss, en Linux Centos, para alojar aplicación genexus

En el siguiente post voy a comentar todos los pasos que tuve que dar para poder tener una máquina virtual (en mi caso pero podría ser un equipo físico) con Jboss y que funcione una aplicación generada con genexus.
Detalle de software que utilice.
Linux Centos 6.4 minimal
Genexus Evo3 U1
Java 7
PostgreSql 9
Jboss 7.1.1

Voy a ir contando paso a paso lo que hice y por qué.

Primero tengo que instalar Centos, eso no lo voy a detallar pero comento que descargue la versión 6.4 que la tuve que buscar bastante porque estaba discontinuada por no tener mantenimiento (necesitaba que fuera esa versión porque estaba replicando un ambiente de producción). Luego de tener la instalación completa, la actualizamos

yum update
yum upgrade

Luego de tener el equipo instalado y funcionado con las últimas actualizaciones vamos a empezar a instalar el software base.
Con el siguiente comando vemos la versión de java que podríamos instalar
yum search java | grep 'java-'

Buscamos la versión 7 y corremos lo siguiente
yum install java-1.7.0-openjdk-src.x86_64

Ahora vamos a instalar PostgreSQL, con la misma idea buscaos la versión que tenemos en los repositorios e instalamos la que queramos.
yum install postgresql-server.x86_64
Luego vamos a configurar postgresql, debemos de seguir la siguiente secuencia

service postgresql initdb
service postgresql start
su postgres
psql
ALTER USER postgres WITH PASSWORD ‘pass_que_prefiera;
\q
Exit

Si vamos a acceder desde afuera deberíamos de tocar los siguientes archivos
/var/lib/pgsql/data/pg_hba.conf
En mi caso como si quiera accede desde afura tuve que dejarlo asi:
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust
#######ident
host    all         all         192.168.73.153/32           trust

Y el archivo postgresql.conf debo de buscar las líneas que están comentadas y des comentarlas y modificarlas para que quede así:
listen_addresses = '*'
port = 5432 

Ahora debemos de continuar instalando jboss, para eso instalamos algunas herramientas previas

yum install wget
yum install unzip

Ahora descargamos e instalamos jboss

wget http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip
unzip jboss-as-7.1.1.Final.zip -d /usr/share
adduser jboss
chown -fR jboss.jboss /usr/share/jboss-as-7.1.1.Final/
su jboss
cd /usr/share/jboss-as-7.1.1.Final/bin/
./add-user.sh (ManagementRealm, usuario foo y pass)

Ahora ejecutamos jboss y probamos que funciones accediendo por el navegador, por las dudas bajamos el firewall porque por defecto tiene reglas y pueden hacernos ruido en este paso.

Limpiar las reglas de iptables (firewall)
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Levantar jboss (ver que no de ningún error)

/usr/share/jboss-as-7.1.1.Final/bin/standalone.sh -Djboss.bind.address=0.0.0.0 -Djboss.bind.address.management=0.0.0.0&
Acceder de cualquier navegador a la ip del equipo y debería de mostrarnos la página de jboss inicial.

Con esto tendremos casi todo, pero lo mejor es dejar el firewall con las reglas que tiene y agregar nuestras reglas.
Les dejo un ejemplo del archivo /etc/sysconfig/iptables en el que expongo el puerto 8080 para jboss, el 9990 para la consola de administración de jboss, y el 5432 para conectarme a postgres desde fuera (esto si es producción no se debería de agregar)

############### archivo /etc/sysconfig/iptables ########################
# Generated by iptables-save v1.4.7 on Wed Apr 15 07:59:02 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13:1644]

-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9990 -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

# jboss
-A FORWARD -p tcp -m tcp --dport 8080 -j ACCEPT

# postgresql
-A FORWARD -p tcp -m tcp --dport 5432 -j ACCEPT

# jboss admin
-A FORWARD -p tcp -m tcp --dport 9990 -j ACCEPT


-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 5432 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 9990 -j ACCEPT

COMMIT
# Completed on Wed Apr 15 07:59:02 2015
############### FIN ######################################


Ademas deberiamos de configurar para que jboss se levantara cada vez que se reinicie el servidor, yo cree un arrancador muy basico que se puede configurar a nuestras necesidades. Este archivo se podria llamar /etc/init.d/jobss711

######################### archivo /etc/init.d/jobss711 #################3

#!/bin/bash 
### BEGIN INIT INFO 
# Provides:          jbossas7 
# Required-Start:    $local_fs $remote_fs $network $syslog 
# Required-Stop:     $local_fs $remote_fs $network $syslog 
# Default-Start:     2 3 4 5 
# Default-Stop:      0 1 6 
# Short-Description: Start/Stop JBoss AS 7 
### END INIT INFO 
# chkconfig: 35 92 1 
 
## Include some script files in order to set and export environmental variables 
## as well as add the appropriate executables to $PATH. 
[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh 
[ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh 
 
JBOSS_HOME=/usr/share/jboss-as-7.1.1.Final
 
AS7_OPTS="$AS7_OPTS -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true"   ## See AS7-1625 
AS7_OPTS="$AS7_OPTS -Djboss.bind.address.management=0.0.0.0" 
AS7_OPTS="$AS7_OPTS -Djboss.bind.address=0.0.0.0" 
 
case "$1" in 
    start) 
        echo "Starting JBoss AS 7..." 
        #sudo -u jboss sh ${JBOSS_HOME}/bin/standalone.sh $AS7_OPTS           ##  If running as user "jboss" 
        #start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/standalone.sh -- $AS7_OPTS   ## Ubuntu 
        ${JBOSS_HOME}/bin/standalone.sh $AS7_OPTS & 
    ;; 
    stop) 
        echo "Stopping JBoss AS 7..." 
        #sudo -u jboss sh ${JBOSS_HOME}/bin/jboss-admin.sh --connect command=:shutdown            ##  If running as user "jboss" 
        #start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/jboss-admin.sh -- --connect command=:shutdown     ## Ubuntu 
        ${JBOSS_HOME}/bin/jboss-cli.sh --connect command=:shutdown 
    ;; 
    *) 
        echo "Usage: /etc/init.d/jbossas7 {start|stop}"; exit 1; 
    ;; 
esac 
 
exit 0

######################### FIN archivo #################

Con chkconfig podremos agregarlo para que inicie y finalice cuando arranquemos o apaguemos el equipo, ver como se adapta a cada instalación de Linux, por ejemplo si quieren que se arranque cuando iniciamos entorno grafico o no. Por ejemplo algo asi
chkconfig –level 345 jboss711 on

Probemos en reiniciar el equipo y probar que siga funcionando jboss y postgresql

Esta todo funcionando, ahora lo único que falta es crear el war desde gx, con el Depoyment wizard sin hacer ningún cambio, lo único que hay que hacer es agregar todas las clases al war generado (se puede editar con winzip) ya que genexus solo agrega algunas y si se quiere agregar cuando se está generando desde la aplicación DW de gx se cae (en mi caso, pueden probarlo ustedes).
Y por último hay que tirar el war en /usr/share/jboss-as-7.1.1.Final/standalone/deployments, mirar el log y ver que no tire ningún error, y por último en un navegador accede a la aplicación.
Recordar que el link sería algo así:



4 comentarios:

  1. Hola Nestor, tenes algun paso a paso similar a este pero para una maquina virtual en Amazon con un servidor windows? Estoy en busqueda de replicar lo que ofrece Gx para prototipar de forma tal de poder pagando el servicio en amazon pero utilizarlo en la nube. Desde ya muchas gracias, saludos

    ResponderEliminar
  2. Lamentablemente no he trabajado en la nube, ni de amazon ni de los otros actores.

    ResponderEliminar
  3. Hola Nestor, instale CentOS 7, jdk1.8, postgresql 9, jboss eap 7.0 alpha, y subi una aplicacion simple de una transaccion y un web panel, generada con GeneXus Ev3 U6, lo que funciona en la transaccion son las altas, bajas y modificaciones, pero lo que no funciona es el icono select (el popup para ver los registros de la transaccion) aparece el mensaje Internal Server Error, tambien probe aplicando el workwith a la transaccion y da el mismo error en la pantalla del wwtransaccion, Sabes como ver un detalle del error? (habilitar en el Jboss los mensajes de error, o que que archivo log habria una mejor explicacion del error), te funciona bien el workwith o webpanels con grids?, cual es tu email para seguir consultando, el mio es felipexto@gmail.com, gracias de antemano

    ResponderEliminar
  4. Jboss por defecto genera log, tenes que fijarte en el server.log. Lo que debes estar haciendo mal es generando el war que tiras al log, fíjate bien si tenes todas los js y class, genexus no arma bien el war solo (salvo que pongas todas las classes que necesites en un mail)

    ResponderEliminar