Giter Site home page Giter Site logo

devbox's Introduction

Developer Box

Este repositorio contiene todo lo necesario para crear una máquina virtual (VM: Virtual Machine) con Vagrant. Esta VM en particular está orientada al Desarrollo de Software con Python y JupyterLabs.

El repositorio está basado en NoSQL-box de Daniel Villanueva, con modificaciones y literatura adicional que he añadido. Podrás utilizar esta VM para conectar con servicios adicionales de Bases de Datos, cuadernos Jupyter de ejercicios. Más información al final de este README.


Preparar Vagrant y el Proveedor

Vagrant es una utilidad de línea de comandos que permite gestionar el ciclo de vida de las máquinas virtuales. Necesitas instalar un Software de Vrtualización, el propio Vagrant y conectar ambos entre sí con un Proveedor. El Vagrantfile de este repositorio está preparado para trabajar con los proveedores VirtualBox, Parallels o KVM.

  • (1) Software de Virtualización, te paso algunos enlaces:
  • (2) Instalación de Vagrant: Sigue la guía oficial de instalación de Vagrant. Puedes instalarlo en Linux, MacOS, Windows...
  • (3) Proveedor:
    • Proveedor para VirtualBox: Vagrant trae soporte nativo para VirtualBox, por lo tanto no necesitas hacer nada especial.
    • Proveedor para Parallels Desktop: En este sitio documentan cómo Vagrant puede usar las máquinas virtuales basadas en Parallels Desktop para Mac. Es sencillísimo:
      • Instalación: $ vagrant plugin install vagrant-parallels
      • Actualización: $ vagrant plugin update vagrant-parallels
      • Uso: $ vagrant up o si tienes multi-proveedor $ vagrant up --provider=parallels
    • Proveedor para KVM/libvirt: Cada distribución de Linux tiene sus peculiaridades, así que lo mejor es que busques los manuales de la tuya. En mi apunte técnico sobre la instalación de KVM y Vagrant describo cómo lo instalé en un Ubuntu 20.10 (Groovy Gorilla).

Instalación de la VM

Clona este repositorio en un ordenador donde tengas VirtualBox (Windows, Linux, MacOS,Solaris), Parallels Desktop (MacOS) o KVM (Libvirt en Linux).

git clone https://github.com/LuisPalacios/devbox.git
cd devbox
  • Pega la(s) clave(s) pública SSH de tu ordenador cliente al fichero bootstrap/public-keys.txt:
cat ~/.ssh/id_rsa.pub >> bootstrap/public-keys.txt
  • Revisa el fichero bootstrap/bootstrap.yaml y adáptalo a tus necesidades. Dentro del fichero tienes instrucciones para generar la contraseña de tu usuario.
usuario: luis
password: $6$x...
boxname: 'generic/ubuntu2010'
hostname: 'coder'
timezone: 'Europe/Madrid'
teclado: 'es'
  • Arranca la máquina virtual:
luis@jupiter:~/devbox$ vagrant up


# Si estás en un MacOS con multiproveedor: 

luis@jupiter:~/devbox$ vagrant up --provider=parallels   
  • Conecta con vagrant ssh. Esta opción siempre te va a funcionar, más adelante veremos más opciones.
luis @ idefix $ vagrant ssh
vagrant@coder:~$
vagrant@coder:~$ sudo su - luis
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

 _______________________________
< Bienvenido a mi servidor luis >
 -------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

luis@coder:~$

Trabajo con la máquina virtual

Conectar con Jupyter Lab

A partir de ahora ya puedes conectar con los servicios de esta máquina virtual. Observa en el fichero Vagrantfile los puertos mapeados, entre ellos el de JupyterLab. Dependiendo del tipo de proveedor utilizado podrás acceder en local (desde tu propio ordenador) o desde la LAN. Aquí tienes algunos ejemplos:


Configurar GIT

Una vez dentro de JupyterLab puedes arrancar el Terminal y configurar GIT:

$  git config --global user.email "[email protected]"
$  git config --global user.name "Tu Nombre"

GIT en JupyterLab


Configuración SSH

El fichero Vagrantfile está preparado para configurar dos estrategias distintas dependiendo de quién sea tu proveedor (KVM o VirtualBox / Parallels Desktop):

  • VM en un HOST Linux con KVM/Libvirt - Uso networking público: Asigno una Dirección IP Fija a la VM
  • VM en un HOST local con VirtualBox - Uso networking privado: PORT FORWARDING
  • VM en un HOST local con Parallels Desktop - Uso networking privado: PORT FORWARDING

