Nextcloud — набор клиент-серверных программ для создания и использования хранилища данных. Nextcloud можно установить как на хостинге, так и на собственном сервере. По доступной функциональности похож на Dropbox.
Nextcloud теперь доступен в официальном репозитории RedOS. Установку будем производить с использованием СУБД PostgreSQL и web-сервером NGINX. На момент написания статьи актуальная версия NC -29.
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_graceful_shutdown 1
setsebool -P httpd_can_network_connect_db 1
setsebool -P domain_can_mmap_files 1
setsebool -P daemons_dump_core 1
Для работы Nextcloud требуется PHP. Подключим нужный репозиторий и установим:
dnf install php82-release
dnf clean all
dnf makecache
dnf update php
dnf install php-sodium
Теперь установим сам пакет и необходимые ему компоненты:
dnf install nextcloud nextcloud-postgresql nextcloud-nginx
Пока что дополнительных настроек этих пакетов мы делать не будем. Перейдем к установке и настройке СУБД.
Выполним установку:
dnf install postgresql16-server
После установки необходимо произвести инициализацию СУБД:
/bin/postgresql-16-setup initdb
Запустим СУБД:
systemctl enable postgresql-16 --now
Подключимся к СУБД:
su - postgres
psql
Создадим базу и роль для NC. Пример запроса - ниже. Я придерживаюсь мнения, что базу и пользователя называть одинаковым именем - не лучшая практика. Я стараюсь соблюдать правило, когда из названия понятно что есть имя роли, а что имя базы. Вы можете использовать свой подход. Не забудьте заменить пароль PASSWORDDB на свой.
CREATE ROLE nextcloud_user WITH NOSUPERUSER LOGIN PASSWORD 'PASSWORDDB';
CREATE DATABASE nextcloud_db WITH OWNER nextcloud_user;
GRANT ALL PRIVILEGES ON DATABASE nextcloud_db TO nextcloud_user;
Проверим, появилась ли база:
\l
Список баз данных
Имя | Владелец | Кодировка | Провайдер локали | LC_COLLATE | LC_CTYPE | локаль ICU | Правила ICU | Права доступа
--------------+----------------+-----------+------------------+-------------+-------------+------------+-------------+-----------------------------------
nextcloud_db | nextcloud_user | UTF8 | libc | ru_RU.UTF-8 | ru_RU.UTF-8 | | | =Tc/nextcloud_user +
| | | | | | | | nextcloud_user=CTc/nextcloud_user
postgres | postgres | UTF8 | libc | ru_RU.UTF-8 | ru_RU.UTF-8 | | |
template0 | postgres | UTF8 | libc | ru_RU.UTF-8 | ru_RU.UTF-8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | ru_RU.UTF-8 | ru_RU.UTF-8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
(4 строки)
Выходим из консоли управления СУБД:
\q
Требуется произвести дополнительные настройки. Откроем файл:
nano /var/lib/pgsql/16/data/postgresql.conf
Следующие параметры нужно привести к значениям, указанным ниже:
listen_addresses = '*'
port = 5432
Теперь откроем файл:
nano /var/lib/pgsql/16/data/pg_hba.conf
И приведем к виду:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Перезапустим СУБД:
systemctl restart postgresql-16
Запустим наш веб-сервер и проверим его статус:
systemctl enable nginx --now
systemctl status nginx
Для доступа по http (для теста и первого запуска - подойдет) секция server в файле /etc/nginx/nginx.conf должна иметь следующий вид:
nano /etc/nginx/nginx.conf
server {
listen 80;
listen [::]:80;
server_name YOU-IP or DOMAIN; # Заменить на свои значения!
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
sendfile on;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Не забудь заменить YOU-IP or DOMAIN в секции server_name на свои значения.
Пример для HTTPS:
server {
listen 80;
#listen [::]:80;
server_name YOU-IP or DOMAIN;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
#listen [::]:443 ssl;
http2 on;
server_name YOU-IP or DOMAIN; # Заменить на свои значения!
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
sendfile on;
root /usr/share/nginx/html;
ssl_certificate /etc/nginx/ssl/example.crt; # Ваши сертификаты!
ssl_certificate_key /etc/nginx/ssl/example.key; # Ваши сертификаты!
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Проверим настройки:
systemctl restart nginx
nginx -t
Необходимо привести к указанным значениям параметы файла /etc/php.ini
nano /etc/php.ini
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 3600
max_input_time = 3600
max_input_vars = 1000 #расскоментировать строку
memory_limit = 512M
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
upload_tmp_dir = /tmp/
Для первоначальной настройки NC требуется запуск следующих команд:
touch /usr/share/nextcloud/config/CAN_INSTALL
sudo chown -R apache:apache /usr/share/nextcloud
chcon -R -t httpd_sys_rw_content_t /usr/share/nextcloud
На этом основная установка завершена. Сервис доступен по адресу http://you-ip-or-fqdn/nextcloud
Если все было сделано правильно, откроется начальная страница настройки NC. Необходимо создать нового администратора, указать что мы используем PostgreSQL, ввести данные базы - имя, пользователя, пароль (те, что мы создавали). После этого NC сам все установит.
Бекап базы данных:
PGPASSWORD="PASSWORDDB" pg_dump -U nextcloud_user nextcloud_db | gzip > nextcloud_backup_$(date +%Y-%m-%d).sql.gz
Восстановление в пустую, с таким же именем, логином и паролем (то есть восстановление содержимого):
zcat nextcloud_backup_2025-07-21.sql.gz | PGPASSWORD="PASSWORDDB" psql -U nextcloud_user -h localhost -p 5432 -d nextcloud_db
Разумеется, пароли должны быть заменены на актуальные.