domingo, 16 de diciembre de 2018

Extender Disco Duro Linux con LVM


#Extend #HardDisk #DiscoDuro #LVM #Linux #Ubuntu #Video #HowTo  #storage #Almacenamiento #Administración #Servidores #ServerAdmin #Server #Administration #Admin

Cuando se trata la administración de Discos en Sistemas operativos Linux, es muy importante saber el tipo de formato que se le dará, es altamente recomendado utilizar formato LVM, ya que se crean discos (o almacenamiento) dinámicos, debido a que es posible extender las unidades lógicas, agregando más discos duros.  Todo este proceso se realiza "en caliente" y, por tanto, transparente a los usuarios.

El proceso es bastante sencillo, acá lo describo paso a paso.

1. Listar particiones
    fdisk -l
2. Tomar nota del nombre del nuevo disco
  /dev/sdb
3. Formatear Disco /dev/sdb
  fdisk /dev/sdb
  a. Opción n   :  Agregar nueva partición
  b. Opción p   :  Partición Primaria
  c. Enter 3 veces (se toman los valores predeterminado en las siguientes opciones)
      - Partition Number
  - First Sector
  - Last Sector
  d. Opción t   :  Cambiar el tipo de partición a LVM
  - Seleccionar el formato 8e  (Linux LVM)
  e.  Opción w  :   Guarda los cambios al disco
      - El disco pasa a llamarse /dev/sdb1
4. Crear Volúmen Físico
   - pvcreate /dev/sdb1
5. Desplegar el volúmen de grupo para tomar el nombre del volumen a extender (ubuntu-vg)
   - vgdisplay
6. Extender volumen
   -  vgextend ubuntu-vg /dev/sdb1
7. Mostrar los volúmenes lógicos (tomar el parámetro LV PATH  - /dev/ubuntu-vg/ubuntu-lv)
   - lvdisplay
8. Extender volúmen lógico 
   - lvextend -l+100%FREE /dev/ubuntu-vg/ubuntu-lv
9. Redimensionar el volúmen
   - resize2fs /dev/ubuntu-vg/ubuntu-lv
10. Verificar que ya hay más espacio a utilizar

   -  df -h

Para entender mejor, te dejo este video tutorial donde realizo el proceso descrito anteriormente.

Inicialmente tengo un disco de 15GB donde tenía formateado (y en uso) casi 4GB, agregué otro disco duro de 2GB y decidí extender el tamaño del root filesystem con todo lo que estuviese disponible.

Sin más preámbulos, te dejo el video.




Si quieres estar enterado, regístrate.






También recuerda estar atento a mis redes sociales, especialmente Facebook, Youtube (esta clase tendrá un video ahí), Twitter y Tumblr.




sábado, 15 de diciembre de 2018

Deploy Django 2.1 en Ubuntu Server 18.04 con Apache2

https://goo.gl/8uZwhf
#Deploy #Django2.1 #Django #Ubuntu #Ubuntu18.04 #Apache2 #Clase #Gratis #Curso #Python

Nuevamente por acá, esta vez con un artículo que espero les sea de interés.  Como hemos estado viendo en el curso de Desarrollo Web con Python usando Django 2.1 (click acá para ir al curso), hace falta hacer el deploy de nuestra aplicación a algún servidor de producción.

En esta ocasión, mostraré cómo realizar ese deploy en un Servidor Ubuntu con Apache2.  Veremos qué debemos instalar o actualizar y cómo pasar nuestro proyecto a dicho servidor.

Primero debemos revisar qué versión de python3 está instalado, aunque en el curso trabajamos con python 3.7, podemos hacer el deploy sobre python 3.6 que es la versión que viene por defecto en Ubuntu.



Antes de realizar cualquier acción debemos actualizar los repositorios

Luego procedemos a instalar python3 y python-dev, en el caso de python3 se actualizará a la última versión de 3.6 y el python-dev son herramientas que se requieren para el deploy.



Luego instalaremos apache2, quien será el servidor web encargado de "procesar"  los archivos estáticos, se apoya del módulo wsgi, que interpretará los archivos de python.



Para poder instalar el módulo wsgi, debemos agregar repositorio universe.


 Y luego instalamos el módulo de apache que interpreta python, libapache2-mod-wsgi-py3



