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

Как установить Nextcloud с Nginx и PHP 7.3 на CentOS 8


Это руководство существует для этих версий ОС

  • CentOS 8
  • CentOS 7

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

  1. Шаг 1. Установите Nginx
  2. Шаг 2. Установите PHP-FPM
  3. Шаг 3. Настройка PHP-FPM 7.3
  4. Шаг 4. Установите и настройте MariaDB
  5. Шаг 4. Создание SSL Letsencrypt
  6. Шаг 5. Загрузите и установите Nextcloud
  7. Шаг 6. Настройте виртуальный хост Nginx для Nextcloud
  8. Шаг 7. Настройте SELinux для Nextcloud
  9. Шаг 8. Мастер установки Nextcloud
  10. Справочник

Nextcloud – это бесплатное программное обеспечение (с открытым исходным кодом), похожее на дропбокс, ответвление проекта ownCloud. Nextcloud написан на PHP и JavaScript, он поддерживает многие системы баз данных, такие как MySQL/MariaDB, PostgreSQL, базы данных Oracle и SQLite.

Чтобы ваши файлы синхронизировались между настольным компьютером и сервером, Nextcloud предлагает приложения для настольных компьютеров Windows, Linux и Mac, а также мобильное приложение для Android и iOS.

В этом руководстве мы покажем вам, как установить Nextcloud 17 с веб-сервером Nginx, PHP 7.3 и базой данных MariaDB на сервере CentOS 8. Мы установим Nextcloud и защитим его с помощью бесплатного SSL-сертификата Lets Encrypt.

Предпосылка

В этом руководстве мы установим Nextcloud на сервер CentOS 8 с 2 ГБ ОЗУ, 25 ГБ свободного места и 2 ЦП.

Что мы будем делать:

  • Установите веб-сервер Nginx
  • Установите PHP-FPM 7.3.
  • Настройка PHP-FPM 7.3
  • Установка и настройка базы данных MariaDB
  • Создать SSL Letsencrypt
  • Скачать Nextcloud 17
  • Настройка виртуального хоста Nginx для Nextcloud
  • Настройка SELinux для Nextcloud
  • После установки Nextcloud

Шаг 1 — Установите Nginx

Сначала мы установим веб-сервер Nginx на сервер CentOS 8 и откроем порты HTTP и HTTPS на брандмауэре.

Установите Nginx из репозитория AppStream с помощью приведенной ниже команды dnf.

sudo dnf install nginx

После завершения установки запустите службу nginx и добавьте ее в загрузку системы.

systemctl start nginx
systemctl enable nginx

Теперь проверьте статус службы nginx с помощью приведенной ниже команды.

systemctl status nginx

Вы получите запуск службы nginx на сервере CentOS 8.

Далее мы добавим службы HTTP и HTTPS в файл firewalld.

Добавьте службы HTTP и HTTPS в firewalld с помощью приведенной ниже команды firewall-cmd.

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

После этого перезагрузите службы firewalld.

firewall-cmd --reload

В результате вы успешно установили веб-сервер Nginx и открыли порты HTTP и HTTPS на сервере CentOS 8.

Шаг 2 — Установите PHP-FPM

Согласно системным требованиям Nextcloud, для его установки рекомендуется использовать PHP 7.2 или PHP 7.3.

В этом руководстве мы будем использовать PHP 7.3, который можно установить из репозитория REMI.

Прежде чем идти дальше, мы включим репозиторий PowerTools и добавим репозитории EPEL и REMI для сервера CentOS 8.

Запустите команду dnf ниже.

sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Теперь проверьте все доступные репозитории в системе.

dnf repolist

И вы получите результат, как показано ниже.

Вы включили репозиторий PowerTools и добавили репозитории EPEL и REMI для CentOS 8.

Далее мы включим репозиторий PHP 7.3 REMI.

Проверьте все доступные модули для пакетов PHP.

dnf module list php

Теперь включите модуль репозитория PHP 7.3 REMI.

dnf module enable php:remi-7.3

После этого установите пакеты PHP и PHP-FPM 7.3 для Nextcloud с помощью приведенной ниже команды dnf.

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

И вы установили PHP и PHP-FPM 7.3 в систему CentOS 8.

Шаг 3. Настройте PHP-FPM 7.3.

На этом этапе мы настроим PHP-FPM для развертывания Nextcloud.

Отредактируйте конфигурацию php.ini с помощью следующей команды.

vim /etc/php.ini

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

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

Сохранить и закрыть.

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

vim /etc/php.d/10-opcache.ini

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

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

Сохранить и закрыть.

Затем отредактируйте конфигурацию PHP-FPM /etc/php-fpm.d/www.conf.

vim /etc/php-fpm.d/www.conf

Измените пользователя и группу на nginx.

user = nginx
group = nginx

Измените конфигурацию прослушивания на файл sock, как показано ниже.

listen = /run/php-fpm/www.sock

Раскомментируйте переменную среды 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

Сохранить и закрыть.

Теперь создайте новый каталог для сеанса PHP и opcache, затем измените владельца этих каталогов на пользователя и группу nginx.

mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}

И вы завершили настройку PHP-FPM для установки Nextcloud.

Запустите службу PHP-FPM и добавьте ее в загрузку системы.

systemctl enable php-fpm
systemctl start php-fpm

Теперь проверьте файл носка PHP-FPM и статус службы.

