Поиск по сайту:

Как установить и настроить Nextcloud в Fedora 32


На этой странице

  1. Предпосылки
  2. Настройка брандмауэра
  3. Установить PHP
  4. Настройка PHP
  5. Установите Nginx
  6. Установить MariaDB
  7. Настройка MariaDB
  8. Скачать Nextcloud
  9. Установить SSL
  10. Настройка SELinux/разрешений
  11. Настройка Nginx для Nextcloud
  12. Установить Nextcloud
  13. Заключение

Nextcloud — это программное обеспечение с открытым исходным кодом для хранения и синхронизации ваших данных на нескольких устройствах. Вы можете рассматривать его как свой собственный клон Dropbox. Но помимо хранения файлов, он также предоставляет дополнительные функции, такие как календарь, контакты, запланированные задачи, потоковая передача мультимедиа и т. д.

Nextcloud предоставляет приложения для Windows, Linux, MacOS и мобильные приложения для Android и iOS, которые вы можете использовать для синхронизации файлов на различных устройствах.

В этом руководстве мы узнаем, как установить и настроить Nextcloud на сервере на базе Fedora 32. Мы также будем устанавливать веб-сервер Nginx вместе с PHP 7.4 и MariaDB.

Предпосылки

  • A server running Fedora 32.

  • A non-root sudo user.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Essential packages.

    $ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
    

    Some of these packages may already be on your system.

Настроить брандмауэр

Первым шагом является настройка брандмауэра. Сервер Fedora поставляется с предустановленным брандмауэром Firewalld.

Проверьте, работает ли брандмауэр.

$ sudo firewall-cmd --state
running

Проверьте текущие разрешенные службы/порты.

$ sudo firewall-cmd --permanent --list-services

Он должен показать следующий вывод.

dhcpv6-client mdns ssh

Разрешить порты HTTP и HTTPS.

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

Еще раз проверьте состояние брандмауэра.

$ sudo firewall-cmd --permanent --list-services

Вы должны увидеть аналогичный вывод.

dhcpv6-client http https mdns ssh

Перезагрузите брандмауэр.

$ sudo systemctl reload firewalld

Установить PHP

Fedora 32 по умолчанию поставляется с PHP 7.4, но чтобы иметь обновленный репозиторий PHP, мы добавим репозиторий REMI.

Установите репозиторий REMI, который является официальным репозиторием Fedora для установки пакетов PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Включите репозиторий remi и отключите репозиторий remi-modular. Это включает репозиторий, необходимый для установки пакетов PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Установите PHP 7.4 вместе с некоторыми дополнительными пакетами.

$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache

Проверьте, правильно ли работает PHP.

$ php --version
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies

Настроить PHP

Откройте файл /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Нам нужно установить для пользователя/группы Unix процессов PHP значение nginx. Найдите в файле строки user=apache и group=apache и измените их на nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Раскомментируйте переменные среды PHP ниже.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Раскомментируйте конфигурацию opcache в последней строке.

php_value[opcache.file_cache] = /var/lib/php/opcache

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Теперь отредактируйте конфигурацию opcache PHP /etc/php.d/10-opcache.ini.

$ sudo nano /etc/php.d/10-opcache.ini

Измените конфигурацию, как показано ниже.

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Выполните следующие команды, чтобы увеличить ограничения загрузки файлов и памяти для PHP.

$ sudo cp /etc/php.ini /etc/php.ini.bak
$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini
$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini
$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini

По умолчанию в каталоге /var/lib/php/ есть 3 файла, владельцем группы которых является apache, но мы используем Nginx. Поэтому нам нужно дать пользователю nginx разрешения на чтение и запись в 3 каталога с помощью setfacl.

$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/

Включите и запустите процесс php-fpm.

$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm

Установите Nginx

Fedora 32 по умолчанию поставляется с последней стабильной версией Nginx.

Установите Нгинкс.

$ sudo dnf install nginx -y

Проверьте, правильно ли он работает.

$ nginx -v
nginx version: nginx/1.18.0

Запустите и включите Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Откройте IP-адрес вашего сервера в браузере, чтобы увидеть следующую страницу. Это означает, что Nginx работает правильно.

Установить MariaDB

MariaDB является заменой MySQL, что означает, что команды для запуска и работы с MariaDB такие же, как и для MySQL.

Fedora 32 по умолчанию поставляется с MariaDB 10.4, которую мы будем использовать.

Установите сервер MariaDB.

$ sudo dnf install mariadb-server

Проверьте правильность установки MariaDB.

$ mysql --version
mysql  Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using  EditLine wrapper

Включите и запустите службу MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Выполните следующую команду, чтобы выполнить настройку по умолчанию, например задать пароль root, удалить анонимных пользователей, запретить удаленный вход в систему root и удалить тестовые таблицы.

$ sudo mysql_secure_installation

Нажатие Enter выбирает вариант по умолчанию (тот, который пишется с большой буквы, в данном случае Y).

