Mostrando entradas con la etiqueta Docker. Mostrar todas las entradas
Mostrando entradas con la etiqueta Docker. Mostrar todas las entradas

miércoles, 14 de abril de 2021

Levantar Redis con Docker-Compose, contraseña y persistencia

Hola, este es un turorial al hueso, a lo "pelao nerd", de como levantar Redis con Docker. No voy a enseñar que es REDIS, solo que es una Base de Datos no SQL y no Relacional. Algunos le llaman Base de Datos Caché. Es muy rápida para cuando no quieres ir a la Base de datos a cada rato, cuando hay datos que no cambian en un año o meses, mejor dejarlos en esta base y no "molestar" a la base de datos transaccional real (SQL Server, Oracle, PostgreSQL)

Levantaremos Redis de esta forma:

  • Linux, en mi caso es un RHEL (Red Hat 7.9)
  • usando docker-componse.
  • seteando una contraseña para darle seguridad (así es más seguro).
  • seteando un volumen de persistencia de datos (así en caso de reiniciar el servidor o el POD, los datos no se pierden).
  • seteando un máximo de memoria así no te "come" toda la RAM del Server.
  • usando comandos y un cliente para validar datos.

Asumo que

  • estas usando Linux
  • tienes instalado docker
  • tienes instalado docker-compose
  • sabes algunos conceptos básicos de docker y comandos

PASOS

Entrar como root

ir a la raiz y crear carpeta

mkdir redis

Darle permisos al usuario root

chmod -R 744 redis

crear archivo redis.conf indicando máxima memoria 4GB

maxmemory 4gb
maxmemory-policy allkeys-lru

crear archivo docker-compose.yaml, asignando password "mipass", port por defecto 6379 y un nombre de pod "redis".

version: "3.8"
services:
 redis:
    container_name: "redis"
    image: "redis:alpine"
    command: redis-server /usr/local/etc/redis/redis.conf --requirepass mipass
    ports:
     - "6379:6379"
    volumes:
     - $PWD/redis-data:/var/lib/redis/
     - $PWD/redis.conf:/usr/local/etc/redis/redis.conf
    environment:
     - REDIS_REPLICATION_MODE=master
    networks:
      node_net:
        ipv4_address: 172.28.1.4
# networking for the Redis container
networks:
  node_net:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

Quedará así:


Subir con

docker-compose up -d

dirá:


Se creará la carpeta redis-data de forma automática:


Validar que haya quedado corriendo

docker-compose ps


Entrar al pod y ver que pida la clave

docker exec -it redis sh

Accedemos al Redis-cli

redis-cli

Probemos un comando para ver que pida la clave, como keys *


Ingresemos la clave: auth mipass y dirá OK

Si usamos de nuevo keys * traerá un arreglo vacío de datos.

Probando de Windows

Baja este cliente de Redis llamado Redily 0.9.22 que una vez pillé y lo subí a una nube. Ahora es medio complicado encontrarlo.


Asumiendo que tienes acceso a ese servidor y ese port 6379. Coloca la Key abajo.
Accedimos y podemos usarlo para consultar las keys almacenadas. 
Igualmente se puede usar de Java o Net.

lunes, 9 de marzo de 2020

Usar SonarQube 8 Community con proyectos .Net Framework

Hola a todos. Esta vez vamos a instalar la espectacular herramienta SonarQube 8 Community edition, para validar proyectos .Net Framework. En mi caso usaré un aplicación MVC 4, escrita en C# usando .Net Framework 4. Esto sirve perfecto para aplicaciones .Net 2.0 o de MVC 5 con Framework 4.5,  tanto escritos en VB.Net o C#. Fue un trabajo de investigación de varios días ya que hay mucha información desactualizada en la Red, dispersa, e incluso en el sitio oficial de SonarQube en GitHub.
SonarQube para los que no saben, permite validar el código, buenas prácticas, temas de seguridad, como top 10 OWASP, bugs, "código que huele mal" o Code Smell y entrega líneas o tips para corregirlo, a veces, hasta con las líneas de código correcta en el lenguaje que estás usando y que se deben usar. Osea, mas en bandeja no se puede. Los resortes quedan online para todos los del team o jefatura, haciendo visible el stastus con colores, tipo semáforo.

