Volver

Servidor WEB

con

Orange PI y NGINX


En el anterior artículo había realizado y probado un servidor DELL R200.
El modelo DELL R200  tiene el procesador Xeon X3360 de 4 núcleos. El servidor está configurado con dos discos 250G en modo RAID, controlados por una tarjeta.
El resultado era bueno, pero el consumo 77W era alto debido a su potencia. Solo el coste de electricidad por año llegaba a 90€.
Para mantener un servicio comercial de varias páginas web es ideal, pero para un uso particular resulta un tanto costoso.
Hace años que había realizado un estudio de Orange PI PC ,es un clónico de la Raspberry Pi, pero algo mas barato y mas potente (en su día).
En este artículo realizo un servidor WEB con esta placa. Todos los pasos se pueden realizar en una Raspberry Pi, pero esto no lo he probado.
He de confesar que todos los pasos los realicé antes en un ordenador normal (PC) con Debian 9, y luego los he reproducido en la Orange PI PC con Debian 8, funcionando a la perfección.

Lo primero es ir a la página http://www.orangepi.org/downloadresources/ y bajar la versión de Debian que corresponda a vuestra placa, en mi caso (Orange Pi Pc)Debian XFCE Desktop .
Esta imagen está comprimida, y tenemos dos opciones para instalarla en una SD en linux.
La fácil es utilizar el programa gnome-disks desde root.
La segunda opción es descomprimir la imagen.gz que no creará un archivo con extensión .img.
Ahora instalamos la imagen.img a la SD con la orden:
    dd if=OrangePI_Jessie_Xdfce.img of=/dev/sdx bs=1M oflag=direct
donde /dev/sdx es el lugar donde se encuentra la SD. Para saber donde se encuentra la SD se teclea  fdisk -l y nos mostrará los diferentes discos y su localización.
Todo esto lo debemos hacer siendo root, tener paciencia, tarda tiempo en escribir la SD dependiendo de la clase que sea (4) (10).
En esta página del foro se puede encontrar algo en español:
http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=33
En ingles:
http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=342
Una vez instalada la imagen en la SD nos creará dos particiones:
BOOT donde se instalan las imágenes uImage del kernel y los script.bin (configuraciones)
Linux donde se encuentra el propio sistema operativo.
Antes debíamos de seleccionar el script.bin apropiado a nuestra placa, ahora ya viene instalado el script apropiado y no hay que hacer nada.

Todo preparado para el primer arranque, hdmi conectado a la Tv, SD con el sistema operativo instalado, teclado y ratón conectado al USB ,y red conectada. Conectamos la alimentación y esperamos como salen los primeros caracteres de arranque de linux.
Nos encontramos ante la petición de usuario y contraseña. Existen dos usuarios ya creados.
orangepi    contraseña: orangepi
root        contraseña: orangepi
Entramos con el usuario orangepi y nos encontramos con un escritorio Xfce.
Lo primero es cambiar la configuración del teclado, entramos en Settings->Keyboard , cambiamos la localización del teclado.

Si queremos cambiar la configuración del teclado en los terminales gráficos, tecleamos como root, la orden:
dpkg-reconfigure locales
Aquí me he encontrado que no funciona el cambio de locales, yo lo he solucionado como indica la página:
    https://enavas.blogspot.com/2015/01/configurar-locales-y-eliminar-el-aviso.html
Yo he editado el fichero  /etc/default/locale y lo he puesto de la siguiente forma:

LANG=es_ES.UTF-8
LANGUAGE=es_ES.ISO-8859-15@euro
LC_ALL=es_ES.UTF-8
LC_CTYPE=es_ES.UTF-8
LC_MESSAGES=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_PAPER=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_MONETARY=es_ES.UTF-8
LC_NUMERIC=es_ES.UTF-8

De todas formas puedes manejar el teclado si sabes como está el teclado americano.

Lo primero y mas conveniente es cambiar las contraseñas de root y orangepi con la orden passwd usuario.
El usuario seta es desde donde voy a trabajar, este usuario entrara automáticamente en forma gráfica, se podrá manejar a distancia con ssh, VNC y ftp. Vamos que una vez configurado todo, no hace falta tener ni teclado, ratón y monitor en la placa Orange PI.
Creamos el  usuario con la orden adduser seta , y  colocamos la contraseña con passwd seta.
Para que inicie automáticamente un usuario, debemos configurar el gestor de arranque  lightdm .
Entramos en consola como root  y editamos el fichero de configuración con la orden:
pluma /etc/lightdm/lightdm.conf
y editamos las líneas siguientes:
autologin-user=seta
autologin-user-timeout=20
Donde seta es el usuario que se inicia automáticamente, y 20 son los segundos que tarda en iniciarse automáticamente.

