Vagrant skrypt do konfiguracji wszystkich popularnych kombinacji wersji PHP / WordPress

9

Szukam sposobu na szybkie i wielokrotne konfigurowanie środowiska testowania / debugowania dla naszej wtyczki, najprawdopodobniej za pomocą Vagrant . Projekty takie jak VVV koncentrują się na konfiguracji dla jednego środowiska (lub kilku środowisk, takich jak stabilny / trunk), podczas gdy szukam skryptu, który konfigurowałby środowiska takie jak:

  • wp39-php52.local
  • wp40-php52.local
  • wp41-php52.local
  • wp39-php53.local
  • wp40-php53.local
  • itp. (masz pomysł)

Czy jest coś takiego? Najbliższe, jakie znalazłem, to WordPress Vagrant Boxes, który przynajmniej robi wersje PHP, ale może jest coś bardziej kompletnego, co dodaje również wersje WordPress do miksu. Dzięki.

Borek Bernard
źródło
Prawdopodobnie znasz Travis CI . Istnieje skrypt, który pozwoli ci przetestować różne wersje WordPressa i PHP w twojej wersji Travis . Oczywiście możliwość skonfigurowania czegoś takiego lokalnie byłaby lepsza do niektórych celów debugowania. Nie znam skryptu Vagrant. Wiem, że Travis używa phpenvdo zarządzania różnymi wersjami PHP. Może połączenie tego z kasą SVN całego repozytorium WordPress (które zawierałoby wszystkie wersje poniżej /tags) byłoby początkiem?
JD
1
Co z Dockerem ? Możesz budować obrazy w różnych środowiskach, a następnie tworzyć / uruchamiać kontenery z określonymi Dockerfiles
rafawhs
@rafawhs Yep Docker jest tym, co dziś rozważę.
Borek Bernard

Odpowiedzi:

1

Po stronie WordPress Basic WordPress Vagrant Environment jest gotowy do pracy z dowolną wersją WordPress (z niewielką pomocą). Nadal będziesz musiał znaleźć sposób na skonfigurowanie PHP, ale jest tam wskazówka https://github.com/ideasonpurpose/basic-wordpress-box/blob/master/ansible/roles/php/tasks/php.yml.

Aby użyć go po wyjęciu z pudełka; Pobierz lub sklonuj projekt wplatest-php55.dev/i uruchomvagrant up

Instalacja Vagrant Host Manager automatycznie połączy adres IP z twoim folderemhttp://wplatest-php55.dev/

Generuj wiele środowisk z wersji WP poprzez install-wp.sh

Sprawdź archiwum pod kątem możliwych wersji 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

Oto skrypt, który ciągnie wzorzec środowiska Vagrant do katalogu skryptu bash, klonuje witrynę dla każdej wersji w tablicy, konfiguruje zadanie instalacji do korzystania z tej wersji WP i pozwala określić plik / folder, który ma zostać skopiowany do wszystkich witryn przed ty vagrant up.

Umieść to w pliku, install-wp.sha następnie uruchom, chmod +x install-wp.shaby był wykonywalny. Znajdź folder, w którym chcesz utworzyć wszystkie te skrzynki, i uruchom ./install-wp.sh. Wygeneruje powyższą strukturę.

Ponieważ chcesz przetestować wtyczkę we wszystkich wersjach, utwórz folder w tym samym katalogu co skrypt, wp-content/plugins/your-plugina następnie uruchom install-wp.sh wp-content. Plik / folder jest kopiowany do katalogu głównego każdej witryny, dlatego sugeruję 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!"

Aktualizacja:

Okazuje się, że Podstawowe Vagrant Environment WordPress nie jest tak naprawdę skonfigurowane do obsługi wielu wersji php, ale Podstawowym Wordpress Box może być, jeśli dostosujesz zadanie PHP . Pomyślałem, że zostawię powłokę skryptu, która obsługiwałaby wiele wersji 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
źródło
0

Patrzyłeś na to?

marionetka

Jeśli pojawia się, aby pomóc Ci utworzyć pliki konfiguracyjne. Wygląda na to, że możesz skonfigurować wiele hostów vhost i zlecić wykonanie niestandardowych poleceń po inicjacji. Więc możesz ustawić wszystkie foldery, hosty i bazy danych, a następnie skopiować wybrane wersje z powiązanymi plikami wp-config? Trochę konfiguracji początkowo, ale może działać.

Sam używam skryptu powłoki. wp-install www.domain.com

Obecnie działa tylko dla jednej instalacji, ale konfiguracja nie byłaby niemożliwa. Weź kilka argumentów lub dodatkowy plik „config”, więc skonfiguruj wiele vhostów. Jak wspomniałeś Vagrant, zakładam, że powyższe jest bliższe zaspokojeniu twoich potrzeb.

Powodzenia!

GastroGeek
źródło
Jeśli się nie mylę, PuPHPet nie potrafi PHP 5.2 i 5.3, więc zawsze będzie ograniczony jako środowisko testowe.
Borek Bernard,
0

Wszystko zależy od tego, czego chcesz używać i jakiego systemu operacyjnego będziesz rozwijać z ...

Dla włóczęgów, oto automatyzacja konfiguracji z VVV: https://github.com/bradp/vv

I kilka innych opartych na włóczęgach:
https://github.com/vagrantpress/vagrantpress
https://github.com/tierra/wp-vagrant

Sugeruję jednak wypróbowanie panteonu . Pozwala to zrobić to wszystko za darmo i ma integrację z wp-cli, git, behat itp. Istnieją inne hostowane platformy, które mają takie funkcje, takie jak https://www.appfog.com/, a nawet wpengine, jak sądzę.

Zależy to również od tego, ile chcesz skonfigurować od samego początku. Jeśli tylko szukasz szybkiego sposobu, aby skonfigurować WordPress istnieje mnóstwo skryptów na github jak to lub po prostu użyć wp-CLI.

Bryan Willis
źródło