WordPress sistema de gestión de contenidos o CMS (por sus siglas en inglés,Content Management System) herramienta exageradamente útil para el desarrollo de sitios web, tan amigable, fácil e intuitivo es su uso, que, según las estadísticas del w3tech para febrero de 2015 del 100% de los sitios que se encuentran en la red el 25,4% de estos, están desarrollado en wordpress.

Sin embargo y a pesar de la facilidad de instalación y configuración, cuando ya has desarrollado o desarrollas muchos sitios en los que implementas los mismos plugins o temas base, resulta tedioso y repetitivo tener que instalar 1 a 1 los plugins o temas a través de su administrador backend, aunque, también existe la posibilidad de descomprimir todos tus plugins o temas en las carpetas pertinentes, evitando el tedio de hacer instalaciones 1 a 1, hoy te traigo un post de como instalar wordpress desde composer añadiendo, si se quiere plugins o temas de repositorios git libres o personalizados.
Como Desarrollador symfony que hace uso de composer para poder crear proyectos y/o descargar módulos de terceros y partiendo de una necesidad de mi nuevo equipo de trabajo de poder instalar wordpress de forma conjunta con los temas y plugins recurrentes, surgió la idea de usar composer con su archivo json para que con una sola línea de comando se haga la Instalación de WordPress y Repositorios Git desde Composer, a continuación dejo los pasos para realizarlos
1.- Instalar composer en el directorio del proyecto

Una vez creado el directorio donde se va instalar el proyecto ejecutar por consola:

curl -sS https://getcomposer.org/installer | php

Este comando te creara el archivo composer.phar, Instalar composer de esta forma es correcta, pero, habrá que instalarlo para cada nuevo proyecto, para evitar esto, mueve el archivo composer.phar  ejecutando el siguiente comando :

mv composer.phar /usr/local/bin/composer

Si estas en Windows cópialo al  directorio donde se encuentran todos los ejecutables de PHP (php, pear, pecl, etc.)

2.- Crear el archivo composer.json

Crea el archivo composer.json y edítalo con el editor de texto de tu preferencia con los siguientes datos:

{
 "name" : "ponceelrelajado/wic",
 "description" : "Wordpress Install Composer, proyecto de prueba para instala wordpress y repositorios personalizados con composer",
 "authors" : [
 {
 "name" : "Jhonatan Ponce",
 "email" : "[email protected]",
 "homepage": "https://www.ponceelrelajado.com/"
 }
 ],
 "repositories": [
 {
 "type": "composer",
 "url" : "http://wpackagist.org"
 },
 {
 "type": "composer",
 "url" : "http://rarst.net"
 },
 {
 "type": "package",
 "package": {
 "name": "wordpress",
 "type": "webroot",
 "version": "4.3",
 "dist": {
 "type": "zip",
 "url": "https://github.com/WordPress/WordPress/archive/4.3.zip"
 },
 "require" : {
 "fancyguy/webroot-installer": "1.0.0"
 }
 }
 },
 {
 "type": "package",
 "package": {
 "name": "ponceelrelajado/ares",
 "type": "wordpress-theme",
 "version": "dev-master",
 "source": {
 "url": "https://[email protected]/ponceelrelajado/ares.git",
 "type": "git",
 "reference": "master"
 }
 }
 }
 ],
 "config" : {
 "vendor-dir": "wp-content/vendor"
 },
 "require": {
 "php": ">=5.3",
 "wordpress": "4.*",
 "fancyguy/webroot-installer": "1.0.0",
 "composer/installers": "v1.0.16",
 "ponceelrelajado/ares": "dev-master",
 "wpackagist-plugin/akismet": "3.1.1",
 "wpackagist-theme/evolve": "*"
 },
 "extra": {
 "webroot-dir": "wordpress",
 "webroot-package": "wordpress",
 "installer-paths": {
 "wp-content/plugins/{$name}/" : ["type:wordpress-plugin"],
 "wp-content/mu-plugins/{$name}": ["type:wordpress-muplugin"],
 "wp-content/themes/{$name}" : ["type:wordpress-theme"]
 }
 }
}

El código anterior contiene los repositorios necesarios para descargar la versión 4.3 de wordpress y dos repositorios personalizados en bitbucket, explicare de forma segmentada parte del mismo

{
 "type": "composer",
 "url" : "http://wpackagist.org"
},
{
 "type": "composer",
 "url" : "http://rarst.net"
},
 {
 "type": "package",
 "package": {
 "name": "wordpress",
 "type": "webroot",
 "version": "4.3",
 "dist": {
 "type": "zip",
 "url": "https://github.com/WordPress/WordPress/archive/4.3.zip"
 },
 "require" : {
 "fancyguy/webroot-installer": "1.0.0"
 }
 }
}

En el cuadro anterior se muestran los repositorios necesarios para descargar la versión 4.3 de wordpress y los repositorios composer para instalar plugins o temas definidos en «require».

