====== Ubuntu ====== * [[ubuntu:manage-users|User verwalten]] ====== Ansible ====== * [[ansible:overview|Übersicht]] ====== Proxmox ====== Hier einige Notizen beim Spielen mit Proxmox. ===== System warten ===== root:# apt-get update root:# apt-get dist-upgrade ===== Ubuntu VM ===== ==== Laufwerk hinzufügen ==== In Proxmox: * VM > Hardware > [Hinzufügen] > Laufwerk ==== Festplatte partitionieren ==== In der SSH-Shell der VM: sudo su lsblk parted /dev/vdb "mklabel gpt" parted /dev/vdb "mkpart primary ext4 1M -1" mkfs -t ext4 /dev/vdb1 ===== Ubuntu Container ===== ==== Container per SSH erreichbar machen ==== Auf dem Proxmox Node: root@pve:~# lxc-attach --name {CONTAINER-ID} Auf dem Container: Die SSH-Konfiguration bearbeiten: PermitRootLogin yes SSH Service neu starten: root@...: ~# service ssh restart ==== Festplatte einbinden ==== Auf den Container: * Mountpoint anlegen * Herunter fahren root@...: ~# mkdir /mnt/hdd root@...: ~# shutdown -h now * Resource hinzufügen In Proxmox, Container > Resourcen > [Hinzufügen |V] > Mount Point Storage: Daten-Festplatte\\ Pfad: /mnt/hdd ==== LAMP Stack installieren ==== Auf dem Container: root@...: ~# apt install lamp-server^ root@...: ~# apt install php-zip php-dompdf php-xml php-mbstring php-gd php-curl php-imagick php-intl unzip Die PHP-Konfiguration bearbeiten: root@...: ~# vim /etc/php/7.4/apache2/php.ini upload_max_filesize = 16G post_max_size = 16G date.timezone = Europe/Berlin MySQL absichern: root@...: ~# mysql_secure_installation MySQL root login umstellen vom Plugin auth_socket auf ein anderes Plugin, wie zum Beispiel caching_sha2_password: mysql> SELECT user,authentication_string,plugin,host FROM mysql.user; mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'MEINPASSWORD'; mysql> FLUSH PRIVILEGES; oder plugin __mysql_native_password__ nehmen ... ==== NextCloud installieren ==== Datenbank und user installieren: root@...: ~# mysql CREATE DATABASE nextcloud; CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'PASSWORD'; GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT; root@...: ~# Nextcloud installieren: root@...:~# cd /tmp && wget https://download.nextcloud.com/server/releases/latest.zip root@...:/tmp# unzip latest.zip root@...:/tmp# mv nextcloud /var/www/ Apache VHost Datei für Nextcloud hinzufügen: ServerAdmin master@domain.com DocumentRoot /var/www/nextcloud/ ServerName containername.local ServerAlias www.demo.domain.com Alias /nextcloud "/var/www/nextcloud/" Options +FollowSymlinks AllowOverride All Require all granted Dav off SetEnv HOME /var/www/nextcloud SetEnv HTTP_HOME /var/www/nextcloud ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Apache Module aktivieren: root@...:~# apachectl configtest root@...:~# a2ensite nextcloud.conf root@...:~# a2enmod rewrite root@...:~# a2enmod headers root@...:~# a2enmod env root@...:~# a2enmod dir root@...:~# a2enmod mime root@...:~# systemctl restart apache2.service root@...:~# chown -R www-data:www-data /mnt/hdd root@...:~# chown -R www-data:www-data /var/www/nextcloud/ root@...:~# chmod -R 755 /var/www/nextcloud/ root@...:~# apt-get install avahi-daemon hosts-Datei anpassen: 127.0.0.1 containername.local ==== SSL-Zertifikat installieren ==== Certbot installieren root@...:~# apt-get install python3-certbot-apache root@...:~# certbot --apache -m DEINE@EMAIL.TLD -d DEIN_FQDN === Zertifikate automatisch erneuern === certbot fügt ein Erneuerungsskript in /etc/cron.d ein, das von einem systemctl-Dienst namens //certbot.timer// verwaltet wird. Status prüfen: $ sudo systemctl status certbot.timer Probelauf zum Testen des Erneuerungsprozess: $ sudo certbot renew --dry-run ==== Nextcloud über DynDNS anbinden ==== === DuckDNS === Zuerst bei [[https://www.duckdns.org/|DuckDNS]] eine Sub-Domain registrieren EIn Bash-Skript für DuckDNS installieren: root@...:~# # Prüfe ob cron verfügbar. Wenn nein - installieren root@...:~# ps -ef | grep cr[o]n root@...:~# # Prüfe ob curl verfügbar. Wenn nein - installieren root@...:~# curl root@...:~# apt install curl root@...:~# mkdir duckdns root@...:~# cd duckdns/ #!/bin/bash echo url="https://www.duckdns.org/update?domains=nc-werner-home&token=01ea9911-3a11-4b33-b36b-ef348a736853&ip=" | curl -k -o ~/duckdns/duck.log -K - root@...:~# chmod 700 duck.sh root@...:~# crontab -e */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1 root@...:~# ./duck.sh === Hetzner DNS === Hetzner bietet eine DNS-Konsole an, bei der DNS-EInträge über eine REST-API aktualisiert werden können. Auf [[https://github.com/FarrowStrange/hetzner-api-dyndns|GitBub bei FarrowStrange/hetzner-api-dyndns]] findet sich ein Skript, das dies tut. Skript über github installieren: # git checkout https://github.com/FarrowStrange/hetzner-api-dyndns.git # cd hetzner-api-dyndns # nano dyndns.sh In der Zeile ''auth_api_token=${HETZNER_AUTH_API_TOKEN:-''}'' das API-Token der DNS-Console eintragen, speichern und beenden. Die ID der gewünschten Zone und damit die Record ID des gewünschten DNS-Records in Erfahrung bringen: $ curl -s -H "Auth-API-Token: DEIN_API_TOKEN" --location 'https://dns.hetzner.com/api/v1/zones' $ curl -s -H "Auth-API-Token: DEIN_API_TOKEN" --location 'https://dns.hetzner.com/api/v1/records?zone_id=ID_DER_ZONE' Schliesslich in die //crontab// eintragen: */5 * * * * ~/hetzner-api-dyndns/dyndns.sh -z 'ID_DER_ZONE' -r 'ID_DES_RECORDS' -n 'KEY_DES_RECORDS' -t 0 -T 'A' > /dev/null 2>&1