Instalar servidor NGINX, y configurar virtual host en Ubuntu 18.04

Entre la variedad de seServidor web nginx en ubuntu 18.04rvidores web para linux, el más habitual suele ser Apache. Pero hay uno que esta comiendole terreno. Este es NGINX.

Instalación del servidor web NGINX

Para instalar este servidor en un Ubuntu 18.04 es facil, solo tenemos que tirar de repositorio y lo tendremos instalado sin ningun problema.

1
2
sudo apt-get update
sudo apt-get install nginx

En cuanto termine, ya tendremos instalado nuestro servidor web en nuestro sistema bajo Ubuntu 18.04

Abrir los puertos en el firewall del Ubuntu 18.04

Una de las opciones que nos agrega la instalación de nginx, es añadir los diferentes modos de funcional el servidor web, al firewall que trae por defecto la distribución de Ubuntu.

1
sudo ufw app list

Para activar los puertos de nginx en el firewall solo tendremos que utilizar el nombre del metodo que deseamos activar.

Para el modo de “http”, le indicamos a firewall que queremos usar el metodo “Nginx HTTP”. Con esta opción abriremos el puerto 80 en el firewall.

1
sudo ufw allow 'Nginx HTTP'

Para activar el modo HTTPS, y abrir el puerto 443 para la conexión seguras, utilizaremos la opción ‘Nginx HTTPS’

1
sudo ufw allow 'Nginx HTTPS'

Configurar un virtual host en el nginx

La configuración de los virtual host en el servidor nginx, es muy parecida a la que utilizamos en el servidor apache. en el directorio de nginx (/etc/nginx), tenemos las mismas carpetas que encontramos en el apache (sites-avaliable, sites-enabled, modules-available, modules-enabled, etc). La unica diferencia que encontramos con respecto Apache, es que los enlace simbolicos, que en apache los creamos con a2ensite o a2dissite, etc. En el caso de nginx los tendremos que crear manualmente.

1
sudo ln -s /etc/nginx/sites-available/virtualhost.conf /etc/nginx/sites/enabled/

Crear el fichero de configuración del virtualhost

En la carpeta de /etc/nignx/sites-available/ tenemos un fichero con la configuración por defecto del servidor. Podemos usar este fichero como plantilla para nuestros virtual host.

1
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/virtualhost1.conf

Editamos el fichero que hemos creado, para personalizar la configuración de nuestro virtual host.

1
sudo nano /etc/nginx/sites-available/virtualhost1.conf

Una de las primeras lineas que nos encotramos son las siguientes

1
2
 listen 80 default_server;
listen [::]:80 default_server;

Lo primero que deberemos de hacer es eliminar “default_server”,  de las dos lineas. A no ser que queramos que este virtual host que estamos configurando sea el servidor por defecto. En ese caso tendremos que, o eliminar el enlace simbolico de “default” dentro de la carpeta de los sites activados (/etc/nginx/sites/enabled/). O eliminar esa opción del fichero “default”. Tener dos host configurados como servidor por defecto da un conflicto en el servidor web.

El siguiente parametro que tendremos que modificar es la linea

1
root /var/www/html;

Estableciendo la ruta donde queremos que apunte nuestro virtual host.

1
root /var/www/mi_virtual_host;

La siguiente linea que tendremos que modificar sera la de

1
server_name _;

En esta linea especificaremos el nombre del dominio que deseamos utilizar en el virtual host

1
server_name dominio.local www.dominio.local;

Pondremos todos los dominio que desemos que responda nuestro servidor web.

Para una configuración basica ya tendriamos nuestro vistual host configurado. Solo nos queda pulsar Ctrl+X, confirmar el guardado de los cambios en nuestro fichero, y salir del editor.

Verificación de la configuración del virtual host

Una vez que tengamos nuestro fichero de configuración creado, comprobamos que los hemos hecho todo correctamente usando el siguiente comando

1
sudo nginx -t

Si recibimos una respuesta parecida a esta

1
2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nuestra configuración es correcta, y esta listos para reiniciar el servidor web.

Si recibimos cualquier otro mensaje, con algo parecido a esto.

1
nginx: configuration file /etc/nginx/nginx.conf test failed

Tenemos algun fallo en la configuración de nuestro servidor. tendremos que revisar la configuración, centrandonos en el error que acompaña al mensaje.

Una vez que tengamos el ok por parte del servidor nginx, solo nos queda resetar el servidor para que carge la nueva condiguración.

1
sudo systemctl restart nginx.service

Una vez reseteado el servidor web, ya tenemos nuestro virtual host funcionando sin problemas.

Si queremos verificar si el servidor funciona correctamente, aparte de probar a cargar la pagina,. Podemos utilizar el siguiente comando

1
sudo systemctl status nginx.conf

Donde en la linea de “active” no tendra que mostrar el siguiente mensaje si todo esta funcionando correctamente.

1
Active: active (running) since Thu 2018-05-17 13:33:58 UTC; 1h 18min ago

Como siempre, si tienes cualquier duda o problema, nu dudes en escrbirnos un comentario.

 

Configurar replicas en nuestro servidor MongoDB

Establecer las replicas en nuestro servidor de bases de datos MongoDB

MongoDB nos permite establecer unas replicas, que en caso de percance en el servidor principal, tomara el control una de estas replicas.

El numero de servidores que una instalación de mongoDB, es decir, contado el servidor principal y sus replicas tiene que ser impar. Esto Configuración de replicas en MomgoDBes debido a que la replica que de valla a utilizar se realizar por “votación”, y el que tenga más del 50% por ciento de los votos, es el que ocupara el puesto de primero. Esto no lo tengo yo muy bien entendido.

