Grundeinstellungen vornehmen

SERVER=nextcloud.demo.menzel-it.net # Diese Variable hilft uns, den Domainnamen nicht immer eingeben zu müssen.
alias ll="ls -ahl --color=auto" # schönere Auflistung von Verzeichnissen
echo 'alias ll="ls -ahl --color=auto"' >> /root/.bashrc # schönere Auflistung permantent machen
apt update # Repositories updaten
apt upgrade -y # Alles einmal vorher aktualisieren - ist immer gut.
apt install pwgen sudo # Basisinstallation einiger Programme

Automatische Sicherheitsupdates des Systems

apt install unattended-upgrades # Für security-Updates
cat << EOF > /etc/apt/apt.conf.d/20auto-upgrades # Aktivieren der automatischen Sicherheitsupdates
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF
unattended-upgrade -d # Teste mich

Nextcloud herunter laden und verifizieren

wget https://download.nextcloud.com/server/releases/nextcloud-19.0.3.tar.bz2
wget https://download.nextcloud.com/server/releases/nextcloud-19.0.3.tar.bz2.sha256
cat nextcloud-19.0.3.tar.bz2.sha256 # Das ist eine Textdatei
sha256sum -c nextcloud-19.0.3.tar.bz2.sha256 # Überprüfen der Integrität

Installation und Konfiguration der notwendigen Pakete für Nextcloud

apt install apache2 mariadb-server libapache2-mod-php7.3 libapache2-mod-security2 php7.3-gd php7.3-mysql php7.3-curl php7.3-mbstring php7.3-intl php7.3-gmp php7.3-bcmath php-imagick libmagickcore-6.q16-6-extra php7.3-xml php7.3-zip php7.3-ldap php7.3-apcu smbclient # Installation der notwendigen Pakete
mysql_secure_installation # MySQL absichern
systemctl restart mysql #... und neustarten
NC_DB_PWD=$(pwgen 16 1) # Das Passwort, das wir für die Nextcloud-Datenbank verwenden
cat <<EOF >/root/initial.sql
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '${NC_DB_PWD}';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
quit;
EOF
mysql -uroot < /root/initial.sql # Skript anwenden. Das geht unter Debian als root-User auch weiterhin ohne Login!
echo -e "Bitte verwende später folgende Zugangsdaten für Nextcloud:\nHostname: localhost\nDatenbank: nextcloud\nUsername: nextcloud\nPasswort:${NC_DB_PWD}" 
tar -xjf nextcloud-19.0.3.tar.bz2 # die Datei (-f) des BZIP2-Archivs (-j) entpacken (-x)
mv /root/nextcloud/ /var/www/nextcloud #ggf auf Partitionen achten!
chown -R www-data:www-data /var/www/nextcloud # Die Daten sollen allesamt dem Web-User gehören.

sed -i s/ServerSignature\ On/ServerSignature\ Off/g /etc/apache2/conf-available/security.conf # Apache absichern
sed -i s/ServerTokens\ OS/ServerTokens\ Minimal/g /etc/apache2/conf-available/security.conf  # Apache absichern
sed -i s/memory\_limit\ =\ 128M/memory\_limit\ =\ 512M/g /etc/php/7.3/apache2/php.ini # Memory Limit für PHP erhöhen
sed -i s/upload\_max\_filesize\ =\ 2M/upload\_max\_filesize\ =\ 2G/g /etc/php/7.3/apache2/php.ini # Upload-Maximum erhöhen
sed -i s/post\_max\_size\ =\ 8M/post\_max\_size\ =\ 2G/g /etc/php/7.3/apache2/php.ini # Upload-Maximum erhöhen

#opcache
for replaceme in enable=1 interned_strings_buffer=8 max_accelerated_files=10000 memory_consumption=128 save_comments=1 revalidate_freq=2
do
    sed -i s/\;opcache.${replaceme}/opcache.${replaceme}/ /etc/php/7.3/apache2/php.ini 
done

a2enmod mod-security
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod ssl
a2enmod http2
systemctl restart apache2

echo "nix hier" > /var/www/html/index.html

SSL-Zertifikat mit Let’s Encrypt

apt install python-certbot-apache
certbot --apache -d ${SERVER} -d www.${SERVER}
certbot renew --dry-run

Den Virthost einrichten

cat <<EOF >/etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
        ServerName ${SERVER}
        ServerAlias www.${SERVER}
        Redirect permanent / https://${SERVER}/
        DocumentRoot /var/www/nextcloud/
        ErrorLog \${APACHE_LOG_DIR}/nextcloud_error.log
        CustomLog \${APACHE_LOG_DIR}/nextcloud_access.log combineds
</VirtualHost>
<VirtualHost *:443> 
        ServerName ${SERVER}
        ServerAlias www.${SERVER}
        DocumentRoot /var/www/nextcloud/
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/${SERVER}/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/${SERVER}/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
        SSlCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
        SSLHonorCipherOrder on
        Header set Strict-Transport-Security "max-age=15768000; preload"
        Header set X-Frame-Options "SAMEORIGIN"
        Header set Referrer-Policy "no-referrer"
        Header set X-XSS-Protection "1; mode=block"
        Header set X-Content-Type-Options "nosniff"
        ErrorLog \${APACHE_LOG_DIR}/nextcloud_error.log
        CustomLog \${APACHE_LOG_DIR}/nextcloud_access.log combined
        <Directory /var/www/nextcloud/>
                AllowOverride All
                Order deny,allow
                Options +FollowSymlinks
                <IfModule mod_dav.c>
                        Dav off
                </IfModule>

                SetEnv HOME /var/www/nextcloud/
                SetEnv HTTP_HOME /var/www/nextcloud/
        </Directory>
</VirtualHost>
EOF

a2dissite 000-default*
a2ensite nextcloud.conf
apachectl configtest
systemctl restart apache2
systemctl status apache2

Einrichtung via Weboberfläche

Bitte auf die Weboberfläche wechseln und dort die Einrichtung vervollständigen

Objectcache einrichten und Programme ausführbar machen

sed -i "/version/a \ \ 'memcache.local' => '\\\OC\\\Memcache\\\APCu'," /var/www/nextcloud/config/config.php
chmod u+x /var/www/nextcloud/occ
chmod u+x /var/www/nextcloud/updater/updater.phar

Update auf NC20RC2

sudo -u www-data /var/www/nextcloud/updater/updater.phar # Den Updater als WWW-User ausführen

Cronjobs

crontab -u www-data -e # eine Möglichkeit, die Crontab zu erstellen

cat <<EOF >> /var/spool/cron/crontabs/www-data
*/5  *  *  *  * php -f /var/www/nextcloud/cron.php
EOF

Firewall einrichten

ss -tlpn # welche Dienste laufen eigentlich?
apt install ufw # uncomplicated firewall installieren
ufw default deny incoming # grundsätzlich alles ankommende blockieren, soweit nicht explizit erlaubt
ufw default allow outgoing # grundsätzlich alles ausgehende erlauben (Updates,...)
ufw allow ssh # SSH für Verwaltung erlauben
ufw allow http # HTTP für Web erlauben
ufw allow https # HTTPS für Web erlauben
ufw enable # Firewall aktivieren
ufw status verbose # Detailinformationen zur Firewall ausgeben

Aufräumen

rm /root/initial.sql nextcloud-19.0.3.tar.bz2*