Cómo hacer una instalación de WordPress en Ubuntu con FTP y phpMyAdmin

A pesar de que FTP es un protocolo a evitar y considerado inseguro, para un proyecto he tenido que usarlo como vía de acceso a una instalación de WordPress en una máquina virtual (gestionada mediante Amazon Web Services) con Ubuntu. También le he instalado phpMyAdmin. Estos son los pasos que he seguido:

Nota: la instalación que queda al seguir los pasos es funcional, pero no tiene en cuenta varias cuestiones de seguridad que, en producción, es importante considerar. Es muy recomendable leer las referencias (al final del texto) para orientaciones más detalladas en torno a la seguridad.

  1. He actualizado la base de datos de apt para que se descarguen las versiones más nuevas y he instalado Apache:
    sudo apt-get update
    sudo apt-get install apache2
  2. He instalado mysql:
    sudo apt-get install mysql-server php5-mysql

    y he ejecutado el script que genera los datos de estructura iniciales que mysql necesita para funcionar correctamente:

    sudo mysql_install_db
  3. He instalado PHP junto con algunas librerías de manipulación de imágenes, seguridad, etcétera (se pueden localizar más librerías disponibles mediante apt-cache search php5-).
    sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-cli php5-gd php5-json php5-mysql php5-xmlrpc libphp5-embed php5-exactimage php5-imagick libssh2-php
  4. Luego he cargado el mod rewrite, un componente necesario para que WordPress pueda gestionar las URLs:
    sudo a2enmod rewrite
    sudo service apache2 restart

    para que mod rewrite haga caso de las instrucciones del .htaccess de WordPress hay que hacer lo siguiente:

    Editar el archivo del virtual host por defecto

    sudo nano /etc/apache2/sites-available/000-default.conf

    Localizar DocumentRoot /var/www/html y ahí añadir lo que sigue. En caso de que no aparezca en el archivo, simplemente añadir las siguientes líneas al final del mismo:

    <Directory "/var/www/html">
        AllowOverride All
    </Directory>

    Finalmente hay que reiniciar Apache para que los cambios tengan efecto:

    sudo service apache2 restart
  5. El siguiente paso es crear una base de datos para WordPress:
    mysql -u root -p
    CREATE DATABASE wordpress;
    CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
    FLUSH PRIVILEGES;
    exit

    En el primer comando, la contraseña que pide es la contraseña de administración de la base de datos introducida en el paso 2. En esta secuencia, wordpress es el nombre de la base de datos; wordpressuser, el nombre del usuario y password, la contraseña.

  6. Ahora hay que descargar WordPress, descomprimirlo y acceder a la carpeta que se crea tras descomprimir el archivo:
    cd ~
    wget http://wordpress.org/latest.tar.gz
    tar xzvf latest.tar.gz
    cd ~/wordpress
  7. Tras eso hay que crear el archivo wp-config.php, que contiene los datos de conexión con la base de datos y otras configuraciones de WordPress. Lo edito mediante nano y cambio los valores de DB_NAME, DB_USER y DB_PASSWORD por los introducidos en el punto 5.
    cp wp-config-sample.php wp-config.php
    nano wp-config.php
  8. Una vez hecho esto, falta copiar los archivos a la ruta del directorio inicial que apache toma en consideración, que en Ubuntu es /var/www/html/, y darle la propiedad de esta carpeta y todos sus contenidos al usuario www-data del grupo www-data, que es el usuario con el que se ejecuta por defecto Apache en Ubuntu.
    sudo rsync -avP ~/wordpress/ /var/www/html/
    sudo chown -R www-data:www-data /var/www
  9. WordPress ya está listo, lo que procede ahora es configurar el servidor FTP. Para ello hay que instalar el paquete vsftpd:
    sudo apt-get install vsftpd
  10. Siguiente paso: configurarlo para que permita subir archivos, renombrarlos y sobreescribirlos:
    sudo nano /etc/vsftpd.conf

    En ese archivo de configuración hay que:

    1. Cambiar el anonymous_enable=YES a anonymous_enable=NO (en caso de que no esté así ya por defecto) y asegurarse de que la línea no tiene una almoadilla inicial (#), es decir, descomentarla.
    2. Descomentar (sacar la almohadilla inicial) las líneas pertinentes correspondientes a los valores local_enable=YES, write_enable=YES, chroot_local_user=YES y allow_writeable_chroot=YES. En caso de que el archivo no disponga de alguna de estas líneas, ni comentadas con almohadilla inicial ni sin comentar, se puede crear una línea para cada valor al final del archivo, así:
      local_enable=YES
      write_enable=YES
      chroot_local_user=YES
      allow_writeable_chroot=YES

      (Es importante comprobar que no haya valores duplicados, porque pueden causar problemas.)

    3. Reinicio vsftpd para que los cambios surtan efecto:
      sudo service vsftpd restart
  11. Ahora hay que crear un grupo para los usuarios con acceso FTP, un usuario para poder acceder por FTP y asignarle una contraseña y darle los permisos apropiados a su carpeta:
    sudo groupadd ftp-users
    sudo mkdir /home/ftpuser
    sudo useradd --home /home/ftpuser --group ftp-users --shell /bin/bash ftpuser
    sudo passwd ftpuser
    chmod -Rf 770 /home/ftpuser
  12. Tras eso debe instalarse y configurarse bindfs. Para mayor detalle sobre qué hace este paquete y por qué es importante, véase Solving the web file permissions problem once and for all.
    sudo apt-get -y install bindfs
    sudo chown -Rf ftpuser:ftp-users /home/ftpuser
  13. Edito /etc/fstab para que se monte en la carpeta raíz del usuario ftpuser el directorio que contiene los archivos de wordpress (es decir /var/www/html) y cambie el propietario de cualquier modificación a www-data.
    Para abrir el editor:

    sudo nano /etc/fstab

    En ese archivo, hay que incluir como última línea:

    bindfs#/var/www/html /home/ftpuser fuse force-user=ftpuser,force-group=ftp-users,create-for-user=www-data,create-for-group=www-data,create-with-perms=0770,chgrp-ignore,chown-ignore,chmod-ignore 0 0

    Ya se puede montar mediante el nuevo punto de montaje:

    sudo mount /home/ftpuser
  14. A este punto ya debería funcionar el FTP mediante los siguientes datos:
    Host: la URL o IP del servidor
    Usuario: ftpuser
    Contraseña: la asignada en el paso 11
    Port: 21
    El modo pasivo debe estar desactivado
  15. Ya solo falta instalar phpMyAdmin, que necesita que el módulo mcrypt de PHP esté activo y, al término de dar todas estas instrucciones, hay que reiniciar apache para que los cambios tengan efecto:
    sudo apt-get install phpmyadmin
    sudo php5enmod mcrypt
    sudo service apache2 restart

    Con esto phpMyAdmin debería estar disponible en añadiendo /phpmyadmin a la URL o la IP del servidor.

Referencias