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: Paquete de programas preinstalados

droplet_lemp16-04

Ú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

Antes de continuar desactivamos temporalmente el firewall, para evitar “quedarnos tirados”:

$ sudo ufw disable

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

$ sudo 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:

$ sudo service ssh restart

Configuramos el firewall. Abrimos solo los puertos que necesitamos. Primero abrimos el nuevo puerto SSH y cerramos el viejo:

$ sudo ufw delete limit 22
$ sudo ufw limit 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 de nuevo:

$ sudo ufw enable

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

$ exit
$ ssh USUARIO@IP_DEL_SERVIDOR -p 2234

Configuramos el firewall. 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;

 server_name EJEMPLO.COM www.EJEMPLO.COM;

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

 location ~ /\.ht {
 deny all;
 }
 location ~ \.php$ {
 include snippets/fastcgi-php.conf;
 fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
 #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;
 }

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:

$ sudo cat /root/.digitalocean_password

Ahora que conocemos el password de MySQL, ejecutamos el asistente de configuración básica y le indicamos algunos parámetros:

$ mysql_secure_installation

El asistente hará algunas preguntas a las que se puede responder como se indica a continuación:

[...]
Enter password for user root: INTRODUCIR CONTRASEÑA DE MYSQL
VALIDATE PASSWORD PLUGIN can be used to test passwords
[...]
Press y|Y for Yes, any other key for No: N
[...]
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N
[...]
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
[...]
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
[...]
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
[...]
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

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!

TE PUEDE INTERESAR: Asegura tu sitio web Nginx con Let’s Encript

Política de comentarios

Dada la importancia de los comentarios como espacio de participación, te pedimos por favor que leas detenidamente y cumplas con las siguientes normas de participación.

24 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.


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


Madai

Muy buen post. Esplicas muy bien. Tengo una duda. En el caso de que quiera instalar uno o mas dominios mas en ese mismo droplet. Como se le hace? Tienes algun tuto al respecto? Gracias!


Elías R.M.

Muchas gracias Madai,

Puedes repetir los pasos a partir de “Configuración del servidor web” por cada dominio que quieras asociar a tu droplet. Aparte de eso, solo te te tienes que asegurar de que las DNS de todos los dominios apunten a la IP de del droplet.

Eso es todo. Suerte.

Saludos


Madai

Gracias por tomarte tu tiempo en responder.
Me he dado a la tarea de seguir paso a paso tu tuto, todo perfecto.
Pero ahora en wordpress me presenta un problema no me deja subir plugin ni themes, tarda demasiado al principio me manda un error, que decia algo así que se excedia el tamaño de archivo. Ojala me pudieras ayudar. Agradezco


Elías R.M.

Hola de nuevo Madai,

Necesitaría algo más de información para poderte ayudar, como el texto exacto del error.

Lamento no poder hacer más por ti.

Saludos


Andres Jimenez

Hola amigo… Excelente articulo.
Me quede atorado en el paso de cambiar el puerto para el usuario que yo cree. Al salir del servidor e intentar volver a entrar no me deja y me dice (ssh: connect to host IP_SERVIDOR port 5420: Connection timed out)… como puedes ver en esa linea yo puse el puerto 5420, no se si no se pueda usar este puerto, o si el problema es por otra cosa.


Elías R.M.

Muchas gracias Andres Jimenez,

Ese error suele ocurrir cuando hay un firewall de por medio con el puerto “cerrado”:

  • Usa la consola del panel web para acceder a tu servidor.
  • Comprueba de nuevo la configuración de tu servidor SSH, puede que hayas introducido un puerto diferente por error.
  • Asegúrate de que no tienes el firewall activado sin abrir el puerto que has elegido para SSH. Con sudo ufw disable puedes desactivarlo para descartar que sea una mala configuración del firewall.

Agradecería que me mantengas informado, pues tu feedback es muy importante para mejorar el post.

Saludos

P.D. He logrado reproducir el error que me comentas cerrando el puerto en el firewall, es muy posible que hayas activado el firewall sin abrir el puerto o que te hayas equivocado el introducirlo.


Andres Jimenez

Hola… gracias por tu respuesta…
Efectivamente el firewall ya se encontraba habilitado y no permitía conexiones por el puerto que yo le especifique.
Lo que hice fue habilitar el puerto en el firewall antes de editar el servidor SSH.
Ahora todo funciona bien.

PD. Cabe aclarar que había creado otros droplets para hacer pruebas y en todos me quedaba en el mismo paso, pero en el ultimo, probé la solución que te comente al principio y todo funciono perfecto.


Elías R.M.

Me alegro de que lo hayas solucionado, voy a modificar el orden de los pasos en el artículo para evitar que suceda lo que me comentas.

Muchas gracias por el feedback


Andres Jimenez

Hola… otra vez yo por aquí.
Amigo, tengo un problema con la configuración del servidor MySQL porque el comando “cat /etc/motd.tail” no me hace nada y cuando uso “mysql -u root -p” me pide un password que no conozco.

Que me aconsejas?


Elías R.M.

Hola Andres,

Parece que Digital Oacean a cambiado la forma en que despliegan los nuevos droplets. Ahora el password de mysql no se almacena en el mismo lugar.

Ejecuta este comando para obtener el password de MySQL:

sudo cat /root/.digitalocean_password

Luego ejecuta el assitente de configuración de MySQL y sigue sus intrucciones:

sudo mysql_secure_installation

Actualización:
He editado el artículo para explicar como se hace en los nuevos droplets, ahora puedes ver con detalle como se hace.

Saludos


Andres Jimenez

Hola Elias.
Gracias por tu respuesta y actualización del articulo.
Por fin he podido completar todos los pasos, ingrese a la URL de mi web para configurar WordPress y me salio un fondo azul con el logo de DigitalOcean donde me dice:

“Please log into your droplet via SSH to configure your LEMP installation.”

Supongo que el problema esta en la configuración de nginx pero no estoy seguro. De todas maneras estaba pensando en copiar la configuración que pones aquí y borrar por completo la que venia por defecto (con los cambios que le hice para que quedara igual a la configuración que recomiendas aquí).


Elivar Largo

Gracias por el tutorial, muy completo, lo mejor que he visto, y justo en el momento en que estoy intentando pasar mi blog a la nube. Saludos


José Miguel

Muchas por comentar, si te surge algún inconveniente, estaremos encantados de ayudarte.

Saludos.


Ata Sanchez

Hola! Este post me ha servido de muchisima ayuda! Ahora bien, me gustaria preguntarte como hacer para que cuando entre a la pagina principal de mi dominio, por ejemplo http://www.midominio.com entre a una pagina web estatica en html a modo de landing page (tiene sub paginas) y que luego, cuando ponga http://www.midominio.com/blog/WORDPRESS ahi este el blog nuevo con wordpress?? Eso es posible? O en todo caso que se encuentre en blog.midominio.com
Me podrias dar una mano con esa configuracion?

Gracias!


Deja un comentario

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