Debemos configurar la red para que sea la IP estática, en nuestro caso le vamos a dar la IP 192.168.1.70 .


Veremos que cuando entramos en la consola como root o orangepi , nos salda la opción de poder utilizar toda la SD para el sistema. Cuando se instala la imagen en la SD se crea una partición de solo 2 o 3 Gb, si tenemos una SD de 16Gb desaprovecharíamos 13Gb, con la orden sudo fs_resize ,se redimensiona la partición para utilizar toda la SD.

Como pienso que instalar un servidor de páginas dinámicas en esta placa es un tanto pretencioso, no digo que no funcione, no he añadido los paquetes PHP, ni MySQL. El servidor solo servirá páginas estáticas para ser mas rápido.

Con el instalador de aplicaciones Synaptic, o con la orden apt install paquete,  instalamos los paquetes:
ssh    - acceso remoto a un servidor por medio de un canal seguro.
vsftpd    -Servidor ftp
x11vnc    -Servidor VNC
nginx    -Servidor WEB, es algo mas ligero que apache.
Además a mi me gusta instalar: dillo, xfe.

Otra cosa que me gusta hacer es instalar un servidor de escritorios remotos. Con el instalador de aplicaciones Synaptic instalamos x11vnc. Ahora  desde consola indicamos la contraseña del servidor de escritorio remoto, x11vnc  -storepasswd .
Para lanzar el escritorio remoto desde consola , x11vnc -forever -usepw -display :0 -ultrafilexfer


Ahora vamos a configurar el servidor ftp.
Editamos el fichero /etc/vsftpd.conf y colocamos esto:

listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log    
xferlog_std_format=YES
xferlog_file=/var/log/xfer.log
dual_log_enable=YES
pam_service_name=vsftpd
ssl_enable=NO

Con esto enjaulamos a todos lo usuarios en su propio directorio.
Editamos el fichero /etc/vsftpd.chroot_list y colocamos esto: seta
Indicamos que el único usuario que no estará enjaulado será seta.

Para que las configuraciones se actualicen deberemos reiniciar la placa o actualizarlas una por una, mejor reiniciamos la placa.
Ahora mismo ya no nos hace falta ni ratón, teclado y monitor.
Podremos manejar la placa Orange PI de forma remota, lo podéis comprobar desde otro PC.

La forma de entrar desde otro ordenador a la placa Orange PI mediante ssh es:
ssh seta@192.168.1.70
También existe la posibilidad de ejecutar un programa gráfico con ssh,  ejemplo:
ssh -X -p 22 seta@192.168.1.70 pluma
Es una forma bastante más rápida que utilizar  VNC.

Para transferir ficheros utilizamos ftp, cualquier programa como gftp o Filezilla sirve.
Recordar que solo hemos autorizado la usuario seta a moverse por todos los directorios de la placa Orange PI.

También podemos entrar mediante VNC a manejar el escritorio del usuario seta.

Ya nos toca empezar ha configurar todos los parámetros del servidor WEB, que es el objetivo de este artículo.
Desde cualquier ordenador de nuestra red interna, teclearemos en nuestro navegador la dirección 192.168.1.70 .
Si todo fue bien nos aparecerá la página por defecto del servidor NGINX, el fichero es : /var/www/html/index.nginx-debian.html .
Este fichero será el de por defecto, si no encuentra el fichero index.html.
Normalmente esto serviría si solo tenemos un usuario, pero como yo suelo crear varías páginas que gestionan diferentes usuarios, debo hacer diferentes cambios.
Lo primero es crear un directorio www en el directorio de cada usuario, donde se alojará la página web de cada usuario.
mkdir   /home/seta/www
chown  -R seta:seta    /home/seta/www
chmod  u+rwx      /home/seta/www
chmod  ugo+rx      /home/seta/www
Hemos creado el directorio ww y dado todos los permisos para el buen funcionamiento.

Le damos as seta los permisos para editar todos los fichero web
chown -R seta:seta   /var/www/html
chmod  ugo+rx    /var/www/html

Como root creamos otro directorio:
mkdir  /var/www/html/seta
chown -R seta:seta   /var/www/html/seta
chmod  ugo+rx    /var/www/html/seta

