bookmark_borderSingle SignOn con Google en Spring Boot

  • Registrate en la consola de Google (API Console) https://console.developers.google.com/apis
  • Elige la opción de Credencials en el menu del lado izquierdo.
  • Crea un nuevo proyecto, o selecciona el proyecto donde deseas colocar el api key.
  • Incluye las referencias en el proyecto
    • org.springframework.security.oauth
    • org.springframework.cloud
  • En la configuración de seguridad, deshabilita el csrf. Se va a configurar ingresa la linea .oaut2Client(), el resto es para seguridad
	@Override
	protected void configure(HttpSecurity http) throws Exception {
        http
        .oauth2Client().and()
        .authorizeRequests()
            .antMatchers("/", "/api/ingredients").permitAll()
            .antMatchers("/profile", "/recipes/create").authenticated()
            .and()
        .formLogin()
            .defaultSuccessUrl("/")
            .usernameParameter("username")
            .passwordParameter("password")
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
        	.logoutUrl("/logout")
        	.logoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"))
            .logoutSuccessUrl("/")
            .permitAll()
            .and()
        .csrf()
            .disable()
        .exceptionHandling()
            .accessDeniedPage("/403");
	}
	

bookmark_borderInstalar mariadb 10.11 en Windows Server R12

Descarga la versión LTS de mariadb. Siempre prefiere las versiones LTS a las versiones mas nuevas, a menos cuando vaya a salir tu aplicación ya este en funcionamiento la versión LTS.

La versión para descargar la puedes encontrar en https://mariadb.com/downloads/, selecciona la versión y el sistema operativo.

Ejecuta el programa, vas a tener que tener a la mano los siguientes datos.

  • Contraseña de root que va a tener el servidor.
  • De preferencia que no acepte conexiones con el usuario de root.
  • Directorio donde se va a instalar los programas y ruta donde se van a generar los archivos de datos.
  • Puerto por el cual va a escuchar, por default es el 3306, de preferencia debes de cambiarlo.

Acepta las preferencias, y deja que el programa continue.

Crea un usuario dbo (Database Server Owner) que tenga los privilegios para administrar la instancia que acabas de crear.

Abre una ventana de comando de mariadb, por default va a ser el usuario root, pon la contraseña con la cual configuraste la instancia y ejecuta.

mysql> CREATE USER 'admin'@'%' IDENTIFIED BY 'supersecretpassword';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'admin'@'%';
mysql> FLUSH PRIVILEGES;

Con eso vas a poder conectarte y administrar la instancia desde cualquier maquina con el usuario que acabas de crear

Para que este seguro tu servidor solo debes de exponer los puertos que tu controles, por lo que te sugiero que instales un firewall en tu servidor de windows.

bookmark_borderMicroservicio de Spring Boot en un contenedor Docker

Conceptos clave.

  • Microservicio. Un microservicio es una pequeño programa que se encarga de entregar algun servicio s
  • Contenedor. Es una tecnología que permite empaquetar y aislar las aplicaciones junto con todo el entorno de tiempo de ejecución, es decir, con todos los archivos que requieren para ejecutarse. Esto permite mover la aplicación que se encuentra dentro de un contenedor entre los diferentes entornos (de desarrollo, de prueba,de producción, etc.), sin perder ninguna de sus funciones.
  • Imagen
  • Docker. Docker se diseño a partir de la tecnología LXC de contenedores de Linux. La tecnologíoa LXC funcionaba como una virtualización ligera. Sin embargo, la mejoran al dividir las aplicaciones en sus procesos individuales y ofrecer herramientas para hacerlo.
  • Docker Hub. El docker hub es una libreria de registro de contenedores y una comunidad.
  • Spring boot. Es una tecnlogiía para la creación de aplicaciones independientes, y de grado de producción que puede simplemente ejecutarse con un mínimo esfuerzo.
  • Caracteristicas
    • Crear aplicaciones aisladas
    • Incrustar Tomcat o Jetty o Undertow directamente, no se necesita un WAR para deplegar el programa en producción.
    • Proporciona configuraciones inciales para simpliciar su compilación y ejecución.
    • Proporciona una configuración inicial de spring y de librerias de terceros donde sea posible.
    • Proporciona caracteristicas para producción como metricas de salud y configuración exterior
    • No requiere de archivos XML de configuración.

Procedimiento

  • Crea tu aplicación de spring boot y compila
  • Crea a nivel de raiz del proyecto el archivo Dockerfile
  • Ejecuta la siguiente sentencia.
    • docker build

Referencias

bookmark_borderComo instalar mariadb 10.05 en Ubuntu 20.04 para producción

Con este procedimiento vamos a instalar una versión anterior de MariaDB server en Ubuntu 20.04, ya que en los sistemas legados es posible que se requieran versiones especificas, ya sea por las caracteristicas o que no hayan sido testeadas con las versiones nuevas.

Prerequisitos

  • Servidor Ubuntu Server 20.04 LTS
  • El servidor de producción ya esta protegido siguiendo el procedimiento descrito en el articulo.

Procedimiento

  • Agrega el repositorio de MariaDB en la lista de origenes autorizados, en el archivo /etc/apt/sources.list.d, e impora la llave publica PGP para verificar la descarga de los paquetes
  • Actualiza la información de tu sistema de paquetes
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10./ubuntu focal main'
$ sudo apt update
  • Ejecuta la instalación con el servidor de paquetes del ubuntu, y comprueba la versión instalada
$ sudo apt install mariadb-server
$ mysql --version
  • Ejecuta la secuencia de comandos de seguridad. Revisa y confirma las opciones de seguridad dependiendo de tu caso.
$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
  • Crea un usuario administrativo para conexión remota (solo si la administración es remota). Conectate al servidor con el usuario de root, y ejecuta los siguientes comandos
$ sudo mariadb
MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
  • Por default, mariadb solo permite conexiones locales, si vas a conectarte desde un equipo diferente, debes de cambiar en el archivo de configuración /etc/mysql/my.cnf,
$ sudo nano /etc/mysql/my.cnf
$ more /etc/mysql/my.cnf | grep bind
#bind-address		= 127.0.0.1
bind-address		= 0.0.0.0
  • Para hacer las pruebas puedes conectarte con el usuario administrador, y crear una base de datos.
mysql -h <ip-server> -u admin -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 38
Server version: 10.4.24-MariaDB-1:10.4.24+maria~focal-log mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database test;
Query OK, 1 row affected (0.075 sec)

MariaDB [(none)]> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.073 sec)

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_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.