14498
Kommentar:
|
14582
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 334: | Zeile 334: |
https://www.drupal.org/project/easycron -Drupal cron module | |
Zeile 340: | Zeile 341: |
* http://wiki.nginx.org/Drupal | * http://wiki.nginx.org/Drupal ---- CategoryCategory |
Inhaltsverzeichnis
- Drupal auf CMS & exo
- Drupal auf wwwusers-ng
- veraltet: svn
- Prod./Dev Server synchronisieren (mit svn)
- Anzeige einer falschen Kalenderwoche
- Drupal 7
- Links
Drupal auf CMS & exo
Allgemeines
Cronjobs
Drupal kann durch Cronjobs Newsfeeds holen, nach Updates suchen usw.. Hier bietet sich entweder das Drupal Modul poormanscron an oder wie bei systemausfall ein Script, das in cron.hourly steht mit folgendem Inhalt:
wget -q -O - https://<meine.drupal.url>/cron.php
Development, Performance
Mit dem Modul devel lässt sich gut nachvollziehen, wieviel Datenbankzugriffe eine erstellte Seite macht und wieviel Speicher sie benötigt. (Vorsicht das verlangsamt ungemein!)
pecl uploadprogress
aptitude install php5-dev dh-make-php pecl install uploadprogress
Drupal Multiseite
neue Domain bzw. Unterseite anlegen
- passenden URL Eintrag in webproxy setzen
- DB-Nutzer + Datenbank anlegen
- im datenbank-Server dazu phpmyadmin starten (a2ensite phpmyadmin; apache2ctl graceful)
neuen Nutzer erstellen sollte mit drupal_ beginnen z.B. "drupal_moewenshiet", dann bleibt eine Multisiteinstallation in einer großen DB übersichtlich
- Hostzugriffe über das Textfeld begrenzen
Passwort generieren und merken
- "Erstelle eine Datenbank mit gleichem Namen und gewähre alle Rechte" auswählen
- keine globalen Rechte vergeben
- phpmyadmin (a2dissite phpmyadmin; apache2ctl graceful)
- in der Apacheconfig der entsprechenden Domain (siehe sites-available) die URL auf die Drupal Documentroot verweisen
- in Drupal das Verzeichnis sites/default kopieren auf den Namen der neuen URL (Slashes werden zu Punkten)
!http://subdomain.systemausfall.org/moewenshiet -> .../sites/subdomain.systemausfall.org.moewenshiet
!http://www.moewenshiet.foo -> .../sites/www.moewenshiet.foo
- in der Datei .../sites/moewenshiet.../settings.php
den Parameter $db_url mit den DB Zugangsdaten der neuen Site füttern
$base_url auch entsprechend anpassen
für die neue Seite das install.php Script aufrufen (z.B. !http://subdomain.systemausfall.org/moewenshiet/install.php)
Info: Fall es Probleme mit dem Login gibt, kann das an Sonderzeichen im Passwort liegen. In diesem Fall entweder die Sonderzeichen escapen oder auf sie verzichten.
- die Formularfelder ausfüllen, dann wird der Adminuser angelegt und die DB mit Tabellen gefüllt
- Schöne URLs ermöglichen (sonst gibt es eine Umleitung zur sao-Webseite mit Zugangsverweigerung):
in der /var/www/drupal-sao/.htaccess folgende Zeilen einfügen:
# moewenshiet RewriteCond %{REQUEST_URI} ^/moewenshiet/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ /moewenshit/index.php?q=$1 [L,QSA]
- cronjob einrichten
z.B. in /etc/cron.hourly/drupal-cron-update folgendes eintragen:
wget -q -O - http://subdomain.systemausfall.org/moewenshiet/cron.php
- fuer helper Scripte die Domain auch in /data/drupal-sitenames eintragen
- das war's auch schon
Module und Themes
Bei einer Multisites Installation liegen zusätzliche Module und Themes im Verzeichnis .../sites/all/[modules|themes].
Drupal Core Update einspielen (ohne svn/cvs)
Vorarbeiten
- internes Backup machen
evtl. noch per Hand ein mysqldump der Datenabnk anstoßen
- neuen Drupal-Core nach /data/Drupalsoftware runterladen
- nach /data/drupal-x.x entpacken
- chown -R www-data. /data/drupal-x.x
- UPGRADE.txt lesen
Update
- als Admin anmelden und die Seite in den Wartungsmodus versetzen
- Während der folgenden Schritte nicht das Browserfenster schließen, damit die Anmeldung beim Update aktiv bleibt!
- Änderungen und zusätzliche Dateien aus der alten Drupalroot in die neue übernehmen. Das sind:
- /modules/ldap...
- /profiles/translations
- /sites/
- .htaccess und favicon.ico
- im neuen Drupalroot sites/default/settings.php:
- $update_free_access = TRUE; setzen
symbolishen Link unter /var/www auf neue Drupalroot setzen; apache2ctl graceful
- $URL/update.php aufrufen (läuft jetzt mit dem php Code des neuen Drupal Cores)
- Coremodul Updates durchführen (einfach durch die Seite klicken..)
Aufräumen
- $update_free_access = FALSE; setzen
- Wartungsmodus ausschalten
- veraltete, unbenutzte Module/Themes löschen
- Archive für aktualisierte Module und Themes im neuen Drupalroot entpacken und die alten damit ersetzen
Drupal Core Update einspielen (mit cvs)
- der Code für Drupal wird per cvs geholt
tägliche Backups mittels rdiff-backup & mysqldump sichern ältere Zustände
- damit vereinfacht sich das Update etwas und frühere Versionen sind leicht wieder rekonstruierbar
Ablauf
- Seiten in Offline-Modus schalten
- DB Backup anlegen und rdiff-backup ausführen
Code für Drupal 6.7 holen (in trunk):
cvs update -r DRUPAL-6-7 -dP
- update.php starten
- Seite online schalten
Drupal Module aktualisieren
Mit drush (DRUpal SHell) lassen sich installierte Module bequem per ssh aktualisieren.
einmalige Vorbereitung
sieh Abschnitt Drush
Updates
- Backup der DB und des Drupal Verz. anlegen!
- DB wird nächtlich gesichert, per Hand anschmeissen
- rdiff-backup ausführen (einfach den existierenden cronjob starten)
in settings.php $update_free_access = TRUE; setzen und update.php im Browser ausführen oder
dann in apt-get Manier:
drush.php -l my.fancy.site.org refresh drush.php -l my.fancy.site.org update
- anschließend $update_free_access wieder auf false setzen
automatisierte Multisite Modul Updates
einfach /scripts/update-drupal-modules.sh aufrufen
- Damit werden die neuesten Modulversionen runtergeladen und eingespielt. Wenn $update_free_access vorher auf TRUE gesetzt wurde, wird auch gleich die Datenbank aktualisiert.
- Händisches Überprüfen der wichtigsten Funktionen in allen Drupalinstanzen bleibt abschliessend leider nicht aus. Mit "simpletest" könnte das evtl. noch automatisiert werden.
im Script steht in etwa folgendes:
## update script for drupal multisite systems ## please keep $drupalsites up to date! drupalsites="http://one.drupal.instan.ce http://another.drup.al/instance ..." for sitename in `cat ${drupalsites}`; do echo "drush update for http://${sitename}"; ## recieve status of modules drush.php -l http://${sitename} refresh ## install new modul versions and update db ## set $update_free_access = TRUE in settings.php drush.php -l http://${sitename} update ## for simpletest #drush.php -l http://${sitename} test mail done }} == Backups == === Database Backup === * tägliche DB Backups liegen in der Datenbank Domain * DB einer Site dumpen: {{{ drush.php -v -l http://site.domain.org sql dump > site-sql-dump
- dafür muss drush installiert und das drush-sql-modul für die site aktiviert sein
Datei Backup
- täglicher cronjob von rdiff-backup
Prod./Dev Server synchronisieren (mit rsync)
Um Updates, neue Module, experimentelle Dinge erst in einer Entwicklungsumgebung zu testen, bietet sich eine Entwicklungsumgebung an, die mit der Produktivumgebung synchronisiert wird. Falls die Änderungen vom Dev. Server später per Script auf dem Prod. Server eingepflegt werden sollen (per sql dump), dann muss die Seite auf dem Prod. Server vorher in den offline Modus gebracht werden, damit dort zwischendurch keine Änderungen stattfinden.
prinzipieller Ablauf
- alle Caches löschen
- DB sichern und auf Devserver schieben
- auf Devserver drush.php -l ... sync
- und anschließend wieder in die andere Richtung
rsync Spicker
Wichtig: rsync synchronisiert nicht (wie z.B. unison es kann) es wird nur repliziert (also ein Kopie angelegt)
- rsync avuzn /quelle /ziel
- -a Archiv Modus
- -v rsync gibt sich gesprächig
- -u neuere dateien im ziel werden nicht überschrieben
- -z komprimiert
- -n oder auch --dry-run führt nicht wirklich aus
- --delete löscht Dateien im ziel
Drupal auf wwwusers-ng
Erzeugung einer neuen Drupal-Instanz
Dateien, Datenbank, ...
Verwaltungsskript aufrufen:
/data/scripts/manage-drupal.sh add test https://systemausfall.org/test lars /home/lars/drupal_test
Nun ist alles erledigt:
- site-Directory angelegt und verlinkt
wegen der Besonderheiten unserer proxypass-Konfiguration wird zusätzlich eine sites.php-Datei erzeugt
- Datenbank und -nutzer angelegt
settings.php eingerichtet
- Äquivalent für die Anpassung der htaccess-Datei (für lesbare URLs) umgesetzt
Apache2-Konfiguration
Im Falle einer Domain-Instanz sollte alles fertig sein. Die Konfigurationsdatei liegt unter /data/etc/apache2/drupal-htaccess.d/.
Im Falle einer Pfad-Instanz unterhalb von systemausfall.org muss noch ein Eintrag in der userdir-mapping.d-Datei des Nutzers hinzugefügt werden:
echo "/URL-PATH /data/drupal" >>/data/etc/apache2/userdir-mappings.d/USER
Anschließend musst du die Proxy-Konfigurationsdatei aktualisieren:
/data/scripts/update-vhosts.sh
veraltet: svn
neue Drupalinstanz
- in's svn einpflegen ..
- aus der Kopie des sites/default Verzeichnisses, also aus dem neuen sites/www.moewenshiet.foo die ".svn" Verzeichnisse entfernen:
find . -name .svn -type d -exec rm -r '{}' \;
- dann die Dateien dem svn hinzufügen:
svn add sites/www.moewenshiet.foo
- hochladen nicht vergessen
svn commit
- aus der Kopie des sites/default Verzeichnisses, also aus dem neuen sites/www.moewenshiet.foo die ".svn" Verzeichnisse entfernen:
== update einspielen =
alle Drupalinstanzen sind im svn hinterlegt, die aktuelle Seite läuft immer in trunk, ältere versionen liegen in tags
- aktuellen trunk taggen und verschieben:
svn cp trunk tags/drupal-6.6
- Code für Drupal 6.7 holen (in trunk):
cvs update -r DRUPAL-6-7 -dP
- nur wenn mit svn mv trunk geleert wurde:
- alle geänderten und zusätzlichen Dateien aus tags in trunk kopieren
- themes, modules, translation
- .svn Verz. entfernen:
find trunk/* -type d -name .svn -exec rm -r '{}' \;
- alle geänderten und zusätzlichen Dateien aus tags in trunk kopieren
Prod./Dev Server synchronisieren (mit svn)
Um Updates, neue Module, experimentelle Dinge erst in einer Entwicklungsumgebung zu testen, bietet sich eine Entwicklungsumgebung an, die mit der Produktivumgebung synchronisiert wird. Falls die Änderungen vom Dev. Server später per Script auf dem Prod. Server eingepflegt werden sollen (per sql dump), dann muss die Seite auf dem Prod. Server vorher in den offline Modus gebracht werden, damit dort zwischendurch keine Änderungen stattfinden.
Schritte auf Prod. Server
- svn status
- dann evtl. svn add, svn commit
- DB dumpen (mit drush)
Schritte auf Dev. Server
- svn up
mysql -p root -p < site-sql-dump
Anzeige einer falschen Kalenderwoche
Drupal 7
Blitzinstallation mittels Drush
debian/squeeze installieren + webserver & datenbank (konfiguration im detail lass ich hier mal aus)
- drush aus squeeze-backports installieren (siehe unten)
dann im datenverzeichnis:
drush dl drupal mv drupal-7.x neue_seite drush si standard --db-url=mysqli://dbusername:dbpassword@localhost/neue_seite --clean-url=0 --site_name="Neue Seite"
- anschließend im browser weitermachen, standard user/passwd nach installation ist "admin"
- wer für 'ne Testumgebung sqlite nutzen möchte ändert den Parameter für db-url zu "sqlite:/pfad/zur/sqlite/datenabankdatei"
hilfreiche Nacharbeiten
- drush dl admin_menu; drush en admin_menu; drush dis toolbar
Drush
- Drush wird nicht mehr als Drupal Modul installiert, sondern als tarball runtergeladen und dann wie ein gewöhnliches Script ausgeführt.
Drush 3 in Debian squeeze
aptitude install drush
- installiert Drush 3.xx
Drush 4 in Debian squeeze-backports
folgendes in /etc/apt/sources.list eintragen:
deb http://backports.debian.org/debian-backports squeeze-backports main
- danach:
aptitude update aptitude -t squeeze-backports install drush
- installiert Drush 4.xx
Drush 5 via PEAR installieren
pear channel-discover pear.drush.org pear install drush/drush-5.0.0
die aktuelle versionnummer findest du hier http://pear.drush.org/
- Evtl. musst du vorher in /etc/php5/cli/php.ini (für commandline php scripte) das Speicherlimit hochstellen.
- cvs wird für die Moduldownloads gebraucht
Drush Spicker
zusätzlich installierte Module in Datei schreiben:
drush pm-list --type="module" --status="enabled" --no-core > /tmp/installierte_module
Sonstiges
Drupal 7 läuft mit lighttpd + sqlite (gut für lokale Tests und kleine Entwicklungsumgebungen)
install lighttpd php5-cgi php5-cli php5-sqlite sqlitebrowser
später migirieren mit dem Drupal Modul dbtng_migrator
- /etc/php5/cgi/php.ini include "cgi.fix_pathinfo = 1"
an lighttpd.conf ranhängen:
fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php5-cgi", "socket" => "/tmp/php.socket" )))
lighttpd-enable-mod fastcgi ausführen danach lighttpd neu starten
mit deutscher Sprachunterstützung installieren:
cd profiles/standard/translations/ wget http://ftp.drupal.org/files/translations/7.x/drupal/drupal-7.9.de.po
Downloadlink siehe: http://localize.drupal.org/translate/downloads
Admin Menü:
drush dl admin_menu drush en admin_menu drush dis toolbar
Links
https://www.drupal.org/project/easycron -Drupal cron module
http://www.minezone.org/blog/wp-content/uploads/2007/12/drupal-theme-developers-cheat-sheet.pdf
http://www.buschka.at/links (u.a. zu Drupal)