Hola!
Este es mi primer post lo voy a hacer porque varios compañeros del grupo de Telegram lo han comentado que seria interesante así que lo voy a intentare explicar todo lo mejor que sé. No seáis muy duros jejejej.
-
Primero ¿Que es Nginx?
-
Comprar dominio y certificado SSL
-
¿Cómo se instala?
-
¿Qué necesitamos para acceder por https?
Primero ¿Qué es Nginx?
Nginx, pronunciado como “engine-ex”, es un servidor web de código abierto que, desde su éxito inicial como servidor web, ahora también es usado como proxy inverso, cache de HTTP, y balanceador de carga.
Lo que nos interesa la funcionalidad de proxy inverso, ¿Qué es esto?
En nuestro caso es la aplicación que recibe todo el trafico entrante de X puerto y luego “redirige” el trafico para en un mismo dominio pueda tener varias aplicaciones corriendo bajo el mismo dominio(explicado a lo bruto xD). Vamos a poner un ejemplo, queremos acceder a ejemplo.es -> ahí va a estar portal de asustor
y en ejemplo.es/nextcloud (tapo mi dominio por seguridad) tenemos nextcloud
Comprar dominio y certificado SSL
Actualizo: Esto no es obligatorio podéis usar dominio gratuito e instalar un certificado gratis con certbot (sería genial tener una guía de esto, así que os animo a hacerla!)
Este pase yo lo hice en swhosting.com pero ahora me cambié a https://dinahosting.com/ lo podéis comprar donde queráis el proceso es más o menos el mismo para todas.
Básicamente tienes que buscar un nombre que este disponible y comprarlo, respecto al certificado SSL igual solo que a mi me dieron la opción de verificarlos mediante un correo electrónico y luego en el panel puedes descargártelos, todo esto depende de donde lo compres así que no lo explico paso a paso.
¿Cómo se instala?
Es muy fácil con Docker!.
Vamos a instalar docker, vamos a la APP center y buscamos docker
que fácil, ahora vamos a instalar Portainer para ver de forma grafica los contenedores, reinicarlos… Hacemos lo buscamos en APP center e instalamos
Vamos a abrir portainer (la primera vez os pedirá crear una contraseña para el usuario “admin”)
Ahora vamos a instalar nginx , bienn!!. Para ello necesitamos conectar por ssh con el usuario administrador. De la siguiente forma podemos conectar:
Abrimos una terminal, EJ windows 10 Powershell y escribimos lo siguiente:
ssh nombreUsuario@ipNas. En mi caso:
Introducimos la contraseña del usuario
Ahora vamos a usar docker jejejej
Copiar el siguiente comando en un bloc de notas:
docker run --name nginx
-p 80:80
-p 443:443 \
-v /volume1/Docker/dockerVolumes/nginx/sample.conf:/etc/nginx/conf.d/nginx.conf
-v /volume1/Docker/dockerVolumes/certs:/etc/nginx/certs -d nginx
Vamos explicar un poco que significa:
–name nginx -> el nombre que le vamos a poner al contenedor,podeis poner --name pepito
-p 80:80 y -p 443:443 -> los puertos que va a usar el contenedor
-v /volume1/Docker/dockerVolumes/nginx/sample.conf:/etc/nginx/conf.d/nginx.conf ->
este lo vamos a dividir en dos la partes, izquirda de los “:” y la derecha
la izquierda “/volume1/Docker/dockerVolumes/nginx/sample.conf” eso es la ruta donde vamos a ubicar el archivo de configuración es mi caso es este, podéis elegir la mejor ruta para vosotros
la parte derecha es la que va a existir dentro del contenedor yo no la modificaría.
-v /volume1/Docker/dockerVolumes/certs:/etc/nginx/certs -> igual que el paso anterior pero esta es la carpeta donde va a estar alojados los ficheros del certificado SSL.
-d nginx -> el nombre de la imagen a descargar.
modifica las rutas que necesites para que se adapte a tus necesidades, una vez modificada copia el comando y lánzalo con sudo. En mi caso queda asi:
sudo docker run --name nginx
-p 80:80
-p 443:443 \
-v /volume1/Docker/dockerVolumes/nginx/sample.conf:/etc/nginx/conf.d/nginx.conf
-v /volume1/Docker/dockerVolumes/certs:/etc/nginx/certs -d nginx
Una vez completado, entramos en portainer
Vosotros solo tendréis los contenedores de portainer y nginx. Si esta en “runnning” o “healthy” es que todo esta bien.
Ahora vamos a copiar los certificados en la carpeta que definimos antes
Ahora vamos a crear la configuración para nginx, abrimos un blog de notas.
server {
listen 80 default_server; #esta parte es para redirigir todo el trafico por el puerto 443, el puerto seguro
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name www.ejemplo.es; # -> nombre domino
ssl_certificate /etc/nginx/certs/ssl.crt; #-> nombre de certificados
ssl_certificate_key /etc/nginx/certs/rsa_key.txt; #-> nombre clave certificadoTexto preformateado
location / {
proxy_pass https://192.168.1.3:8022/; #ruta de portal de asustor
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Scheme $scheme;
}
}
Resumen del tocho que he puesto (próximamente lo actualizare para explicarlo mejor) indicamos el nombre de nuestro dominio, también ponemos los nombres de los ficheros del certificado y la ruta de local donde esta el portal de asustor.
Subimos el archivo a la ruta indicada anteriormente
Reiniciamos el contenedor y ya deberíamos poder acceder desde fuera de casa con el https
Y ya estaría hecho lo difícil !
Espero recibir vuestros comentarios para ir actualizando la guía y poder mejorarla
Saludos
Fuentes:
https://hub.docker.com/_/nginx