netstat -pl | grep php
systemctl status php-fpm

И вы получите результат, как показано ниже.

В результате PHP-FPM запущен и работает под файлом sock /run/php-fpm/www.sock.

Шаг 4 — Установите и настройте MariaDB

На этом этапе мы установим сервер базы данных MariaDB, настроим аутентификацию по паролю root и создадим новую базу данных и пользователя для Nextcloud.

Установите базу данных MariaDB с помощью приведенной ниже команды dnf.

sudo dnf install mariadb mariadb-server

После завершения установки запустите службу MariaDB и добавьте ее в загрузку системы.

systemctl start mariadb
systemctl enable mariadb

И служба MariaDB запущена и работает.

Далее мы настроим аутентификацию по паролю root с помощью команды mysql_secure_installation ниже.

mysql_secure_installation

Введите свой пароль root и введите Y для остальной конфигурации.

Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

И корневой пароль MariaDB настроен.

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

mysql -u root -p
TYPE YOUR ROOT PASSWORD

Теперь создайте новую базу данных nextcloud_db и создайте нового пользователя nextclouduser с паролем nextcloudpassdb, используя приведенные ниже запросы.

create database nextcloud_db;
create user identified by 'nextcloudpassdb';
flush privileges;

И вы создали базу данных и пользователя для установки Nextcloud.

Шаг 4 — Сгенерируйте SSL Letsencrypt

На этом этапе мы создадим SSL letsencrypt с помощью certbot. Сертификаты SSL будут использоваться для защиты доступа к Nextcloud.

Установите certbot из репозитория EPEL с помощью приведенной ниже команды dnf.

sudo dnf install certbot

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

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m  -d cloud.hakase-labs.io

После завершения все сгенерированные SSL-сертификаты находятся в каталоге /etc/letsencrypt/live/cloud.hakase-labs.io.

Проверьте это с помощью следующей команды.

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

И вы создали SSL letsencrypt с помощью инструмента certbot.

Шаг 5 - Загрузите и установите Nextcloud

На этом этапе мы загрузим последнюю версию Nextcloud 17.

Перед загрузкой исходного кода nextcloud установите в систему zip-пакет.

sudo dnf install unzip

Теперь перейдите в каталог /var/www/ и загрузите исходный код Nextcloud с помощью команды wget, как показано ниже.

cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip

Извлеките исходный код Nextcloud с помощью приведенной ниже команды.

unzip nextcloud-17.0.2.zip

И вы получите новый каталог с именем nextcloud.

Теперь создайте новый каталог данных для Nextcloud. Каталог данных будет использоваться для хранения пользовательских данных.

mkdir -p /var/www/nextcloud/data/

После этого измените владельца каталога nextcloud на пользователя и группу nginx.

sudo chown -R nginx:nginx /var/www/nextcloud

И вы загрузили последнюю версию Nextcloud 17 в каталог /var/www.

Шаг 6 — Настройте виртуальный хост Nginx для Nextcloud

После загрузки исходного кода Nextcloud мы настроим виртуальный хост Nginx для Nextcloud.

Перейдите в каталог /etc/nginx/conf.d и создайте новую конфигурацию nextcloud.conf.

cd /etc/nginx/conf.d/
vim nextcloud.conf

Теперь измените имя домена и путь сертификата SSL на свои собственные и вставьте в него следующую конфигурацию.

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

server {
listen 80;
listen [::]:80;
server_name cloud.hakase-labs.io;
# enforce https
return 301 https://$server_name:443$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.hakase-labs.io;

# 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/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.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/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 built 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;
}
}

Сохранить и закрыть.

После этого протестируйте конфигурацию nginx и перезапустите службу Nginx. И убедитесь, что нет ошибки.

nginx -t
systemctl restart nginx

Теперь служба Nginx откроет в системе новый HTTPS-порт, проверьте его с помощью следующей команды.

netstat -plntu

И вы получите результат, как показано ниже.

В результате вы добавили конфигурацию виртуального хоста Nginx для Nextcloud и включили защищенный HTTPS поверх нее.

Шаг 7 — Настройте SELinux для Nextcloud

В этом уроке мы будем использовать SELinux в принудительном режиме. И мы настроим SELinux для установки Nextcloud.

Установите инструмент управления SELinux с помощью приведенной ниже команды dnf.

sudo dnf install policycoreutils-python-utils

Теперь выполните следующую команду от имени пользователя root на вашем сервере.

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'

restorecon -Rv '/var/www/nextcloud/'

И настройка SELinux для Nextcloud завершена.

Шаг 8 - Мастер установки Nextcloud

Теперь откройте веб-браузер и введите свое доменное имя Nextcloud в адресной строке.

https://cloud.hakase-labs.io/

Теперь вы получите страницу установки Nextcloud, как показано ниже.

Введите пользователя и пароль администратора, затем выберите MySQL/MariaDB в качестве базы данных и введите сведения о базе данных, которую вы создали сверху.

Теперь нажмите кнопку «Завершить настройку», и установка начнется.

После завершения установки вы получите панель управления Nextcloud, как показано ниже.

В результате вы успешно установили последнюю версию Nextcloud 17 с веб-сервером Nginx, PHP-FPM 7.3 и базой данных MariaDB на сервере CentOS 8.

Ссылка

  • https://docs.nextcloud.com/