Как установить и настроить Nextcloud в Fedora 32
На этой странице
- Предпосылки
- Настройка брандмауэра
- Установить PHP
- Настройка PHP
- Установите Nginx
- Установить MariaDB
- Настройка MariaDB
- Скачать Nextcloud
- Установить SSL
- Настройка SELinux/разрешений
- Настройка Nginx для Nextcloud
- Установить Nextcloud
- Заключение
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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.