Durante toda mi vida he perdido utilizado mucho tiempo probando incontables hostings: gratuitos, de pago, compartidos, dedicados, gestionados...
La verdad es que es algo que me gusta: trastear y montar webs, blogs o servicios para luego borrarlos o dejarlos en el olvido.

Después de probar tantas cosas distintas, me quedo con Scaleway para el servidor y Namesilo1 para los dominios.

Puedes usar el código notes-jorgeff a la hora de comprar un dominio en namesilo para tener un descuento de $1.00

Si eres un usuario avanzado, puedes visitar esas webs y dejar de leer aquí pues lo que viene a continuación es una guía básica para montar nuestro propio servidor web con nombre de dominio desde 32€ al año (2,67€ al mes).

Cosas a tener en cuenta al contratar un hosting o servidor cloud

  • Las empresas de hosting suelen ofrecer precios de infarto el primer año, pero después es cuando realmente viene el infarto cuando de 1€ al mes pasas a pagar 9€ o más.
  • Aunque puede tener inconvenientes, no hace falta que compres el dominio en el mismo sitio que el hosting.
  • Si piensas que tu objetivo es crecer y tener cada vez más tráfico, lo mejor es que busques un plan que te permita aumentar la capacidad del servidor fácilmente.
  • Esta guía te enseñará a montar tu propio servidor: tendrás que configurarlo tú, y si rompes algo, tendrás que arreglarlo tú. Aun así, la satisfacción de hacerlo uno mismo y por mucho menos dinero, compensa.

Pasos a seguir para montar un servidor web con nombre de dominio

A continuación, voy a explicar como montar un servidor en Scaleway y asignar un nombre de dominio desde Namesilo1 pero puedes seguir la guía casi en su totalidad para cualquier otro proveedor.

Crear la máquina virtual

En namesilo se llaman instances. Podemos crear una desde 1,99€ al mes:

file

Actualmente tengo este blog y otras webs y blogs alojadas en una máquina ARM por 2,99€:

file

Puedes juzgar por ti mismo/a si la velocidad es la correcta para tí.

De estos 3€, uno es por la máquina, otro es por el disco duro y el otro euro es por la IP dedicada. Todo se paga por horas hasta llegar a un límite de 500 horas al mes en el que se congelará el precio. Es decir: si en algún momento decides apagar el servidor, pagarás sólo por el tiempo que haya estado encendido. Sin embargo, seguirás pagando por el disco duro y por la IP asignada. Sea como sea, nunca pagarás más del precio que te mostraron al principio: si eliges la máquina de 2,99€, como máximo pagarás 2,99€ al mes.

Conectarse por primera vez al servidor

Para conectarte por primera vez, tendrás que ir a credentials dentro de tu perfil de Scaleway y añadir una clave pública.
Puedes generar las claves con PuTTYgen. Recuerda que la clave privada es la que usarás para conectarte y la pública es la que configurarás en tu perfil de Scaleway. La clave debe ser RSA de 4096 bits.
Otra forma de crear la clave si usas un terminal es escribiendo:

ssh-keygen -t rsa -b 4096 -C "usuario@email.com"

Una vez la hayas añadido a tu perfil, debes iniciar la máquina (o reiniciarla si ya está encendida).
Una vez iniciada, puedes usar el propio PuTTY para conectarte. Recuerda añadir la clave privada en SSH > Auth:
file

Crear un usuario y añadirlo al grupo sudoers

Al principio sólo existe el usuario root. No es una buena práctica usar este usuario para gestionar el servidor.
Para añadir un nuevo usuario, usamos el siguiente comando:

adduser nombredelusuario

Para que este usuario tenga permisos administrativos, lo añadiremos al grupo sudoers:

usermod -aG sudo nombredelusuario

Instalar servidor web y de base de datos

Lo básico para que podamos alojar y publicar una página web es instalar un servidor web que escuche las peticiones y sirva la web.
En esta guía vamos a instalar un WordPress, por lo que también necesitaremos PHP y un servidor de base de datos.

Lo primero es actualizar la base de datos de los repositorios.

sudo apt update

Opcional: actualizar los paquetes instalados:

sudo apt upgrade

Servidor web: NGINX

El servidor más fácil de condigurar es Apache, pero para WordPress, es más recomendable NGINX.

sudo apt install nginx

Ahora, si escribimos la IP pública de nuestro servidor en el navegador, debería aparecer una página diciéndonos que hemos instalado NGINX:

file

Este archivo se encuentra en /var/www/html y se puede editar si así lo deseamos.

Servidor de base de datos: MySQL

Vamos a usar MySQL. Una alternativa sería mariadb.

sudo apt install mysql-server mysql-client

Atención: a partir de mysql 5.7 el instalador puede solicitarte que introduzcas una contraseña para el usuario root. Si no te lo pide, habrá creado una contraseña aleatoria. Para ver esta contraseña, debes mirar el log de MySQL:

sudo cat /var/log/mysqld.log

Después, usaremos el siguiente comando para cambiar la contraseña y alguna que otra opción:

sudo mysql_secure_installation

PHP 7.3

En el momento de escribir esta entrada, la última versión de PHP es la 7.3.
Seguramente necesitemos añadir un repositorio para instalarla:

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

Instalamos PHP 7.3 y varias extensiones comunes con:

sudo apt install php7.3-cli php7.3-cgi php7.3-fpm
sudo apt install php-mysql php-curl php-gd php-mbstring php-mcrypt php-xml php-xmlrpc

Después de esto, tendremos que reiniciar NGINX para que se activen:

sudo service nginx restart

Extra: phpMyAdmin

phpMyAdmin es un administrador web para las bases de datos.

sudo apt install phpmyadmin

Una vez instalado, para acceder a través del navegador, hay que crear un enlace simbólico en el directorio web:

sudo ln -s /usr/share/phpmyadmin /var/www/html

Si queremos ocultar la ruta con la que entramos a phpMyAdmin, podemos cambiar el nombre de ese enlace simbólico:

cd /var/www/html/
sudo mv phpmyadmin noentresaqui

Crear base de datos para el WordPress

WordPress necesita una base de datos para funcionar. Podemos crearla, junto con un usuario desde phpMyAdmin o desde la consola con:

mysql -u root -p
CREATE DATABASE nombredelabasededatos;

Comprar un dominio y apuntarlo a nuestro servidor

Recuerda que puedes usar el código notes-jorgeff a la hora de comprar un dominio en namesilo para tener un descuento de $1.00

Ahora debemos ir a Namesilo1 y registrar un dominio.
Una vez registrado, vamos a Manage DNS1 y añadimos dos registros de tipo A con la IP pública de nuestro servidor:

file

Namesilo es bastante rápido actualizando sus DNS, pero en el peor de los casos pueden tardar en actualizarse entre 15 minutos y 24 horas.

Crear un virtual host para recibir el tráfico de ese dominio

A partir de ahora, cuando escribas tu nuevo dominio en un navegador, te redigirá a tu servidor. Puesto que tienes un servidor para ti solito/a lo lógico es prepararlo para poder alojar diferentes webs. Para ello, vamos a crear un directorio para nuestra web y un archivo de configuración (virtualhost) para que NGINX sepa qué página servir cuando los visitantes ingresen nuestro dominio.

Primero creamos un directorio:

sudo mkdir -p /var/www/nuestrodominio.com/html

Después, creamos el virtualhost:

sudo nano /etc/nginx/sites-available/nuestrodominio.com.conf

El contenido del archivo será algo así:

# Upstream to abstract backend connection(s) for php
upstream php {
        server unix:/run/php/php7.3-fpm.sock;
}

server {
        ## Your website name goes here.
        server_name nuestrodominio.com www.nuestrodominio.com;
        ## Your only path reference.
        root /var/www/nuestrodominio.com/html;
        ## This should be in your http block and if it is, it's not needed here.
        index index.php;
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }
        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?$args;
        }
        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Después lo activamos y reiniciamos NGINX:

sudo ln -s /etc/nginx/sites-available/nuestrodominio.com.conf /etc/nginx/sites-enabled/nuestrodominio.com.conf
sudo service nginx restart

Encriptar el tráfico de nuestra web con SSL

Esto es algo muy importante a todos los niveles. Principalmente por seguridad, ya que todo el tráfico entre el visitante y la web irá cifrado, pero también por SEO.
Nota: para que esto funcione, nuestro dominio ya debe estar apuntando a nuestro servidor.
Vamos a instalar certbot. Nos creará y configurará un certificado SSL gratuito que durará 90 días y se renovará automáticamente:

sudo apt install software-properties-common python-software-properties
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install python-certbot-nginx

Después, le pedimos que cree y configure los certificados para nuestro dominio:

sudo certbot --nginx -d nuestrodominio.com www.nuestrodominio.com

Aceptamos, le decimos que sí, y seleccionamos la opción 2 para que redirija el tráfico de http a https
Debemos reiniciar NGINX para aplicar los cambios:

sudo service nginx restart

Configurar permisos

Tanto Apache como NGINX usan el usuario www-data y el grupo www-data.
Lo normal es que se configuren permisos 755 para los directorios y 644 para los archivos. El problema es que haciendo esto, no podremos modificar los archivos con nuestro usuario.
Por lo tanto, vamos a añadir nuestro usuario al grupo www-data y a configurar permisos 775 y 664. Además, estableceremos como propietario a www-data.

sudo usermod -a -G www-data $USER
sudo find /var/www -type d -print0 | sudo xargs -0 chmod 775
sudo find /var/www -type f -print0 | sudo xargs -0 chmod 664
sudo chown -R www-data:www-data /var/www

Tip2: puedes crear un alias para ejecutar esto siempre que sea necesario. Para crear el alias, puedes usar los siguientes comandos:

echo "alias www='sudo find /var/www -type d -print0 | sudo xargs -0 chmod 775 && sudo find /var/www -type f -print0 | sudo xargs -0 chmod 664 && sudo chown -R www-data:www-data /var/www'" >> ~/.bash_aliases
source ~/.bash_aliases

Ahora siempre que quieras establecer los permisos adecuados en www, sólo tendrás que escribir www

Instalar WordPress

Descargamos la última versión y la descomprimimos en la carpeta asignada a nuestro dominio:

curl https://es.wordpress.org/latest-es_ES.tar.gz | tar xz -C /var/www/nuestrodominio.com/html --strip-components=1

¡Ahora ya podremos entrar en nuestrodominio.com y seguir los pasos para instalar nuestro WordPress!

Extra: activar http2

http2 es la última versión del protocolo htt. No puede ser más fácil de activar en NGINX. Editamos el virtualhost (que estará algo modificado por certbot)

sudo nano /etc/nginx/sites-available/nuestrodominio.com.conf

Buscamos la siguiente línea y añadimos http2:

listen 443 ssl http2; # managed by Certbot

Ahora sólo falta reiniciar NGINX una vez más para aplicar los cambios:

sudo service nginx restart

¡Y se acabó! Espero que te haya sido sencillo seguir esta pequeña guía y disfrutes de tu nuevo servidor.
Por favor, escribe tus dudas, quejas o mejoras en los comentarios. ¡Si lo deseas puedes poner el enlace a tu nueva y flamante web!


  1. El enlace a namesilo es un enlace de afiliado. Si no quieres que me lleve comisión por la compra de un dominio entra a través de namesilo.com 

  2. Usar este alias sobreescribirá cualquier permiso dentro de /var/www. Úsalo con cuidado. 

Última modificación: 04/08/2019

Autor

Comentarios

Mis dieses, genial articulo hache.

¿Tienes algo que decir?

Tu dirección de email no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.