bookmark_borderInstalar Open Jdk 8 en Ubuntu Server 20.04

No obstante que la versión de Java 8 ya a perdido soporte, en algunas ocasiones es necesario la instalación de Java 8 porque el software ha sido desarrollada con esta versión y aun no se ha hecho la migración a una plataforma mas reciente.

  • Actualiza los paquetes
$ sudo apt update
  • Verifica si tienes instalada una versión de java
$ java -version
  • Instala la versión apropiada
$ sudo apt install openjdk-8-jdk
  • Selecciona la alternativa por default de java que se vaya a utilizar
$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode
  • Verifica que se haya seleccionado correctamente
$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

$ javac -version
javac 1.8.0_292

Referencias.

https://www.digitalocean.com/community/tutorials/como-instalar-java-con-apt-en-ubuntu-18-04-es

bookmark_borderPreparar un servidor Ubuntu Server 20.04 para producción

  • Actualice el sistema
$ sudo apt update
$ sudo apt upgrade
  • Cambiar el puerto de escucha del ssh
$ sudo nano /etc/ssh/sshd_config
  • Cambie el puerto en las primeras lineas, y reinicie el servicio
Port 26
  • Desactive el usuario de root por ssh, cambiano la configuración en el mismo archivo
# Authentication: 
LoginGraceTime 120
PermitRootLogin No 
StrictModes yes
  • Instalar y configurar fail2Ban (bloquea las ips que constantemente estan tratando de entrar y fallan)
$ sudo apt install fail2ban
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.backup
$ sudo nano /etc/fail2ban/jail.conf
$ sudo /etc/init.d/fail2ban restart
  • Configurar el firewall interno ufw.
  • Configurar las politicas predeterminadas
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
  • Habilitar el puerto ssh de entrada (recuerda poner el puerto que pusiste)
$ sudo ufw allow 26
  • Habilite los puertos que se van a utilizar de entrada, por ejemplo, si va a comunicarse por los puertos estandar de http, y https, debera de ejecutar el siguiente comando
$ sudo ufw allow http
$ sudo ufw allow https
  • Habilite ufw
$ sudo ufw enable
  • Habilite un usuario administrador.
$ sudo adduser sammy
$ sudo usermod -aG sudo sammy
  • Cambia la zona horaria de tu servidor.
$ timedatectl list-timezones | grep Mexico
$ sudo timedatectl set-timezone America/Mexico_City
$ sudo timedatectl set-ntp true

Bibliografia.

https://docs.ovh.com/us/es/dedicated/seguridad-de-un-servidor-dedicado/#objetivo

https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04

https://www.digitalocean.com/community/tutorials/como-configurar-un-firewall-con-ufw-en-ubuntu-18-04-es#:~:text=UFW%20o%20Uncomplicated%20Firewall%20es,para%20configurar%20correctamente%20un%20firewall.

bookmark_borderCrear una app en django

Crea una nueva app con el comando, donde core es es nombre de la APP y la funcion de esta app es procesar los datos del cliente.

$ python manage.py startapp core

En esta app vamos a abrir el fichero views.py, que maneja y devuelve la vista que deben de renderizarse. Aqui siempre se definen como funciones.

from django.shortcuts import render, HttpResponse

# Create your views here.
def home(request):
    return HttpResponse("<h1>Prueba</h1><h2>Subtitulos</h2>")

En segundo lugar, debes de indicarse a django esta funcion a que url esta asociado, y para ello vamos a utilizar el proyecto urls que se encuentra en el directorio principal del sitio.

import views from core 
urlpatterns = [
    path('admin/', admin.site.urls),
    path( '',  views.home, name="home" )
]

Por ultimo agrega la aplicación a las aplicaciones instaladas en el archivo settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core'
]

Ahora si ya puedes levantar el servidor y navega al home de la aplicación, y vas a ver el texto de la prueba.

$ python manage.py runserver

bookmark_borderManejar un proyecto de django con pipenv

Aqui vamos a crear como manejar un proyecto de django con los comandos de pipenv y con django-admin. No vamos a ver la instalación de pipenv, pero si vamos a ver la instalación de django en un entorno virtual. Asegurate de tener la versión de pipenv instalada y corriendo. Lo puedes ver en esta entrada Comando de pipenv.

Instala django y sus dependencia utilizando pipenv. Te sugiero que estes en un directorio vacío, ya que recuerda que el entorno virtual que se genera con pipenv, esta directamente asociado al directorio donde lo ejecutas.

$ pipenv install django-admin django django-ckeditor Pillow pylint pylint-django pylint-celery

donde:

  • django. Es el motor de django.
  • django-admin. Es el paquete que instala la consola de administración de django.
  • django-ckeditor. Es el paquete que permite colocar un editor de texto enriquecido para django.
  • Pillow. Es un paquete para el manejo de las imagenes en django.
  • pylint. Es la libreria que permite validar el codigo que vas realizando el python
  • pylint-django.
  • pylint-celery.

Con esto ya vamos a poder acceder a los paquetes que se instalaron, y por lo tanto, podemos utilizar la linea el django-admin de la siguiente forma para crear un proyecto.

$ pipenv django-admin startproject luidasa

Con eso se crea el proyecto, y debes de moverte a la carpeta luidasa, para ejecutar el proyecto, el cual se puede ejecutar activando el entorno virtual y por ultimo ejecutando el proyecto, con los siguientes comandos.

$ pipenv python manage.py runserver

Otras formas de iniciar el proyecto. Si ya activaste el entorno virtual

$ python manage.py runserver

Modificando el archivo Pipfile del entorno virtual, debes de agregar en la sección de scripts

[scripts]
luidasa="python luidasa/manage.py runserver"

Y con eso vas a poder ejecutarlo desde la terminal con

$ pipenv run luidasa

Configuración básica del proyecto

Para configurar el proyecto ingresa edita el archivo settings.py, y cambia los siguientes valores.

El idioma por defecto y la zona horaria que se va a utilizar.

# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

LANGUAGE_CODE = 'es-MX'

TIME_ZONE = 'America/Mexico_City'

La base de datos que se va a utilizar


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Para algunos de los modulos que se encuentran precargados debes de crear la base de datos y hacer las migraciones correspondientes. En la ventana de comando y con el enviroment virtual activado ejecuta:

$ python manage.py migrate

bookmark_borderComandos de pipenv.

He aqui algunos de los comandos de pipenv que nos van a servir para la creación de entornos virtuales de python ligados a un directorio del proyecto y no de forma global como lo realiza virtualenv.

Requisitos

Asegurate que python sea accesible desde cualquier lugar.

$ python --version

Instala el pipenv con el gestor de paquetes pip

$ pip install pipenv

Verifica que se haya instalado correctamente con la siguiente sentencia.

pipenv --help

Entornos virtuales

Para crear un entorno virtual vacío.

$ pipenv --python 3.9

Verifica la ruta donde se encuentra el entorno virtual de python, si no se encuentra es porque no estan en la carpeta donde creaste el entorno virtual.

$ pipenv --venv

Verifica donde esta el interprete de python del entorno virtual

$ pipenv --py

Para activar el entorno virtual o crear uno nuevo ocupa

$ pipenv run python

Ver los paquetes que estan instalados en el entorno virtual, con la opción graph. Lo puedes probar instalando el paquete numpy, verificando y despues volviendo a desinstalar.

$ pipenv graph
$ pipenv install numpy
$ pipenv graph

Tambien podemos verificar los paquetes que se encuentran instalados con pip

$ pipenv run pip list

Para activar el shell del ambiente virtual puedes ejecutar, y con eso siempre estaras ocupando todas las carateristicas del ambiente virtual que estas ejecutando.

$ pipenv shell

Para remover un paquete utilizando pipenv

$ pipenv uninstall numpy

