В статье рассказывается об установке и настройке своего сервера NextCloud на FreeBSD 14.2, Nginx, php 8.3, PostgreSQL 17. База данных и web-сервер находятся на этой же машине. 

Часть 1. Установка необходимого софта

Самое простое - это поставить всё из портов:

1. PostgreSQL

cd /usr/ports/databases/postgresql17-client
make config, оставляем OPTIMIZED_CFLAGS
cd /usr/ports/databases/postgresql17-server
make config, также оставляем OPTIMIZED_CFLAGS

Настройка и запуск

echo 'postgresql_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/postgresql initdb
service postgresql start
passwd postgres
su - postgres
psql
CREATE ROLE nextcloud WITH NOSUPERUSER LOGIN PASSWORD 'password';
CREATE DATABASE nextcloud WITH OWNER nextcloud;
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\q
exit


2. Redis

cd /usr/ports/databases/redis
make config ничего выделять не надо

echo 'redis_enable="YES"' >> /etc/rc.conf

В файл /usr/local/etc/redis.conf добавьте строки из этого файла

Запускаем:
cd /usr/local/etc/rc.d
./redis start


3. Nginx

cd /usr/ports/www/nginx
make config

Ну или просто в каталог /var/db/ports/www_nginx/ положите файл options.

Настройка

Файл /usr/local/etc/nginx/nginx.conf выглядит так

Файл виртуального хоста /usr/local/etc/nginx/vhosts/nextcloud.example.com.conf выглядит так


4. PHP

cd /usr/ports/lang/php84
make config

Создаём файлы конфигурации php:
Файл /usr/local/etc/php-fpm.conf
Файл /usr/local/etc/php.ini


5. Nextcloud

cd /usr/ports/www/nextcloud
make config

IMAGICK ставить не рекомендую, так как он потянет за собой длинную цепочку портов и не факт, что эта цепочка встанет.

Так как порт FreeBSD периодически на пару версий отстаёт от актуального, то можно пойти двумя путями:

  1. Наплевать на отставание и поставить, что есть - make install clean
    В этом случае поставятся все зависимости и в папку /usr/local/www распакуется каталог nextcloud
  2. Поставить актуальную версию. Для этого - make depends (поставятся все необходимые для работы порты)
    Затем идём на https://download.nextcloud.com/server/releases/ и скачиваем свежую версию, которую закидываем на сервер и распаковываем в папку /usr/local/www 

Естественно не забываем выставить нужные права:
chown -R www:www /usr/local/www/nextcloud


Запуск

Прописываем в /etc/rc.conf

echo 'php_fpm_enable="YES"' >> /etc/rc.conf
echo 'nginx_enable="YES"' >> /etc/rc.conf

Стартуем

cd /usr/local/etc/rc.d
./php_fpm start
./nginx start


Часть 2

Так как я ставил Nextcloud вторым путём, пришлось немного костылизировать данный продукт.

На момент 16.12.2024 nextcloud не поддерживал версию php 8.4.1, что лечилось редактированием файла lib/versioncheck.php

Находим строку if (PHP_VERSION_ID >= 80400) {
и меняем на
if (PHP_VERSION_ID >= 80410) {

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

После установки проводим окончательную настройку:

1. Добавим кое-что в файл конфигурации Nextcloud, который лежит в папке /usr/local/www/nextcloud/config/. Мой файл выглядит так.

2. Далее придется немного поработать руками:
cd /usr/local/www/nextcloud/
chown root:www config/config.php
php occ db:add-missing-columns
php occ db:add-missing-indices
php occ db:convert-filecache-bigint
php occ db:add-missing-primary-keys
php occ maintenance:repair --include-expensive
chown www:www config/config.php

3. Для решения проблемы "Последняя фоновая задача была выполнена в сколько-то часов назад. Похоже, что-то не в порядке."

Создаем файл ./cron.sh с содержимым:
#!/bin/sh
chown root:www /usr/local/www/nextcloud/config/config.php
php -f //usr/local/www/nextcloud/cron.php
chown www:www /usr/local/www/nextcloud/config/config.php

Даём ему права на выполнение:
chmod 555 ./cron.sh

В файл /etc/crontab вписываем строку
*/5 * * * * root /usr/local/www/nextcloud/./cron.sh

4. Проблема "Некоторые файлы не прошли проверку целостности. List of invalid files…"
Ничего страшного, это система ругается на изменённый lib/versioncheck.php