Über den Author / Internet / Server / Confixx / WordPress Autoinstaller für Confixx (inkl. Auto FTP PlugIn)

WordPress Autoinstaller für Confixx (inkl. Auto FTP PlugIn)

~12 Min. Lesezeit

Viele Personen möchten WordPress nutzen und dies installieren. Damit nicht immer die User zu mir kommen, habe ich ein Script programmiert (da ich das App Packet von Confixx nicht gekauft habe), wo mir WordPress automatisch installiert.

Es gibt dabei nur ein kleineres Problem. WordPress kennt nur 1 User für die MySQL Datenbank und wenn dieser bereits existiert, der User aber das Passwort nicht kennt, muss man es ändern und überall nachkonfigurieren.

Mein Autoinstaller Script hat dies logischerweise nicht so gern, falls man mehrere WordPress einrichten möchte, ändert sich so laufend das MySQL Passwort. Daher generiere ich einfach neue User im Confixx Style und passe aber auch vom eventuell existierenden User die Berechtigungen an.

Der Rest ist simpel.

Als Erstes, leider benötigt der Installer root Rechte, warum das sudo Packet Pflicht ist.
Dies kann mit folgendem Befehl installiert werden:

apt-get install sudo

Die Datei /etc/sudoears ergänzen wir mit folgender Zeile:

www-data ALL=(root) NOPASSWD:/var/www/confixx/wp-setup.sh

Anschliessend holen wir uns die 2 neuen benötigten Files:

cd /var/www/confixx
wget http://www.murawski.ch/wp-content/uploads/2010/01/Wordpress-Installer.zip
unzip WordPress-Installer.zip
rm WordPress-Installer.zip

Dieser Vorgang entpackt 2 neue Dateien:
/var/www/confixx/html/user/installer-wordpress.php

<?php

include_once( 'auth.php' );

include_once( '/var/www/confixx/settings.inc.php' );
$db = mysql_connect($db_host,$mysql_user_user,$mysql_user_pass);
mysql_select_db($db_db,$db);

function mres($t) {
	$t = mysql_real_escape_string($t);
	return $t;
}
function r($t) {
	global $abfrage;
	$b = mysql_result($abfrage,0,$t);
	return $b;
}

$loUser = mres($PHP_AUTH_USER);
$version = (integer)$_REQUEST['v'];

if ($version < '1') { $version = '291'; }


?><HTML>
<HEAD>
<META content="text/html; charset=ISO-8859-1" http-equiv=Content-Type>
<link rel="stylesheet" type="text/css" href="/skins/mskin_1/css/general.css">
<link rel="stylesheet" type="text/css" href="/skins/mskin_1/css/images.css">
<link rel="stylesheet" type="text/css" href="/skins/mskin_1/css/main/custom.css">


<script>
loaded = false;
</script>
<script src="../../js/paged_form.js"></script>
</HEAD>

<BODY bgColor=#ffffff bottomMargin=0 leftMargin=0 topMargin=0 MARGINHEIGHT="0" MARGINWIDTH="0" onload="loaded=true;">
<br>
	<script>
		if( top.topFrame ){
			top.topFrame.location.href = 'ver_pp_frame_top.php';
		}
	</script>

<br><?