{
 "type": "package",
 "package": {
 "name": "ponceelrelajado/ares",
 "type": "wordpress-theme",
 "version": "dev-master",
 "source": {
 "url": "https://[email protected]/ponceelrelajado/ares.git",
 "type": "git",
 "reference": "dev-master"
 }
 }
}

En el cuadro anterior se muestran listados los repositorios personalizados en bitbucket a descargar dentro del proyecto, se utilizo la versión dev-master para que siempre se mantenga actualizado, pero, pueden usar una versión especifica.

"config" : {
 "vendor-dir": "wp-content/vendor"

El cuadro anterior se muestra una configuración opcional para la instalación del vendor de composer.

"require": {
 "php": ">=5.3",
 "wordpress": "4.*",
 "fancyguy/webroot-installer": "1.0.0",
 "composer/installers": "v1.0.16",
 "ponceelrelajado/ares": "dev-master",
 "wpackagist-plugin/akismet": "3.1.1",
 "wpackagist-theme/evolve": "*"
},

En el apartado anterior se muestran los requerimientos necesarios del proyecto y las versiones de los repositorios a descargar, en este apartado también se definen los plugins o temas con sus versiones a descargar de los paquetes composer definidos en la primera parte.

3.- Instalar git en el servidor

A pesar de que su repositorio personalizado, se puede descargar en zip cambiando «type»: «git», por «type»: «zip», y la url por la url de tu repositorio en zip en el composer.json por usabilidad es mejor instalar git en el servidor ya que de esta forma se podrá correr los comando para actualizar o guardar en el repositorio los cambios.

Dejo una breve guía de instalación de git en CentOS que fue donde hice la prueba.

  •         Crear carpeta git-master dentro de la carpeta del proyecto y dentro de esta descargar el zip de git.
cd ~

wget -O git.zip https://github.com/git/git/archive/master.zip
  •         Descomprimir y entrar al directorio principal de git-master
unzip git.zip

cd git-master
  •         Configurar el paquete, construir los ejecutables, la documentación e instalar con las siguientes líneas
make configure

./configure --prefix=/usr/local

make all doc

sudo make install install-doc install-html

Pueden tener más info revisando el siguiente enlace:

https://www.digitalocean.com/community/tutorials/how-to-install-git-on-a-centos-6-4-vps

4.- Ejecutar comando de instalación

Ejecutar el comando de instalacion

php composer.phar install

En caso de que ya lo hayas instalado y quieras actualizar:

php composer.phar update

 

En caso de que al correr te de el siguiente mensaje de errorr: The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly. Instala o actualiza composer definiendo el path de COMPOSER_HOME con el siguiente comando:

COMPOSER_HOME="/path/you/want/to/be/home" php composer.phar install
5.- Editar index.php y wp-config.php

Una vez ejecutado el comando de instalación, dentro del directorio de instalación tendrás los siguientes ficheros :

  • Ø  wordpress/
  • Ø  wp-content/
  • Ø  composer.json
  • Ø  composer.lock
  • Ø  composer.phar

En caso de no haber modificado la configuración de instalación del vendor, tendrás los siguientes ficheros :

  • Ø  vendor/
  • Ø  wordpress/
  • Ø  wp-content/
  • Ø  composer.json
  • Ø  composer.lock
  • Ø  composer.phar

A este mismo nivel crea los archivos index.php y wp-config.php:

  • Ø  vendor/
  • Ø  wordpress/
  • Ø  wp-content/
  • Ø  composer.json
  • Ø  composer.lock
  • Ø  composer.phar
  • Ø  index.php
  • Ø  wp-config.php

Con el siguiente contenido:

index.php:
<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */
 
/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);
 
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wordpress/wp-blog-header.php' );
wp-config.php:
<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the
 * installation. You don't have to use the web site, you can
 * copy this file to "wp-config.php" and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/Editing_wp-config.php
 *
 * @package WordPress
 */
 
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');
 
/** MySQL database username */
define('DB_USER', 'username_here');
 
/** MySQL database password */
define('DB_PASSWORD', 'password_here');
 
/** 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', '');
 
define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] );
define( 'WP_SITEURL', WP_HOME . '/NOMBRECARPETADEINSTALACION/wordpress' );
define( 'WP_CONTENT_URL', WP_HOME . '/NOMBRECARPETADEINSTALACION/wp-content' );
define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/NOMBRECARPETADEINSTALACION/wp-content' );
 
/**#@+
 * 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', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
/**#@-*/
 
/**
 * 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 = 'wp_';
 
/**
 * 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.
 *
 * For information on other constants that can be used for debugging,
 * visit the Codex.
 *
 * @link https://codex.wordpress.org/Debugging_in_WordPress
 */
define('WP_DEBUG', false);
 
/* That's all, stop editing! Happy blogging. */
 
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
 define('ABSPATH', dirname(__FILE__) . '/wordpress');
 
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

Hacer las modificaciones pertinentes de base de datos y “NOMBRECARPETADEINSTALACION” por la correcta

De forma opcional se puede copiar el contenido de la wp-content de la instalación principal de wordpress en el wp-content creado a partir de composer