2012-04-08 3 views
8

Ich schrieb dieses kleine BASH-Skript, das einen Ordner erstellt, entpackt Wordpress und erstellt eine Datenbank für eine Website.BASH Installation von Wordpress, ohne zu besuchen wp-admin/install.php

Der letzte Schritt ist eigentlich die Installation von Wordpress, was normalerweise bedeutet, dass Sie Ihren Browser auf install.php verweisen und ein Formular in der GUI ausfüllen.

Ich will das von der bash-Shell tun, kann aber nicht herausfinden, wie wp_install() aufrufen und die Parameter übergeben es braucht:

-admin_email
-admin_password
-weblog_title
-user_name

(Linie 85 in install.php)

Hier ist eine ähnliche Frage, but in python

#!/bin/bash 

#ask for the site name 
echo "Site Name:" 
read name 
# make site directory under splogs 
mkdir /var/www/splogs/$name 
dirname="/var/www/splogs/$name" 
#import wordpress from dropbox 
cp -r ~/Dropbox/Web/Resources/Wordpress/Core $dirname 
cd $dirname 
#unwrap the double wrap 
mv Core/* ./ 
rm -r Core 
mv wp-config-sample.php wp-config.php 
sed -i 's/database_name_here/'$name'/g' ./wp-config.php 
sed -i 's/username_here/root/g' ./wp-config.php 
sed -i 's/password_here/mypassword/g' ./wp-config.php 
cp -r ~/Dropbox/Web/Resources/Wordpress/Themes/responsive $dirname/wp-content/t$ 
cd $dirname 

CMD="create database $name" 
mysql -uroot -pmypass -e "$CMD" 

Wie kann ich das Skript so ändern, dass das Installationsprogramm automatisch ausgeführt wird, ohne dass ein Browser geöffnet werden muss?

+0

müssen Sie 'php' aufrufen und' install.php' von der Kommandozeile ausführen. Das Simulieren eines Formularposts auf einer Seite über die Befehlszeile ist eigentlich eine "PHP" -Frage, keine "Bash" -Frage. – Sorpigal

+0

Angenommen, Sie haben Recht - es ist eher eine php Sache. Alles von Bash laufen zu lassen, ist für mich natürlich. Du sagst also, ich kann im Skript folgendes eingeben: php ./install.php?step=2&weblog_title = [...]? –

+1

Führen Sie einfach eine Neuinstallation durch, legen Sie die Datenbank als Datei ab, speichern Sie sie als Vorlagendatei und verwenden Sie sie für jede Neuinstallation mit einem einfachen String-Ersatz für den Admin-Mail/Admin-Benutzernamen/Blog-Titel. So mache ich es sehr lange. Es ist nicht nötig, install.php zu durchlaufen. – strkol

Antwort

8

Check out wp-cli, basierend auf Drush für Drupal.

wp core install --url=url --title=site-title [--admin_name=username] --admin_email=email --admin_password=password 

Alle Befehle:

wp core [download|config|install|install_network|version|update|update_db] 
wp db [create|drop|optimize|repair|connect|cli|query|export|import] 
wp eval-file 
wp eval 
wp export [validate_arguments] 
wp generate [posts|users] 
wp home 
wp option [add|update|delete|get] 
wp plugin [activate|deactivate|toggle|path|update|uninstall|delete|status|install] 
wp post-meta [get|delete|add|update] 
wp post [create|update|delete] 
wp theme [activate|path|delete|status|install|update] 
wp transient [get|set|delete|type] 
wp user-meta [get|delete|add|update] 
wp user [list|delete|create|update] 
+0

Hallo Milch, dies ist toll. Ich benutze WPCLI für jetzt und ich muss sagen, brilliant. Ich würde jedem in diesem Thread raten, mit deinem Vorschlag zu beginnen. Gutes Zeug. –

+0

Prost, froh, dass ich einigen helfen konnte. Wenn Sie weitere Automatisierung wünschen, gibt es auch ein Puppet-Modul, das mit WP-CLI integriert werden kann - https://github.com/rmccue/puppet-wp –

2

Vielleicht müssen Sie den Wordpress-Original-Installer ein wenig ändern.

Zuerst ein Wrapper PHP CLI Skript erstellen, sagen wir mal seinen Namen wrapper.sh ist:

#!/usr/bin/php -qC 

function get_args() 
{ 
     $args = array(); 
     for ($i=1; $i<count($_SERVER['argv']); $i++) 
     { 
       $arg = $_SERVER['argv'][$i]; 
       if ($arg{0} == '-' && $arg{1} != '-') 
       { 
         for ($j=1; $j < strlen($arg); $j++) 
         { 
           $key = $arg{$j}; 
           $value = $_SERVER['argv'][$i+1]{0} != '-' ? preg_replace(array('/^["\']/', '/["\']$/'), '', $_SERVER['argv'][++$i]) : true; 
           $args[$key] = $value; 
         } 
       } 
       else 
         $args[] = $arg; 
     } 

     return $args; 
} 

// read commandline arguments 
$opt = get_args(); 

require "install.php"; 

Dies ermöglicht Ihnen das Skript von der Kommandozeile aufrufen und Argumente, um es passieren direkt in die $ opt numerisches Array.

Sie können dann die benötigten Vars in einer strengen Reihenfolge übergeben Sie definieren, zum Beispiel:

./wrapper.sh <admin_email> <admin_password> <weblog_title> <user_name>

In den install.php Sie müssen die Definition des vor genannten Vars ändern, wie es folgt:

global $opt; 

$admin_email = $opt[0]; 
$admin_password = $opt[1]; 
$weblog_title = $opt[2]; 
$user_name = $opt[3]; 

Dann lassen Sie das Installationsscript seine Arbeit machen.

Dies ist eine noch nicht getestete Methode und auch offen für alle Änderungen, die Sie benötigen. Es ist hauptsächlich eine Richtlinie für die Verwendung eines Wrapper-PHP/CLI-Skripts, um die benötigte Variable zu definieren, ohne sie über eine HTTP-REQUEST/Abfrage-Zeichenfolge senden zu müssen. Vielleicht ist es eher eine seltsame Art, Dinge zu erledigen, also bitte, zögern Sie nicht, konstruktives/destruktives Feedback zu geben :-)

+0

Netter detaillierter Vorschlag. Ich werde dies während der Woche versuchen und Feedback mit den Ergebnissen geben. Vielen Dank. –

+0

@ThePenguin Hat es für dich funktioniert? Irgendeine Anregung? Vielen Dank. –

3

Ich hatte das gleiche Problem wie Sie sind. Ich habe Victors Methode versucht und es hat nicht ganz funktioniert. Ich habe ein paar Änderungen vorgenommen und es funktioniert jetzt! Sie müssen PHP-Tags innerhalb des Skripts hinzufügen, damit der Code funktioniert, andernfalls wird nur das Terminal angezeigt.

Mein Skript ruft direkt die wp_install-Funktion von upgrade.php auf, wobei install.php vollständig umgangen wird (keine Änderungen an anderen Dateien erforderlich).

Ich machte mein Skript namens script.sh, machte es ausführbar, ließ es im Verzeichnis wp-admin fallen und führte es vom Terminal aus.

#!/usr/bin/php 
<?php 

function get_args() 
{ 
     $args = array(); 
     for ($i=1; $i<count($_SERVER['argv']); $i++) 
     { 
       $arg = $_SERVER['argv'][$i]; 
       if ($arg{0} == '-' && $arg{1} != '-') 
       { 
         for ($j=1; $j < strlen($arg); $j++) 
         { 
           $key = $arg{$j}; 
           $value = $_SERVER['argv'][$i+1]{0} != '-' ? preg_replace(array('/^["\']/', '/["\']$/'), '', $_SERVER['argv'][++$i]) : true; 
           $args[$key] = $value; 
         } 
       } 
       else 
         $args[] = $arg; 
     } 

     return $args; 
} 

// read commandline arguments 
$opt = get_args(); 

define('WP_INSTALLING', true); 

/** Load WordPress Bootstrap */ 
require_once(dirname(dirname(__FILE__)) . '/wp-load.php'); 