Ahora instalaremos el módulo de Python3 que servirá para crear el entorno virtual, ya que estamos con python 3.6 es necesario instalarlo, python 3.7 ya lo trae integrado.



Ahora copiaremos nuestro proyecto al nuevo servidor, para esto primero creé un directorio en el home de mi usuario en Ubuntu



Copio el proyecto con el comando PSCP de putty.



Y así ya está copiado en el servidor.



Creamos el entorno virtual, esta vez utilizando buenas prácticas lo hacemos dentro de la carpeta del proyecto.



En mi caso, quise instalar offline los paquetes, por tanto bajé de pypi.org, todos los paquetes a instalar y los pasé al servidor Ubuntu.



Ahora activo el entorno virtual para instalar dentro de él todos las aplicaciones/módulos/paquetes descargados anteriormente.



Procedo a instalar todos los paquetes.



 Incluyendo ReportLab con su dependencia (Pillow)



Verificamos que estén todos los requeridos para nuestra aplicación



La base de datos, la tendré en otro servidor, por eso actualizo la ruta de acceso y credenciales hacia la base de datos, recuerden que en el servidor de base de datos deben dar acceso a este nuevo servidor.



Para poder hacer pruebas, instalé un navegador de consola llamado lynx, la idea principal es arrancar el servidor y navegar en la aplicación, pero como el server únicamente corre local, no es posible verlo desde fuera del equipo de desarrollo, por tal motivo, decidí bajar esta aplicación, no es necesario que Uds. lo hagan, en mi caso lo hice para confirmar que la aplicación levanta bien en el nuevo entorno (Ubuntu).



Arrancar el servidor local, aparcen algunos warnings, pero no es tan necesario preocupase por ellos. Lo importante es que veamos que el servidor arrancó.



Abrí otra ventana de mi consola (ya saben que uso CMDER) y me conecté al mismo servidor, utilicé lynx para poder navegar en el servidor local de Django.



Pruebo que el servidor cargue y que tenga acceso a la base de datos.





Finalmente, cuando veo que cargó bien, procedo a desactivar el entorno virtual, ya en este punto, sé que el servidor está corriendo perfectamente.



Ahora procedemos a trabajar con el servidor apache. Primero que todo, pasamos (copiamos) el proyecto (con el entorno virtual) hacia los directorios de apache en un directorio nuevo llamado vhosts.


Luego cambiamos los permisos sobre el directorio vhosts, al grupo www-data. En la siguiente imágen vemos el antes y el después.



Ahora vamos a editar el archivo de configuración del sitio por default que trae apache.



En este punto es donde redireccionamos python para que levante con el entorno virtual, esto es, la versión de python contenida en el entorno virtual.



Importante es el alias que se define hacia la ruta donde están los archivos estáticos, luego se requiere permisos full sobre esa carpeta y sobre la carpeta del proyecto (en mi caso demo) y sobre el archivo wsgi.py que es el archivo de configuración que ya trae python.

Finalizamos la edición del archivo configurando el módulo de apache para python, con las líneas
WSGIDeamonProcess, WSGIProcessGroup y WSGIScriptAlias, notar la ruta que deben actualizar para su propio interés.

Luego debemos reiniciar apache y para revisar que todo ande bien, mostramos los errores, se debe tener en claro que cada vez que se cambie algo de python (sea contenido o configuración), se debe reiniciar el servidor apache.




Intenamos acceder a la aplicación desde afuera y vemos que nos aparece un error.



En efecto, hacía falta cambiar los hosts autorizados para levantar nuestro




Ahora volvemos a reiniciar el sevidor y mostramos el log de errores.



Vemos que todo bien y volvemos a acceder desde otra terminal (o pc) a nuestra aplicación y si hemos seguido al pie de la letra esta clase, deberíamos de poder ver algo como lo siguiente.



Accedemos para ver si funciona bien y si está accediendo a la base de datos.

Y a como dije, vemos que todo levanta bien.


También vemos que la reportería esté funcionando.




Y con esto ya tenemos nuestra aplicación desplegada en un servidor externo al equipo que usamos para desarrollo y que puede ser accedido por otras personas.  Ya podemos decir que nuestro proyecto está desplegado en Ubuntu Server con Apache. 

Esta opción bien podría compararse a contratar un VPS de Digital Ocean (por ejemplo) o un servidor de producción personalizado.

Aún quedan más clases extras del curso, veremos más adelante cómo realizar el despliegue en otras plataformas, si estás interesado en recibir notificaciones, registrate en la ventana popup que sale o en el siguiente espacio.







También recuerda estar atento a mis redes sociales, especialmente Facebook, Youtube (esta clase tendrá un video ahí), Twitter y Tumblr.




jueves, 13 de diciembre de 2018

Importancia de Replicar con SymmetricDS




La #importancia de la #Replicación (o #Sincronización) de #Base de #Datos con #SymmetricDS

Aprenderás una sola herramienta para sincronizar cualquier base de datos sobre cualquier sistema operativo.  De esa forma, sólo inviertes en aprender una vez y aplicar muchas veces.

Manejarás una herramienta estable y muy ligera, así como muy flexible en su configuración.

No importa si usas #SQLServer , #MySQL , #MariaDB , #PostgreSQL , #Oracle#DB2#FireBase, #SQLite,  etc el proceso es el mismo, incluso puedes combinar diferentes bases de datos.

Además de los beneficios implícitos que ofrece la sincronización (Replicación) de Bases de Datos.

Mira el enlace que te dejo acá y crece en conocimiento y dale mayor peso a tu hoja de vida.  Ofrécele a tus clientes la posibilidad de portabilizar su #Data 

Héchale un vistazo al siguiente enlace, con un precio super bajo, que ya quedan pocos días, luego volverá a su precio original.

Invierte en tu capacitación y verás mejores frutos en un corto tiempo.

miércoles, 12 de diciembre de 2018

Poblar DropDownList - Clase Gratis - Curso Programación Capas

#Clase #Gratis #Programacion #Capa #Ado #Net #AdoNet #SQLServer 


Esta vez les dejo una nueva clase extra del curso de programación en Capas con Ado Net, en el cual veremos cómo poblar un dropdownlist o combobox utilizando las capas que ya tenemos listas en el curso.



Si quieres estar enterado de nuevas clases, puedes registrarte en la ventana emergente o a continuación. (Not: revisa tu carpeta spam para la verificación).





viernes, 7 de diciembre de 2018

[Django 2.1] Agregar Usuario que crea un registro en el modelo


 #Django #tutorial #Elearning #Web #Desarrollo #PostgreSQL #Migrations

En esta nueva entrada, voy a explicar cómo agregar un atributo llamado creadopor en el modelo, que luego se convertirá en el campo creadopor de la tabla (modelo) Categoria.
Te he marcado los cambios que se debe hacer en el modelo.



Luego de eso debes crear una migración
manage.py makemigrations

Si ya tienes registros en la base de datos, el orm de Django te pedirá que des valor del nuevo campo para los registros existentes.


Yo le di el valor de 1, ya que el campo es de tipo numérico, porque ahí se graba el id del usuario y el usuario 1 (en mi caso) es el admin



Y finaliza el comando makmigrations



Para ver el estado de la migración, lo haces con manage.py showmigrations


Puedes ver que está una migración sin aplicar, llamada 006_categoria_creadopor en la aplicación catalogos
Para ver la instrucción que ejecutará django sobre postgresql, se hace con el comando
manage.py sqlmigrate [nombreapp]  [id de migracion]
en nuestro caso sería
manage.py sqlmigrate catalogos 0006_categoria_creadopor


Ya en esta etapa, puedes realizar la migración con el comando
manage.py migrate


Si consultas el registro de las categorías en la base de datos, podrás ver ya el nuevo campo con el valor escogido para los registros ya existentes.



Ahora sólo faltaría decirle a Django que cuando se cree una nueva categoría, se tome el id del usuario activo. Para esto hay que sobreescribir el evento form_valid de la vista create de categoría.



Y con eso ya está listo, puedes hacer las pruebas insertando registros y ve cómo se van agregando. 
En mi caso, entré al sistema con otro usuario y creé una nueva categoría, teniendo como salida desde la base de datos lo siguiente:


Y puedes ver cómo le asignó el id de ese otro usuario.


Si tienes dudas, favor contactarme por medio de este blog o los enlaces de mis redes sociales.


 
>