Hola, me llamo Eloy , y voy a explicar un poco que hice. Yo quise tener un servidor, porque la experiecia de mi padre con su primera pagina en 1996 era que tenia que meterla en un host de geocities, y que acabo perdiendo porque era de pago, ademas fue absorbida por otra compa;ia y le metian mucha propaganda, queria un control total sobre mi pagina, pero tenia que sacrificar velocidad y dinero en electricidad. Asi que me instale un servidor LEMP en un Odroid xu-4. Las paginas me las hice en nvu, porque no me gusta los nuevos editores, Nvu, es un editor visual y basico, es lo unico que necesito, se pueden hacer grandes cosas, pero a mi la estetica no me importa, lo que quiero es que funciones y tenga lo menos posible para que no se realentice. Ademas un Odroid no tiene mucha RAM, asi que tampoco tenia en mente poner Apache. Un LEMP como sabeis tiene nginx, y lo que hice fue un servidor http, nada de ftp.

Si lo quisiera mas liviano aun, ubiera instalado ubunto minimal *modo consola, pero no tengo ni idea de html ni de bash , ni nada de nada, de hecho para mi ha sido un milagro todo han sido haza;as, disculpar tengo teclado americano. Entonces al no tener entorno grafico me instale la version mate.

Estos dispositivos utilizan de disco duro una microSD, a ser posible de alta velocidad, por tanto habrá que hacer un booting, o bootear, esto, no es mas que, (previamente descargado y descomprimido el S.O a instalar) en nuestro caso, elegimos la version mate, ubuntu 18.04.1-4.14 mate odorid20181203, la version de kernel es la 4.14, pero hay otra que es la 4.4, no tengo todavia conocimientos suficientes para saber en que se diferencian las dos, pero lo importante es que funcionan tanto la una como la otra.

Para bootear la microSD se necesita descargar Win32DiskImager-droidv1.3, no se preocupen por el numero 32, tambien funciona en ordenadores de 64bits, ademas no se instala, en este caso estoy utilizando un windows 7, donde una vez descomprimido el archivo ubuntu 18.04.1-4.14 mate odorid20181203, tenemos 5GB de imagen .iso que tenemos que poner como ruta de destino la memoria micro SD en el programa win32Diskmanager, clickamos con el raton en [write].

Una vez termina, se inserta en la micro SD en nuestro Odroid.

Una vez esta todo instalado , se abre una terminal y se pone:

sudo apt-get update

(te pedirá contraseña) generalmente odroid, (luego aconsejo cambiarla)

Y todo quedara actualizado, para no poner mas sudo, puedes poner, sudo su, pero solo es valido en la terminal donde se ejecuta.


Bueno vamos a empezar a instalar el Servidor LEMP, Linux, Nginx, Maria DB PHP 7.1.

Nginx es menos pesado que Apache, recordemos, no tenemos mucha memoria RAM.

Se abre una terminal y se pone

$ sudo add-apt-repository ppa:ondrej/php

cuando termina.. esta otra

$ sudo apt-get update && sudo apt-get install php7.1-fpm

cuanto termina esta otra para cambiar la zona horaria

$ sudo pluma /etc/php/7.1/fpm/php.ini

