На момент написания, версии устанавливаемых продуктов были следующие: php8.3, nextcloud 31.0.5, onlyoffice 7.2
Установка производилась на Ubuntu 24.04.2 LTS. Процесс самой установки Ubuntu описывать не буду, ее и так много. Скажу лишь что при установке был выбран вариант минимальной установки.
Обновляем систему и устанавливаем вспомогательные утилиты.
sudo apt update & sudo apt upgrade -y
sudo apt install mc nano zip net-tools tcpdump iputils-ping bind9-dnsutils -y
Синхронизируем время и выставляем нужный часовой пояс:
Устанавливаем демона и разрешаем автозапуск
sudo apt install chrony -y
sudo systemctl enable chrony
sudo timedatectl set-timezone Europe/Moscow
Для изменения сервера времени, вносим изменения в файл /etc/ntpsec/ntp.conf
Не забываем про DNS и имя машины
Посмотреть имя машины
sudo hostnamectl
Задать имя
sudo hostnamectl set-hostname новое_имя
Перезагружаемся
# ——————————
# Этот пункт можно пропустить, если настраиваете облако на локальный диск, а не на отдельную машину с доступом по nfs
# ——————-
Устанавливаем nginx и запускаем
sudo apt install nginx -y
sudo nginx -V
sudo systemctl enable nginx
sudo systemctl start nginx
Ставим php
sudo apt install php-fpm php-mysql php php-curl php-gd php-json php-mbstring php-common php-xml php-zip php-opcache php-apcu php-imagick php-gmp php-intl -y
Ставим дополнительные пакеты для повышения производительности
apt install redis-server imagemagick memcached -y
Напомню про версию, на момент написания PHP 8.3
Производим необходимую настройку PHP
Правим /etc/php/8.3/fpm/pool.d/www.conf снимаем комментарии со следующих параметров
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Настраиваем php.ini: файл /etc/php/8.3/fpm/php.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
post_max_size = 40M
upload_max_filesize = 10M
Разрешаем автозапуск php-fpm и перезапускаем его:
sudo systemctl enable php8.3-fpm
sudo systemctl restart php8.3-fpm
Устанавливаем MariaDB:
sudo apt install mariadb-server -y
sudo systemctl enable mariadb
sudo systemctl start mariadb
Запуск сценария безопасности (здесь можно поменять пароль рута, убрать ненужные разрешения):
sudo mysql_secure_installation
Создаем базу данных для Nextcloud (в примере указан пароль pass_nextcloud, его обязательно заменить на свой) :
sudo mysql -u root -p
Вводим пароль рута для MariaDB и создаем базу
CREATE DATABASE nextcloud;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'pass_nextcloud';
GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'pass_nextcloud' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
Теперь создаем файл конфигурации Nginx для Nextcloud
Правим файл /etc/nginx/sites-enable/nextcloud.conf если такового нет, создаем со следующим содержимым (nextcloud.domen заменить на свои)
server {
listen 80;
server_name nextcloud.domen;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name nextcloud.domen;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
root /var/www/html/nextcloud;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}
Далее получаем сертификаты для ssl
Установка Certbot и его плагина Nginx
sudo apt install certbot python3-certbot-nginx
Получаем сертификаты для всего что есть, я получал для всех поддоменов, которые были
Сначала запускаем с ключом —dry-run, проверяем все ли в порядке
sudo certbot certonly --agree-tos --email почта@администратора -d ваш.домен -d nextcloud.ваш.домен -d cloud.ваш.домен --nginx --dry-run
Если все хорошо, то получаем сертификаты
sudo certbot certonly --agree-tos --email почта@администратора -d ваш.домен -d nextcloud.ваш.домен -d cloud.ваш.домен -d zabbix.ваш.домен -d www.ваш.домен -d mail.ваш.домен --nginx
Сертификаты появятся в папке /etc/letsencrypt/live/ваш.домен cert.pem chain.pem fullchain.pem privkey.pem
Теперь их нужно подключить к сайту, правим файл /etc/nginx/sites-available/nextcloud.conf
ssl_certificate /etc/letsencrypt/live/ваш.домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш.домен/privkey.pem;
Теперь устанавливаем сам Nextcloud:
# Скачиваем последнюю версию с сайте Nextcloud:
напоминаю, на момент написания статьи, последняя версия была 31.0.5
Перед скачиванием посмотрите текущий релиз
cd /tmp/
sudo wget https://download.nextcloud.com/server/releases/nextcloud-31.0.5.zip
sudo unzip nextcloud-31.0.5.zip
sudo cp -R nextcloud /var/www/nextcloud/
cd /var/www/
sudo chown -R www-data:www-data nextcloud/
Заходим на https://cloud.loc
Прописываем созданную ранее базу данных и пароль к ней.
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint --no-interaction
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Ставим Memcached Redis и APCu
sudo apt install memcached php-memcache php-memcached php-apcu -y
sudo apt install redis-server php-redis -y
Правим файл /var/www/nextcloud/config/config.php добавляем в конец, перед скобкой
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '127.0.0.1',
'port' => 6379,
),
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcache.locking' => '\OC\Memcache\Memcached',
'memcached_servers' => [
[ '127.0.0.1', 11211 ],
],
Переиндексация всех файлов и каталогов (если скопировали файлы не через интерфейсы nextcloud, то их надо переиндексировать)
sudo -u www-data php /var/www/nextcloud/occ files:scan --all
Устанавливаем OnlyOffice DocumentServer
Установка PostgreSQL, нужен для OnlyOffice
sudo apt install postgresql -y
После установки PostgreSQL создайте базу данных и пользователя PostgreSQL. Пользователем для созданной базы данных должны быть ‘onlyoffice’, пароль любой.
sudo -i -u postgres psql -c "CREATE DATABASE onlyoffice;"
sudo -i -u postgres psql -c "CREATE USER onlyoffice WITH password 'pass_onlyoffice';"
sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"
Устанавливаем rabbitmq и nginx-extras для OnlyOffice:
sudo apt install rabbitmq-server -y
sudo apt install nginx-extras -y
Установка ONLYOFFICE Docs
Добавляем GPG-ключ:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5
mkdir -p -m 700 ~/.gnupg
curl -fsSL https://download.onlyoffice.com/GPG-KEY-ONLYOFFICE | gpg --no-default-keyring --keyring gnupg-ring:/tmp/onlyoffice.gpg --import
chmod 644 /tmp/onlyoffice.gpg
sudo chown root:root /tmp/onlyoffice.gpg
sudo mv /tmp/onlyoffice.gpg /usr/share/keyrings/onlyoffice.gpg
Добавляем репозиторий ONLYOFFICE Docs:
echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] https://download.onlyoffice.com/repo/debian squeeze main" | sudo tee /etc/apt/sources.list.d/onlyoffice.list
Обновляем кэш менеджера пакетов:
sudo apt-get update
Установите mscorefonts
:
sudo apt install ttf-mscorefonts-installer
Установливаем ONLYOFFICE Docs
sudo apt install onlyoffice-documentserver -y
На момент статьи версия 8.3.3-18
Переводим onlyoffice на https
sudo cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.conf
sudo nano /etc/onlyoffice/documentserver/nginx/ds.conf
Меняем порт ssl не забыв пробросить его в роутере
listen 0.0.0.0:7443 ssl;
listen [::]:7443 ssl default_server;
Прописываем сертификат
ssl_certificate /etc/letsencrypt/live/ваш.домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш.домен/privkey.pem;
Перезапускаем nginx
sudo service nginx restart
Ну, вот и все, останется через веб-интерфейс установить плагин ONLYOFFICE в вашем Nextcloud и прописать сервер https://ваш.домен:7443
Секретный ключ OnlyOffice
Что бы посмотреть секретный ключ сгенерированный OnlyOffice:
cat /etc/onlyoffice/documentserver/local.json | grep string
Перезапуск сервисов
systemctl restart ds-docservice
systemctl restart ds-docservice
systemctl restart ds-docservice
systemctl restart nginx
Возможные ошибки
При связке nextcloud и onlyoffice ошибка в лог файле /var/log/onlyoffice/documentserver/nginx.error.log
2025/06/16 10:59:28 [error] 371443#371443: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: , request: "GET /healthcheck HTTP/1.1", upstream: "http://127.0.0.1:8000/healthcheck", host: "ваш.домен.loc:7443"
Правим файл /etc/onlyoffice/documentserver/nginx/includes/http-common.conf
upstream docservice {
server localhost:8000 max_fails=0 fail_timeout=0s;
}