DokuWiki su Aruba

Il PHP dell'hosting Windows su Aruba.it è un po' limitato: mancano le librerie per l'elaborazione grafica1) e non è possibile richiamare eseguibili esterni come imagemagick (il problema credo sia l'interprete dei comandi2) bloccato!)
A questo aggiungiamo che non è possibile cambiare i diritti di accesso a file e cartelle da FTP!

Risultato? Molte applicazioni PHP non possono funzionare affatto oppure funzionano con dei limiti; magari non possono essere installate nella root o quanto meno in una cartella di nostra scelta…

La soluzione classica che trovate è: metti tutto nella cartella public! O quanto meno ci metti i dati… Non male, ma ci sono applicazioni che vogliono 3-4 cartelle per la scrittura; ed a meno di modifiche al codice non permettono di specificare dove metterle. Come se non bastasse ci si mette il SiteMap di Google, che DEVE essere nella cartella principale del sito e non in una sotto-cartella!

Soluzione

Aruba alla domanda ”dove faccio scrivere la mia web application” ti sa solo dire:

  1. usa public;
  2. installa tutto in public;
  3. ti abbiamo già parlato di “public”?

La soluzione invece si trova in una caratteristica di Windows: quando sposti una cartella i suoi diritti di accesso rimangono immutati! Quindi per creare una cartella scrivibile dove serve a voi: create in “public” la cartella che volete rendere scrivibile, dopo di che con il vostro programma FTP spostatela altrove, dove vi serve!
MAGIA! La cartella rimane scrivibile!

Lo stesso vale per i file: un file creato in public rimane scrivibile se viene spostato fuori da public (però non deve mai essere cancellato, ma sovrascritto)

Quindi, per configurare DokuWiki:

  1. Create la cartella data in public, dopo di che spostatela nella sua destinazione definitiva.
  2. Nella cartella data appena spostata create tutta la struttura di directory che dokuwiki richiede.
  3. per far funzionare il sitemap: create un file di dimensione zero in public, chiamatelo sitemap.xml o sitemap.xml.gz (dipende dalla configurazione della compressione) e spostatelo nella cartella principale di DokuWiki, dove sta il file doku.php; poiché dokuwiki quando crea il sitemap non cancella mai il file, ma lo sovrascrive, questo rimane sempre scrivibile.

Controindicazioni

  1. La funzione di ripristino dei diritti delle cartelle potrebbe rovinare tutto: potrebbe rendere le cartelle al di fuori di public e private non più scrivibili; in questo caso non c'è che una soluzione: copiare tutto sul vostro PC, ripristinare i diritti di scrittura come si è fatto la prima volta e ricopiare tutti i file di nuovo.
  2. La cartella private non può essere riprodotta, perché il suo comportamento è gestito tramite un'impostazione del web server IIS; purtroppo non è possibile accedere alle impostazioni IIS del proprio sito, quindi non c'è' niente da fare.

Le librerie grafiche

Ok, mi direte a questo punto: “i diritti di accesso sono sistemati, ma la manipolazione delle immagini? Come fate?”

Per quella usiamo ASP.NET. Il sistema che abbiamo realizzato non è proprio pulitissimo, ma funziona egregiamente.
Lo rendiamo pubblico, ma ricordate che se Aruba non ha installato le librerie grafiche GD/GD2 avrà avuto i suoi motivi; è molto probabile che non le ha messe perché possono caricare eccessivamente il server, se usate a sproposito (cosa che Doku Wiki non fa, ad esempio). Abbiamo creato una pagina apposita per far girare il tutto: resize delle immagini con ASP.NET

In alternativa il problema potrebbe essere risolto con imagemagick, se si trovasse un sistema di eseguire da PHP un programma evitando di usare la funzione system; quella funzione infatti usa la sua omonima del runtime C, la quale esegue tutto tramite l'interprete dei comandi3); ma sui servizi di hosting come Aruba l'interprete non si può eseguire!
Guardando la documentazione del PHP4) esistono anche altre funzioni per eseguire programmi esterni, anche se credo che molte di esse usano comunque l'interprete dei comandi: popen, exec, pcntl_exec, passthru

Backup dati

Purtroppo DokuWiki non esce con un sistema di backup integrato. Gli unici plugin esistenti non vanno bene: uno è per una vecchia versione di DokuWiki e fa un backup incompleto, l'altro è pensato solo per unix.
Tuttavia il plugin per la vecchia versione di DokuWiki, opportunamente modificato, permette di fare un backup rozzo ma efficace e completo dell'intera cartella dei dati.
La modifica consiste nell'eliminazione del filtro dei file: in pratica ora il plugin effettua il backup di tutto, compresa la cache. Nonostante tutto le dimensioni del backup non sono eccessive: Napoli Wireless ad esempio occupa circa 20 mega.

