Установка Nextcloud на Ubuntu 20.04

Прежде чем ставить Nextcloud по этой инструкции, вначале установите LEMP-стек. Если он не установлен, и вы хотите знать как это сделать, то проследуйте по ссылке.

Данная статья создана с небольшой переработкой из статьи про установку Nextcloud для Ubuntu 18

Шаг 1: Скачиваем Nextcloud

Зайдите на сервер и загрузите на него архив Nextcloud. Последняя стабильная версия 20.0.0 на момент публикации. Скачать её можно на https://nextcloud.com/install и выбрав кнопку «Download for server».

Можно wget’ом скачать его на сервер сразу же. Так и сделаем. Скачаем последнюю версию.

wget https://download.nextcloud.com/server/releases/latest.tar.bz2

Распакуем

sudo tar -xjf latest.tar.bz2 -C /usr/share/nginx/

Опция -C указывает путь, куда распакуется Nextcloud. Для его работы понадобится изменить владельца файлов.

sudo chown www-data. /usr/share/nginx/nextcloud/ -R

Шаг 2. Создаём базу данных для Nextcloud

Логинимся на сервер MariaDB нижеследующей командой. С тех пор как MariaDB стала использовать плагин unix_socket для аутентификации, необходимость вводить root пароль отпала. Просто запустим оболочку под sudo.

sudo mariadb

Запуститься оболочка MySQL сервера MariaDB. Начнём процесс установки.

Создадим базу данных для Nextcloud

create database nextcloud;

Создадим пользователя, у которого будут права на эту базу и который будет ей управлять. Имя можно выбрать любое, главное запомнить его. Вместо your-password подставьте свой придуманный пароль.

create user nextclouduser@localhost identified by 'your-password';

Выдайте новому пользователю права на новую базу данных

grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';

Примените изменения

flush privileges;

exit;

Шаг 3. Создаём конфигурационный файл nginx для Nextcloud.

Создайте файл nexcloud.conf в директории /etc/nginx/conf.d/

sudo nano /etc/nginx/conf.d/nextcloud.conf

Вставьте нижеследующий текст в новый файл. Жирным начертанием выделены строки на замену

 server
 {
     #listen 80; #Включение http, закомментируйте строку ниже
     listen 443 ssl http2; 
     server_name nextcloud.your-domain.com;
    ssl_certificate /etc/nginx/cert/server.crt;
    ssl_certificate_key /etc/nginx/cert/server.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH";

     # Add headers to serve security related headers
     add_header X-Content-Type-Options nosniff;
     add_header X-XSS-Protection "1; mode=block";
     add_header X-Robots-Tag none;
     add_header X-Download-Options noopen;
     add_header X-Permitted-Cross-Domain-Policies none;

     #This header is already set in PHP, so it is commented out here.
     #add_header X-Frame-Options "SAMEORIGIN";

     # Path to the root of your installation
     root /usr/share/nginx/nextcloud/;

     location = /robots.txt {
         allow all;
         log_not_found off;
         access_log off;
     }

     # The following 2 rules are only needed for the user_webfinger app.
     # Uncomment it if you're planning to use this app.
     #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
     #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
     # last;

     location = /.well-known/carddav {
         return 301 $scheme://$host/remote.php/dav;
     }

     location = /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
     }

     location ~ /.well-known/acme-challenge {
       allow all;
     }

     # set max upload size
     client_max_body_size 512M;
     fastcgi_buffers 64 4K;

     # Disable gzip to avoid the removal of the ETag header
     gzip off;

     # Uncomment if your server is build with the ngx_pagespeed module
     # This module is currently not supported.
     #pagespeed off;

     error_page 403 /core/templates/403.php;
     error_page 404 /core/templates/404.php;

     location / {
        rewrite ^ /index.php$uri;
     }

     location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
     }

     location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
      }

     location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
     }

     location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
     }

     # Adding the cache control header for js and css files
     # Make sure it is BELOW the PHP block
     location ~* \.(?:css|js)$ {
         try_files $uri /index.php$uri$is_args$args;
         add_header Cache-Control "public, max-age=7200";
         # Add headers to serve security related headers (It is intended to
         # have those duplicated to the ones above)
         add_header X-Content-Type-Options nosniff;
         add_header X-XSS-Protection "1; mode=block";
         add_header X-Robots-Tag none;
         add_header X-Download-Options noopen;
         add_header X-Permitted-Cross-Domain-Policies none;
         # Optional: Don't log access to assets
         access_log off;
    }

    location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
         try_files $uri /index.php$uri$is_args$args;
         # Optional: Don't log access to other assets
         access_log off;
    }
 } 