Lo primero, recomiendo tener un Servidor Linux, puede ser CentOS o RHEL con Docker instalado, para que tenga el Servidor de SonarQube, de lo contrario en tu mismo Windows 10 Prof/Ent, deberás tener Docker Desktop for Windows  para que entregue el servicio a tu team/usuarios.

Parte 1: Dejar SonarQube corriendo con un usuario no admin


1. Crear Red para que los contenedores de SonarQube y la BBDD Postgres se comuniquen

docker network create redsonarqube

2. Bajar imagen y levantar contenedor de BBDD Postgres SQL

docker run --name sonar-postgres -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d -p 5432:5432 --net redsonarqube postgres

Ejecutar docker ps -a
Para ver como quedó corriendo la BBDD.
3. Bajar imagen y levantar contenedor de SonarQube 8 Community. Quedará corriendo en el port 9000 que es el port por defecto de SonarQube.

docker run --name sonarqube -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar -d --net redsonarqube sonarqube:8-community

Ejecutar docker ps -a
Para ver como quedó corriendo Sonarqube.

3. Probar. Accede yendo a

http://localhost:9000

Y verás ventana de login:
Si lo dejas en un servidor o tu PC lo quieres dejar con ese servicio, debes darle al resto del team o quien quiera acceder la IP Fija del equipo, por ejemplo:

http://192.168.10.1:9000


4. Logeate a SonarQube con las credenciales.
user: admin
pass: admin

5. Crear un usuario no admin
Usuario: test
pass: 1234

Ve a Administration - Security - Users
En los datos, puedes colocar login, nombre, correo opcional, y clave.
Si entras con ese  usuario test también funciona. 
Ese usuario se lo puedes dar al resto del team.

Parte 2: Configurar .Net para que compile, revise el código y publique en SonarQube


1. Bajar SonarScanner for MSBuild para cada equipo del desarrollador con Visual Studio

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/

Bajar el que dice: .NET Framework 4.6+

sonar-scanner-msbuild-4.7.1.2311-net46.zip

Descomprimir en una carpeta dada y cambiarle el nombre por uno más corto, ejemplo:

C:\sonarqube\sonar-msbuild\
2. Configurar en cada equipo desarrollo el uso de SonarQube server

Ir a la carpeta

C:\sonarqube\sonar-msbuild\sonar-scanner-4.1.0.1829\conf

y abrir archivo sonar-scanner.properties

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8

Esta parte cámbiala por el Servidor de SonarQube
http://192.168.10.1:9000

3. Agregar dos Variables de Ambiente

Ir a las Variables de Entorno, ir a Variables de Sistema (sección inferior) y editar la variable Path, agregar:

- la ruta donde está SonarScanner.MSBuild.exe
  C:\sonarqube\sonar-msbuild

- la ruta de sonar-scanner.bar
  C:\sonarqube\sonar-msbuild\sonar-scanner-4.1.0.1829\bin
(Las rutas de la imagen pueden variar de acuerdo a la guía)

Prueba que quedó ok. Ve a CMD y ve a C:

SonarScanner.MSBuild.exe