Per prima cosa si deve scaricare il plugin originale da qui: dokuwiki zip-backup plugin

Il codice modificato risiede tutto all'interno del file admin.php, nella funzione zip_create_backup().

	function zip_create_backup() {
		global $conf;
		File_Archive::setOption("zipCompressionLevel",9);
		$stamp = date("Ymd");
		$my_title = str_replace(' ', '', $conf['title']);
		$zip_name = "{$my_title}-$stamp.zip";
		if (USE_CACHE) {
			$cache = new Cache_Lite(
				array(
					'lifeTime' => 3600,
					'cacheDir' => TMP_DIR
				)
			);
			File_Archive::setOption('cache', $cache);
		} else {
			if (!isset($_COOKIE['doku_zip_backup'])) {
				setcookie('doku_zip_backup', time(), time()+3600, '/');
			} else if(file_exists(TMP_DIR.$zip_name)) {
 
				# This prevents the problem with double sending zip
				# files that seems to be a result of the way the
				# doku admin plugin architecture is constructed.
				if (isset($_COOKIE['doku_zip_now'])) return;
				setcookie('doku_zip_now', time(), time()+5, '/');
 
				$_REQUEST['action'] = '';
				$dir = opendir(TMP_DIR);
				while($file = readdir($dir)) {
					if (preg_match("@.zip$@", $file) && $zip_name != $file) {
						unlink(TMP_DIR.$file);
					}
				}
				closedir($dir);
				File_Archive::extract(
					File_Archive::read(TMP_DIR.$zip_name."/"),
					File_Archive::toArchive($zip_name,
						File_Archive::toOutput()
					)
				);
				exit;
			}
		}
 
		if (substr($conf['savedir'],0,1) == "/") {
			$dir = $conf['savedir'];
		} else {
			$dir = DOKU_INC.'/'.$conf['savedir'];
		}
 
		# This prevents the problem with double sending zip
		# files that seems to be a result of the way the
		# doku admin plugin architecture is constructed.
		if (isset($_COOKIE['doku_zip_now'])) return;
		setcookie('doku_zip_now', time(), time()+5, '/');
 
		if (!USE_CACHE) {
			File_Archive::extract(
				File_Archive::filter(
					File_Archive::predTrue(),
					File_Archive::read($dir)
				),
				$dest =TMP_DIR.$zip_name
			);
 
			$dir = opendir(TMP_DIR);
			while($file = readdir($dir)) {
				if (preg_match("@.zip$@", $file) && $zip_name != $file) {
					unlink(TMP_DIR.$file);
				}
			}
			closedir($dir);
		}
 
		File_Archive::extract(
			File_Archive::filter(
				File_Archive::predTrue(),
				File_Archive::read($dir)
			),
 
			File_Archive::toArchive($zip_name,
				File_Archive::toOutput()
			)
		);
		exit;
	}

Ed ecco il pacchetto già modificato che vi eviterà di dover fare un merge: dokuwiki_zip_plugin_mod.zip

Nota: questo plugin pare funzionare bene, ma è scritto un po' coi piedi e quindi non mi meraviglierei se facesse casini. Se fossi in voi dunque eviterei la funzione Restore

Discussione/Commenti

Complimenti davvero per l'utilizzo di DokuWiki su Aruba, e in particolare per i suggerimenti (trucchi) di spostamenti cartelle che mantengono i premessi. Anch'io uso Aruba e sapevo della “ereditarietà” dei permessi (sottocartella public avrà gli stessi permessi public) - ma non avevo mai provato tramite FTP a trascinare altrove… Oltre ai complimenti per le ore di lavoro che hai dedicato a questo impianto di DokuWiki avrei due domande. La prima è: le librerie grafiche, la manipolazione delle immagini? - Sarà sicuramente mia ignoranza, dove DokuWiki manipola le immagini? Resize, rotate… E' strettamente necessaria questa parte? La seconda domanda … se non ha già perso la pazienza… Backup dati, ok, DokuWiki non esce col Backup… ma si potrebbe fare tramite FTP? Ok, brutale, ma funzionale credo… Ciao, e complimenti ancora!!!

Aggiunta: ho fatto l'installazione di dokuwiki (win/aruba) e funziona correttamente! Ma non ho messo mano alle librerie grafiche… Più facile del previsto!
Ora spero che non si schianti tutto quando ci saranno un po' di contenuti… il Backup lo faccio tramite FTP.
Un caro saluto e buona estate 8-)

1) le GD ad esempio
2) il CMD.EXE
3) sotto Windows è il CMD.EXE
4) che conosco molto poco, il minimo indispensabile per modificare qualche fesseria in DokuWiki
 
misc/dikuwiki_aruba.txt · Ultima modifica: 2009/07/04 12:52 (modifica esterna)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki