Abr202015

Como crear un blog WordPress en DigitalOcean

Introducción

Tras años sufriendo las continuas caídas y bajas tasas de transferencia de nuestro servidor compartido de 1and1, hemos decidido aventurarnos a probar otro proveedor de bajo coste buscando, no mas prestaciones sino mas estabilidad a un precio similar.

Hemos elegido DigitalOcean como distribuidor por su simplicidad y su bajo coste. Dispone de planes desde 5$ al mes que garantizan unos recursos muy básicos pero suficientes para nuestro propósito, además siempre podemos ampliar o reducir las características de nuestro servidor a golpe de clic, pues son servidores en la nube.

Además la facturación, como en casi todos los servidores en la nube, es por horas, por lo que solo pagas por lo que usas. Puedes ampliar las características de tu servidor para un periodo de mucha carga y volver a reducirlo cuando pase ese periodo y solo pagas la tarifa del servidor ampliado por las horas que lo hayas usado.

Creando nuestro “droplet”

Para empezar, necesitaremos una cuenta en DigitalOcean, para ello podemos aprovechar su programa de “referral” y obtener 10$ gratis con los que poder hacer las primeras pruebas. Con ese programa, un usuario de DigitalOcean comparte su url de “referral”, de modo que cada nuevo cliente que use esa url para registrase recibe 10$ gratis, y si ese nuevo cliente se gasta 25$ en su alojamiento le regalan esos 25$ al “referral”, por lo que todos salen ganando.

Si quieres seguir este tutorial sin gastar ni un céntimo, puedes usar nuestro “referral”: https://www.digitalocean.com/?refcode=a5dafd7b12aa.

Una vez registrados, toca crear el “droplet” donde alojaremos nuestra web, para ello solo hay que seguir los siguientes pasos:

Paso 1: Nombre y selección del plan


Droplet_1

Paso 2: Región y otros ajustes

Droplet_2

Paso 3: Imagen base

Droplet_3

Paso 4: Paquete de programas preinstalados

Droplet_4

Último paso: Clave SSH

Droplet_5

Configuración de DNS

Ahora hay que asociar nuestra maquina al dominio que queramos usar para la web, no es necesario registrar ni trasladar el dominio a DigitalOcean, tan solo vamos a la pestaña “DNS” del panel de control, escribimos el nombre de dominio y seleccionas el “droplet” al que queremos asociarlo. Después podremos ver cuales son los servidores DNS que se nos han asignado y asignarle esos servidores en el panel de control de nuestro dominio.

Ejemplo de configuración de DNS en DigitalOcean

Droplet_6

Configuración básica del “droplet”

Después de crear un nuevo servidor, tendremos que hacer ciertos ajustes antes de continuar. Dichos ajustes incrementarán la seguridad  y usabilidad de nuestro servidor.

Comenzamos accediendo a nuestro servidor:

$ ssh root@IP_DEL_SERVIDOR

Como creamos y configuramos una clave SSH para nuestro servidor, no nos va a pedir contraseña para acceder, pero es importante establecer una nueva y lo mas fuerte posible:

# passwd

Creamos nuestro usuario y le asignamos algunos permisos:

# adduser USUARIO
# gpasswd -a USUARIO sudo
# usermod -a -G www-data USUARIO

Salimos de la sesión con root y entramos con nuestro usuario:

# exit
$ ssh USUARIO@IP_DEL_SERVIDOR

Copiamos la clave SSH de root al nuevo usuario para poder seguir accediendo sin contraseña.

$ mkdir .ssh
$ chmod 700 .ssh
$ sudo cp /root/.ssh/authorized_keys .ssh/
$ sudo chown USUARIO:USUARIO .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

Ahora toca configurar el servidor SSH, para ello editamos el siguiente archivo:

# nano /etc/ssh/sshd_config

Cambiamos el puerto por defecto del servidor, por ejemplo:

Port 2234

Desactivamos el acceso como root y el acceso con contraseña, solo con claves SSH.

PermitRootLogin no
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

Guardamos y salimos pulsando CTRL-X, luego Y, y luego luego ENTER.

Reiniciamos el servidor SSH:

# service ssh restart

Cerramos sesión y volvemos a entrar por el nuevo puerto:

# exit
$ ssh USUARIO@IP_DEL_SERVIDOR -p 2234