if ($_POST['domain'] != '')
{

	$domain = mres($_POST['domain']);
	$abfrage = mysql_query("SELECT `id`,`domain`, `pfad`,`server_id`,`anbieter` FROM `domains` WHERE `kunde`='".$loUser."' AND `domain`='".$domain."' LIMIT 1");
	if (mysql_num_rows($abfrage) == '2')
	{
		$abfrage2 = mysql_query("SELECT max(datenbank) as menge FROM `mysql_datenbanken` WHERE `kunde`='".$loUser."'");
		$anzdb = mysql_result($abfrage2,0,"menge");
		if ($anzdb == '' OR $anzdb == '0') { $anzdb = '1'; } else { $anzdb++; }
		
		$directory = opendir("/var/www/".$loUser.r('pfad'));
		while ($file=readdir($directory)) { $m++; }

		if ($m == '2') {
			$new_db_user = substr($loUser."_".str_replace(".","-",$domain),0,16);
			$new_db_db = "usr_".$new_db_user;
			$new_db_pass = substr(md5($loUser."_".md5(rand(1000,5000))),0,12);

			mysql_query("INSERT INTO `confixx`.`mysql_datenbanken` SET dbname='".$new_db_db."', kunde='".$loUser."', anbieter='".r('anbieter')."', datenbank='".$anzdb."', lastchange='0', kommentar='Wordpress', server_id='".r('server_id')."'");
			mysql_query("CREATE DATABASE `".$new_db_db."`");
			mysql_query("CREATE USER `".$new_db_user."`@`localhost`");
			mysql_query("GRANT ALTER,CREATE,CREATE TEMPORARY TABLES,DELETE,DROP,INSERT,LOCK TABLES,SELECT,UPDATE ON `".$new_db_db."`.* TO `".$new_db_user."`@`localhost`;");
			mysql_query("FLUSH PRIVILEGES");
			mysql_query("SET PASSWORD FOR `".$new_db_user."`@`localhost`=PASSWORD('".$new_db_pass."')");
			mysql_query("INSERT INTO `confixx`.`httpd_entries` SET httpd_id='1' reseller='".r('anbieter')."', user='".$loUser."', type='0', domain_id='".r('id')."' state='2', server_id='".r('server_id')."'");

			$logfile = "/var/www/confixx/tmp/wp-".$new_db_user.".log";

			passthru("sudo /var/www/confixx/wp-setup.sh ".$version." ".$loUser." ".r('pfad')." ".$new_db_db." ".$new_db_user." ".$new_db_pass." > ".$logfile);

			?><fieldset class="note_msg">
			<legend>Hinweis:</legend>
			<label>Die WordPress Installation wurde für die Domain "<b><?=$domain?></b>" abgeschlossen!<br></label></fieldset><?
		}
		else {
			?><fieldset class="note_msg">
			<legend>Hinweis:</legend>
			<label>Die WordPress Installation ist fehlgeschlagen! Das Verzeichnis der Domain "<b><?=$domain?></b>" ist nicht leer!<br></label></fieldset><?
		}
	}
}

?><script>
var canSubmit = 1;
function doChange( formIndex ){
	if(canSubmit){
		canSubmit = 0;
		if ( formIndex > 0 ) {
			document.forms[formIndex].submit();
		} else {
			document.forms[0].submit();
		}
	}else{
		//		alert ("Can't submit");
	}
}

 function goPrevPage(prevpage, formIndex){
  var loForm;
	if ( formIndex > 0 ) {
		loForm = document.forms[formIndex];
	} else {
		loForm = document.forms[0];
	}
	loForm.attributes.action.nodeValue = prevpage;
	loForm.submit();
 }
</script>	

<fieldset ><legend >Neue WordPress Installation erstellen</legend>

<form action="installer-wordpress.php" method="post" name="form2" ><input type="hidden" name="v" value="<?=$version?>">
<table class="InputTable" ><tr class="datacell" ><td class="datalabel" >Auf welche Domain soll installiert werden?</td>
<td ><select name="domain"><?

$abfrage = mysql_query("SELECT `domain` FROM `domains` WHERE `kunde`='".$loUser."' AND richtigedomain < '3'");
if (mysql_num_rows($abfrage))
{
	while($row = mysql_fetch_assoc($abfrage))
	{
		?><option value="<?=$row['domain']?>"><?=$row['domain']?></option><?
	}
}

?></select></td>
<td ><div class="formArea">
<div class="commonButton" id="bid-ok" title="Installieren" onClick="javascript:doChange(1)">
<button name="bname_ok" > Installieren</button><span> Installieren</span>
</div>
</div><br>
<b>Achtung:</b> Das Verzeichnis der Domain muss leer sein, anderenfalls wird der Installer abbrechen!
</td></tr></table>

