blog.bartlweb - a technologist's external brain

Thema: Server

TinyMCE in Alfresco 4.2 an die eigenen Bedürfnisse anpassen

Ergänzend zum Artikel TinyMCE in Alfresco 4 an die eigenen Bedürfnisse anpassen hier das für das neue Standard-Theme "lightTheme" angepasste CSS als Ergänzung für die Datei presentation.css. Änderungen am CSS werden nur mehr nach einem Neustart von Alfresco im Browser sichtbar.

p, .alfresco-share .sticky-wrapper p, .yui-overlay p {
padding:0;
margin:0;
margin-bottom: 15px;
font-size: 13px;
}
 
p.code, span.code {
font-family: Courier;
}
 
p.code, .alfresco-share .sticky-wrapper p.code, .yui-panel-container p.code {
border: 1px dotted #CCCCCC;
background-color: #F0F0F0;
padding: 10px;
margin-left: 10px;
margin-top: 10px;
margin-bottom: 10px;
}
 
p.cite, span.cite {
font-style: italic;
}
 
p.cite, .alfresco-share .sticky-wrapper p.cite, .yui-panel-container p.cite {
margin-left: 10px;
padding-left: 10px;
padding-top: 10px;
padding-bottom: 10px;
border-left: 1px dotted #777777;
background-color: #F0F0F0;
}
 
p.cite, p.code {
overflow: auto;
}
 
li {
font-size: 13px;
}
 
.rich-content ul, #tinymce ul, .rich-content ol, #tinymce ol, .postview .content ul, .postview .content ol {
padding: 0;
padding-left: 1em;
margin-bottom: 15px;
}
 
.rich-content h1, #tinymce h1, .postview .content h1, .wiki-page .rich-content h1, .wiki h1 {
margin: 0;
padding: 0;
margin-bottom: 5px;
padding-top: 20px !important;
border-bottom: 1px dotted #515D6B;
line-height: 1em;
}
 
.rich-content h2, #tinymce h2, .postview .content h2, .wiki-page .rich-content h2, .wiki h2 {
margin: 0;
padding: 0;
margin-bottom: 5px;
padding-top: 15px;
line-height: 1em;
}
 
.rich-content h3, #tinymce h3, .postview .content h3, .wiki-page .rich-content h3, .wiki h3 {
margin: 0;
padding: 0;
margin-bottom: 3px;
padding-top: 15px;
line-height: 1em;
}
 
.rich-content h4, #tinymce h4, .postview .content h4, .wiki-page .rich-content h4, .wiki h4 {
margin: 0;
padding: 0;
margin-bottom: 3px;
padding-top: 10px;
font-size: 90%;
font-weight: bold;
lne-height: 1em;
}
 
.alfresco-share .sticky-wrapper .wiki-page .rich-content, .alfresco-share .sticky-wrapper .wiki {
    font-size: 1em !important;
}

Shorturls mit mod_rewrite erstellen

Die folgende RewriteRule für das Apache-Modul mod_rewrite wird in die htaccess-Datei integriert und bewirkt eine Weiterleitung bei Eingabe der Kurzurl auf die angegebene Seite. Dabei ignoriert die Regel unterschiedliche Groß- und Kleinschreibung und ein nachgestelltes Slash.

RewriteRule ^short?/$ /your/target/page.html [NC,R=301,L]

D.h. die oben angegebene Weiterleitung wird z.B. bei folgenden Schreibweisen durchgeführt:

http://www.example.com/short
http://www.example.com/Short
http://www.example.com/SHORT
http://www.example.com/short/
http://www.example.com/sHoRt/

Nicht aber bei Eingabe von:

http://www.example.com/short/test.de
http://www.example.com/sub/short

https in Apache Webserver aktivieren

Wer SSL-geschützte HTTPS-Verbindungen auf seinen Apache Webserver zulassen möchte benötigt ein SSL-Zertifikat. Dieses gibt es entweder von einer Zertifizierungsstelle oder für Testumgebungen bzw. private Anwendungen reicht auch ein selbstsigniertes Zertifikat. OpenSSL bzw. das Apache Modul mod_ssl sind Voraussetzung für den Betrieb.

SSL-Zertifikat generieren

Für private Server oder Testumgebungen reicht ein selbstsigniertes Zertifikat meist aus. In Live-Umgebungen rate ich dringend Zertifikate von anerkannten Zertifizierungsstellen zu nutzen.

Private-Key

Der erste Schritt für die Erstellung eines Zertifikats ist die Erstellung eines privaten Schlüssels. Diesen sollten Sie zum jetzigen Stand der Technik mit einer Länge von mindestens 2048bit erstellen.

mit htaccess alte Websites auf neue umleiten

Gerade beim Relaunch von Websites lässt sich eine Änderung in der Seiten- und Pfadstruktur nicht immer vermeiden. Damit alte Links aber weiterhin funktioniern kann man alte Seiten mittels Apache htaccess auf neue umleiten.

Einzelseiten umleiten

Redirect 301 /folder/file.html http://www.newsite.com/folder/file.html
Redirect 301 /folder/file.html /newfolder/file.html

Ordner umleiten

RewriteEngine On
RewriteRule ^folder/(.*) http://www.example.com/newfolder/$1 [R=301,L]
RewriteRule ^folder/subfolder/(.*) /folder/$1 [R=301,L]

alle Seiten einer Website umleiten

RewriteEngine On
RewriteRule .* maintenance.html [L]

alle Seiten auf die Hauptseite umleiten

Wollen Sie eine Seite offline nehmen und daher für alle Aufrufe eine einzige Seite anzeigen, dann hilft folgendes Snippet. Sie müssen die Liste der Dateiendungen entsprechend Ihren Bedürfnissen anpassen um Datei-Requests bei Bedarf ebenfalls auf die Landingpage umzuleiten. Nennen Sie Ihre Landingpage index.html oder passen Sie den Dateinamen unten an.

TYPO3-Website in den Wartungsmodus versetzen

Gerade bei TYPO3-Updates kann es zu kurzen Ausfällen der Frontend-Ausgabe kommen. Damit Nutzer diese Ausfälle nicht sehen lässt sich mittels .htaccess für dieses Zeit eine Vorschaltseite anzeigen. Das folgende Snippet hat dabei den Vorteil, dass das TYPO3-Backend dennoch erreichbar bleibt.

RewriteEngine On
RewriteRule ^(typo3/|t3lib/|tslib/|typo3conf/|typo3temp/|_asmaintenance/) - [L]
RewriteRule ^typo3$ typo3/index_re.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule index.php maintenance.html [L]
RewriteRule .* maintenance.html [L]

VPN auf HostEurope-vHosts

Durch das Fehlen des PPP-Kernelmoduls auf den vHosts von HostEurope fällt der Einsatz von PPTP als VPN-Variante leider aus. Abhilfe schafft OpenVPN allerdings nur im Tun-Modus, da ein ebenfalls fehlendes Bridging-Modul den Einsatz der bridged-Variante unterbindet. Der Vorteil des Tun-Modus - er funktioniert auch mit den oben genannten Einschränkungen. Der Nachteil des Tun-Modus - es kann sich immer nur ein Benutzer zur selben Zeit verbinden.

Die folgende Anleitung beschreibt die Konfiguration von OpenVPN im Tun-Modus auf einem Ubuntu-Server.

OpenVPN installieren

Zunächst müssen Sie OpenVPN und OpenSSL auf Ihrem Server installieren.

ImageMagick verursacht hohe Prozessorauslastung auf HostEurope-vHosts

Bei der Einrichtung eines virtuellen Servers von HostEurope bin ich vor dem Phänomen einer extrem hohen Prozessorlast bei Nutzung von ImageMagick gestanden. Dabei dauerte z.B. der Aufruf einer TYPO3-Seite mit Grafiken bis zu einer Minute.

Dabei handelt es sich um ein Problem mit dem durch Ubuntu zu verfügung gestellten ImageMagick-Paket und der Konfiguration der virtuellen Servern durch HostEurope. Abhilfe schafft eine manuelle Installation von ImageMagick ohne MulitCore-Unterstützung. Eine Anleitung findet man in den FAQ's von HostEurope.

https://faq.hosteurope.de/view.php?mode=drucken&content_id=8409

MySQL Datenbank in UTF-8 konvertieren

Um eine Datenbank im laufenden Betrieb in UTF-8 zu konvertieren bedarf es einiger Anpassungen. Das folgende PHP-Skript erleichtert die Konvertierung.

