Автоматическая установка и оптимизация Nextcloud 21 с помощью скрипта

2021-03-23 2888 комментарии
Инструкция по установке Nextcloud 21 (nginx, MariaDB, Redis Cache) с помощью скрипта. Так же скрипт выполнит оптимизацию Nextcloud, настройку fail2ban и ufw

Nextcloud - платформа, предлагающая набор программ для создания собственного облачного хранилища.

Вы можете установить Nextcloud с помощью snap пакета: NextCloud: Создаем свое облачное хранилище.

Автоматическая установка и оптимизация Nextcloud 21 (nginx, MariaDB)

Скрипт поддерживает установку в операционных системах Debian 10.8+ (AMD64) и Ubuntu 20.04.1+ (AMD64). Для работы скрипта необходима установка пакета sudo.

Рассматривается установка на чистую систему, в которой не установлены другие инструменты, необходимые для веб-приложений.

В ходе работы скрипта будут подключены следующие репозитории для использования последних версий пакетов: ppa ondrej для установки php 7.4, ppa mainline для установки последней версии nginx, а так же репозиторий mariadb для установки MariaDB 10.5.

Важно. В качестве домена скрипт укажет имя хост системы . Поэтому перед началом работы скрипта, измените имя хоста системы и перезагрузите систему.

Имя хоста можно поменять следующим образом:

sudo hostnamectl set-hostname mydomain.ru

Где mydomain.ru – это название вашего домена.

А так же, дополнительно измените имя хоста в файле hosts:

sudo nano /etc/hosts

Перезагрузите систему.

Создайте папку, в которой будут сохраняться все пользовательские файлы Nextcloud:

mkdir -p /nextcloud-data

Необходимые права доступа (www-data) будут заданы скриптом. Эту папку нужно будет указать в ходе работы скрипта, при появлении соответствующего вопроса.

В терминале выполняем следующие команды:

sudo -s
cd /usr/local/src && apt install -y bzip2 wget

Для системы Debian:

wget https://it-services.c-rieger.de/s/QCzDbdip4qM388P/download -O install.zip

Для системы Ubuntu:

wget https://it-services.c-rieger.de/s/G26kaw2bSdqjQeg/download -O install.zip

Разархивируем архив со скриптом:

apt install -y unzip && unzip install.zip

Важно: на сервере не должны быть установлены веб-сервер Apache2 или NGINX, управление базой данных MariaDB / MySQL или PHP.

Отметьте скрипт как «исполняемый»:

chmod +x install.sh

Запуск скрипта:

./install.sh

В ходе установки Nextcloud будут заданы некоторые вопросы.

При создании базы данных MariaDB, соглашаемся со всеми вопросами, выбрав Y, задаем пароль пользователя root для базы данных.

Будет создана база данных с именем пользователя nextcloud, паролем nextcloud.

Задайте имя Администратора Nextcloud и пароль.

Укажите расположение папки, в которой будут сохраняться все пользовательские файлы Nextcloud. Можно указать папку, которую создали в самом начале (/nextcloud-data).

Установка и оптимизация Nextcloud 21 завершены.

Настройка шифрования домена с помощью сертификата SSL от Let's Encrypt

Для работы по добавлению шифрования создаем технического пользователя и добавляем его в группу www-data:

cd
adduser --disabled-login acmeuser

Можно не добавлять имя пользователя, а оставить по умолчанию, нажав на Enter.

usermod -a -G www-data acmeuser

Задаем техническому пользователю необходимые полномочия для инициирования необходимого запуска веб-сервера при обновлении сертификата:

visudo

Проверяем чтобы в середине файла была следующая запись (если ее нет, то добавляем):

[..]

User privilege specification

root ALL=(ALL:ALL) ALL

[...]

А так же добавляем строку:

acmeuser ALL=NOPASSWD: /bin/systemctl reload nginx.service

Сохраните и закройте файл с помощью комбинации клавиш CTRL+O, затем CTRL + X.

Переключитесь в оболочку технического пользователя (acmeuser), чтобы установить программное обеспечение необходимое для сертификата, а затем снова выйдите из этой оболочки:

su - acmeuser
curl https://get.acme.sh | sh
exit

Настройте соответствующие разрешения, чтобы иметь возможность сохранять в нем новые сертификаты:

chmod -R 775 /var/www/letsencrypt /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt

Снова переключитесь в оболочку технического пользователя:

su - acmeuser

А затем подайте заявку на получение сертификатов SSL:

acme.sh --issue -d your.domain.com --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"

а так же:

acme.sh --issue -d your.domain.com --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"

Название your.domain.com замените на название своего домена.

Выходим из оболочки нового пользователя:

exit

Затем создайте скрипт, который будет проверять и исправлять разрешения (permissions.sh):

nano /root/permissions.sh

Скопируйте и вставьте все строки в файл (в строке /nextcloud-data измените на расположение вашей пользовательской папки Nextcloud):

#!/bin/bash

find /var/www/ -type f -print0 | xargs -0 chmod 0640

find /var/www/ -type d -print0 | xargs -0 chmod 0750

chmod -R 775 /var/www/letsencrypt /etc/letsencrypt 

chown -R www-data:www-data /var/www /etc/letsencrypt

chown -R www-data:www-data /nextcloud-data

chmod 0644 /var/www/nextcloud/.htaccess

chmod 0644 /var/www/nextcloud/.user.ini

exit 0

Сохраните изменения и выйдите из редактора nano с поомщью комбинации клавиш CTRL+0, CTRL+X.

Отметьте скрипт как исполняемый и затем запустите его:

chmod +x /root/permissions.sh
/root/permissions.sh

Удалите использованные ранее самозаверяющие сертификаты из nginx и активируйте новые, полноценные и уже действующие SSL-сертификаты от Let's Encrypt:

sed -i '/ssl-cert-snakeoil/d' /etc/nginx/conf.d/nextcloud.conf

sed -i s/#\ssl/\ssl/g /etc/nginx/conf.d/nextcloud.conf

service nginx restart

Задайте задание cron:

crontab -l -u acmeuser

С этого момента ваши SSL-сертификаты будут регулярно и полностью автоматически обновляться.

Пожалуйста, найдите время и проверьте статус безопасности вашего сервера. Целью должно быть как минимум следующий результат "А +":

Оптимизируйте и обновляйте Nextcloud с помощью скрипта

Создаём скрипт для обновления, оптимизации Nextcloud и установленных приложений:

cd /root
nano upgrade.sh

Вставляем следующее содержимое:

#!/bin/bash

/usr/sbin/service nginx stop

sudo -u www-data php /var/www/nextcloud/updater/updater.phar

sudo -u www-data php /var/www/nextcloud/occ status

sudo -u www-data php /var/www/nextcloud/occ -V

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-primary-keys

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices

sudo -u www-data php /var/www/nextcloud/occ db:add-missing-columns

sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint

sed -i "s/output_buffering=.*/output_buffering=0/" /var/www/nextcloud/.user.ini

chown -R www-data:www-data /var/www/nextcloud

redis-cli -s /var/run/redis/redis-server.sock <<EOF

FLUSHALL

quit

EOF

sudo -u www-data php /var/www/nextcloud/occ files:scan --all

sudo -u www-data php /var/www/nextcloud/occ files:scan-app-data

sudo -u www-data php /var/www/nextcloud/occ app:update --all

/usr/sbin/service php7.4-fpm restart

/usr/sbin/service nginx restart

exit 0

Сохраните изменения и закройте редактор nano комбинацией клавиш CTRL+O, CTRL+X.

Отметьте скрипт как исполняемый и периодически запускайте его от имени привилегированного пользователя:

chmod +x /root/upgrade.sh
/root/upgrade.sh

В качестве хранения и расположения пользовательского каталога, можно использовать файловую систему S3QL: Подключаем Nextcloud к s3ql – файловой системе на базе облачного хранилища.

© . Анатолий Гусляков

Комментарии и отзывы

Добавляя комментарий, ознакомьтесь с Правилами сообщества

Нашли ошибку?