Включение HTTPS

[…]Здесь в оригинале были шаги по включению https, но я считаю это темой отдельной статьи, так как там используется получение сертификатов через LetsEncrypt. Можете глянуть в оригинале. […]

Но если кратко, то рекомендую создать в папке nginx самоподписные сертификаты

sudo mkdir /etc/nginx/cert
cd /etc/nginx/cert
sudo openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -nodes -days 3650 -subj '/CN=localhost'

Не забудьте перезапустить nginx

sudo systemctl reload nginx

В конфиге выше, строчки для включения http закомментированы. Если кому-нибудь нужен обычный доступ к облаку по http, то закомментируйте строчку с 443 и с путями к сертификатам.

После всего на обратном прокси (если он у вас есть конечно) можете указать путь до этого сервера по https протоколу.

Шаг 4. Установка php-модулей.

Выполните нижеприведённую команду, чтобы установить требуемые или рекомендованные модули php для Nextcloud.

sudo apt install php-imagick php7.4-common php7.4-gd php7.4-json php7.4-curl  php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl

Финиш. Заключительные штрихи

Для большей безопасности поменяем папку с данными и не будем хранить их в корне веб-сервера. Расположим их, например, в
/usr/share/nginx/nextcloud-data, используя следующую команду

sudo mkdir /usr/share/nginx/nextcloud-data

Сделаем владельцем этого каталога пользователя www-data

sudo chown www-data. /usr/share/nginx/nextcloud-data -R

P.S. Если вы следовали советам статьи по установке LEMP, то удалите файл default.conf. Если его не удалить, то будет показываться окно приветственной страницы nginx.

sudo rm /etc/nginx/conf.d/default.conf

Можно ещё удалить файл default в /etc/nginx/sites-enabled/, если вы хотите заходить на nextcloud по http и сделали необходимые изменения в файле конфига.

sudo rm /etc/nginx/sites-enabled/default.conf

Теперь заходим на https://nextcloud_IP/ и видим окно установки. (Или заходим на http://nextcloud_ip/, если отключили в конфиге nginx https)

Вводим имя администратора, придумываем пароль. Ниже указываем путь до каталога данных Nextcloud, вписываем имя пользователя базы данных («nextclouduser»), пароль пользователя к базе данных (в данном случае это «your-password»), имя базы данных («nextcloud»). В новых версиях Nextcloud снимаем галочку на «Установить рекомендуемые приложения». Их можно поставить позже, в том числе и OnlyOffice. Жмём кнопку «Завершить установку»

Установка завершена. Как видно, заметных отличий от установки в 18 убунте нет. Но для быстрой установки, чтобы не путаться в версиях php-fpm я написал данную статью.

Впереди немного настроек и настройка резервного копирования. Ну и если хочется посмотреть видео установки, то оно ниже — основано на статье про установку Nextcloud на Ubuntu 18

Подписаться
Уведомить о
guest

3 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Роман
Роман
3 лет назад

Первый вход на сайт:
Ошибка
Не установлен PHP-модуль zip.
Попросите администратора сервера установить этот модуль.
Модули PHP были установлены, но они все еще перечислены как недостающие?
Пожалуйста, попросите вашего администратора перезапустить веб-сервер.

Роман
Роман
3 лет назад
Ответить на  Роман

Перезагрузил всю систему — заработало. Спасибо за инструкции!

Для хранения данных монтирую другой диск в raid1, и хочу хранить /home/nextcloud-data, выдает ошибку: «Невозможно создать или записать в каталог данных /home/nc-data», права на паку поменял. Что не так?

Будет ли инструкция как теперь это все бекапить?