En este tutorial voy a explicar paso a paso cómo instalar un blog Wordpress en un servidor Web GNU/Linux.



Requisitos

Antes de comenzar se debe contar con un servidor LAMP (Linux, Apache, MySQL/MariaDB, PHP/Python/Perl) instalado y configurado. El servidor que utilizo como ejemplo es un Debian "squeeze" corriendo Apache 2.2, MySQL 5.1 y PHP 5.3.

En la wiki oficial de Debian es posible encontrar un tutorial completo (en inglés) para instalar y configurar un servidor LAMP desde cero:

https://wiki.debian.org/LaMp

Creación de la base de datos MySQL

El primer paso consiste en crear una base de datos MySQL para el nuevo blog Wordpress.

Conectarse al servidor MySQL como superusuario (root):

root@debian# mysql -u root -p                                                                                     
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 178633
Server version: 5.1.49-3 (Debian)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

A partir de las siguientes consultas SQL crear una nueva base de datos (blog_wp) y un nuevo usuario (u_blog_wp):

mysql> create database blog_wp;
Query OK, 1 row affected (0.00 sec)

mysql> create user u_blog_wp identified by 'un-password-complejo';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on blog_wp.* to u_blog_wp;
Query OK, 0 rows affected (0.00 sec)

Por seguridad siempre es recomendable crear un usuario individual para cada base de datos. De esta forma, en caso de comprometerse la seguridad de la base de datos de un sitio, no se verán afectadas el resto de las bases de datos del servidor MySQL.

Cerrar la sesión en el servidor MySQL:

mysql> quit
Bye
root@debian#

Creación del directorio Web

Una vez creada la base de datos y el usuario de base de datos es necesario crear un directorio donde hospedar el blog. El VirtualHost por defecto de Apache tiene como directorio base al directorio /var/www/:

root@debian# cd /var/www/

Suponiendo que se debe acceder al blog a través del VirtualHost por defecto, crear un nuevo directorio, por ejemplo blog:

root@debian# mkdir blog

Ajustar usuario, grupo y permisos para el nuevo directorio:

root@debian# chown www-data:www-data blog/
root@debian# chmod 770 blog/

En Debian y derivados, el servicio apache2 tiene asignado el usuario www-data. En cambio, en Red Hat y derivados (Fedora/CentOS) se utiliza el usuario apache. Tener en cuenta esta diferencia a la hora de configurar permisos.

Descargar la última versión estable de Wordpress

Cambiar al directorio $HOME y descargar la última versión estable de Wordpress desde http://wordpress.org/latest.zip:

root@debian# cd ~
root@debian# wget http://wordpress.org/latest.zip
--2014-01-07 13:00:26--  http://wordpress.org/latest.zip
Resolving wordpress.org... 66.155.40.249, 66.155.40.250
Connecting to wordpress.org|66.155.40.249|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6367550 (6.1M) [application/zip]
Saving to: “latest.zip”

100%[============================================================================>] 6,367,550   1.35M/s   in 4.5s

2014-01-07 13:00:31 (1.35 MB/s) - “latest.zip” saved [6367550/6367550]

Es posible inspeccionar el contenido del ZIP utilizando unzip con el parámetro -l:

root@debian# unzip -l latest.zip | head
Archive:  latest.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-12-12 14:01   wordpress/
    10880  2013-11-04 21:24   wordpress/wp-settings.php
     2932  2013-09-24 21:18   wordpress/wp-cron.php
     4795  2013-09-05 22:38   wordpress/wp-comments-post.php
     4892  2013-10-04 11:12   wordpress/wp-activate.php
        0  2013-12-12 14:01   wordpress/wp-admin/
     2482  2012-01-08 14:01   wordpress/wp-admin/link-parse-opml.php

Instalar Wordpress

Descomprimir el contenido del ZIP en el directorio creado anteriormente:

root@debian# unzip -d /var/www/blog/ latest.zip
root@debian# cd /var/www/blog/
root@debian# ll
total 4.0K
drwxr-xr-x  5 root root 4.0K Dec 12 14:01 wordpress

Mover el contenido fuera del directorio wordpress:

root@debian# mv wordpress/* ./                                         
root@debian# ll                                                        
total 176K
-rw-r--r--   1 root root  418 Sep 24 21:18 index.php
-rw-r--r--   1 root root  20K Jan 18  2013 license.txt
-rw-r--r--   1 root root 7.1K Nov 20 21:21 readme.html
drwxr-xr-x   2 root root 4.0K Jan  7 13:10 wordpress
-rw-r--r--   1 root root 4.8K Oct  4 11:12 wp-activate.php
drwxr-xr-x   9 root root 4.0K Dec 12 14:01 wp-admin
-rw-r--r--   1 root root  271 Jan  8  2012 wp-blog-header.php
-rw-r--r--   1 root root 4.7K Sep  5 22:38 wp-comments-post.php
-rw-r--r--   1 root root 3.1K Oct 24 19:58 wp-config-sample.php
drwxr-xr-x   4 root root 4.0K Dec 12 14:01 wp-content
-rw-r--r--   1 root root 2.9K Sep 24 21:18 wp-cron.php
drwxr-xr-x  12 root root 4.0K Dec 12 14:01 wp-includes
-rw-r--r--   1 root root 2.4K Oct 24 19:58 wp-links-opml.php
-rw-r--r--   1 root root 2.4K Oct 24 19:58 wp-load.php
-rw-r--r--   1 root root  32K Dec  3 17:12 wp-login.php
-rw-r--r--   1 root root 8.1K Nov 13 08:58 wp-mail.php
-rw-r--r--   1 root root  11K Nov  4 21:24 wp-settings.php
-rw-r--r--   1 root root  26K Nov 13 00:23 wp-signup.php
-rw-r--r--   1 root root 4.0K Oct 24 19:58 wp-trackback.php
-rw-r--r--   1 root root 3.0K Oct 24 23:29 xmlrpc.php
root@debian# rmdir wordpress/

Cambiar propietario y grupo de los archivos descomprimidos:

root@debian# cd /var/www/
root@debian# chown -R www-data:www-data blog/
root@debian# ll blog/
total 172K
-rw-r--r--   1 www-data www-data  418 Sep 24 21:18 index.php
-rw-r--r--   1 www-data www-data  20K Jan 18  2013 license.txt
-rw-r--r--   1 www-data www-data 7.1K Nov 20 21:21 readme.html
-rw-r--r--   1 www-data www-data 4.8K Oct  4 11:12 wp-activate.php
drwxr-xr-x   9 www-data www-data 4.0K Dec 12 14:01 wp-admin
-rw-r--r--   1 www-data www-data  271 Jan  8  2012 wp-blog-header.php
-rw-r--r--   1 www-data www-data 4.7K Sep  5 22:38 wp-comments-post.php
-rw-r--r--   1 www-data www-data 3.8K Jan  7 13:17 wp-config.php
drwxr-xr-x   4 www-data www-data 4.0K Dec 12 14:01 wp-content
-rw-r--r--   1 www-data www-data 2.9K Sep 24 21:18 wp-cron.php
drwxr-xr-x  12 www-data www-data 4.0K Dec 12 14:01 wp-includes
-rw-r--r--   1 www-data www-data 2.4K Oct 24 19:58 wp-links-opml.php
-rw-r--r--   1 www-data www-data 2.4K Oct 24 19:58 wp-load.php
-rw-r--r--   1 www-data www-data  32K Dec  3 17:12 wp-login.php
-rw-r--r--   1 www-data www-data 8.1K Nov 13 08:58 wp-mail.php
-rw-r--r--   1 www-data www-data  11K Nov  4 21:24 wp-settings.php
-rw-r--r--   1 www-data www-data  26K Nov 13 00:23 wp-signup.php
-rw-r--r--   1 www-data www-data 4.0K Oct 24 19:58 wp-trackback.php
-rw-r--r--   1 www-data www-data 3.0K Oct 24 23:29 xmlrpc.php

Configurar Wordpress

Crear el archivo de configuración a partir del template:

root@debian# mv wp-config-sample.php wp-config.php

Configurar el acceso a la base de datos mediante las variables DB_NAME (nombre de la base de datos), DB_USER (usuario de la base de datos), DB_PASSWORD (contraseña del usuario de la base de datos), DB_HOST (hostname del servidor de base de datos, por defecto localhost).

Luego es necesario acceder al sitio https://api.wordpress.org/secret-key/1.1/salt/ para generar las claves de autenticación.