(en la documentación de https://github.com/SonarSource/sonar-scanning-examples/tree/master/sonarqube-scanner-msbuild/CSharpProject Dice que se debe usar SonarQube.Scanner.MSBuild.exe pero al correrlo dice que está deprecado en cambio usar SonarScanner.MSBuild.exe)

Presiona Enter y debe decir lo de abajo:
Para probar el Scanner que es el más importante, solo escribe en CMD:

sonar-scanner.bat

Te dirá la versión de SonarQube del servidor. También, tratará de buscar un proyecto para escanear y dará error.
4. Instalar MsBuild 14 o superior en cada equipo de desarrollo

Esto se pide en la documentación oficial: https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/

Lo primero, es hacer un test rápido. Ve a CMD y escribe

msbuild.exe

Y debe indicar versión 14 o superior. Si te dice una menor como 10 u 12, sigue leyendo.
- Instalar Microsoft .NET Framework 4.6.2
https://www.microsoft.com/es-cl/download/details.aspx?id=48159

Instalar Visual Studio 2015 Edición Community con Update 3
https://my.visualstudio.com/Downloads?q=Visual%20Studio%202015%20with%20Update%203

Este software instala el MsBuild 14 que es la necesaria por SonarQube.

Valida que tengas el archivo (se crea al instalar el IDE recién indicado):

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\ Microsoft.WebApplication.targets

Agregar a las variables de ambiente de sistema, variable Path, la ruta de MsBuild.exe

C:\Program Files (x86)\MSBuild\14.0\Bin

Probar de nuevo yendo a DOS y escribiendo

msbuild.exe

Y ahora si debe indicar versión 14.

5. Configurar reglas de validación a excluir/ignore
Ir a Administración – Configuration – Analysis Scope

Ir a Sección Ignore Issues on MultipleCriteria y setear dos ítems:

- Rule Key Pattern

Es la regla que queremos ignorar. Por ejemplo, si miramos un bug y vemos el detalle, puede tener esto:

A: Error dice: CSS properties should be valid, y tiene el código css:S4654.

Otro caso que vamos a quitar es
B: Images tags and buttons should have an "alt" attribute
Tiene el código: Web:ImgWithoutAltCheck

Si queremos omitir ambos casos, debemos poner ambos códigos.

- File Path Pattern

Es el patrón regexp de carpetas o archivos que aplicará ese ignore. Ejemplo si queremos aplicarlo sobre todos los CSHTML:

**/Ejemplo.Web/**/*.cshtml

Luego clic en Save.
Nota: si ya tienes un proyecto y quieres volver a procesarlo con este ignore, debes volver a ejecutar el Build al menos (y no Rebuild completo).

6. Ejecutando Bat con Etapas SonarQube

Coloca la solución .Net en un sitio fácil acceso, ejemplo:

C:\SLN\
Donde dentro de SLN\ está el sln de su solución .Net.

Ejemplo
C:\SLN\Ejemplo.Web\   ---> CSHTML, JS, CSS, etc
C:\SLN\mi.sln

Crea un archivo .bat EjecutaSonarQube.bat con esto:

CD "C:\SLN\"

SonarScanner.MSBuild.exe begin /v:"1.0" /n:"MiProyecto" /k:"RELEASE_1" /d:sonar.host.url="http://192.168.10.1:9000" /d:sonar.verbose=false /d:sonar.login="test" /d:sonar.password="1234" /d:sonar.exclusions="**/Ejemplo.Web/**/jquery.unobtrusive-ajax.js, **/Ejemplo.Web/**/MicrosoftMvcAjax.debug.js, **/Ejemplo.Web/Properties/PublishProfiles/**/*, **/Ejemplo.Web/Scripts/MicrosoftAjax.debug.js"

MSBuild.exe "C:\SLN\mi.sln" /t:Build


SonarScanner.MSBuild.exe end /d:sonar.login="test" /d:sonar.password="1234"

Expliquemos un poco. SonarQube tiene 3 etapas:

- Begin

Es el seteo de parámetros de SonarQube. Va el usuario, clave y Host del Servidor de SonarQube, carpetas o archivos excluidos:

/n: Nombre del proyecto

/k: key única, permite navegar directo, ejemplo, si mi key es test_123 permite navegar directo

http://192.168.10.1:9000/dashboard?id=test_123

/v: versión, debería subir en cada Build o Rebuild

Ejemplo: /v:1.0

/d:sonar.verbose: true o false. Agrega más información tanto en análisis del cliente o del servidor.

/d:sonar.exclusions: archivos o carpetas a excluir. En mi caso sacaré archivos js de Microsoft que no quiero analizar ya que producen falsos positivos. Si agregas más de uno, sepáralos por coma.

Más parámetros acá: https://docs.sonarqube.org/7.4/analysis/analysis-parameters/

En el .Bat se ve acá esta etapa:
SonarScanner.MSBuild.exe begin /v:"1.0" /n:"MiProyecto" /k:"RELEASE_1" /d:sonar.host.url="http://192.168.10.1:9000" /d:sonar.verbose=false /d:sonar.login="test" /d:sonar.password="1234" /d:sonar.exclusions="**/Ejemplo.Web/**/jquery.unobtrusive-ajax.js, **/Ejemplo.Web/**/MicrosoftMvcAjax.debug.js, **/Ejemplo.Web/Properties/PublishProfiles/**/*, **/Ejemplo.Web/Scripts/MicrosoftAjax.debug.js"

- Etapa de Build o Rebuild

En el bat se ve en esta sección:
MSBuild.exe “C:\SLN\mi.sln” /t:Rebuild

Si ha has hecho Rebuild varias veces y no quieres hacer todo el proceso de nuevo usas “Build”:
MSBuild.exe “C:\SLN\mi.sln” /t:Build

- Etapa End

Se coloca el usuario y clave del servidor (usuario no admin) ya que aquí se envía la información al server . En el bat se ve en esta sección.

SonarScanner.MSBuild.exe end /d:sonar.login="test" /d:sonar.password="1234"
Ejecutando el Bat
Un truco simple, es abrir CMD y arrastar y solar el bat
Luego presionar Enter.

Yo recomiendo tener dos .bat

   EjecutaSonarQubeBuild.bat   -- ejecuta Build
   EjecutaSonarQubeRebuild.bat  -- ejecuta Rebuild

Así lo ejecutas según el caso.

Al presionar Enter se puede demorar unos 10 minutos si es Rebuild, o 5 minutos si es Build, aunque los tiempos varían según el equipo que corre el build y la calidad de la red (debe subir los informes a SonarQube server local)

Se verá en pantalla todos los pasos y detalle de compilación. Cuando termine mostrará resumen.
Nota: A veces se queda pegado pegado en "More about the report…", presiona Control + C para que termine de procesar y muestre resumen.

7. Validando reportes en SonarQube server

Si entras a SonarQube - Projects, se verán todos los proyectos que se están escaneando
Si haces clic en el proyecto que acabas de subir, se ve el detalle.

Si entras a Vulnerabilities se ve el detalle de los errores de seguridad.
Si haces clic en Bugs se ven los errores (no de seguridad)

Si pinchas en un error dado, se ve el detalle y la línea donde está el error.
Ahora si haces clic en See rule se ve una explicación del error y como corregirlo en ese lenguaje:


Si mandas a compilar de nuevo con el .bat. se genera otro proyecto, ya que la fecha-hora cambió.

8. Dejar los reportes más nuevos
Puedes seleccionar el proyecto de SonarQube Server, con las credenciales de Admin, entrar, Administration , Deletion. Así borras los reportes más viejos.

Bueno, con esto, te dejo a ti el resto, investiga y juegueee.

martes, 18 de febrero de 2020

Docker en Windows parte 8: .Net Core 3.1 con Docker Linux

Hola a todos, ahora veremos como subir una aplicación simple .Net Core a Docker para Linux.
Usaremos Visual Studio Code.

Parte 7: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-7-contenedor-de.html
_____________________________________

NOTA: Antes que nada, disculpar la calidad de las imágenes ya que son imágenes exportadas de un Word.

Referencias



Bajar Visual Studio Code

Es gratis y no muerde.

Instálalo.

Ejecutar Aplicación Net Core y que quede corriendo localmente

Creamos una aplicación simple. Un servicio REST en Net Core.


Abrirlo y abrir terminal (New Terminal)
Escribir

cd c:
mkdir netcore
cd netcore
dotnet new WeatherForecast

Abrir la carpeta netcore
Correr desde la Terminal

dotnet run

Quedará corriendo en port 5001
Entrar al link
https://localhost:5001/WeatherForecast/

Se verá el JSON

Corriéndola desde Docker (Linux)

Ejecutar Docker y debe quedar usando contenedores Linux
Debe decir Switch to Windows containers (quiere decir está en modo Linux)



Agregar dockerfile

Averiguar nombre de DLL del proyecto en bin/debug/netcoreapp3.1
Agregar archivo dockerfile a la raíz del proyecto. Colocar el nombre de la dll, es case sensitive.
El proyecto se llama netcore, por lo tanto, la dll se llama netcore.dll


FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "netcore.dll"]