</BODY>
</HTML><?

exit();
?>

/var/www/confixx/wp-setup.sh


## aufrufen mit
#./wp-setup.sh VERSION USER PFAD DBNAME DBUSER DPPASS FTPUSER FTPPASS DOMAIN
#./wp-setup.sh 291 web0 /murawski.ch/temp/ wordpress user1 pass1 ftpuser1 ftppass2 blog.meinedomain.ch

## Variablen
export version=$1
export webuser=$2
export wppfad=$3
export wpdbdb=$4
export wpdbname=$5
export wpdbpass=$6
export wpftpname=$7
export wpftppass=$8
export wpdomain=$9

## Vorbereitungen
rm -R /tmp/wp-installer
mkdir /tmp/wp-installer
cd /tmp/wp-installer

## Letzte Version von WordPress runterladen
#wget http://static.wordpress-deutschland.org/de-edition/wordpress_${version}-de.zip
#unzip wordpress_*-de.zip
wget http://static.wordpress-deutschland.org/de-edition/latest.zip
unzip latest.zip

## Secure Keys generieren
wget https://api.wordpress.org/secret-key/1.1/salt/

## AntiSpam Bee Plugin laden und installieren
wget http://downloads.wordpress.org/plugin/antispam-bee.zip
unzip antispam-bee.zip
cp -R /tmp/wp-installer/antispam-bee /tmp/wp-installer/wordpress/wp-content/plugins/

## Secure WordPress Plugin laden und installieren
wget http://downloads.wordpress.org/plugin/secure-wordpress.zip
unzip secure-wordpress.zip
cp -R /tmp/wp-installer/secure-wordpress /tmp/wp-installer/wordpress/wp-content/plugins/

## Google XML Sitemaps Plugin laden und installieren
wget http://downloads.wordpress.org/plugin/google-sitemap-generator.3.2.2.zip
unzip google-sitemap-generator.3.2.2.zip
cp -R /tmp/wp-installer/google-sitemap-generator /tmp/wp-installer/wordpress/wp-content/plugins/

## Lightbox 2 Plugin laden und installieren
wget http://downloads.wordpress.org/plugin/lightbox-2.2.9.2.zip
unzip lightbox-2.2.9.2.zip
cp -R /tmp/wp-installer/lightbox-2 /tmp/wp-installer/wordpress/wp-content/plugins/

wget http://downloads.wordpress.org/plugin/nospamnx.3.17.zip
unzip nospamnx.3.17.zip
cp -R /tmp/wp-installer/nospamnx /tmp/wp-installer/wordpress/wp-content/plugins/

wget http://sw-guide.de/wp-content/uploads_sw-guide/files/simple-trackback-validation_2-1.zip
unzip simple-trackback-validation_2-1.zip
cp -R /tmp/wp-installer/simple-trackback-validation /tmp/wp-installer/wordpress/wp-content/plugins/

## Login LockDown Plugin laden und installieren
wget http://downloads.wordpress.org/plugin/login-lockdown.1.5.zip
unzip login-lockdown.1.5.zip
cp -R /tmp/wp-installer/login-lockdown /tmp/wp-installer/wordpress/wp-content/plugins/

wget http://downloads.wordpress.org/plugin/w3-total-cache.0.9.1.1.zip
unzip w3-total-cache.0.9.1.1.zip
cp -R /tmp/wp-installer/w3-total-cache /tmp/wp-installer/wordpress/wp-content/plugins/

## SMu Manual DoFollow Plugin laden und installieren
wget http://downloads.wordpress.org/plugin/manuall-dofollow.zip
unzip manuall-dofollow.zip
cp -R /tmp/wp-installer/manuall-dofollow /tmp/wp-installer/wordpress/wp-content/plugins/

## Uploadfolder erzeugen
mkdir /tmp/wp-installer/wordpress/wp-content/uploads
chmod 777 -R /tmp/wp-installer/wordpress/wp-content/uploads
chmod 777 -R /tmp/wp-installer/wordpress/wp-content/themes
chmod 777 /tmp/wp-installer/wordpress/wp-content/plugins

