Website Developer HowTo
Überblick
Alle Webseiten der mdlug website werden via CVS verwaltet. Das Prozedere zum Aktualisieren der Website sieht wie folgt aus:
- DocumentRoot Verzeichnis via CVS auschecken
- Dateien hinzufügen/aktualisieren/löschen
- Navigations-Menüs aktualisieren (optional)
- Änderungen ins CVS-Repository übernehmen
- Downloads bereitstellen (falls notwendig)
- Website aktualisieren
Es ist zu beachten, daß Binär-Dateien (z.B. PDF-, StarOffice-Dateien oder Programme), die hauptsächlich zum Download bereitgestellt werden sollen, NICHT im CVS sondern in einem separaten Verzeichnis auf dem Webserver bereitzustellen sind, um den Ressourcen-Bedarf bzgl. Backup, CVS und Bandbreite zu minimieren.
Im folgenden sind die jeweiligen Aktionen und die zugehörigen Informationen im Detail beschrieben.
DocumentRoot-Ordners via CVS auschecken
Jedes Mitglied des Mdlug-Webteams hat einen eigenen Account auf dem entsprechenden CVS- sowie Web-Server. Dieser ist notwendig, da das CVS-Repository nicht öffentlich sondern nur lokal zugänglich ist. Der Zugriff auf den jeweiligen Server ist nur mittels Secure Shell bzw. Open SSH Client erlaubt/möglich.
Die entsprechenden CVS-Parameter sind:
| Host | cvs.mdlug.de |
|---|---|
| Port | default |
| Pfad | /home/cvs/web |
| Modul | mdlug.htdocs |
An der Kommandozeile könnte ein checkout also z.B. so aussehen:
user.athome /tmp > export CVSROOT=:ext:account@cvs.mdlug.de:/home/cvs/web user.athome /tmp > export CVS_RSH=ssh2 user.athome /tmp > cvs co mdlug.htdocs user.athome /tmp > cd mdlug.htdocs user.athome /tmp/mdlug.htdocs >
- Tipp
-
Je nach Einstellung versucht die ssh oftmals auch ein X-Forwarding aufzusetzen, was zu unnötigen Wartezeiten/Timeouts führt. Um dies zu vermeiden, kann man folgendes Script verwenden und die CVS_RSH Variable auf das entsprechende Script setzen:
#!/bin/sh exec ssh -x "$@"
Dateien hinzufügen/aktualisieren/löschen
Dateien können auf die übliche Art via cvs mit dem add
bzw. delete hinzugefügt bzw. gelöscht werden
(siehe auch CVS Parameter). Zu beachten ist,
daß vor einem cvs delete datei die jeweilige Datei lokal
gelöscht worden sein muß. Anderenfalls ignoriert cvs den Befehl mit
einer entsprechenden Fehlermeldung.
Beispiel:
user.athome /tmp/mdlug.htdocs > cd events/themenabend/ user.athome /tmp/mdlug.htdocs/events/themenabend > cp ../../includes/template.html gnome.shtml user.athome /tmp/mdlug.htdocs/events/themenabend > cvs add gnome.shtml user.athome /tmp/mdlug.htdocs/events/themenabend > rm old.shtml user.athome /tmp/mdlug.htdocs/events/themenabend > cvs delete old.shtml
Dateien können mit jedem für den jeweiligen Dateityp geeigneten Editor geändert werden. Generell werden hier emacs als auch eclipse + oxygen >= 3.0m5 empfohlen, da diese für [s]html und andere XML basierte Dateien ein geeignetes Highlighting, tag insights und eine Verifikation der Dateien unterstützen.
Regeln
Für eine kooperative, effiziente Arbeit ist die Einhaltung "unserer" Standards und Konventionen für Quelltexte zwingend notwendig.
Unterhalb des DocumentRoot-Ordners werden nur Dateien abgelegt, die zur Darstellung der jeweiligen Webseiten notwendig sind.
Alle anderen [Binär-]Dateien, die zum Download vorgesehen sind, werden im separaten Download-Verzeichnis für die Website abgelegt, welches grundsätzlich über das Prefix /download/ zu referenzieren ist (siehe auch Downloads bereitstellen).
Die Datei-Namen menu.xml und menu.html sind für die Erzeugung von Webseiten-Navigations-Elementen reserviert und sind nur für diesen Zweck einzusetzen (siehe Navigations-Menüs aktualisieren).
Alle Ordner sind thematisch in einer Hierarchie aka Baum angeordnet. Es ist darauf zu achten, daß die max. Pfad-Länge aka Tiefe von 4 möglichst nicht überschritten wird (um Nutzern Tipp- bzw. Klick-Orgien zu ersparen).
Jeder Ordner repräsentiert maximal einen Menu-Punkt im Navigations-Menu.
Namen für Ordner als auch HTML-Dokumente bestehen grundsätzlich aus Kleinbuchstaben, sollten möglichst kurz gehalten werden und keine Umlaute oder Sonderzeichen enthalten.
Links (egal ob symbolisch oder hart) sind nicht erlaubt, auch wenn das Dateisystem selbige unterstützt!
-
Als Grundgerüst aka Vorlage für jede HTML-Datei ist die Datei /includes/template.html zu verwenden und die neue Datei mit der Endung .shtml zu versehen, um Server Side Includes nutzen als auch ein einheitliches Layout wahren zu können.
Stile bzgl. Darstellung verschiendener Elemente sind, falls von globaler Bedeutung, in den betreffenden Dateien unter /styles/ festzuhalten.
Der Einsatz von CGI-Scripts ist auf ein Mindestmaß zu reduzieren (siehe auch Welche Sprache für CGIs/Scripting ?).
Alle nicht-öffentlichen Dokumente bzw. Scripte sind unterhalb des Mitgliederbereichs, d.h. im Ordner /intern/ bzw. /download/intern/ bzw. /cgi-bin/intern/abzulegen.
Die Verwendung von Frames sollte in allen Webseiten vermieden werden. Nur wenn es wirklich notwendig und sinnvoll ist (sehr selten), können Frames in Betracht gezogen werden. Problem bei Frames sind einerseits Suchmaschinen (verzweigen nicht in die vom Frame-Dokument referenzierten Seiten) und andererseits starke Probleme beim Handling der Frames/Sessions bzw. Navigation (jeder hat beispielsweise sicher schon mal das Verschachteln einer Seite in sich selbst gesehen ...).
Folgende ids sind reserviert und sollten nur in /includes Dateien verwendet werden, da eine id nur ein einziges mal innerhalb eines Dokuments zur Markierung eines Elements verwendet werden darf (XML Standard):
- head
- menu
- content
- footer
Wurde eine Datei hinzugefügt oder geändert, so ist sie bzgl. Einhaltung des XHTML-Standards zu validieren. Da SSI-Befehle als Kommentare formuliert werden, muß das Dokument auch lokal, d.h. wenn es nicht vom Apache-Server geholt wird, gültig sein.
Ein Möglichkeit zur Validierung ist die Benutzung von xmllint oder oxygen.
xmllint --noout --valid info.shtml
xmllint ist Bestandteil der XML C Bibliothek für GNOME und sollte auf jedem System vorhanden sein, auf dem GNOME 2.x läuft. Erkennt xmllint einen Fehler, so wird dieser ausgegeben, anderenfalls wird nichts ausgegeben.
- Tipp
Um zu vermeiden, daß man mit dem Internet verbunden sein muß, um die Dateien verifizieren zu können (holen der DTDs) bzw. die Validierung etwas schneller vorangeht, kann man XML Kataloge aufsetzen, welche die jeweiligen Public Identifier (z.B. "-//W3C//DTD XHTML 1.1//EN") bzw. System Identifier (z.B. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd") auf eine lokale Datei mapped, welche widerum die entsprechende DTD enthält.
Wer noch keinen solchen Katalog besitzt, kann sich das Paket w3dtds.tgz herunterladen. Informationen bzgl. Software-Vorausetzungen als auch dem Setup findet ihr in der Datei w3dtds.README
Änderungen an kopierten Vorlagen
Grundsätzlich sollte die Vorlage /includes/template.html zur Erstellung von neuen Webseiten genutzt werden (siehe Regeln). Wurde die Vorlage auf eine neue Datei kopiert, sind die markierten Teile entsprechend anzupassen (alles andere sollte so bleiben, wie es ist):
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- $Id: howto.shtml,v 1.7 2004/01/30 04:45:56 elkner Exp $ --> <head> <title>Vorlage: mdlug e.V.</title> <meta name="description" content="Kurzfassung zum Inhalt der Seite"/> <meta name="keywords" content="mdlug,Magdeburg,Linux,Group,Vorlage"/> <meta name="revisit-after" content="14 days"/> <meta name="DC.Subject" content="Betreff der Seite (kurz halten)"/> <meta name="DC.Description" content="Kurzfassung zum Inhalt der Seite"/> <meta name="DC.Identifier" content="http://www.mdlug.de/"/> <meta name="DC.Language" content="de"/> <!--#include virtual="/includes/styles.html" --> </head> <body> <!--#include virtual="/includes/header.html" --> <h1>Vorlage für index.shtml</h1> <p> Hier (zwischen header und footer include) kannst du deinen Kram rein schreiben. Vergiß bitte nicht, auch die meta tags im <i>head</i> und den den <i>title</i> anzupassen. </p> <!--#include virtual="/includes/footer.html" --> <div id="menu"> <!--#include virtual="menu.html" --> </div> </body> </html>
Aktualisierung der Menüs
Wie dem aufmerksamen Leser sicherlich nicht entgangen ist, wird
das Navigationsmenu für eine Webseite über die SSI Anweisung
<!--#include virtual="menu.html" --> geladen.
menu.html selbst wird für jeden Ordner aus der Datei
menu.xml in den in Frage kommenden Ordnern und der Applikation
sitemenu erzeugt. Die Applikation kann von unserem Download-Archiv
(/download/web/) heruntergeladen werden.
Informationen zur Installation/Nutzung findet man in der Datei
sitemenu.README.
Das Programm sucht im Start-Ordner nach der Datei menu.xml, welche zum
Haupt-Menu verarbeitet wird (Format: siehe
menu.dtd). In dieser Datei sind sogenannte
items aufgelistet, die jeweils einen Menu-Punkt repräsentieren.
Enthält ein item einen Verweis auf ein Unterordner
(tag dir), wird im entsprechenden Unterordner wiederum
nach einer menu.xml gesucht, und falls vorhanden diese
wieder auf die gleiche Art und Weise weiterverarbeitet und das so
generierte Menu als Untermenu für den aktuellen Menu-Punkt eingefügt.
Wird der angegebenen Ordner nicht gefunden und wurde nicht das Attribut
traverse="false" angegeben, wird dies mit einer
Warnung quittiert und der jeweilige Eintrag bei der weiteren Verarbeitung
nicht weiter berücksichtigt.
Wurden alle gefundenen menu.xml Dateien verarbeitet, wird aus ihnen eine Datei menu-full.xml (enthält komplette Menu-Struktur) erzeugt und im Start-Ordner abgelegt. Aus dieser Datei wird für alle Ordner, in denen eine menu.xml Datei gefunden wurde, die Datei menu.html erzeugt. Die [Unter-]Menüs, die auf den jeweiligen Ordner (Pfad) zutreffen, sind dabei mit dem Attribut class="mon", der Verweis zum aktuellen Menu-Punkt mit dem Attribut class="selected" versehen worden.
Zuletzt wird noch eine Datei sitemap.html erzeugt, die falls es einen Ordner namens sitemap inkl. menu.xmlgibt, in diesem anderenfalls im Start-Ordner abgelegt wird.
Es ist wichtig zu wissen, daß nicht alle Verzeichnisse "blind" nach einer menu.xml durchsucht werden, sondern nur diejenigen, die in der gerade zu verarbeitenden menu.xml angegeben sind! Damit kann sehr gut gesteuert werden, was dann wirklich im Menu bzw. der Sitemap auftauchen soll.
Zur Veranschaulichung im folgenden ein kleines Beispiel:
- Datei /tmp/test/menu.xml
-
<?xml version="1.0" encoding="ISO-8859-1"?> <menu> <item> <label>Home</label> <desc>Homepage des MDLUG e.V.</desc> <dir name="/" traverse="false"/> </item> <item> <label>News</label> <desc>interne und externe Neuigkeiten</desc> <dir name="news"/> </item> </menu>
- Datei /tmp/test/news/menu.xml
-
<?xml version="1.0" encoding="ISO-8859-1"?> <menu> <item> <label>Verein</label> <desc>Neues innerhalb unseres Vereins</desc> <dir name="verein"/> </item> <item> <label>Anderes</label> <desc>andere Neuigkeiten</desc> <dir name="misc"/> </item> </menu>
sitemenu -Dpath=/tmp/testerzeugt dann z.B. in /tmp/test/news/misc/ folgende menu.html-
<!-- generated by sitemenu --> <ul class="mon"> <li> <p> <a href="/" title="Homepage des MDLUG e.V." >Home</a> </p> </li> <li> <p> <a href="/news/" title="interne und externe Neuigkeiten">News</a> </p> <ul class="mon"> <li> <p> <a href="/news/verein/" title="Neues innerhalb unseres Vereins">Verein</a> </p> </li> <li> <p> <a href="/news/misc/" title="andere Neuigkeiten" class="selected">Anderes</a> </p> </li> </ul> </li> </ul>
Durch die geschickte Anwendung von Stylesheets (siehe /styles/, div#menu und #menu
Einträge) wird diese Liste dann in Form eines Menüs visualisiert. Der
relevante Part in jeder von unserer Vorlage abgeleiteteten HTML-Datei ist:
<div id="menu"> <!--#include virtual="menu.html" --> </div>
- Anmerkung
Prinzipiell ist die Generierung der Menu-Dateien lokal optional (zu Kontrollzwecken), da das entsprechende Script zur Aktualisierung der Webseite auf dem Server grundsätzlich die Dateien neu generiert und somit die bisherigen überschreibt...
Änderungen ins CVS-Repository übernehmen
Tja, prinzipiell gibt es hier nix besonderes zu beachten. Wie gehabt,
in das jeweilige Verzeichnis wechseln, mit einem
cvs update nochmal sichergehen, daß evtl. inzwischen von
jemand anders geänderte Dateien aktualisiert werden und
anschließend ein cvs commit (siehe auch
CVS Parameter). Das könnte wie folgt aussehen:
user.athome ~ > cd /tmp/mdlug.htdocs user.athome /tmp/mdlug.htdocs > cvs update user.athome /tmp/mdlug.htdocs > cvs commit
Downloads bereitstellen
Derzeit gibt es prinzipiell zwei Möglichkeiten, selbiges zu tun:
Auf dem Server einloggen und die Dateien/Ordner an die jeweilige Stelle verschieben (hat den Vorteil, daß die Permissions gleich korrekt gesetzt sind, es sei denn, jemand hat sein umask nicht auf dem default Wert).
Per scp/sftp auf den Server an die jeweilige Stelle kopieren. Nachteil: Anpassung der Permissions.
Ein entsprechendes Web-Frontend ist in Planung, ist aber wie immmer abhängig von der Freizeit des Implementierenden (die i.d.R. gegen 0 konvergiert) :( .
Regeln
Der "download"-Ordner ist
~www/sites/$siteName/download/Beispiel: ~www/sites/test.mdlug.de/download/
Nicht-öffentliche Dateien/Ordner sind grundsätzlich unter
~www/sites/$siteName/download/intern/abzulegen.Die Permissions für Verzeichnisse sollten auf 0775 (rwxrwxr-x) und für Dateien auf 0664 (rw-rw-r--) gesetzt werden
Dateien sollten sinnvoll in Ordnern gruppiert werden.
Website aktualisieren
Ist eine unserer leichtesten Übungen:
Auf dem Server per SSH einloggen
Das Script /usr/local/etc/updateWebHtdocs.sh aufrufen. Falls was nicht in Ordnung ist, steht das da und sollte sich zu Gemüte geführt werden!
Sich 1-2 Bierchen gönnen oder ins Bett gehen ;-).