domingo, 13 de octubre de 2019

Crear imagen docker desde Genexus y levantara en un docker-compose


Estoy empezando a hacer las primeras pruebas con Docker y Genexus, hace ya tiempo que la infra ya la manejamos con Docker, es decir los ambientes donde deployamos los war para testing están todos “dockerisados”, pero desde el U0 de genexus 16 que estoy por probar el armar la imagen directamente desde Gx.


El primer problema que se me presento que con el U0 daba un error y no generaba la imagen, teóricamente en el U1 se solucionó, yo actualmente estoy trabajando con el U5.
Lo que hay que tener en cuenta es que tenemos que tener instalado Docker para Windows (url de descarga https://www.docker.com/products/docker-desktop, hay que tener usuario pero es gratis el registro).

Luego de la instalación de Docker, y un par de reinicios, luego vamos a genexus despues de un Rebuild All (no es necesario ya que teoricamente no cambia nada en el codigo, pero....), vamos a realizar el deploy.

Seleccionamos Docker Image, y cargamos las siguientes propiedades:
Maintainer name: tu nombre y correo electrónico si lo quieres
Docker imagen name: nombre de la imagen que tu prefieras
Environment variables: acá van las variables que tu quieras por ejemplo para conectarte la base de datos o lo que necesites, como yo utilizo java se deben de escribir de esta forma (con .net es similar pero no igual):

GX_COM_MI_APP_GAM_CS_DBNAME="nombre_de_base" GX_COM_MI_APP_GAM_USER_ID="user_bd" GX_COM_MI_APP_GAM_USER_PASSWORD="password.xxx" GX_COM_MI_APP_GAM_DB_URL="jdbc:postgresql:// nombre_conteiner_db_postgres:5432/nombre_de_base" GX_COM_MI_APP_DEFAULT_CS_DBNAME="nombre_de_base" GX_COM_MI_APP_DEFAULT_USER_ID="user_bd" GX_COM_MI_APP_DEFAULT_USER_PASSWORD="password.xxx" GX_COM_MI_APP_DEFAULT_DB_URL="jdbc:postgresql://nombre_conteiner_db_postgres:5432/nombre_de_base"

Obviamente esto se debe de adaptar al su ambiente, pero se puede cambiar en el docker-compose.yml

Luego generamos el deploy.

Lo que vemos si finaliza ok, es que se levanta la imagen a Docker, y en el log vemos que se descarga la imagen tomada como base (tomcat:9-jdk11 o la que pusieron en al armar el war)

Si quieren ya pueden en el Docker local probar la aplicación, pero en mi prueba lo voy a llevar a un server de testing que ya funciona Docker.

Se pasa la imagen generada a un .tar con el siguiente comando
$ docker save -o arch.de.mi.container.tar micontainer



Copiamos el .tar a nuestro server con Docker, y ejecutamos

$ docker load < update1.tar
$ docker images

El primer comando importa la imagen (esto lleva unos segundos dependiendo del tamaño de la imagen) y el segundo nos lista la lista de imagen en el server (usar grep para filtrar)

En mi caso yo cuento con un Docker compose, por lo tanto, armo el yml así (el archivo docker-compose.yml):

version: '3.6'
services:
  web:
    image: 'NOMBRE.DE.LA.IMAGEN:latest'
    container_name: 'nombre_del_contenedor'
         
    ports:
      - "8888:8080"
    links:
      - postgres

    expose:
      - 8888
    environment:
      - GX_COM_MI.APP_GAM_CS_DBNAME=BASE
      - GX_COM_MI.APP_GAM_USER_ID=USUARIO
      - GX_COM_MI.APP_GAM_USER_PASSWORD=CONTR
      - GX_COM_MI.APP_GAM_DB_URL=jdbc:postgresql://base_nombre_contenedor:5432/base
      - GX_COM_MI.APP_DEFAULT_CS_DBNAME=BASE
      - GX_COM_MI.APP_DEFAULT_USER_ID=USUARIO
      - GX_COM_MI.APP_DEFAULT_USER_PASSWORD=CONTR
      - GX_COM_MI.APP_DEFAULT_DB_URL=jdbc:postgresql://base_nombre_contenedor:5432/base
  
  postgres:
    image: 'postgres:9.5.6'
    container_name: 'base_nombre_contenedor'
    environment:
      POSTGRES_PASSWORD: CONTRA
      POSTGRES_USER: BASE
    volumes:
      - 'data:/var/lib/postgresql/data'
    ports:
      - '6543:5432'
    expose:
      - '6543'
volumes:
  data:

Muchas de los datos que ven acá se deben de cambiar, ejemplo el usuario y pass de la base, los nombres de los contenedores, etc. Todo debe de ser adaptado a sus entornos.
Vean que los que está bajo web. Environment son las variables que se definió al crear el contenedor, se pueden agregar o quitar las que se quiera y obviamente configurarse según sus especificaciones.
También hay cosas que pueden sobrar (ejemplo exponer postgres) o faltar dependiendo de su sistema.

Teniendo esto bien armado se puede levantar los containers de la siguiente forma:
$ cd ruta (ruta es donde está el docker-compoose.yml)
$ docker-compose up (si esta seguro que todo anda bien se pude poner -d)



Luego con acceder a http://ip.o.nombre.de.serer:8888/servlet/com.app.login (asumiendo que com.app.login es el login de la aplicación) veríamos la aplicación (obviamente si esta lleva base de datos deberíamos de hacer el restore)


Y listo, en pocos pasos tenemos la aplicación funcionando.









domingo, 21 de enero de 2018

Iconos free

Pagina para descargar iconos free en muchos formatos y tamños


https://www.shareicon.net/billfold-business-and-finance-wallet-money-holder-card-notes-827909


sábado, 24 de diciembre de 2016

Cambiar configuración de red en Centos (6.6 y 6.7 probado)

Tuve que en 2 maquinas virtuales cambiar toda la configuración de red de 2 centos (6.6 y 6.7) y me base en el siguiente articulo que como ven lo copio mas abajo:


http://www.driverlandia.com/configurar-y-activar-tarjeta-red-en-centos-6/






Este post tiene 2 años, ten en mente que puede que hayan cambiado cosas.
centos_grande
Lo primero que nos encontramos al haber realizado una instalación de Centos es que no hay conexión a internet. Para ello hemos de activar la tarjeta de red y configurarla y esto se hace en la siguiente ruta:
/etc/sysconfig/network-scritps
Aquí debemos tener como mínimo 2 ficheros con el siguiente nombre:
ifcfg-eth0
ifcfg-lo

Dentro de cada uno de estos ficheros tenemos la configuracion ip de la tarjeta de red y algunas opciones mas. Procedemos a editar el fichero ifcfg-eth0 con el comando vi (nano no viene instalado por defecto en Centos).

IP Estatica

HWADDR Es la mac de la tarjeta de red que vamos a configurar.
ONBOOT Es para decirle al sistema que encienda la tarjeta de red al inicio de este.
BOOTPROTO Podemos indicarle static, none , dhcp dependiendo la configuracion que deseemos.
Lo que hay debajo es directamente los comandos necesarios para decirle que ip, mascara y puerta de enlace queremos que tenga nuestra tarjeta de red.

IP Dinámica

Si por ejemplo la quisiéramos configurar como DHCP tan solo seria necesario indicar lo siguiente en el archivo de configuración.

Configurando servidores DNS

Como en cualquier otro sistema Linux podemos configurar las DNS en el archivo /etc/resolv.conf
añadiendo tantos servidores DNS como queramos. En este caso las ips corresponden a los servidores DNS de Google.

Activando las tarjetas de red

Por último vamos a activar las tarjetas de red y que vuelvan a cargar la configuración que le acabamos de indicar. Si queremos reiniciar todo el servicio de red podemos realizar el siguiente comando.
/etc/init.d/network restart
Pero si por algun motivo hemos añadido una tarjeta de red adicional y no queremos tener que reiniciar ambas, podemos reiniciar solamente una tarjeta de red, suponiendo que vamos a reiniciar eth1
ifdown eth1
ifup eth1

Si todo ha funcionado correctamente, veremos un mensaje que nos indica que ha ido bien. Aun así podemos revisar con ifconfig si ha asociado una ip a la tarjeta de red.
IP_ESTATICA_DINAMICA_CENTOS

El dispositivo eth0 no parece estar presente …

Yo ya tenia el servidor montado y ahora le he añadido una nueva tarjeta de red (adicional) y aunque configuro el archivo, no obtengo conexión por esa tarjeta nueva.
Da un error “El dispositivo eth0 no parece estar presente, retrasando la inicializacion”
Primero vamos a revisar si nuestro sistema Centos ha detectado la tarjeta de red, para ello hacemos uso de lspci ( yum install pciutils ) y revisamos si nos muestra la tarjeta de red.
Como podemos ver, encontramos dos Ethernet controller, la nueva que hemos añadido en este caso es la Via Technologies. Tambien podemos revisarlo usando el comando
A continuacion editamos el archivo /etc/udev/rules.d/70-persistent-net.rules y revisamos que la MAC de la tarjeta de red y el nombre esten coherentes con el archivo ifcfg-eth que tenemos en /etc/sysconfig/network-scripts.
En mi caso habia detectado otra tarjeta de red (alguna que probe anteriormente) y le habia puesto el nombre de eth1 , pero claro esta tarjeta ya no existia conectada en el sistema. Por mi parte la solucion ha venido de cambiar el NAME de la tarjeta eth2 a eth1 y comentar la tarjeta que no esta conectada al sistema.
Por último revisamos que en el archivo ifcfg-eth1 la mac de la tarjeta de red coincida, si no al intentar levantar la conexión nos dará otro error. Podemos saber también la MAC de la tarjeta conectada mediante el comando ethtool -P eth1, que nos devolverá la direccion MAC de la tarjeta de red.

Si hemos configurado todo correctamente, ya podremos tener internet por ambas tarjetas de red. Ahora podremos dedicar el tiempo a pelearnos con el IPTables para configurar el Firewall.

jueves, 6 de octubre de 2016

Saber version de linux

Varias veces he tenido que saber que versión de linus tengo instalada y nunca me acuerdo como se hace.

cat /etc/issue

Numero de linea en VI

El editor mas usado (creo yo) de los que entramos por consola a ambientes linux es vi. Este tienen infinitas posibilidades las cuales es dificil saberlas todas y usarlas mucho mas dificil. Una que varias veces la he tenido que usar es mostrar el numero de linea, esto es tan sencillo como digiar lo siguiente:

:set nu


Esto hace que se desplegue el numero de linea a la izquierda.


Contar cantidad de registros en todas las tablas Postgresql

Varias veces he tenido que contar los registros de todas las tablas de una base en particular.
Dejo la consulta para poder hacerlo en postgresql


SELECT
nspname AS schemaname,relname,reltuples::integer
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE
nspname NOT IN ('pg_catalog', 'information_schema') AND
relkind='r'
ORDER BY reltuples DESC;




miércoles, 4 de mayo de 2016

No ver videos e imagenes en Galeria de Android

Creo que todos tenemos algún grupo de Whatsapp o algunas imágenes que quizás no queremos que el resto las vean, pero cuando se tienen algo para mostrar (hijos, mascotas, fiestas, deportes, etc.), muy seguramente con alguien en frente tengamos que ir a la galería de android, y aparece las fotos que no queremos que se muestren.

La solución es muy fácil, cuando la descubrí no creí que funcionara, pero anda muy bien.
La idea es en la carpeta donde se alojan estas imágenes crear un archivo que se llame .nomedia (con el punto al inicio, ya que esto queda oculto por el sistema operativo).
Con solo esto basta para que android no indexe las imágenes que están bajo la carpeta y subcarpetas indicadas.

Les dejo un link que detalla mas claramente y con imagenes lo que hay que hacer, pero en resumen es lo indicado arriba.


http://www.xatakandroid.com/tutoriales/como-ocultar-archivos-multimedia-en-android