Para aumentar la seguridad, cambiar el prefijo de las tablas de la base de datos mediante la variable $table_prefix.

Ejemplo de archivo de configuración (¡por seguridad no usar las claves de autenticación de este ejemplo!):

<?php
/**
 * The base configurations of the WordPress.
 *
 * This file has the following configurations: MySQL settings, Table Prefix,
 * Secret Keys, WordPress Language, and ABSPATH. You can find more information
 * by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing
 * wp-config.php} Codex page. You can get the MySQL settings from your web host.
 *
 * This file is used by the wp-config.php creation script during the
 * installation. You don't have to use the web site, you can just copy this file
 * to "wp-config.php" and fill in the values.
 *
 * @package WordPress
 */

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

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

/** MySQL database password */
define('DB_PASSWORD', 'un-password-complejo');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');                              

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');                                       

/**#@+
 * Authentication Unique Keys and Salts.
 *                                      
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}                                                                                                                 
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.                                                                                                         
 *                                                                                                                    
 * @since 2.6.0                                                                                                       
 */                                                                                                                   
                                                                                                                 
define('AUTH_KEY',         'B`[ 4o:<Kv0m>V0JTS8g~N$$vt0u.| YHt4w8hSkCa2sX/s}-z7-lH/:3|5 .g20');
define('SECURE_AUTH_KEY',  'CX7Nwe+4hq-)889ZU|.eL&n/t)NjWyD6cZ[tZFEM&h4^|5s9+%/oKM]:r^m<ggVb');
define('LOGGED_IN_KEY',    '{_y%NgtL4BgXuY>C`c<-/|?[yB+|DTUs0jWIB0a3z{y`CFT+)9n?bLo=4@3Wp*+o');
define('NONCE_KEY',        'NI`8eZ@tnD tKCkj/+F%{Zv>sCN@SR@D;fr|wqt3Pp/uIAsSj}`]O*_T*S{wO=4U');
define('AUTH_SALT',        'hrkB3HxDj S0>$o>/[e+Q3l.%g)_<uG9:uR?$?<L=Z1U*,:;m4E|+*E$XZ:8%na');
define('SECURE_AUTH_SALT', '=+9]oP8a(43AG*FoY,M{EE(o:ZcgC8Zk})f]f<A!wyY4-~f<(5o.t] tt J zBeN');
define('LOGGED_IN_SALT',   '2|)KlR_![%OP2wOEVWiAxVi*670PJ3S4awS{4 xN6V]mNp1;E5l0}8KG-9p| :iL');
define('NONCE_SALT',       'ec7S-6*/aLqv_+|Z5D;vi.8@?[1DWhLe%|Va-LaunYZI%@|cDJ0hvZXk8L-WBjqx');                       

/**#@-*/

/**
 * WordPress Database Table prefix.
 *                                 
 * You can have multiple installations in one database if you give each a unique
 * prefix. Only numbers, letters, and underscores please!                       
 */                                                                             
$table_prefix  = 'blogwp_';                                                         

/**
 * WordPress Localized Language, defaults to English.
 *                                                   
 * Change this to localize WordPress. A corresponding MO file for the chosen
 * language must be installed to wp-content/languages. For example, install
 * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German
 * language support.
 */
define('WPLANG', '');

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 */
define('WP_DEBUG', false);

/* That's all, stop editing! Happy blogging. */

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
        define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

Ultimos pasos

Utilizando un navegador, acceder al blog para finalizar la instalación. Por ejemplo, suponiendo que se está utilizando el VirtualHost por defecto, y éste resuelve pedidos para el hostname "www.pepe.net" (según la variable ServerName o ServerAlias en el archivo de configuración del mismo), acceder a la URL:

http://www.pepe.net/blog/

Wordpress redirige automáticamente al script de instalación wp-admin/install.php desde donde se deben configurar algunos parámetros básicos del sitio, tales como nombre, usuario administrador, contraseña, etc:

Luego de configurar los parámetros del sitio finaliza la instalación de Wordpress y es posible ingresar al panel de control por primera vez utilizando el botón "Log In":

Panel de control de Wordpress (Dashboard) recién instalado:

¡Que lo disfruten!


Tal vez pueda interesarte


Compartí este artículo