<?php
 
/* settings */
 
$db = 'test';
$db_host = 'localhost';
$db_username = 'username';
$db_password = 'password';
 
/* action */
 
// connect to db
$dbconection = mysql_connect($db_host, $db_username, $db_password);
if(!$dbconection) {
    echo "Error: Database connection to host '" . $db_host . "' can't be established!" . "<br/><br/>";
    exit(0);
} else {
    echo "Database connection to host '" . $db_host . "' established!" . "<br/><br/>";
}
mysql_select_db($db);
 
// convert
$result = mysql_query('show tables');
if($result) {
    
    echo "Database '" . $db . "' selected!" . "<br/><br/>";  
 
    // convert tables
    if(mysql_num_rows($result)) {
        while($tables = mysql_fetch_array($result)) {
            foreach ($tables as $key => $value) {
                $query = "ALTER TABLE " . $value . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;";
                mysql_query($query);
                if (mysql_error()) {
                    echo mysql_error() . "<br/>";
                    echo "ERROR: " . $query . "<br/>";
                } else {
                    echo "SUCCESS: " . $query . "<br/>";
                }
            }
        }
    }
 
    // set collation to utf8
    $query = "ALTER DATABASE dev_aopwebsites DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
    mysql_query($query);
    if (mysql_error()) {
        echo mysql_error() . "<br/>";
        echo "<br/><br/>" . "ERROR: " . $query . "<br/>";
    } else {
        echo "<br/><br/>". "SUCCESS: " . $query . "<br/>";
    }
 
    echo "<br/><br/><br/>" . "SUCCESS!" . "<br/>";
 
} else {
    echo "<br/><br/><br/>" . "ERROR - Database '" . $db . "' not found!" . "<br/>";
}
 
?>

MySQL Datenbank per Skript sichern

Das folgende Skript sichert eine oder mehrer Datenbanken mittels mysqldump als tar.gz-Dateien. Beachten Sie, dass der Datenbank-Benutzer für das Backup-Skript die folgenden Rechte benötigt: SHOW DATABASES, SELECT, LOCK TABLES, RELOAD.

#!/bin/sh
 
# configure databases
CONF_DB_DATABASE[0]="db1"
CONF_DB_DATABASE[1]="db2"
CONF_DB_DATABASE[2]="db3"
 
# settings
CONF_DB_USER="backup"
CONF_DB_PASSWORD="password"
CONF_DB_HOST="localhost"
CONF_OUTPUT_FILENAME="_`date +%d%m%Y`"
CONF_OUTPUT_DIR="/mnt/backup/mysqldump/"
CONF_OUTPUT_DIR_CLEAN="true"
CONF_TMP_DIR="/tmp/"
 
# clean up output dir
if [ $CONF_OUTPUT_DIR_CLEAN = "true" ]
    then rm $CONF_OUTPUT_DIR*.tar.gz
fi
 
# backup databases
for db in "${CONF_DB_DATABASE[@]}";
do
 
    mysqldump -u $CONF_DB_USER -p$CONF_DB_PASSWORD -h $CONF_DB_HOST $db > $CONF_TMP_DIR$db$CONF_OUTPUT_FILENAME.sql
 
    tar cfz $CONF_OUTPUT_DIR$db$CONF_OUTPUT_FILENAME.tar.gz -C $CONF_TMP_DIR $db$CONF_OUTPUT_FILENAME.sql  >> /dev/null 2>&1
    rm $CONF_TMP_DIR$db$CONF_OUTPUT_FILENAME.sql
 
done

TinyMCE in Alfresco 4 an die eigenen Bedürfnisse anpassen

Ergänzend zu meinem Artikel TinyMCE in Alfresco 3.3 an die eigenen Bedürfnisse anpassen gibt es hier die abgewandelte Konfiguration für Alfresco 4.0. In TinyMCE unter Alfresco 4.0 erkennt dieser leider nicht mehr automatisch ob es sich bei der Textauswahl für den Stil Code/Cite um einen Absatz oder einen Inline-Style (span) handelt, daher muss für beide Fälle ein eigener Stil definiert werden.

Im oben erwähnten Basisartikel wird erklärt in welchen Dateien und an welcher Stelle die Änderungen vorgenommen werden müssen, daher poste ich hier nur den neuen Code.