Enter current password for root (enter for none): [PRESS ENTER]
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Change the root password? [Y/n] [ANSWER n]
Remove anonymous users? [Y/n] [PRESS ENTER]
Disallow root login remotely? [Y/n] [PRESS ENTER]
Remove test database and access to it? [Y/n] [PRESS ENTER]
Reload privilege tables now? [Y/n] [PRESS ENTER]

Вот и все. В следующий раз, когда вы захотите войти в MySQL, используйте следующую команду

$ sudo mysql

Введите пароль root при появлении запроса.

Настроить MariaDB

Введите следующую команду, чтобы войти в оболочку MySQL.

$ sudo mysql

Создайте пользователя MySQL для работы с базой данных NextCloud.

mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';

Создайте базу данных NextCloud.

mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Предоставьте все права доступа к базе данных Nextcloud созданному нами пользователю.

mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';

Выйдите из оболочки MySQL.

mysql> exit

Скачать Nextcloud

Время загрузить и настроить папки Nextcloud.

$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/

Далее нам нужно создать папку данных.

$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud

Установить SSL

Мы установим SSL с помощью сервиса Let’s Encrypt.

Для этого установите Certbot.

$ sudo dnf install certbot

Остановите Nginx, потому что он будет мешать процессу Certbot.

$ sudo systemctl stop nginx

Сгенерируйте сертификат. Мы также создаем сертификат DHParams.

$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL=""
$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring 
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Нам также нужно настроить задание cron для автоматического обновления SSL. Чтобы открыть редактор crontab, выполните следующую команду

$ sudo EDITOR=nano crontab -e

Приведенная выше команда открывает Crontab с редактором Nano вместо редактора Vim по умолчанию.

Вставьте следующую строку внизу.

25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”

Приведенное выше задание cron будет запускать certbot в 2:25 каждый день. Вы можете изменить его на что угодно.

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Настройка SELinux/разрешений

SELinux необходимо настроить, чтобы Nextcloud работал в Fedora. Введите следующие команды для базовых настроек SELinux, которые должны работать для всех.

Обязательно скорректируйте пути к файлам, если они отличаются в вашем случае.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

$ sudo restorecon -Rv '/var/www/html/nextcloud/'

Чтобы включить обновления через веб-интерфейс Nextcloud, также выполните следующую команду.

$ sudo setsebool -P httpd_unified on

Настроить Nginx для Nextcloud

Далее нам нужно настроить Nginx для размещения Nextcloud.

Для наших целей Nextcloud будет размещен в домене http://nextcloud.example.com,

Настройте каталоги, в которых будут храниться серверные блоки.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf	

Вставьте следующие строки после строки include /etc/nginx/conf.d/*.conf.

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.

Создайте файл /etc/nginx/sites-available/nextcloud.conf с помощью редактора Nano.

$ sudo nano /etc/nginx/sites-available/nextcloud.conf

Вставьте следующий код в редактор. Перед вставкой обязательно замените домен примера своим реальным доменом.

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/run/php-fpm/www.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name nextcloud.example.com;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.example.com;
	
	access_log /var/log/nginx/nextcloud.access.log;
    error_log /var/log/nginx/nextcloud.error.log;

    # 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/letsencrypt/live/nextcloud.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;
	ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
	ssl_dhparam /etc/ssl/certs/dhparam.pem;

    # 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 /var/www/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 100M;
    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\/.+|.+\/richdocumentscode\/proxy)\.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_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|mp4|webm)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.

Активируйте этот файл конфигурации, связав его с каталогом sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/

Протестируйте конфигурацию Nginx.

$ sudo nginx -t

Перезагрузите службу Nginx, если все в порядке.

$ sudo systemctl reload nginx

Установить Nextcloud

Настроить Nextcloud можно двумя способами — через командную строку или через графический интерфейс. Мы выберем метод командной строки.

Войдите в каталог Nextcloud.

$ cd /var/www/html/nextcloud

Выполните следующую команду, чтобы установить Nextcloud.

$ sudo -u nginx php occ  maintenance:install --database "mysql" --database-name "nextcloud"  --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"

Эта команда запускается от имени пользователя nginx, так как у него есть права на запись в папку Nextcloud.

Далее нам нужно добавить наш домен в список доверенных доменов. Откройте файл /var/www/html/nextcloud/config/config.php.

$ sudo nano config/config.php

Измените значение переменной trusted_domains, добавив в нее IP-адрес вашего сервера и домен Nextcloud nextcloud.example.com, чтобы вы могли получить доступ к своей установке из своего домена.

'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => '167.172.35.56',
    2 => 'nextcloud.example.com',
  ),

Нажмите Ctrl + X, чтобы закрыть редактор, и нажмите Y, когда будет предложено сохранить файл.

Запустите установку Nextcloud, открыв https://nextcloud.example.com в браузере, и вы увидите следующий экран.

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

Заключение

На этом мы завершаем наше руководство по установке Nextcloud на сервер Fedora 32. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.