Ahora hacemos un montaje, no enlace, donde los los ficheros que se encuentran en /home/seta/www , el servidor pensará que están en /var/www/html/seta.
echo "/home/seta/www     /var/www/html/seta   none    bind    0    0" >> /etc/fstab
Desde el navegador tecleamos la dirección 192.168.1.70/seta , y nos aparecerá la página almacenada en el directorio /home/seta/www.
Esto es muy útil, podemos crear usuarios enjaulándolos en su directorio www y que puedan tener su página. Ejemplo: http://seta43.duckdns.org/usuario

En mi caso he creado un script de comandos bash donde se crean usuarios con su pagina web desde 4 estilos diferentes en menos de 7 segundos. Los usuarios creados mediante este método están enjaulados en su propio directorio. Además tienen su directorio www, donde alojan su página que pueden actualizar mediante ftp.
Recordar que cuando subáis ficheros a vuestra página, estar seguro que ponéis los permisos adecuados para que se puedan leer,  a mi me paso, hasta que me di cuenta.

Si queréis ver mi página funcionando está en:
http://seta43.duckdns.org

Existe una utilidad en Apache tools para testear el servidor.
Con la orden: ab -c 5 -t 60 http://192.168.1.70/  chequeamos la velocidad del servidor WEB.
Petición desde HP A6_5400 hacia ORANGE PI
Petición desde HP A6_5400 hacia DELL R200
Server Software:        nginx/1.6.2
Server Hostname:        192.168.1.70
Server Port:            80

Document Path:          /
Document Length:        813 bytes

Concurrency Level:      5
Time taken for tests:   21.551 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      52250000 bytes
HTML transferred:       40650000 bytes
Requests per second:    2320.07 [#/sec] (mean)
Time per request:       2.155 [ms] (mean)
Time per request:       0.431 [ms] (mean, across all concurrent requests)
Transfer rate:          2367.65 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       4
Processing:     0    2   0.7      2      25
Waiting:        0    2   0.7      2      25
Total:          1    2   0.6      2      26
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.60
Server Port:            80

Document Path:          /
Document Length:        1112 bytes

Concurrency Level:      5
Time taken for tests:   4.606 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      69200000 bytes
HTML transferred:       55600000 bytes
Requests per second:    10855.19 [#/sec] (mean)
Time per request:       0.461 [ms] (mean)
Time per request:       0.092 [ms] (mean, across all concurrent requests)
Transfer rate:          14671.47 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       4
Processing:     0    0   0.1      0       4
Waiting:        0    0   0.1      0       4
Total:          0    0   0.1      0       4

El consumo del DELL R200 es de 77W con un coste anual de 90€
El consumo de la placa Orange PI es de 1,7W con un coste anual de 2,5€.

Como podéis observar el coste anual es mínimo, es una solución muy valida para tener unas pocas páginas sin demasiado tráfico.
Me ha sorprendido lo bien que responde a las peticiones desde internet, funciona bastante bien.

Como es tan pequeña la placa Orange PI la tengo metida debajo de la mesa, no mete ruido, consume poco, y se calienta poco (yo tengo la caja abierta para que no se acumule el calor).
Recordar que para que se pueda ver vuestro servidor desde internet, se tiene que configurar el router para que redireccione los puertos a la placa Orange PI, de la misma forma pasa con el ftp.

Si ahora intentas acceder a la página web desde internet, fuera de nuestra red, veremos que ya funciona nuestro servidor WEB.
Para poder verse a uno mismo como si estuviésemos en el exterior, debemos emplear un truco.
Existe una página web que permite hacer esto: http://anonymouse.org/anonwww.html
Aunque inserta un pequeño anuncio funciona perfectamente.
Otra forma utilizar nuestro móvil con conexión a internet, pero claro gastaremos datos.

Para los que no tengan dominio y quieran experimentar, yo utilizo un subdominio tipo NO-IP.
En mi caso es  http://seta43.duckdns.org/
En la página http://www.duckdns.org/ podéis conseguir el vuestro, funciona bastante bien, además te explican como instalarlo en vuestro servidor para que se actualice la dirección IP dinámica que ha dado el operador.



Saludos
Juan Galaz

Bibliografía:

servi.html
wpa.html
wpb.html
orange.html
https://orangepiweb.es/
http://www.orangepi.org/orangepibbsen/forum.php?gid=38