Activamos el firewall y abrimos solo los puertos que necesitamos. Primero el de SSH:

$ sudo ufw allow 2234/tcp

Y después el HTTP y SSL/TLS:

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Si quieres instalar un servidor SMTP, puedes abrir desde ahora el puerto 25:

$ sudo ufw allow 25/tcp

Ahora que ya hemos configurado los puertos básicos, activamos el firewall:

$ sudo ufw enable

Configuramos la zona horaria y activamos el NTP:

$ sudo dpkg-reconfigure tzdata
$ sudo apt-get update
$ sudo apt-get install ntp

Para mejorar el rendimiento de nuestro servidor, vamos a crear un archivo SWAP para que sea usado en caso de que no tengamos memoria RAM suficiente:

$ sudo fallocate -l 512M /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'

Configuración del servidor web

Ahora que tenemos el servidor en un estado aceptable, podemos configurar nuestro servidor web.

Creamos la estructura de directorios donde montaremos la web:

$ sudo mkdir -p /var/www/EJEMPLO.COM/html
$ sudo chown -R www-data:www-data /var/www/EJEMPLO.COM/html
$ sudo chmod -R 775 /var/www

Ahora creamos configuramos Nginx para nuestro dominio y lo editamos:

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/EJEMPLO.COM
$ sudo nano /etc/nginx/sites-available/EJEMPLO.COM

Modificamos el contenido de dicho fichero para que sea análogo a este:

# Cache
#fastcgi_cache_path /var/cache/nginx/EJEMPLO.COM levels=1:2 keys_zone=EJEMPLO.COM:10m max_size=128m inactive=1h;

#server {
# server_name "~^www\.(.*)$" ;
# return 301 $scheme://$1$request_uri ;
#}

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

 root /var/www/EJEMPLO.COM/html;
 index index.php index.html index.htm;

 server_name EJEMPLO.COM www.EJEMPLO.COM;

 location / {
 try_files $uri $uri/ /index.php?q=$uri&$args;
 }

 error_page 404 /404.html;
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /usr/share/nginx/html;
 }

 location ~ \.php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_index index.php;
 #fastcgi_cache EJEMPLO.COM;
 #fastcgi_cache_key $scheme$host$request_uri$request_method;
 #fastcgi_cache_valid 200 301 302 5s;
 #fastcgi_cache_use_stale updating error timeout invalid_header http_500;
 include fastcgi_params;
 }

gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/x-javascript text/xml text/css application/xml;

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
 expires 1w;
 add_header Pragma public;
 add_header Cache-Control "public";
 try_files $uri =404;
}

}

Redirigir el subdominio www (opcional)

Es muy probable que queramos que las visitas que lleguen a través del subdominio www sean redirigidas al dominio principal, sin las tres uvedobles. Para ello, solo hay que descomentar las líneas marcadas arriba en verde y borrar el fragmento marcado en naranja.

Activar cache (opcional)

De forma opcional podemos habilitar la cache en nuestro servidor web y aumentar así la capacidad de responder a grandes cantidades de visitas durante periodos de tiempo muy cortos. Para ello tan solo hay que descomentar las líneas marcadas arriba en azul y crear el directorio para que se almacene la cache:

$ sudo mkdir /var/cache/nginx
$ sudo chown -R www-data:root /var/cache/nginx

Activar el sitio que acabamos de crear

$ sudo ln -s /etc/nginx/sites-available/EJEMPLO.COM /etc/nginx/sites-enabled/

Configuración del servidor MySQL

Usamos este comando para obtener el mensaje del día, donde encontraremos la clave de root para nuestro servidor de bases de datos:

$ cat /etc/motd.tail

Accedemos a la terminal del gestor de bases de datos:

$ mysql -u root -p

Creamos la base de datos  y el usuario  para nuestro “WordPress”:

CREATE DATABASE NOMBRE_DB;
CREATE USER USUARIO_DB_WORDPRESS@localhost IDENTIFIED BY 'CONTRASEÑA';
GRANT ALL PRIVILEGES ON NOMBRE_DB.* TO USUARIO_DB_WORDPRESS@localhost;
FLUSH PRIVILEGES;
exit

Instalación de WordPress

A partir de aquí, solo hay que hacer una instalación normal de “WordPress”. Empezamos descargando la última versión y la extraemos:

$ cd /var/www/EJEMPLO.COM/html/
$ wget http://wordpress.org/latest.tar.gz
$ tar xzvf latest.tar.gz
$ mv wordpress/* .
$ rm -rf wordpress

Nos aseguramos de que tenemos instaladas algunas dependencias:

$ sudo apt-get install php5-gd libssh2-php

Creamos el archivo de configuración y editamos:

$ cp wp-config-sample.php wp-config.php
$ nano wp-config.php

Establecemos los valores de la base de datos y guardamos el fichero:

. . .
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'NOMBRE_DB');

/** MySQL database username */
define('DB_USER', 'USUARIO_DB_WORDPRESS');

/** MySQL database password */
define('DB_PASSWORD', 'CONTRASEÑA');
. . .

Nos aseguramos que los ficheros tienen los permisos necesarios:

$ sudo chown www-data:www-data -R *
$ sudo find . -type d -exec chmod 775 {} \;
$ sudo find . -type f -exec chmod 664 {} \;

¡Y ya hemos terminado!

Tweet about this on TwitterShare on Google+Share on FacebookShare on LinkedIn
POLÍTICA DE COMENTARIOS

Este es un espacio para el debate. Dada la importancia de los comentarios como espacio de participación, te pedimos por favor que leas detenidamente nuestras normas de participación.

11 respuestas para “Como crear un blog WordPress en DigitalOcean

Hotsechu

Un magnífico post para inaugurar una nueva época. Está claro que si algún día me planteo montar un servidor Linux en DigitalOcean (o cualquier otro sitio), ésta será la primera página que consulte.
Un saludo y muchas gracias por unas instrucciones tan precisas.


Elías R.M.

Muchas gracias Hotsechu.

Saludos.


Yoyo

Excelente tutto y enhorabuena por la elección de Digital Ocean, hoy por hoy es de lo mejorcito y muy adaptable.

Saludos.


Elías R.M.

Muchas gracias Yoyo.

Saludos.


Liamngls

Una explicación perfecta paso a paso, nada que añadir 🙂


Elías R.M.

Muchas gracias Liamngls.

Saludos.


Jvare

Tan bien explicado hasta parece fácil.
Solo falta que dentro de un tiempo digas que estas contento para animar a muchos lectores como yo, sin conocimiento de programación, a probar el cambio.
Y por último Ubuntu mejor que Debian?


Elías R.M.

Muchas gracias Jvare,

No dudes que iremos informando de nuestro nivel de satisfacción con el nuevo alojamiento, por ahora, no nos podemos quejar, la diferencia es notable.

¿Ubuntu mejor que Debian? No lo se, decidí usar Ubuntu porque dispone de mucho soporte, lo que simplifica algunas tareas. Es muy posible que migremos a Debian, CentOS o FreeBSD en el futuro en busca de la “mejor opción”.

Saludos


Juan Soto

Hola, excelente tutorial, acabo de seguir los pasos he instalado con éxito mi website en mi VPS de Digital Ocean. Tengo una consulta, al escribir en mi navegador mi dominio prueba.com me abre la página prueba.com, pero al escribir http://www.prueba.com me abre http://www.prueba.com. Que tengo que hacer para que en el segundo caso, al poner www me mande sin www, como en en esta página, que lo escribo con www y me manda sin www.

Por favor espero pedas ayudarme. Gracias.


Elías R.M.

Hola Juan Soto,

Si tienes WordPress instalado y en “Ajustes generales” pones la URL sin las www, él mismo se encargará de hacer la redirección.

De todos modos, siempre es mejor hacerlo directamente desde el servidor web, y no lo tuve en cuenta cuando escribí el artículo, por lo que lo he modificado para explicar como se hace.

Solo tienes que editar tu fichero /etc/nginx/sites-available/prueba.com, añadir descomentadas las líneas marcadas arriba en verde y borrar el fragmento marcado en naranja.

Muchas gracias por tu interés y por tu aportación.

Saludos


Linux gnu blog | VPS, Linux y otras Hierbas... ...

[…] Introducción Tras años sufriendo las continuas caídas y bajas tasas de transferencia de nuestro servidor compartido de 1and1, hemos decidido aventurarnos a probar otro proveedor de bajo coste buscando, no mas prestaciones sino…  […]


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This blog is kept spam free by WP-SpamFree.