-
Notifications
You must be signed in to change notification settings - Fork 141
Server
Diese Anleitung ist lediglich für die Administratoren des Host-Systems. Dies muss nicht von den Labs getätigt werden.
- einzelne VMs für Labs/einzelne Projekte der Labs - je nachdem, wie es vom Lab gewünscht ist (im #codeforde-server Slack-Channel anfragen)
- Port-Forwarding nur für SSH an die VM - die Anwendung selbst soll dann über Nginx laufen, damit z.B. das SSL-Offloading einheitlich auf dem Host stattfinden kann (siehe weiter unten)
./create-new-machine.sh NAME
./add-domain.sh DOMAIN INTERNAL_URL
https://gist.github.com/MorrisJobke/79646f88396213e24d08ea7ec8f219fc
Folgender Befehl erstellt eine virtuelle Maschine mit 10 GB Speicher (unter /var/lib/libvirt/images
), 1 CPU, 512 MB Arbeitsspeicher und einem Ubuntu 14.04.4 Image. Dabei wird ein VNC-Server erstellt der öffentlich unter Port 5900 erreichbar ist und mit einem Passwort gesichert ist. Dieser sollte nur zur Installation genutzt werden.
$ NAME=leipzig_projekt1 virt-install --connect qemu:///system -n $NAME -r 512 --vcpus=1 -f /var/lib/libvirt/images/$NAME.img -s 10 --network network=default,model=virtio -c /opt/images/ubuntu-14.04.4-server-amd64.iso --graphics vnc,listen=0.0.0.0,password=SUPERGEHEIMESPASSWORT --autostart --noautoconsole -v
Der obige Befehl erstellt einen VNC-Server, der nun die Installation des Servers ermöglicht. Hierbei ist darauf zu achten, dass stets auch ein SSH-Server installiert wird.
Für das Port-Forwarding an die neue Instanz einfach in der Datei /etc/libvirt/hooks/qemu.json
einen Eintrag wie folgt hinterlegen:
{
"leipzig_projekt1": {
"interface": "virbr0",
"private_ip": "192.168.122.234",
"port_map": {
"tcp": [[34567, 22]]
}
}
}
Dies leitet am Host den Port 34567
auf den Port 22
des internen Hosts 192.168.122.234
weiter. Der Name muss mit dem beim virt-install
angegebenen übereinstimmen. Die IP-Adress erhält man, in dem man sich noch einmal über die VNC-Session in den neuen Server einloggt und dort ip addr
ausführt oder auf dem Host die vergebenen IP-Adressen mittels arp -an -i virbr0
listet.
Das benutzte Tool für das Port-Forwarding ist libvirt-hook-qemu.
Anschließend sollte noch der VNC-Server geschlossen werden. Hierzu virsh edit leipzig_projekt1
ausführen und folgenden Eintrag aus dem XML-Dokument entfernen:
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='SUPERGEHEIMESPASSWORT'>
<listen type='address' address='0.0.0.0'/>
</graphics>
Nun muss die virtuelle Maschine einmal angehalten und erneut gestartet werden - ein reboot
stoppt den VNC-Server nicht:
$ virsh shutdown leipzig_projekt1
$ virsh start leipzig_projekt1
Am besten jetzt noch einen Shortcut für diesen Host in /etc/hosts
hinterlegen, dass man nicht immer wieder die IP nachschlagen muss (folgende Zeile hinzufügen):
192.168.122.234 leipzig_projekt1
Es kann sich nun mittels folgenden Befehl und dem Port aus dem Schritt "Port-Forwarding" (in diesem Fahl 34567
) eingeloggt werden:
$ ssh [email protected] -p 34567
Um einen virtuelle Maschine zu löschen den Port-Forwarding-Eintrag in /etc/libvirt/hooks/qemu.json
entfernen und folgende Befehle ausführen:
$ virsh destroy leipzig_projekt1
$ virsh undefine leipzig_projekt1
$ rm /var/lib/libvirt/images/leipzig_projekt1.img
Wichtig: Vorab natürlich die neue Domain ins DNS eintragen. ;)
Folgende Befehle kopieren eine Nginx-Konfiguration, setzen die URL/Domain, registrieren die Domain in der Letsencrypt.sh-Konfiguration, beziehen die SSL-Zertifikate, und starten den Nginx neu.
DOMAIN=projekt1.leipzig.codefor.de
INTERNAL=leipzig_projekt1:8080
cp /etc/nginx/sites-available/TEMPLATE /etc/nginx/sites-available/$DOMAIN
sed -i -e "s/EXTERNAL_DOMAIN/$DOMAIN/" /etc/nginx/sites-available/$DOMAIN
sed -i -e "s/INTERNAL_URL/$INTERNAL/" /etc/nginx/sites-available/$DOMAIN
echo $DOMAIN >> /etc/letsencrypt.sh/domains.txt
ln -s ../sites-available/$DOMAIN /etc/nginx/sites-enabled/$DOMAIN
service nginx reload
su letsencrypt -c "~/letsencrypt.sh/letsencrypt.sh -c"
service nginx reload
- mount VM image: https://paolozaino.wordpress.com/2013/08/07/how-to-recover-kvm-virtual-machine-root-password/comment-page-1/
- generate new password hash: http://unix.stackexchange.com/a/198906