Рассмотрим установку Nextcloud на чистый Centos 8. Для этого нам потребуется Centos 8 в минимальной установке и эта статья.
Содержание
- Обновляем систему
- Подключаем репозитории
- Установка доп. утилит
- Веб-сервер
- PHP
- База данных
- Сетрификат
- Установка Nextcloud
- Настройка SELinux
- Firewall (firewalld)
- Видео установка Nextcloud на чистый 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?