152 - Tu nube. Tu servidor virtual

152 - Tu nube. Tu servidor virtual

¿Para que quiero un cachito de nube?¿Para que quiero un servidor virtual?¿Es muy difícil? Tener tu propio servidor virtual, tu trocito de nube es muy fácil

1:25
-3:15

Atareao.es no es el único proyecto en el que ando metido. Lo cierto es que llevo algunos otros proyectos hacia adelante. Unos con mas intensidad que otros. Pero todos se caracterizan por estar desperdigados. Al fin me he decidido a agruparlos todos, con el objetivo de tenerlo mas controlado. Y para ello, que mejor que ¿utilizar un servidor virtual propio como nube?

Y además utilizar este punto como lanzadera para mis pruebas. Pruebas que algunas se convierten en nuevos proyectos, y otras se quedan en eso, en meras pruebas. Pero es imprescindible probar para crecer. Sea como fuere, con este objetivo en mente, estoy llevando todos esos proyectos a un Servidor Virtual.

Para realizar la agrupación, estoy aprovechando lo que te comenté en el episodio 142 sobre tener tus contenedores accesibles desde internet. Básicamente se trata de utilizar traefik para dar salida a todos los proyectos. Los que están en producción y las pruebas…

Quédate y te cuento lo fácil que es tener tu propio servidor virtual

Tu nube. Tu servidor virtual

En que ando metido

Antes de nada y como suelo hacer todos los jueves, contarte en que ando metido para sepas lo que encontrarás las próximas semanas.

Artículos

Respecto a los artículos comentarte que he escrito dos artículos. El primero sobre Cawbird, el cliente de Twitter para Linux. El segundo, es una nueva entrega sobre el tutorial de Vim, en el que intento adentrarme en el modo visual de Vim, o realmente los tres modos visuales de Vim

Aplicaciones

Por otro lado, en cuanto al tema de las aplicaciones, sigo con Pomodoro Indicator atascado y con la aplicación del mes de marzo, que terminaré durante la próxima semana, para comenzar con las pruebas.

Esta aplicación se trata de un sencillo, pero espero que útil convertidor de moneda, o cambio de divisas pero en forma de indicador.

Vamos a la nube, vamos a tu Servidor Virtual

Que fácil es tener tu VPS

¿De que va todo esto?. Como te decía en la introducción, tengo diferentes proyectos en marcha y los quiero agrupar todos. Y para ello, quiero utilizar un VPS.

Si no sabes lo que es un VPS, indicarte que es lo que se conoce como un Servidor Virtual Privado. Vamos lo que viene siendo tu propio servidor, tu propia Raspberry, pero en la nube.

¿Por que un servidor virtual propio en lugar de una Raspberry? Por disponibilidad y mantenimiento.

Parte de estos proyectos están en producción, con lo que no puedo arriesgarme a que se vaya el suministro eléctrico en casa, o que el proveedor de fibra tenga algún problema, o cualquier tipo de razón de este estilo.

Hasta la fecha, he estado utilizando Digital Ocean como mi proveedor de VPS por defecto, y estoy muy satisfecho con su funcionamiento.

De esta forma, he decidido continuar con él, en esta nueva andadura de congregación de proyectos en uno solo.

Como tener tu servidor virtual en Digital Ocean

Lo cierto es que tener un servidor virtual propio, tu cachito de nube en Digital Ocean es realmente sencillo. En Digital Ocean, les llaman Droplets.

Simplemente tienes que elegir la distribución que quieres. Supongo que no te sorprendo si te digo que he elegido Ubuntu, pero tienes otras como FreeBSD, Fedora, Debian, CentOS. El siguiente paso, es elegir un plan

  • Estándar
  • Propósito general
  • Optimizado de CPU
  • Y una máquina.

Inicialmente yo me he decantado por una muy sencillita de 1 GB/1CPU 25 GB SSD y 1TB de trasferencia. Pero si todo va bien iré ampliando hacia una máquina mas grande

Por otro lado puedes añadir un volumen de almacenamiento adicional. También puedes seleccionar la región del centro de datos, donde se ubicará ese cachito de nube, ese servidor virtual, que lógicamente debe estar cerca de donde está el público al que van a ir orientado lo que vas a hacer…. Si es para ti, pues cerca tuyo, pero si vas a hacer una página web, deberá estar cerca de aquellos que quieran consumir esa página web, por ejemplo.

Debes añadir algunas opciones adicionales como monitorización, IPv6, el tipo de autenticación, en mi caso claves SSH. Y por último asignarlo a un proyecto.

¿Por donde empiezo con mi trozo de nube?

Una vez ya tienes tu VPS contratado y disponible, y que ya tienes tu dirección IP, ha llegado el momento de acceder vía SSH.

Si no sabes como funciona esto del SSH, o te gustaría que le dedicara un capítulo del podcast a contarte como hacerlo de forma sencilla, práctica y segura, no tienes mas indicarme, y me pongo a ello.

En el caso de DO entras como root, es decir tienes que hacer ssh@ip_del_vps.

Nada mas entrar actualiza apt update && apt upgrade

No es necesario que te diga, que trabajar como root, no es lo mas conveniente, así que lo suyo es que te crees un usuario

adduser lorenzo

sudo usermod -aG sudo $USER

Lo siguiente, y esto es fundamental es la autenticación por clave pública. Para ello

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub lorenzo@IP

Securizar el acceso vía SSH

Esto es fundamental. Edita el archivo de configuración de ssh tal y como te indico en el capítulo sobre los primeros pasos con el VPS, sobre el tutorial sobre el servidor virtual

El cortafuegos

