Script vagabundo para configurar todas las combinaciones de versiones comunes de PHP / WordPress

9

Estoy buscando una manera de configurar rápida y repetidamente el entorno de prueba / depuración para nuestro complemento, probablemente usando Vagrant . Proyectos como VVV se centran en una configuración de entorno único (o en un par de entornos como estable / troncal), mientras que lo que estoy buscando es un script que configure entornos como:

  • wp39-php52.local
  • wp40-php52.local
  • wp41-php52.local
  • wp39-php53.local
  • wp40-php53.local
  • etc. (entiendes la idea)

¿Hay tal cosa? Lo más cercano que encontré es WordPress Vagrant Boxes, que al menos tiene versiones de PHP, pero tal vez hay algo más completo que también agrega versiones de WordPress a la mezcla. Gracias.

Borek Bernard
fuente
Probablemente esté familiarizado con Travis CI . Hay una secuencia de comandos que le permitirá probar varias versiones de WordPress y PHP en su compilación de Travis . Por supuesto, ser capaz de configurar algo como esto localmente sería mejor para algunos propósitos de depuración. No sé de un guión vagabundo. Sé que Travis usa phpenvpara administrar las diferentes versiones de PHP. ¿Quizás una combinación de eso y un pago SVN de todo el repositorio de WordPress (que contendría todas las versiones /tags) sería un comienzo?
JD
1
¿Qué hay de Docker ? Puede crear imágenes con diferentes entornos y luego crear / ejecutar contenedores con Dockerfiles
rafawhs
@rafawhs Yep Docker es lo que consideraría hoy.
Borek Bernard

Respuestas:

1

En el lado de las cosas de WordPress , Basic WordPress Vagrant Environment está listo para funcionar con cualquier versión de WordPress (con un poco de ayuda). Aún necesitaría encontrar una manera de configurar el PHP, pero hay una pista https://github.com/ideasonpurpose/basic-wordpress-box/blob/master/ansible/roles/php/tasks/php.yml.

Para usarlo fuera de la caja; Descargue o clone el proyecto wplatest-php55.dev/y ejecútelovagrant up

La instalación de Vagrant Host Manager vinculará automáticamente la IP a su carpetahttp://wplatest-php55.dev/

Genere múltiples entornos a partir de versiones de WP a través de install-wp.sh

Consulte el archivo para ver las posibles versiones de WordPress https://wordpress.org/download/release-archive/

# PWD (script directory)
# ├── common_folder
# ├── wp39-php55.dev
# │   └── site/common_folder
# ├── wp42-php55.dev
# │   └── site/common_folder
# └── wp431-php55.dev
#     └── site/common_folder

Aquí hay una secuencia de comandos que extrae el maestro de entorno Vagrant al directorio de la secuencia de comandos bash, clona un sitio para cada versión de la matriz, configura la tarea de instalación para usar esa versión de WP y le permite especificar un archivo / carpeta para copiar a todos los sitios antes te vagrant up.

Ponga esto en un archivo y install-wp.shluego ejecútelo chmod +x install-wp.shpara hacerlo ejecutable. Encuentre una carpeta donde desee crear todos estos cuadros y ejecútelos ./install-wp.sh. Generará la estructura anterior.

Como desea probar su complemento en todas las versiones, haga una carpeta en el mismo directorio que el script y wp-content/plugins/your-pluginluego ejecútelo install-wp.sh wp-content. El archivo / carpeta se copia en la raíz de cada sitio, por lo que sugiero wp-content.

install-wp.sh

#!/bin/bash
#
# Author: Jesse Graupmann @jgraup - http://www.justgooddesign.com - 2015
#
# Create multiple WordPress sites based on version numbers in array.
#
# ( OPTIONAL )
#   Copy common file/folder to all sites - Pass as parameter $1
#
# Each site runs in a Vagrant Environment:
#   https://github.com/ideasonpurpose/basic-wordpress-vagrant
#
# Best if used with:
#   https://github.com/smdahlen/vagrant-hostmanager
#
# PWD (script directory)
# ├── common_folder
# ├── wp39-php55.dev
# │   └── site/common_folder
# ├── wp42-php55.dev
# │   └── site/common_folder
# └── wp431-php55.dev
#     └── site/common_folder

# WordPress Versions
versions=( 3.9 4.2 4.3.1 )

# Move to the current directory
base=$(pwd); cd $base

# Vagrant Environment
remote_master="https://github.com/ideasonpurpose/basic-wordpress-vagrant/archive/master.zip"
vagrant_master_zip=$base/basic-wordpress-vagrant.zip

# Download Latest Environment - overwrite file for latest
wget -v -O $vagrant_master_zip $remote_master

# Loop through version #s
for VERSION in "${versions[@]}" ; do

flatv="${VERSION//.}"
dirname=wp$flatv-php55.dev

# Clone Environment
echo -e "\nCloning to: $base/$dirname\n"
mkdir -p $base/$dirname
tar -zxvf $vagrant_master_zip -C $base/$dirname --strip-components=1

# WordPress Versions
# Archives:  https://wordpress.org/download/release-archive/
# Version:  https://wordpress.org/wordpress-{{ wp-version }}.tar.gz
# Latest: https://wordpress.org/latest.tar.gz

# Path to Ansible task
yml=$(cat $base/$dirname/ansible/roles/wordpress/tasks/install.yml)

### REPLACE THE ANSIBLE WP VERSION w/OUR VERSION
wp_url_latest="https:\/\/wordpress.org\/latest.tar.gz"
wp_url_version="https://wordpress.org/wordpress-$VERSION.tar.gz"

echo "${yml/$wp_url_latest/$wp_url_version}" > $base/$dirname/ansible/roles/wordpress/tasks/install.yml

