Установка Nextcloud на чистый Centos 8

Рассмотрим установку Nextcloud на чистый Centos 8. Для этого нам потребуется Centos 8 в минимальной установке и эта статья.

Содержание

Обновляем систему

Первым делом обновим операционную систему:

sudo dnf update

Подключаем репозитории.

Подключим репозиторий EPEL и Remi. Репозиторий Remi нам нужен для установки последней версии php. Remi не подключается без EPEL. Но в Centos 8 это уже не важно, так как, если устанавливать репозиторий Remi он сам определит, что у вас нет EPEL и установит его. Но команду для установки EPEL я все равно покажу.

EPEL репозиторий :

sudo dnf install epel-release

Remi репозиторий :

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Установка доп. утилит.

Установим утилиты, которые нам рекомендуют в документации:

sudo dnf install wget unzip yum-utils curl bash-completion policycoreutils-python-utils mlocate bzip2

Веб-сервер

Устанавливаем Nginx

Теперь нам нужно установить веб-сервер. В качестве веб-сервера мы будем использовать Nginx.

Как установить Nginx можно посмотреть в статье по ссылке.

Настройка Nginx

Перейдем в папку conf.d для создания файла конфигурации для nextcloud:

cd /etc/nginx/conf.d/

Создадим и откроем для редактирования файл nextcloud.conf:

sudo vi nextcloud.conf

В нем пропишем конфигурацию.

Исходный конфиг на офф. сайте.

Ниже разместил уже отредактированный конфиг. Он уже отредактирован под статью.

Нужно только в строчке server_name cloud.example.com; Заменить cloud.example.com на свой домен или айпи.

Соответственно, если вы меняли или собираетесь менять пути к сертификатам или папке с nextcloud (создание сертификатов и установка описана дальше), тоже нужно отредактировать.

(+) — отмечено, что нужно менять в оригинальном конфиге.

upstream php-handler {
    #server 127.0.0.1:9000; (+)(Закоментировать строку)
    server unix:/var/run/php-fpm/www.sock; #(+)(Прописать путь)
}

server {
    listen 80;
    listen [::]:80;
    server_name cloud.example.com; #(+)(Прописываем свой домен или айпи)
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.example.com; #(+)(Прописываем свой домен или айпи)

    # Use Mozilla's guidelines for SSL/TLS settings
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    # NOTE: some settings below might be redundant
    ssl_certificate /etc/nginx/cert/nextcloud.crt; #(+)(Прописать путь)
    ssl_certificate_key /etc/nginx/cert/nextcloud.key; 	#(+)(Прописать путь)

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    add_header Referrer-Policy "no-referrer" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Download-Options "noopen" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Permitted-Cross-Domain-Policies "none" always;
    add_header X-Robots-Tag "none" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /usr/share/nginx/html/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;

    # The following rule is only needed for the Social app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

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

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

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

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

    location / {
        rewrite ^ /index.php;
    }

    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\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
        fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
        set $path_info $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
        # Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        # Enable pretty urls
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js, css and map files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        add_header Referrer-Policy "no-referrer" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Download-Options "noopen" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Permitted-Cross-Domain-Policies "none" always;
        add_header X-Robots-Tag "none" always;
        add_header X-XSS-Protection "1; mode=block" always;

        # Optional: Don't log access to assets
        access_log off;
    }

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

Проверяем конфиг (лучше проверять после пункта «установка nextcloud». Сейчас мы еще не сделали сертификаты и не распаковали файлы nextcloud. Поэтому будут ошибки):

sudo nginx -t

Перезагружаем nginx (перезагружаем тоже после пункта «установка nextcloud»):

sudo systemctl restart nginx

PHP

Устанавливаем PHP

Как установить PHP можно посмотреть в статье по ссылке.

Какие php модули устанавливать зависит от задач.

Здесь просто приведу минимальный комплект php модулей.

sudo dnf install php php-gd php-mbstring php-intl php-pecl-apcu php-mysqlnd php-opcache php-json php-zip

