In meinem letzten Artikel zur behandelten Nische habe ich ein schnelles ownCloud eingespielt und begleitend die Firma Turnkey Linux mit ihren schlüsselfertigen Debian-basierten Templates vorgestellt. Leser Gunnar fragte an, ob man fürs häusliche LAN auf ähnlicher Basis innerhalb des Proxmox VE eine Virtual Machine mit ownCloud erstellen könnte, welche aber von vornherein mit Nginx als Webserver und MySQL anstelle von SQLite (vermeidet Performanceprobleme) werkelt …
Turnkey Appliance nicht immer optimal
Nun, dem Gunnar möchte ich hiermit eine Idee liefern und nachfolgend eine schnelle Quick-and-dirty Installation aufzeigen. Am Ende haben wir eine VM mit einem aktuellen Ubuntu Server und der wünschenswerten Anpassung der locales. Die ownCloud Seiten werden von Nginx mitsamt PHP-FPM ausgeliefert, das gewünschte MySQL ist konfiguriert und dank des webroot /var/www und dem apt-get haben wir ‘für alle Zeit’ ein leicht zu aktualisierendes System. Da braucht es kein Webmin mehr, wie es allen Turnkey Templates zueigen ist. Und es ist kein Apache mehr da, denn wozu sollte man im Zeitalter von Nginx noch Apache hernehmen?
Unter der Voraussetzung, dass auf dem Heimserver bereits ein Proxmox VE läuft, kann das alles kann in 15 Minuten geschafft sein!
Berücksichtigt bitte beim Nachahmen der nachfolgenden Installationsprozedur zwischenzeitliche Updates der Pakete und ggf. damit einhergegangene geänderte Dateinamen. IPs, DNS und Datenbank-Account sind natürlich auch individuell einzurichten.
Eine schnell erstellte VM mit allem drin
Als erstes wollen wir dem Proxmox das passende Linux Template einverleiben. Wir öffnen eine Konsole, loggen uns per SSH ins Proxmox ein und wechseln ins Verzeichnis /var/lib/vz/template/cache. Dorthin laden wir von der OpenVZ Website mit den precreated Templates einen aktuellen Linux Server 13.10 (64-Bit).
ssh root@lustige-proxmox-ip.heimnetz
cd /var/lib/vz/template/cache
wget http://download.openvz.org/template/precreated/ubuntu-13.10-x86_64.tar.gz
Wir wechseln ins Web Interface von Proxmox und generieren uns dort einen neuen OpenVZ Container mit Klick auf den Button Erstelle CT. In dem kleinen Tochterfenster vergeben wir eine freie VM ID, denken uns einen lustigen Hostnamen aus wählen das wichtige Kennwort für den Linux Root-Nutzer. Im nächsten Karteireiter storage aussuchen und einen tiefer dann aus dem Menü das eben vorbereitete Ubuntu Server Template wählen. Button Vorwärts drücken, hier RAM, Swap, Disk-Größ und Rechenkerne zuteilen, dann erneut Vorwärts.
Im Karteireiter ‘Netzwerk’ vergeben wir eine (noch freie) fixe lokale IP (wie etwa 192.168.1.123) für die im heimischen Netz dienende ownCloud. Der folgende Karteireiter DNS kann mit dem Wert im Feld ‘DNS domain’ für unseren häuslichen Einsatzzweck so belassen werden. Button Vorwärts, Button Abschließen.
Die neue VM klicken wir im Proxmox VE mit der rechten Maustaste und START.
An dieser Stelle konfigurieren wir schnell den lokalen DNS Server derart, dass sich die neue ownCloud Installation ohne Eingabe der numerischen IP-Adresse aufrufen lässt. In diesem Beispiel läuft eine lokale IPFire Appliance, ja unsere Lieblings Firewall-Allzweck-Netzwerk-Distribution, welche das kuschelige LAN bereits als ‘heimnetz’ führt (festgelegt im IPFire unter Netzwerk > DHCP-Server > dhcp > Grünes Interface > Domain-Name-Suffix). Für die gewählte IP 192.168.1.123 erstellen wir einen host mit Namen ‘testwolke’, was unter IPFire unter Netzwerk >Hosts bearbeiten > host hinzufügen schnell festzulegen ist. Also Host IP-Adresse 192.168.1.123 und Hostname testwolke.
Die so erstellte testwolke.heimnetz wird für unseren Ngnix virtual host und SSL noch wichtig werden.
Per SSH geht’s in den neuen Ubuntu Server und es wird Locale eingedeutscht:
apt-get install language-pack-de
update-locale LANG=de_DE.UTF-8
locale-gen --purge --no-archive
update-initramfs -u -k all
Und jetzt weg mit Apache2, wahrlich Quick-and-dirty:
apt-get remove apache*
Und Nginx, PHP5-FPM, MySQL und Kram drauf (ownCloud holen wir in diesem Beispiel bewusst nicht über den Paketmanager):
apt-get install nginx php5-fpm php5-cli php5-mcrypt php5-gd php5-json php5-mysql mysql-server mysql-client smbclient nano
Jetzt erstellen wir schonmal das SSL-Zertifikat:
cd /etc/ssl/nginx
openssl genrsa -out testwolke.key 2048
openssl req -new -key testwolke.key -out testwolke.csr
openssl genrsa -out testwolke.key 2048
openssl x509 -req -days 365 -in testwolke.csr -signkey testwolke.key -out testwolke.crt
Nun erzeugen wir mit dem Texteditor nano (mit Blick auf die Zeilenanzahl alternativ mit Cyberduck per SFTP) einen passenden virtual host, welcher am Ende in /etc/ngninx/sites-enabled liegen muss:
nano /etc/nginx/sites-available/testwolke.conf
mit folgendem Inhalt:
server {
listen testwolke.heimnetz:80;
server_name testwolke.heimnetz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name testwolke.heimnetz;
ssl on;
ssl_certificate /etc/ssl/nginx/testwolke.crt;
ssl_certificate_key /etc/ssl/nginx/testwolke.key;
root /var/www/owncloud/;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location / {
# The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
}
}
Mit CTRL+X und J (und ENTER) das Setup speichern.
Per folgendem Kommando den Symbolic Link dort erstellen, wo Nginx auch hinguckt:
ln -s /etc/nginx/sites-available/testwolke.conf /etc/nginx/sites-enabled/testwolke.conf
Jetzt zeigt die ganze Phalanx auf den webroot /var/www/owncloud und da is ja noch gar nix … Also ändern wir das ganz schnell und holen von den ownCloud Downloads einen aktuellen build, entpacken ihn an den rechten Fleck und setzen die Rechte zugunsten www-data:
ar xvf owncloud-6.0.1.tar.bz2
mv owncloud /var/www
rm owncloud-6.0.1.tar.bz2
chown -R www-data:www-data /var/www
Wir erzeugen die Datenbank wolkedb, den zugehörigen user wolkedbuser und das Passwort UltraGeheim:
mysql -uroot -p
create database wolkedb character set utf8;
create user 'wolkedbuser'@'localhost' identified by 'UltraGeheim';
GRANT ALL PRIVILEGES ON wolkedb.* TO wolkedbuser IDENTIFIED BY "UltraGeheim";
quit
Da alles fertig ist, können wir Nginx’s Aufmerksamkeit auf die neue ownCloud Installation lenken:
service nginx restart
Nun im Browser http://testwolke.heimnetz eingeben und das dürfte sogleich in https://testwolke.heimnetz umgemünzt werden.
Die frische ownCloud Seite fragt sogleich nach der gewünschten Datenbank. Wir wählen MySQL und tragen die Details rund um die eigens erzeugte wolkedb Datenbank ein.
Viel Spaß!