Build image

Ir con el terminal a la carpeta donde está el dockerfile y ejecutar:
docker build -t netcore .
Ejecutar

docker images

Debe estar creada la imagen

Correr contenedor

Ejecutarla usando port 8080 externo (equipo local) y 80 (interno del docker)

docker run -d -p 8080:80 --name cnt_app netcore

Debe quedar en estado UP X seconds
Probar usando

Si lo parseamos usando
Se verán los campos más ordenados:

Opcional: habilitar CORS

Habilitar CORS (acceso de otros origines o APIs) sino no se puede consumir desde otro dominio construido con otros Front como Angular.

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
            {
                builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader();
            }));

            services.AddControllers();
        }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseCors("MyPolicy");

__________________________________

Parte 7: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-7-contenedor-de.html

miércoles, 13 de noviembre de 2019

Docker en Windows parte 7: Contenedor de MariaDB

Hola a todos, ahora veremos como subir una BBDD MariaDB con unos simples pasos y como conectarte con un cliente SQL.

Parte 6: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-6-dockerfile-y.html
_____________________________________

Bajando Imagen y corriéndola

Bajemos la imagen de MariaDB. Personalmente recomiendo esta version MariaDB 10.4.8 (una de las últimas Nov 2019)

https://hub.docker.com/r/webhippie/mariadb