/** Load WordPress Administration Upgrade API */ 
require_once(dirname(__FILE__) . '/includes/upgrade.php'); 

/** Load wpdb */ 
require_once(dirname(dirname(__FILE__)) . '/wp-includes/wp-db.php'); 

$result = wp_install($opt[0], $opt[1], $opt[2], false, '', $opt[3]); 
?> 

rief ich die Datei wie folgt: # ./script.sh SiteName UserName [email protected] Password

+0

Hoppla, ich habe die PHP-Tags vergessen, aber das End-Tag wird sowieso nicht benötigt (nur das erste Tag ist obligatorisch) - nette Abhilfe btw ;-) –

+0

Ist das noch eine gültige Lösung? Gibt es Updates für das obige Skript? – Airman

+0

mit den neuesten WordPress-Ergebnissen: PHP Fataler Fehler: Uncaught Ausnahme 'phpmailerException' mit der Nachricht 'Ungültige Adresse: wordpress @' in /var/www/html/wpsite1/wp-includes/class-phpmailer.php:946 – Airman

0

I a bash script to automate the installation of WordPress, plugins and themes also geschaffen haben. Sie

  • herunterladen und installieren Wordpress automatisch
  • Erstellen eines Standard-Benutzer mit Passwörtern
  • Installieren Sie alle Standard-Plugins
  • Installieren Sie den Standard oder benutzerdefinierten Designs von zip URL:

    Dieses Skript wird die folgende automatisieren meist verwendet

+0

Danke für das Skript! Vielleicht möchten Sie es verbessern und einige der fest codierten Konstanten wie "1234" für das Passwort entfernen. Sie haben Variablen oben, aber verpassten ein paar Punkte. Sie könnten auch in der Dokumentation erwähnen, dass das Skript vor dem Ausführen bearbeitet werden muss. –

Verwandte Themen