(pluma es un editor de texto, como nano, o vi. En este caso lo que se hace es modificar manualmente el archivo para cambiar la zona horaria donde pone date.timezone, por la ubicación donde se está, se guarda, y se cierra.

Empezamos con MariaDB:

$ sudo apt-get update && sudo apt-get install mariadb-server mariadb-client php-mysql

Cuando termina, la siguiente:

$ sudo pluma /etc/mysql/conf.d/mysql.cnf

Se elimina todo el contenido que hay dentro, y se pega el siguente:

# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf

[client]
# Default is Latin1, if you need UTF-8 set this
# (also in server section)
default-character-set = utf8mb4

[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this
# (also in client section)
#
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
Se guarda y se cierra.
(finalmente se reinicia el servicio con la siguiente instruccion):
$ sudo service mysql restart

Empezamos instalando Nginx

$ sudo add-apt-repository ppa:nginx/stable

y luego, cuando termina

$ sudo apt-get update && sudo apt-get install nginx

Y cuando termina.., esto:

$ sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

y luego

$ sudo pluma /etc/nginx/sites-available/default

Se abre el editor y le pongo todo esto:

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

index index.html index.php;

server_name _;

location / {
try_files $uri $uri/ =404;
}

# This option is important for using PHP.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
}
Se guarda, y se cierra.

Se reinicia el servicio poniendo esto:

$ sudo service nginx reload

Una vez hecho esto, podemos importan con un usb una pagina que tengamos en html, a la que debemos llamar index.html, (exactamente así), y la deberemos meter la carpeta html, que esta ubicada en var/www/html/(index.html).

Si no nos deja pegar nuestro archivo html, antes de abrir la carpeta html con doble click, lo que tenemos que hacer es con el boton derecho, clickar donde diga, Open with as administrator, o Editar como administrador, y te la abre como superusuario, asi te permitira pegar o sustituir el index.html.

Por lo tanto , cerramos,la carpeta y abrimos una terminal, donde ponemos

ifconfig

ahí veremos nuestro IP local que nueStro router nos ha asignado, 192.168.1.XX

Seguidamente, abrimos nuestro navegador web, en la direccion, no en el buscador, donde suelen ir las http:…, ponemos nuestra IP local,

Cualquier ordenador de nuestra red podrá ver nuestra paguina, pero la IP local que le asgina tu router no es fija, asi que tendremos que dejarla fija desde el router, porque en configuracion de red en nuestro odroid, a pesar de dejarla fija , no pasa.

Asi que accedemos a nuestro router, y asociamos la MAC de nuestra computadora con la IP que nosotros queramos, y que no este utilizando nadie en ese momento, por ejemplo la 192.168.1.45

Luego , tenemos que irnos a PortForwarding, (apretura de puertos) tenemos que alñadir un perfil y editarlo con la IP local de nuestra maquina, 192.168.1.45, y decirle que es un Web server, automaticamente escucha el puerto 80, External port Start (80), External port End (80) ,Internal port Start (80), y Internal port End (80) y en Remote IP nada.
En Wan connection le ponemos : PVC 8/36

A partir de ahi, podras acceder con el navegador poniendo tu Ip publica del router, el 80.45.125.102 por ejemplo, pero no olvides que cambia, precisamente, lo que vamos hacer, es tratar de poner un dominio (un nombre.com) a tu web para que, aunque cambie tu IP publica del router (dado que tu IP no es fija y no se puede acceder cada 15 min conunua distinta), asociar el dominio con tu router.

Para ello, nos vamos a crear una cuenta en freednsafraid., cuando ya la tengamos, nos vamos al panel izquierdo superior, y le damos a Subdomain es decir, la secuencia quedaria asi: 1.1Me registro, 1.2 Panel izquierdo --> Subdomains --> Add Subdomain

1.3 Add a new subdomain ) creamos nuestro subdominio, por ejemplo, pacopicapiedra, y el dominio , nos viene impuesto, yo cogí mooo.com.
Elegimos el tipo A

Quedando pacopicapiedra.mooo.com, nos vamos a Dynamic DNS o (DDNS), pinchamos en URL.
Nos dira la direccion IP nuestra, pero si nos fijamos, arriva , en la direccion web, despues de ? Copiamos ese código, llamado hashkey.

Nos vamos a nuestro router, y accedemos a la DDNS (Dynamic DNS), creamos un perfil y ponemos freednsafraid, nuestro nombre pacopicapiedra.mooo.com y el hashkey, ya lo tenemos.

Otra opcion es descargarse un Script, pero no me funcionó.


El Script seria:

Creo el script de la siguiente manera: sudo nano /etc/cron.d/freedns_update.sh, lo abro y pego esto.

#!/bin/sh # freedns_update.sh: Update the public IP on freedns.afraid.org only if it has changed. ## Place this script in the cron's job directory /etc/cron.d and assign the proper permissions ## and owner ## sudo chmod 500 /etc/cron.d/freedns_update.sh ## sudo chown root:root /etc/cron.d/freedns_update.sh ## Add to /etc/crontab to execute on reboot and every 5 minutes ## Edit /etc/crontab and append these two lines: ## @reboot root /etc/cron.d/freedns_update.sh >/dev/null ## */5 * * * * root /etc/cron.d/freedns_update.sh >/dev/null #Use your own values DOMAIN=pacopicapiedra.mooo.com HASHKEY=todo lo que va despues del signo? de la direccion URL del enlace del subdominio= UPDATE_URL="http://freedns.afraid.org/dynamic/update.php?${HASHKEY}" current_ip=$(wget -q --output-document - http://checkip.dyndns.org | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}') registered_ip=$(ping -qn -c 1 $DOMAIN | head -n 1 | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}') if [ "${current_ip}" != "${registered_ip}" ]; then wget -q --read-timeout=0.0 --waitretry=5 --tries=400 --output-document /dev/null $UPDATE_URL if [ $? -eq 0 ]; then echo "$(date +"%b %_d %T") $(hostname) $0: IP address updated on freedns.afraid.org: new IP '${current_ip}', old IP '${registered_ip}'" >> /var/log/messages else echo "$(date +"%b %_d %T") $(hostname) $0: ERROR IP address could not be updated on freedns.afraid.org: current IP '${current_ip}', registered IP '${registered_ip}'" >> /var/log/messages fi fi

EN la web de freedns Me voy al panel izquierdo -> Dynamic DNS, me voy abajo, y en el subdominio esta Direct URL, le pincho , obtengo la url, y a partir del signo ? de la direccion, obtengo el hask key que la pongo despues de HASHKEY=xxxxxxxxxx

Salvo y cierro.

* Dale permisos al script.

sudo chmod 500 /etc/cron.d/freedns_update.sh
sudo chown root:root /etc/cron.d/freedns_update.sh
para darle permisos a la carpeta.


* Programa una tarea para que el script se ejecute automaticamente.

Abro crontab para programar una tarea:

sudo nano /etc/crontab

En el final del archivo añades 2 nuevas lineas:

@reboot root /etc/cron.d/freedns_update.sh >/dev/null */5 * * * * root /etc/cron.d/freedns_update.sh >/dev/null

Guardas y cierras


Quedando asi:

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have username fields,

# that none of the other crontabs do.

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin



# m h dom mon dow user command

17 * * * * root cd / && run-parts --report /etc/cron.hourly

25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

#

@reboot root /etc/cron.d/freedns_update.sh >/dev/null */5 * * * * root

/etc/cron.d/freedns_update.sh >/dev/null

Salvo

Reinicias cron para que se ejecute el script por primera vez.


Restablezco el servicio con

sudo /etc/init.d/cron restart

Me sale esto por la terminal

odroid@odroid:~$ sudo /etc/init.d/cron restart

[sudo] password for odroid:

[ ok ] Restarting cron (via systemctl): cron.service.

odroid@odroid:~$

Pero ya os digo, el Script no me funcionó y tuve que hacerlo desde mi router para que me funcionara, pero valió la pena.


Ahora tengo mi pagina web en mi servidor y publicada en internet gratuitamente.

repositoryofmechanisms.mooo.com

EL problema que tengo ahora es que quiero mostrar archivos, y lo he intentado, a traves de links de mi pagina web a archivos locales referenciando la ruta de acceso, y no he podido. Tambien he intentado programar en html para visualizar videos en el navegador, pero ello implica generar un html por video, con el nombre del video y su ruta. Tambien he intentado filezilla con un servidor ftp, pero la opcion server solo esta para windows.

Asi que he pensado en poner achivos de esta manera, por ejemplo esto es un sitio en apache

https://www.losgenoveses.net/casogurtel/

He visitado las librerias de nginx y me hablan del autoindex

Hay mas directivas

location /nombre_de_la_carpeta {
autoindex on;
autoindex_exact_size;
autoindex_localtime;
}


La directiva autoindex_exact_size por defecto muestra el tamaño del fichero en bytes por lo que activándola nos redondeará su tamaño a Kb, Mb o Gb.

La directiva autoindex_localtime esta desactivada por defecto y muestra la fecha local en formato UTC.

supongo que asi me quedara mas asi:

https://blog.artegrafico.net/wp-content/uploads/2019/01/listing-directory.png


Es decir he metido el autoindex on; en esta parte del codigo del archivo .conf del servidor nginx


server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

index index.html index.php;

server_name _;

location /data {
autoindex on;
}

# This option is important for using PHP.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;


Como veis , mi configuracion es bastante austera, pero no he logrado que me vaya el autoindex para la carpeta data ubicada en el sitio de la carpeta www/html.

Sabrias decirme como puedo mostrar mis archivos , para que se vean asi?

https://blog.artegrafico.net/wp-content/uploads/2019/01/listing-directory.png

Gracias.