# (OPTIONAL) Copy common file/folder to all sites!
# pass as argument to .sh
#
# Example Folder:
# Make a common wp-content folder, then run install with
#
#   ./install-wp.sh wp-content
#
# Example File:
# Make a text file, then run install with
#
#   ./install-wp.sh my_file.txt
#
common_dest=$base/$dirname/site/

# Copy Folder
if [ -d "$1" ]; then
  echo "Copying $1 --> $common"
  # Directory must exist
  if [ -d "$1" ]; then
    folder_name=$(basename $1)
    mkdir -p $common_dest/$folder_name;
  fi
  cp -r $1 $common_dest

# or File
elif [ -f "$1" ]; then
  echo "Copying $1 --> $common_dest"
  file_name=$(basename $1)
  cp $1 $common_dest/$file_name
fi

## Create doc for quick glance at version number
dest="$base/$dirname"
remotewpzip="https://wordpress.org/wordpress-$VERSION.tar.gz"
txt=$dest/download-wp-$VERSION.txt
touch $txt
printf "WordPress Version: $VERSION - https://wordpress.org/download/release-archive/\n\nDownload Zip: $remotewpzip\n" > $txt

done

# The rest is just for show

echo -e "\nDone!\n\nNow just run 'vagrant up' in any of these:\n"

for VERSION in "${versions[@]}" ; do
  flatv="${VERSION//.}"
  dirname=wp$flatv-php55.dev
  echo -e "\t"$base/$dirname "\thttp://"$dirname
done

echo -e "\nMore Vagrant env info @ https://github.com/ideasonpurpose/basic-wordpress-vagrant"
echo -e "Best if used with https://github.com/smdahlen/vagrant-hostmanager\n\nENJOY!"

Actualizar:

Resulta que el entorno básico de WordPress Vagrant no está realmente configurado para manejar múltiples versiones de php, pero el cuadro básico de Wordpress podría estarlo si ajusta la tarea de PHP . Pensé que dejaría un shell de un script que habría manejado múltiples versiones de php.

#!/bin/bash
############################################
#
# PWD (script directory)
# ├── wp39-php55.dev
# ├── wp42-php55.dev
# └── wp431-php55.dev
#
############################################

# WordPress Versions

versions=( 3.9 4.2 4.3.1 )

# PHP Versions

pversions=( 5.4 5.5 5.6 )

############################################

# Move to the current directory

base=$(pwd); cd $base

############################################

# PHP Loop
for PVERSION in "${pversions[@]}" ; do
    pflatv="${PVERSION//.}"

    echo -e "==> PHP: $PVERSION\n"

    # WordPress loop
    for VERSION in "${versions[@]}" ; do
        flatv="${VERSION//.}"

        ############################################
        dirname=wp$flatv-php$pflatv.dev 
        ############################################

        # Environment
        echo -e "\t"$base/$dirname "\thttp://"$dirname 

        mkdir -p $base/$dirname

        ############################################

        # WordPress Versions
        # Archives:  https://wordpress.org/download/release-archive/
        # Version:  https://wordpress.org/wordpress-{{ wp-version }}.tar.gz
        # Latest: https://wordpress.org/latest.tar.gz

        ############################################

        wp_url_latest="https:\/\/wordpress.org\/latest.tar.gz"
        wp_url_version="https://wordpress.org/wordpress-$VERSION.tar.gz"

        # Download WP

        echo -e "\tDownload WP: $wp_url_version"

        ############################################

        # PHP Packages at https://launchpad.net/~ondrej
        # You can get more information about the packages at https://deb.sury.org
        # For PHP 5.6 use: ppa:ondrej/php5-5.6
        # For PHP 5.5 use: ppa:ondrej/php5
        # For PHP 5.4 use: ppa:ondrej/php5-oldstable

        ############################################

        # Config PHP

        echo -e "\tConfigure PHP: $PVERSION\n"

    done # WordPress version
done # PHP version

exit 1
jgraup
fuente
0

¿Has mirado esto?

títere

Si parece ayudarlo a crear archivos de configuración. Parece que puedes configurar varios vhosts y hacer que ejecute comandos personalizados después del inicio. Entonces, ¿podría configurar todas las carpetas, hosts y bases de datos y luego copiar las versiones deseadas con los archivos wp-config asociados? Un poco de configuración inicial, pero podría funcionar.

Yo uso un script de shell, yo mismo. wp-install www.dominio.com

Actualmente solo funciona para una instalación, pero no sería imposible configurarlo, tome algunos argumentos o un archivo 'config' adicional, así que configure múltiples vhosts. Como mencionó a Vagrant, asumiré que lo anterior está más cerca de satisfacer sus necesidades.

¡Buena suerte!

GastroGeek
fuente
Si no me equivoco, PuPHPet no puede hacer PHP 5.2 y 5.3, por lo que siempre estará limitado como entorno de prueba.
Borek Bernard
0

Todo depende de lo que quieras usar y con qué tipo de sistema operativo desarrollarás ...

Para vagabundo, aquí está la automatización para configurar con VVV: https://github.com/bradp/vv

Y un par de otros construidos en vagabundo:
https://github.com/vagrantpress/vagrantpress
https://github.com/tierra/wp-vagrant

Sin embargo, sugiero probar el panteón . Le permite hacer todo esto de forma gratuita y tiene integración con wp-cli, git, behat, etc. Hay otras plataformas alojadas que tienen estas características como https://www.appfog.com/ e incluso wpengine, creo.

Sin embargo, también depende de cuánto desee configurar desde el principio. Si solo está buscando una forma rápida de configurar wordpress, hay toneladas de scripts en github como este o simplemente use wp-cli.

Bryan Willis
fuente