## Entpacken und Konfigurieren
echo "<?php" > /tmp/wp-installer/wordpress/wp-config.php
echo "/*******************************************************" >> /tmp/wp-installer/wordpress/wp-config.php
echo "** Diese Datei wurde automatisch vom SMu ACP erstellt **" >> /tmp/wp-installer/wordpress/wp-config.php
echo "** ©2010 by Stefan Murawski **" >> /tmp/wp-installer/wordpress/wp-config.php
echo "*******************************************************/" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('DB_NAME', '${wpdbdb}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('DB_USER', '${wpdbname}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('DB_PASSWORD', '${wpdbpass}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('DB_HOST', 'localhost');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('DB_CHARSET', 'utf8');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('DB_COLLATE', '');" >> /tmp/wp-installer/wordpress/wp-config.php
cat /tmp/wp-installer/index.html >> /tmp/wp-installer/wordpress/wp-config.php
echo "\${table_prefix} = 'blog_';" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define ('WPLANG', 'de_DE');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define ('ALLOW_UNFILTERED_UPLOADS', true);" >> /tmp/wp-installer/wordpress/wp-config.php

echo "define ('FTP_HOST', 'ftp://${wpdomain}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define ('FTP_USER', '${wpftpname}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define ('FTP_PASS', '${wpftppass}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define ('FTP_SSL', false);" >> /tmp/wp-installer/wordpress/wp-config.php

echo "define('WP_CACHE', true);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('CACHE_EXPIRATION_TIME', 7200);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('ALLOW_UNFILTERED_UPLOADS', true);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('COMPRESS_SCRIPTS', true);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('COMPRESS_CSS', true);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('ENFORCE_GZIP', true);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('WP_POST_REVISIONS', 3);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('AUTOSAVE_INTERNAL', 3660);" >> /tmp/wp-installer/wordpress/wp-config.php

echo "define('WP_SITEURL', 'http://${wpdomain}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('WP_HOME', 'http://${wpdomain}');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('EMPTY_TRASH_DAYS', 2);" >> /tmp/wp-installer/wordpress/wp-config.php
echo "define('WP_ALLOW_REPAIR', TRUE);" >> /tmp/wp-installer/wordpress/wp-config.php

echo "if ( !defined('ABSPATH') )" >> /tmp/wp-installer/wordpress/wp-config.php
echo " define('ABSPATH', dirname(__FILE__) . '/');" >> /tmp/wp-installer/wordpress/wp-config.php
echo "require_once(ABSPATH . 'wp-settings.php');" >> /tmp/wp-installer/wordpress/wp-config.php

## Unnötigen Plunder löschen
rm /tmp/wp-installer/wordpress/wp-config-sample.php /tmp/wp-installer/wordpress/readme.html /tmp/wp-installer/wordpress/liesmich.html /tmp/wp-installer/wordpress/license.txt /tmp/wp-installer/wordpress/wp-content/plugins/hello.php
rm -R /tmp/wp-installer/wordpress/wp-content/plugins/akismet

## Installieren
cp -R /tmp/wp-installer/wordpress/* /var/www/${webuser}/html${wppfad}
chown -R ${webuser}:ftponly /var/www/${webuser}/html${wppfad}

## Rechte für Google XML Sitemaps setzen
chmod 777 /var/www/${webuser}/html${wppfad}
chmod 777 /var/www/${webuser}/html${wppfad}wp-content
chmod 777 /var/www/${webuser}/html${wppfad}wp-content/uploads

## Temporäre Dateien entfernen
rm -R /tmp/wp-installer

Nun muss man eigentlich nur noch die Verlinkung erstellen, damit der User auch die neuen Features zu Gesicht bekommt.
Als Administrator im confixx eingeloggt, kann man unter Einstellungen -> Individuelle Menüs eine Kategorie „Installer“ erstellen.

Sobald diese erstellt ist, kann man unter „0 Elemente“ dann neue Elemente erzeugen.

Es wird automatisch zum WordPress auch noch das PlugIn „Auto FTP“ installiert, der FTP Benutzer muss jedoch weiterhin manuell erstellt und eingegeben werden! Die Konfigurationsdatei mit allen Informationen und auch die Datenbank und -benutzer werden automatisch durch den Installer angelegt.
Zusätzlich wird für die Domain der SafeMode abgeschaltet, damit WordPress Plug-Ins über das Webpanel installieren kann. Wer dies nicht wünscht, kann die entsprechende Zeile im Installer (installer-wordpress.php Zeile 072) löschen oder auskommentieren.

Die Versionsnummern können bei WordPress Deutschland nachgeschaut werden, wobei nur die entsprechende Versionsnumer angegeben werden muss (z.B. wordpress_291-de.zip = 291).

Der User sieht nachher folgendes Menü:

Zu beachten gibt es, das Verzeichnis muss komplett leer sein, anderenfalls bricht der Installer ab mit einer Warnung, damit kein Datenverlust auftreten kann.

About Stefan

avatar

Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf.

Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

Meine WordPress .htaccess Datei

~0 Min. LesezeitDie .htaccess Datei beinhaltet viele Serveranweisungen, welche ich gerne hier mit Euch Share …

PHP Trojaner – Wettbewerb

~2 Min. LesezeitIn der Serie der PHP Trojaner gibt es noch viele weitere Möglichkeiten zum …

8 Kommentare

  1. avatar

    Ich habe das Script nochmals überarbeitet, neu werden 6 PlugIn’s automatisch installiert und auch der FTP Benutzer angelegt.

    Wenn Interesse besteht, uploade ich das neue Skript.

  2. avatar

    Interesse besteht, gerne auch per Mail 🙂

  3. avatar

    Hallo!

    Sehr interessant und sehr guter Ansatz, allerdings passiert bei mir nach dem Klicken auf Installieren (unter Confixx) rein gar nichts…

  4. avatar

    schau mal unter /var/www/confixx/log nach, da wird ein log file erstellt von meinem Installer. Darin solltest du einen Fehler finden. Hat der Confixx Installer Rechte um ins /tmp Verzeichnis zu schreiben? Desweiteren musst du für Confixx die open_basedir Variable anpassen (Apache dann reloaden), damit der Installer danach auch ind Kundenverzeichnis die App überhaupt installieren darf. Das wars dann eigentlich. Einfach das Log posten, wenn das leer ist, gibts noch eine andere Möglichkeit 😉

  5. avatar

    Klappt das auch mit anderen CMS Systemen wie webSPELL, DZCP, ..?

  6. avatar

    Nein, dies ist speziell nur für WordPress unter Confixx. Man könnte dies zwar auch unter ICP etc zum laufen bekommen, damit es WordPress installiert, aber andere CMS Systeme darüber zu installieren geht nicht. Dies müsste man programmieren. Da ich die aber nicht nutze werd ich das wahrscheinlich nie machen.

  7. avatar
    Oliver Lippert

    Hey Stefan,
    bei mir passiert ebenfalls nach dem Klick auf „Installieren“ nichts. Ein Log wird auch nicht erstellt und wie ich open_basedir für Confixx setze weiß ich niht :/
    Auch Ob /tmp installer Rechte hat, wie prüfe ich das?

    Danke für deine Hilfe ^^

  8. avatar

    Ohne open_basedir pasiert gar nichts! Das müsstest du im Confixx zuerst einstellen.

    Geh in deine confixx_mhosts.conf Datei (bei mod_php) und am richtigen Ort:
    php_admin_value open_basedir „/var/www:/etc/phpmyadmin/:/tmp“

    Geh in die richtige php.ini Datei (bei suphp) und die Zeile darin wie folgt anpassen:
    open_basedir = „/var/www:/etc/phpmyadmin/:/tmp“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.