HOST Linux con KVM/Libvirt

  • Una vez que tienes la máquina virtual funcionando en tu Host Linux deberías poder ver algo parecido a esto desde virt-manager:

VM en Linux

Configuro .ssh/config para facilitar la conexión. Uso IP fija porque en KVM/Libvirt configuré networking público en el Vagrantfile:

Host coder
  HostName 192.168.1.13    <== Cámbialo por la IP de tu VM
  User luis                <== Cámbialo por tu usuario
  Port 22
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null
  LogLevel=error

Conexión vía SSH

La contraseña es la de tu clave pública/privada

luis @ idefix ➜  ~  ssh coder
Enter passphrase for key '/Users/luis/.ssh/id_rsa':

luis@coder:~$

HOST Mac (o Windows) con VirtualBox

  • Otro ejemplo, si lo monto en un Mac o un Windows, configuro el cliente SSH para conectar con la VirtualBox (localhost). Configuro el fichero ~/.ssh/config del cliente y a esta opción la llamo coder-vb.

VM en Virtualbox

Host coder-vb
  HostName 127.0.0.1
  User luis
  Port 2222

Conecta vía SSH

Si la estableciste, recuerda que la contraseña es la de tu clave pública/privada

luis @ idefix ➜  ~  ssh coder-vb
Enter passphrase for key '/Users/luis/.ssh/id_rsa':

luis@coder:~$

HOST con Parallels Desktop

  • En este caso he configurado un MacOS con Parallels Desktop como Host. Configuro el cliente SSH para conectar con la VM en Parallels (localhost). Configuro el fichero ~/.ssh/config del cliente y a esta opción la llamo coder-prl.

VM en Parallels

Host coder-prl
  HostName 127.0.0.1
  User luis
  Port 2222

Conecta vía SSH

Si la estableciste, recuerda que la contraseña es la de tu clave pública/privada

luis @ idefix ➜  ~  ssh coder-prl
Enter passphrase for key '/Users/luis/.ssh/id_rsa':

luis@coder:~$

Conexión al HOST por internet vía SSH

Si quieres conectar con tu VM desde internet una posible solución es hacer SSH a un equipo intermedio (tu firewall) y que este pueda llegar a tu Host/VM a través de tu la LAN privada. Sería algo así:

                                                 ┌─┬────────────┬─┐
                                                 │ │ coder VM   │ │
                                                 │ │            │ │
┌──────────┐               ┌───────────┐         │ └────────────┘ │
│          │   INTERNET    │           │  LAN    │                │
│ Cliente  ├──────────────►│ SSHServer ├───────► │  KVM HOST      │
│          │               │           │  LOCAL  │                │
└──────────┘               └───────────┘         └────────────────┘
                       miserver.midom.org           192.168.1.13

  • Configuramos SSH para llegar al SSHServer y además preparamos "port forwarding", de modo que él pueda reenviar el puerto 8001 al HOST/VM
Host coder-via-internet
  HostName miserver.midom.org
  User luis
  Port 12345
  LocalForward 8001 192.168.1.13:8001
  • Conectamos con el SSHServer, tendremos acceso al terminal (shell) y el reenvío del puerto activo.
luis @ idefix ➜  ~ ssh coder-via-internet
luis@coder:~$

Alternativa: usar -N que activa el reenvío del puerto SIBN terminal: ssh -N coder-via-internet


Integración con GIT (Github o Gitlab)

Si queremos conectar con servidores de Git externos (github o gitlab) podemos preparar nuestra máquina virtual.

  • Abrimos un terminal.
  • Ejecutamos: ssh-keygen -t rsa -b 2048
  • Guardamos ~/.ssh/id_rsa.pub en github o gitlab

Si vamos a trabajar contra esos servidores, también es recomendable configurar el cliente git

  • git config --global user.name "Coder Parchis"
  • git config --global user.email "[email protected]"

Proyectos relacionados.

Para poder sacarle provecho a esta máquina virtual y al entorno JupyterLabnecesitarás contenido. Aquí tienes un proyecto interesante, Taller de Bases de Datos de Daniel Villanueva. Desde la shell de tu máquina virtual ejecuta el comando curl que puedes ver en el siguiente ejemplo. Te permitirá instalar servidores Postgres, Riak, Cassandra, Mongodb, Neo4j, etc. usando Docker

 $ ssh luis@coder
 $ curl -s https://raw.githubusercontent.com/dvillaj/NoSQL-Services/master/scripts/setup.sh | bash

devbox's People

Contributors

luispalacios avatar

Watchers

 avatar  avatar  avatar

devbox's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.