Una vez como tu usuario nominal, el usuario que has creado en el paso anterior, ha llegado el momento de levantar un cortafuegos, dejando únicamente acceso a aquello que vayas a utilizar, lo que sea que vayas a utilizar.

El cortafuegos lo que hará es permitir el acceso por los puertos que tu quieras, bloqueando cualquier acceso por cualquier otro puerto, que no sea uno de los permitidos.

En el caso de Ubuntu, existe una herramienta que es realmente sencilla de utilizar que es ufw. Te recomiendo la lectura del capítulo 5 del tutorial sobre el servidor virtual en el que te comento como proteger tu servidor.

En este capítulo te explico como instalar ufw y como configurarlo de forma sencilla y práctica para lo que utilizarás a continuación.

Bloquear accesos indeseables

El siguiente paso es el de bloquear accesos indeseables a tu servidor virtual propio. Pero, no solo a tu servidor virtual, sino también a aquellos servicios que tengas corriendo dentro de tu servidor virtual. Así, si tienes, un WordPress, o un acceso protegido con contraseña, o cualquier otro servicio, los puedes proteger utilizando fail2ban.

Fail2ban es un software que está especializado precisamente en la prevención de accesos no autorizados.

Para conocer como instalarlo y configurarlo te recomiendo leas el capítulo 6 del tutorial sobre el servidor virtual dedicado a bloquear accesos indeseables.

Ya tengo lo básico y ¿ahora qué?

Hasta la fecha he estado montando los proyectos en WordPress levantando un Nginx y apuntando a cada uno de los hosts. Sin embargo, esto para mantener no resulta demasiado práctico.

Y no resulta práctico, porque quiero montar varios servicios en el mismo VPS. Soy consciente de que esto no es lo más seguro, porque el mal funcionamiento de un servicio puede afectar a otro servicio… Pero sinceramente, no es una cosa que me preocupe.

Al fin y al cabo, solo le voy a dar uso yo, y en ocasiones puntuales tu. Aunque tendré alojadas tres páginas web, por lo menos. Sin embargo, tampoco me preocupan en exceso, porque al menos inicialmente van a tener pocas visitas. Ahora mismo, están en torno a las 100 visitas diarias, y como no les estoy dando marcha, no creo que lleguen a mucho, al menos por el momento.

Si en un momento, empieza, alguna de ellas, a coger empuje, me replantearé sacarla de allí. Pero ahora mismo, como te digo, no me preocupa en exceso.

Y entonces Docker

Pues si, como te imaginas, voy a montar todos los servicios utilizando Docker, que para eso está el tutorial sobre Docker. Para sacarle partido.

El único inconveniente es como exponer cada uno de los servicios… Aunque como sabes, esto no es problema, y aquí es donde entra el episodio 142 del podcast.

Exponiendo servicios a internet

Como te he contado en la introducción, aprovechando lo que te conté en el episodio en el episodio 142 sobre tener tus contenedores accesibles desde internet.

En este caso, voy a dar el salto a la versión 2.0 de Traefik.

Te tengo que decir, que me ha resultado mas complicada de configurar que la versión que instalé en la Rpi. La versión 1.7. Sobre todo, lo que me ha resultado mas complicado ha sido la parte de conectarlo con Digital Ocean. Pero, al final, resuelto.

Así, el docker-compose.yml de Traefik, tiene un aspecto como el que ves a continuación,

version: '3'

services:
  traefik:
    image: traefik:v2.0
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    environment:
      - "DO_AUTH_TOKEN=3143abe90fba0ef32143232abf425ff3321448fabd867678e6d6a868ad8e6d8e"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`traefik.servicio.ejemplo.com`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=atareao:jljl234235g42h3g5h42b532kg653hk4g64h2543jh2g54h23g5jh425b42khh4"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`traefik.servicio.ejemplo.com`)"
      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"

networks:
  proxy:
    external: true

Mientras que traefik.yml tiene un contenido similar al que puedes ver a continuación,

api:
  dashboard: true

entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false

certificatesResolvers:
  http:
    acme:
      email: micorreo@ejemplo.com
      storage: acme.json
      dnsChallenge:
        provider: digitalocean
        delayBeforeCheck: 0

Una vez hecho esto, simplemente se trata de llenar el VPS de servicios como si no hubiera un mañana.

Algunos servicios

Para que tengas una idea de los posibles servicios a instalar, te indico, que el primero de la lista es Seafile. Sinceramente, cumple perfectamente mis necesidades. Así, la configuración del docker-compose.yml, tiene un aspecto como la que ves a continuación,

version: '3.5'
services:
  seafile:
    image: seafileltd/seafile:6.3.4
    container_name: seafile
    restart: unless-stopped
    environment:
      - SEAFILE_NAME=Seafile
      - SEAFILE_SERVER_HOSTNAME=seafile.servicio.ejemplo.com
      - SEAFILE_ADMIN_EMAIL=atareao@servicio.ejemplo.com
      - SEAFILE_ADMIN_PASSWORD=123456789
    volumes:
      #- ./data/seafile:/seafile
      - ./data:/shared
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.port=443"
      - "traefik.http.routers.seafile.entrypoints=http"
      - "traefik.http.routers.seafile.rule=Host(`seafile.servicio.ejemplo.com`)"
      - "traefik.http.middlewares.seafile-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.seafile.middlewares=seafile-https-redirect"
      - "traefik.http.routers.seafile-secure.entrypoints=https"
      - "traefik.http.routers.seafile-secure.rule=Host(`seafile.servicio.ejemplo.com`)"
      - "traefik.http.routers.seafile-secure.tls=true"
      - "traefik.http.routers.seafile-secure.tls.certresolver=http"

networks:
  proxy:
    external: true

Fin

Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Imagen de portada de eberhard grossgasteiger en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *