# Ubuntu Server 18.04 auf Hetzner Cloud Als erstes das System aktualisieren ``` apt update apt upgrade ``` Falls der Port für SSH geändert werden soll: ``` vim /etc/ssh/sshd_config service ssh restart ``` Nun die Firewall aktivieren und die wichtigsten Ports freischalten ``` ufw allow 22 ufw allow 80 ufw allow 443 ufw enable ``` Ein paar hilfreiche Tools installieren: ``` apt install -y htop iftop mytop tcpdump landscape-common mercurial git software-properties-common ``` ## Zeitzone auf Europe/Berlin stellen ``` timedatectl set-timezone Europe/Berlin ``` ## Strorage Box mounten Die Festplatte soll über SAMBA/CIFS gemounted werden, daher müssen die entsprechenden Tools installiert sein: ``` apt install cifs-utils ``` Die Zugangsdaten für die Storagebox werden unter `/etc/storage-bx20-credentials` in folgender Form gespeichert: ``` username= password= ``` In `/etc/fstab` folgende Zeile einfügen: ``` //u138460.your-storagebox.de/backup /mnt/storage-bx20 cifs iocharset=utf8,rw,credentials=/etc/storage-bx20-credentials,uid=82,forceuid,gid=82,forcegid,file_mode=0660,dir_mode=0770 0 0 ``` **Wichtig:** Hier muss ggf. der User und die Gruppe an den jeweiligen Docker-Container angepasst werden. Bisher hat nur die ID und nicht der Name funktioniert und hier in diesem Beispiel auf `82` gestellt, was dem `www-data` entsprechen soll. ## Docker und Docker-Composer installieren Zuerst einmal Docker ``` apt install docker.io ``` Nun Docker-Composer und hier kann man die aktuelle Release-Nr. herausfinden: https://github.com/docker/compose/releases ``` sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` ## Cockpit zur Serverüberwachung ``` add-apt-repository universe apt-get update apt-get install cockpit cockpit-docker ``` `https://ip-address-of-machine:9090` Wenn Cockpit hinter einem Proxy läuft muss folgende `cockpit.conf` in `/etc/cockpit/` erstellt werden (weitere Infos in der [Dokumentation](https://cockpit-project.org/guide/latest/cockpit.conf.5)): ``` [WebService] Origins = https://cockpit.bmen.cc ProtocolHeader = X-Forwarded-Proto LoginTitle = bmens Cockpit AllowUnencrypted = true LoginTo = false ``` und beim Proxyserver müssen folgende Eingräge erfolgen: ``` location / { include /config/nginx/proxy.conf; resolver 127.0.0.11 valid=30s; proxy_pass http://172.18.0.1:9090; proxy_set_header Host https://cockpit.bmen.cc; proxy_set_header X-Forwarded-Proto $scheme; # Required for web sockets to function proxy_buffering off; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Pass ETag header from Cockpit to clients. # See: https://github.com/cockpit-project/cockpit/issues/5239 gzip off; proxy_max_temp_file_size 2048m; } ``` Wenn der Proxy Server von [Linuxserver.io Letsencrypt](https://github.com/linuxserver/docker-letsencrypt/blob/master/README.md) verwendet wird, dann die Firewall folgendermaßen konfigurieren: ``` ufw allow from 172.18.0.0/24 to any port 9090 ``` So können nur die internen Docker-Container auf Cockpit zugreifen und von außen ist Port 9090 geschlossen. ## Wichtige Befehle Festplattenverbrauch ermitteln: ``` df -h ``` Rsync ohne Rechteübernahme (gut für gemountete Laufwerke SAMBA) ``` sudo rsync -rltv --exclude '/storage/var/lib/nextcloud/*' /storage/ /mnt/backup-storage/ ``` Checken ob ein Webservice in localhost läuft. Bei Ausgabe `200` ist alles OK: ``` curl -sL -w "%{http_code}\\n" "http://0.0.0.0:9090" -o /dev/null ``` ## Gute Quellen * Bash-Skripte: https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/ * Cronjobs: https://www.stetic.com/developer/cronjob-linux-tutorial-und-crontab-syntax.html