При этом минимуме Nextcloud будет работать, но, например, он не сможет проверить ваши настройки и выдать советы по улучшению производительности и настроек.

Настраиваем PHP

Для настройки php зайдем в конфиг:

sudo vi /etc/php-fpm.d/www.conf

В конфиге меняем

user = apache
group = apache

На

user = nginx
group = nginx
В строчке listen = /run/php-fpm/www.sock
Дописываем директорию var. listen = /var/run/php-fpm/www.sock

Раскомментируем строки и nobody меняем на nginx

;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660

Результат должен быть таким

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Дальше создаем папку для сессий:

sudo mkdir -p /var/lib/php/session

И даем права nginx на доступ к этой папке:

sudo chown nginx:nginx -R /var/lib/php/session/

Перезапускам php-fpm:

sudo systemctl restart php-fpm

База данных

Устанавливаем и настраиваем базу данных Mariadb

Как установить Mariadb можно посмотреть в статье по ссылке.

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

Как это сделать можно узнать из статьи по ссылке.


Сертификаты для Nextcloud

Мы сделаем самоподписанные сертификаты. На эти сертификаты браузеры будут ругаться, что не могут их проверить.

Создаем папку, где вы мы будем хранить сертификаты (можно создать любую другую папку):

sudo mkdir -p /etc/nginx/cert/

Создаем сертификаты:

sudo openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key

Вам предложат заполнить данные сертификата: страна, город, название организации, почта и т.д. Всего 7 полей для заполнения. Эти данные будут отображаться в сертификате. Их можно пропустить просто нажимая enter или же заполнить.

Выставляем права на папку:

sudo chmod 700 /etc/nginx/cert

С сертификатами закончили.


Установка Nextcloud

Перейдем в папку tmp и скачаем в неё архив (можете выбрать любую другую папку):

Переходим в папку tmp:

cd /tmp

Скачиваем архив с официального сайта Nextcloud (проверяйте ссылку на оф. сайте, там может быть версия новее (по мере возможностей буду обновлять)):

wget https://download.nextcloud.com/server/releases/nextcloud-21.0.0.zip

Распаковываем архив:

unzip nextcloud-21.0.0.zip

После распаковки перемещаем папку nextcloud туда, где у вас будет лежать сайт.

Мы поместим по пути /usr/share/nginx/html/ (обычно сайты размещаются в директории /var/www/, можете выбрать другую на ваше усмотрение)

Переносим архив:

sudo mv nextcloud/ /usr/share/nginx/html/

Переходим в папку куда перенесли nextcloud:

cd /usr/share/nginx/html/

Назначаем nginx владельцем папки nextcloud и ее вложениям:

sudo chown nginx:nginx -R nextcloud/

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

sudo mkdir -p /home/nextcloud

Переходим в папку где будут храниться файлы nextcloud:

cd /home

Назначаем nginx владельцем папки nextcloud и ее вложениям:

sudo chown nginx:nginx -R nextcloud/

Настройка SELinux

SELinux лучше настроить и использовать. Если вы меняли пути, то тут тоже не забудьте поменять.

Настройки для /home/nextcloud.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/home/nextcloud(/.*)?'

Настройки для config.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/config(/.*)?'

Настройки для apps.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/apps(/.*)?'

Настройки для .htaccess.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.htaccess'

Настройки для .user.ini.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.user.ini'

Настройки для logs.

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

Применяем параметры.

sudo restorecon -Rv '/usr/share/nginx/html/nextcloud/'
sudo restorecon -Rv '/home/nextcloud/'

Firewall (firewalld)

Настроим firewalld. Откроем доступ для подключения по https и http протоколу.

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=http

Перезагрузим firewalld.

sudo firewall-cmd --reload

На этом все. Настройки после установки будут позже.

Видео установка Nextcloud на чистый Centos 8

Установка Nextcloud на чистый Centos 8: 1 комментарий

Добавить комментарий

Ваш адрес email не будет опубликован.

17 − 8 =