Para remover un paquete utilizando el gestor de paquetes pip instalado en el entorno virtual.

$ pipenv run pip uninstall numpy

Por ultimo, para remover un entorno virtual creado con pipenv

$ pipenv --rm

bookmark_borderCrear una plantilla de proyecto utilizando webpack

Configuración del proyecto de webpack

  • Para crear el esqueleto de proyectos de webpack. (Si se utiliza un framework de javascript esto no es necesario). Verifica que tengas el nodeJs y el npm instalados.
$ node --version
v12.13.1
$ npm --version
  • Para generar el package.json del webpack, vamos a ejecutar el comando npm init, si ponemos la opción -y pone todas opciones por default y solo genera el package.json, si no se pone la opción entonces vas a tener que contestar el cuestionario.
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help init` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (webpack-inicial) 
version: (1.0.0) 
git repository: 
keywords: 
license: (ISC) 
About to write to /home/ldsalazarg/Documentos/cursos/javascript-moderno/04-webpack/package.json:

{
  "name": "webpack-inicial",
  "version": "1.0.0",
  "description": "Este es un cascaron de un proyecto de webpack",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Luis David Salazar",
  "license": "ISC"
}


Is this OK? (yes)
  • Instalar el webpack y el webpack-cli –save-dev. Es una dependencia de desarrollo
$ npm install webpack webpack-cli --save-dev
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN webpack-inicial@1.0.0 No repository field.

+ webpack-cli@4.5.0
+ webpack@5.21.2
added 124 packages from 161 contributors and audited 124 packages in 9.087s

14 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • Agrega la opción build en el package.json del proyecto.
 "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack"
    },
  • Ahora ejecuta el script con la siguiente linea de comando npm run build. Recuerda que la estructura del proyecto debe de estar de la siguiente forma para que pueda funcionar con las configuraciones por default:
$ npm run build

> webpack-inicial@1.0.0 build /home/ldsalazarg/Documentos/cursos/javascript-moderno/04-webpack
> webpack
asset main.js 420 bytes [compared for emit] [minimized] (name: main)
runtime modules 663 bytes 3 modules
cacheable modules 275 bytes
  ./src/index.js 88 bytes [built] [code generated]
  ./src/js/funciones.js 187 bytes [built] [code generated]
WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value.
Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/
webpack 5.21.2 compiled with 1 warning in 197 ms
  • Recuerda que para utilizar una funcion o clase en un modulo externo debe de estar etiquetado con la palabra export.
export const saludar = (nombre) => {
    console.log('creando una etiqueta');
    const h1 = document.createElement('h1');
    h1.innerText = `Hola ${ nombre }`;
    document.body.append(h1);
};
  • El archivo de configuracion de webpack por default tiene el nombre de webpack.config.js. Para continuar vamos a crearlo vacio, y vamos a importar unos modulos que nos van a ayudar a copiar los archivos html y a renombrar los archivos destino con un hash para que no se almacene en el cache de cada maquina. Los dos paquetes que debemos de importar son html-loader y html-webpack-plugin
const HtmlWebPackPlugin = require('html-webpack-plugin');

module.exports = {

    mode: 'development',
    module: {
        rules: [{
            test: /\.html$/,
            loader: 'html-loader',
            options: {
                attributes: false,
                minimize: false,
            }
        }]
    },
    plugins: [
        new HtmlWebPackPlugin({
            template: './src/index.html',
            filename: './index.html'
        }),
    ]
}
  • Una vez configurado volvemos a generar el bundle. Nota cambia la opción del minimize a true si deseas que el webpack minimize el javascript, quitando espacios y comentarios.
$ npm i -D html-loader html-webpack-plugin
npm WARN webpack-inicial@1.0.0 No repository field.

+ html-loader@1.3.2
+ html-webpack-plugin@5.1.0
added 62 packages from 28 contributors and audited 186 packages in 4.768s

23 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • Para configurar que los cambios que uno haga en el codigo debemos de importar el paquete webpack-dev-server, y configurarlo. Para importarlo ejecutamos la sentencia:
$ npm i -D webpack-dev-server
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN webpack-inicial@1.0.0 No repository field.

+ webpack-dev-server@3.11.2
added 370 packages from 229 contributors and audited 557 packages in 15.785s

35 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • para configurarlo, agregamos el script start con el nombre del paquete.
...
    "mode": "developments",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack",
        "start": "webpack-dev-server --open --port 8081"
    },
...
  • y lo ejecutamos con el compando npn start, y se queda a la escucha del servidor. NOTA. No funciono a la primera y tuve que instalar la versión 3.3.12 de webpack-cli para que funcionara, aunque despues lo volvi a desinstalar y lo volvi a instalar pero ahora en el orden siguiente.
    • Primero instale el webpack-cli, y
    • posteriormente instale el webpack.
$ npm start

> webpack-inicial@1.0.0 start /home/ldsalazarg/Documentos/cursos/javascript-moderno/04-webpack
> webpack-dev-server --open

ℹ 「wds」: Project is running at http://localhost:8080/
ℹ 「wds」: webpack output is served from /
ℹ 「wds」: Content not from webpack is served from /home/ldsalazarg/Documentos/cursos/javascript-moderno/04-webpack
ℹ 「wdm」: wait until bundle finished: /
ℹ 「wdm」: asset main.js 915 KiB [emitted] (name: main)
asset ./index.html 608 bytes [emitted]
runtime modules 1.25 KiB 6 modules
modules by path ./node_modules/ 865 KiB
  modules by path ./node_modules/webpack-dev-server/client/ 20.9 KiB 10 modules
  modules by path ./node_modules/html-entities/lib/*.js 61 KiB 5 modules
  modules by path ./node_modules/webpack/hot/ 1.58 KiB 3 modules
  modules by path ./node_modules/url/ 37.4 KiB 3 modules
  modules by path ./node_modules/querystring/*.js 4.51 KiB
    ./node_modules/querystring/index.js 127 bytes [built] [code generated]
    ./node_modules/querystring/decode.js 2.34 KiB [built] [code generated]
    ./node_modules/querystring/encode.js 2.04 KiB [built] [code generated]
modules by path ./src/ 631 bytes
  ./src/index.js 437 bytes [built] [code generated]
  ./src/js/funciones.js 194 bytes [built] [code generated]
webpack 5.21.2 compiled successfully in 861 ms
ℹ 「wdm」: Compiled successfully.
  • Ahora cada vez que cambio alguna codigo de javascript se distribuye en la aplicación utilizando el servidor de desarrollo que acabamos de levantar.

Manejo de los activos en el proyecto.

Tenemos 2 formas de manejar las hojas de estilo, por modulo o global al proyecto.

Vamos a comenzar importando dos componentes, el css-loader y el style-loader, entre ambos nos van a permitir cargar los estilos cuando se necesiten.

$ npm i -D css-loader style-loader
npm WARN webpack-cli@3.3.12 requires a peer of webpack@4.x.x but none is installed. You must install peer dependencies yourself.
npm WARN webpack-inicial@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ style-loader@2.0.0
+ css-loader@5.0.2
added 18 packages from 13 contributors and audited 576 packages in 3.614s

34 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • Para agregar aplicar de los estilos de una forma global se utiliza, el plugin mini-css-extract-plugin, y debe de existir un archivo styles.css en el directorio src.
$ npm i -D mini-css-extract-plugin
npm WARN webpack-cli@3.3.12 requires a peer of webpack@4.x.x but none is installed. You must install peer dependencies yourself.
npm WARN webpack-inicial@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ mini-css-extract-plugin@1.3.6
added 2 packages from 1 contributor and audited 579 packages in 2.94s

35 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • Despues de instalar debemos de hacer la configuración en el webpack.config.js
const HtmlWebPackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

...
    module: {
        rules: [{
                test: /\.css$/,
                exclude: /styles.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /styles.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            },
...
    plugins: [
        new HtmlWebPackPlugin({
            template: './src/index.html',
            filename: './index.html'
        }),
        new MiniCssExtractPlugin({
            filename: '[name].[contenthash].css',
            ignoreOrder: false
        }),
    ]
}
  • Y para optimizar el tamaño de los css, debemos de instalar el plugin optimize-css-assets-webpack-plugin, con la siguiente sentencia.
$ npm i -D optimize-css-assets-webpack-plugin --save
npm WARN webpack-cli@3.3.12 requires a peer of webpack@4.x.x but none is installed. You must install peer dependencies yourself.
npm WARN optimize-css-assets-webpack-plugin@5.0.4 requires a peer of webpack@^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN webpack-inicial@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

+ optimize-css-assets-webpack-plugin@5.0.4
added 218 packages from 66 contributors and audited 797 packages in 11.616s

50 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
  • Este plugin tambien debe de configurarse en el webpack.config.js. A continuación te muestro las modificaciones.

bookmark_borderInstalar keycloak en un contenedor docker

En este artículo vamos a describir como debe de instalarse un servidor keycloack en un contenedor docker y vamos a utilizar mariadb como repositorio de los datos de nuestro servidor, y explica las variables que puedes cambiar y como afectan.

Prerequisitos

Asegurate de tener instalado docker.

$ docker --version

Vamos a trabajar con la versión Docker CE 16.

Uso e instalación

Crea un recurso de red si lo vas a instalar en el mismo equipo, un contenedor para la base de datos y otro para el keycloak.

$ docker network create keycloak-network

Crea el contendor de la base de datos, para este caso yo voy a utilizar mariadb. Las variables que debes de cambiar cuando vas a crear el contenedor de mariadb para keycloak son:

  • MYSQL_ROOT_PASSWORD. Contraseña del root de mariadb.
  • MYSQL_DATABASE. Nombre de la base de datos donde se va a almacenar la información de keycloak.
  • MYSQL_USER. Nombre del usuario de base de datos con el cual se va a conectar el servidor de keycloak.
  • MYSQL_PASSWORD. Contraseña del usuario de base de datos, que va a utilizar el seridor de keycloak.
$ docker run -d 
   --name mariadb 
   --net keycloak-network 
   -e MYSQL_ROOT_PASSWORD=password 
   -e MYSQL_DATABASE=keycloak 
   -e MYSQL_USER=keycloak 
   -e MYSQL_PASSWORD=password mariadb

Ahora toca el turno para crear el contendor de keycloak, y que utilice la base de datos mariadb.

  • KEYCLOAK_USER. Es el administrador de keycloak y el primer usuario con el cual vas a ingresar.
  • KEYCLOAK_PASSWORD. La contraseña del administrador de keycloak.
  • DB_VENDOR. Debe de escribirse el nombre del manejador de base de datos en minusculas, ES MUY QUISQUILLOSO asi es que pon los nombres exactamente como te dice la documentación.
  • DB_USER. El nombre del usuario que creaste al crear el contenedor de mariadb, este es el que pusisten en la variable MYSQL_USER cuando creaste el contenedor de mariadb.
  • DB_PASSWORD. Es la contraseña del usuario de la base de datos, es lo que pusiste en la variable MYSQL_PASSWORD.
$ docker run -it -d 
   --name keycloak 
   --net keycloak-network 
   -p8080:8080 
   -e KEYCLOAK_USER=administrador 
   -e KEYCLOAK_PASSWORD=password 
   -e DB_VENDOR=mariadb 
   -e DB_USER=keycloak 
   -e DB_PASSWORD=password 
   jboss/keycloak

Y ahora solo queda probar que todo este correcto, abre un explorador de internet y navega a la url http://localhost:8080/auth.

Navega a la opción de Administration Console, y completa el formulario. Debes de utilizar el nombre del usuario (KEYCLOAK_USER) y contraseña (KEYCLOAK_PASSWORD) que pusiste para crear el contenedor de keycloak.

Observaciones importantes, si tu detienes el contenedor de keycloak con la sentencia

$ docker stop keycloak
$ docker start keycloak

Te va a marcar un error y no vas a poder volverlo a levantar. Primero debes destruirlo y volverlo a generar. Para destruir el contenedor de docker utiliza la sentencia.

$ docker rm keycloak

Como toda la configuración esta en tu contenedor de base de datos no tienes de que preocuparte.

bookmark_borderInstalacion de MONGODB con Docker

A continuación vamos a mostrar como estoy instalando mongodb en un contenedor docker.

Prerequisitos

  • AMD A4 8GB RAM y SSD 480
  • Ubuntu Desktop 20.04 LTS
  • Docker CE

Instalación

  • Baja la imagen 
$ docker pull mongo
  • Ten a la mano los siguientes datos que debes de poner para asegurar cuando levantes el servidor dentro del contenedor.
    1. ruta donde se va almacenar los datos.
    2. usuario y contraseña con el cual se va a generar el root del mongo.
    3. puerto en el cual se va a natear el contenedor al host.
  • Crea el contenedor con la imagen que acabas de bajar poniendo escribiendo los parámetros, en el archivo mongo.yml
$ cat > mongo-docker.yml
# Use root/example as user/password credentials
version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    container_name: docker-mongodb
    ports:
             - 27017:27017
    volumes:
             - /mnt/secondary/data/db:/data/db
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: xxxxxx

$ chmod 777 mongo.yml
  • tambien puedes crear el contenedor con la imagen que acabas de bajar escribiendo los parámetros en la linea de comando
$ docker run --name docker-mongo 
-v /home/user/data/mongodb:/data/db 
-p 27017:27017 
-e MONGO_INITDB_ROOT_USERNAME=administrator 
-e MONGO_INITDB_ROOT_PASSWORD=XXXXX 
--restart always -d mongo
  • ahora si puedes conectarte desde el host del contenedor a mongodb, y ya estas listo para trabajar, con la siguiente sentencia.
$ mongo -u administrador -p xxxxx --authenticationDatabase admin
  • tambien puedes conectarte desde un equipo que no sea el host con la siguiente sentencia.
$ mongo --host xxx.xxx.xxx.xxx -u administrator -p xxxxxxx --authenticationDatabase admin

Cómo configurar un servidor para producción 

  • Las características que debe de tener un servidor de producción, 
    1. Debe estar cifrada la comunicación con ssl
    2. Debe de tener un administrator, con una contraseña fuerte
    3. Debes de tener un usuario por cada base de datos que crees en el servidor.
    4. Debe de tener un respaldo de la base de datos.
    5. Debes de tener configurado un esquema de recuperación del servidor.
  • Debes de cifrar la comunicación con ssl

  • Crea el usuario administrador de la base de datos.
$ mongo --host xxx.xxx.xxx.xxx -u administrator -p xxxxxxxxxx --authenticationDatabase admin
$ db.createUser(
 {
    user: "rrhh_dbo",
    pwd: "xxxxxx",
    roles: [ { role: "readWrite", db: "rrhh" } ]
  }
)

bookmark_borderComandos de SEO

  1. site: Busca en un dominio en particular
  2. intitle: Busca la palabra en el titulo de las paginas
  3. inurl: Busca la palabra en la url de la pagina.
  4. “aqui va la frase“. busca la frase completa como esta, y no palabra por palabra.

bookmark_borderRenombrar una base de datos (mariadb)

Ingresa como administrador de

  • Ingresa como Administrador de Bases de Datos.
  • Crea la nuevo esquema (base de datos).
CREATE SCHEMA new_db;
  • Cambia el esquema de las tablas a la nueva base de datos, con el siguiente script
RENAME TABLE old_db.table TO new_db.table;
  • Actualiza los permisos de los usuarios que ocupaban las tablas.
  • Vas a tener que recompilar los store procedures y vistas que hagan uso de las tablas.