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

 

1. Скачиваем Nextcloud

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

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

4. Включение HTTPS

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

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

 

ВНИМАНИЕ!!! Прежде чем ставить Nextcloud по этой инструкции, вначале установите LEMP-стек.

 

1. Скачиваем Nextcloud

 

Зайдите на сервер и загрузите на него архив Nextcloud. Последняя стабильная версия 15.0.4 на момент публикации перевода. Скачать её можно на 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.2-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;

   }

}

---------------------------------------------------------------

 

4. Включение 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 и с путями к сертификатам.

 

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

 

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

 

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

 

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

 

Для большей безопасности поменяем папку с данными и не будем хранить их в корне веб-сервера.

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

 

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

 

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

 

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

 

ВНИМАНИЕ!!! Если вы следовали советам статьи по установке 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. Жмём кнопку «Завершить установку»