En vez de: https://hub.docker.com/_/mariadb

Ya que esta última me da error "Lost connection to MYSQL server at 'handshake: reading initial communication packet', system error: 0". Error místico que nunca pude fixearlo.

Bueno ejecutamos:

docker pull webhippie/mariadb:latest

Una vez bajado leamos acerca de las variables de ambiente de la documentación.

Por lo tanto ejecuta por ejemplo:

docker run -d --name maria -e MARIADB_ROOT_PASSWORD=123 -e MARIADB_USERNAME=naldo -e MARIADB_PASSWORD=test123 -e MARIADB_DATABASE=ejemplo5 -p 3306:3306 webhippie/mariadb:latest

Quedará corriendo en el port de MySQL 3306

Si ejecutas telnet localhost 3306 verás que hay un puerto corriendo ok ya que la pantalla se pondrá negra.

Con Kitematic se puede ven en Settings las variables de ambiente que están corriendo.

Probando con HeidiSQL
Bajemos una herramienta liviana para probar MySQL/MariaDB.

HeidiSQL

Ahora abre una nueva conexión y coloca los datos del usuario root que pusiste en las variables de ambiente.
Ahora accederá e incluso verás la BBDD nueva que creaste "ejemplo5".

De echo puedes crear una nueva conexión y colocar el username: naldo, la clave que colocaste y seleccionar la BBDD "ejemplo5" y accederás sin problema.
Dentro de HeidiSQL si quieres haces una consulta para ver la versión del server

SHOW VARIABLES LIKE "%version%";

Y saldrá la versión 10.4.8 (en mi caso).

_________________________________
Esto es todo, espero les sirva.