Por ello la configuración más habitual en un sistema MongoDB suele ser de 3 servidores, el principal y las dos replicas.

Configuración de las replicas en nuestro servicio.

El configurar las replicas en nuestro servidor MongoDB es muy sencillo.

Lo primero que tenemos que hacer es crear las carpetas donde se alojaran los ficheros de las bases de datos.

Para esta prueba, vamos a crear las carpetas en el propio servidor donde tenemos nuestra instalación de MongoDB.

1
2
3
4
5
6
mkdir /datos
mkdir /datos/principal
mkdir /datos/replica1
mkdir /datos/replica2
mkdir /datos/logs
sudo chown -R mongodb:mongodb /datos

Ademas de crear las carpetas donde se alojaran los ficheros de las bases de datos de cada uno de los servidores, hemos establecido a mongodb el propietario de las misma.

El siguiente paso que nos queda, es la crear las instancias de los servidores.

Configuración del servicio principal

Para el servidor principal quedaría de la siguiente manera.

1
sudo -u mongodb mongod --dbpath /datos/principal --logpath /datos/logs/principal.log --replSet servidoresMongo --smallfiles --oplogSize 128 --port 27017 --fork

La primera observación hemos ejecuta el comando bajo el usuario “mongodb”, sudo -u mongodb. Si lo hiciésemos con sudo normal, estaríamos dándole los permisos de root al proceso, se puede hacer, pero no es recomendable.

Explicación de los parámetros:

  • –dbpath: ruta donde se va ha almacenar los ficheros de las bases de datos.
  • –logpath: ruta donde queremos que se cree el fichero de log del servidor.
  • –replSet: Nombre del sistema. Todos los sistemas que pertenezcan al mismo sistema tendrá que tener el mismo replSet.
  • –smallfiles: control de los tamaños de los ficheros que componen el sistema.
  • –oplogSize: tamaño de los ficheros de log.
  • –port: Puerto donde esta a la escucha el servidor.
  • –fork: No se bloquea la sesión que inicio el mongod.
Configuración de las replicas

Para establecer los procesos de las replicas ejecutaremos el mismo comando, cambiando los parámetros de –dbpath, –logpath y –port, a los valores propios de cada proceso:

Replica 1:

1
sudo -u mongodb mongod --dbpath /datos/replica1 --logpath /datos/logs/replica1.log --replSet servidoresMongo --smallfiles --oplogSize 128 --port 27018 --fork

Replica 2:

1
sudo -u mongodb mongod --dbpath /datos/replica2 --logpath /datos/logs/replica2.log --replSet servidoresMongo --smallfiles --oplogSize 128 --port 27019 --fork

Una vez establecido los procesos que van a controlar cada uno de los servicios, entramos en la consola de mongo para configurar el uso de las replicas.

1
mongo --port 27017

Y creamos una variable con este formato para establecer los miembros del sistema.

1
2
3
4
5
6
cfg = {"_id":"nombreSistema", "members":[
{"_id":0, "host":"direccion_servidor:puerto"},
{"_id":1, "host":"direccion_servidor:puerto"},
{"_id":2, "host":"direccion_servidor:puerto"}
]
}

Para nuestro ejemplo, y suponiendo que los estamos haciendo en el propio servidor quedaría de la siguiente forma:

1
2
3
4
5
6
cfg = {"_id":"servidoresMongo", "members":[
{"_id":0, "host":"localhost:27017"},
{"_id":1, "host":"localhost:27018"},
{"_id":2, "host":"localhost:27019"}
]
}

Con la variable que acabamos de crear vamos ha cargar la configuración de las replicas en la configuración de nuestro MongoDB

rs.initiate(cfg)

Si todo ha sido correcto, una de las lineas que nos aparecerá sera un:

{ “ok” : 1 }

Verificación de nuestra configuración

Para verificar que así a sido, podemos ejecutar el siguiente comando.

rs.status()

Este nos mostrara el estado de las replicas, si están funcionando correctamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
{
"set" : "nombreSistema",
"date" : ISODate("2018-04-12T16:27:39.682Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1523550459, 1),
"t" : NumberLong(1)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1523550459, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1523550459, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1523550459, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "localhost:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 6786,
"optime" : {
"ts" : Timestamp(1523550459, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2018-04-12T16:27:39Z"),
"electionTime" : Timestamp(1523544257, 1),
"electionDate" : ISODate("2018-04-12T14:44:17Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "localhost:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6213,
"optime" : {
"ts" : Timestamp(1523550449, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1523550449, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2018-04-12T16:27:29Z"),
"optimeDurableDate" : ISODate("2018-04-12T16:27:29Z"),
"lastHeartbeat" : ISODate("2018-04-12T16:27:38.545Z"),
"lastHeartbeatRecv" : ISODate("2018-04-12T16:27:39.322Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "localhost:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "localhost:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6213,
"optime" : {
"ts" : Timestamp(1523550449, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1523550449, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2018-04-12T16:27:29Z"),
"optimeDurableDate" : ISODate("2018-04-12T16:27:29Z"),
"lastHeartbeat" : ISODate("2018-04-12T16:27:38.545Z"),
"lastHeartbeatRecv" : ISODate("2018-04-12T16:27:39.321Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "localhost:27017",
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1523550459, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1523550459, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

Si obtenemos una respuesta parecida a la de arriba, es que nuestro sistema esta funcionando correctamente.

Como de costumbre al final de los post, ya sabéis, ante cualquier duda, pues un comentario 8-))))