Установка полноценного Nextcloud в LXC контейнер в Proxmox {#установка-полноценного-nextcloud-в-lxc-контейнер-в-proxmox .relative .group}
Если вам понравилась настоящая статья, то можете поддержать автора став спонсором на бусти (ссылка в разделе контакты).
В этом видео я покажу, как с нуля установить Nextcloud — без Docker, на полноценный стек Apache, MariaDB и PHP. Безопасно и стабильно, стильно и молодежно. А также этот вариант, который я покажу сегодня, выдержит нагрузки даже малосреднего офиса, не говоря уже про домашнее использование.
Но прежде всего я хотел бы поблагодарить своих спонсоров на бусти. Ребята, огромное, большое вам спасибо за то что помогаете развитию этого канала. Канал живет исключительно с вашей помощью. А Ваша помощь идет исключительно на развитие этого канала. Ну а те кто не в курсе, на бусти, для спонсоров, я выкладываю ролики раньше, до месяца раньше, чем они появляются в открытом доступе, поэтому: если вам нравится контент, который выходит на этом канале; вы хотите поддержать развитие этого канала; может быть вы просто хотите посмотреть что-то пораньше, то ссылка на бусти и все остальные контакты, телеграмм, запасные каналы на отечественных площадках, будут в описании.
У меня на канале уже есть два ролика, посвященных непосредственно особенностям установки Nextcloud AIO и Nextcloud в докере. В том числе есть ролики про установку и связку OnlyOffice с Nextcloud, а также галереи Memories. Этот ролик будет финальным в серии. Но это не точно.
Ссылки на другие варианты установки
В этом ролике установим полноценный Nextcloud, но с определенными особенностями. Однако сначала, по законам жанра, я должен рассказать неофитам, что такое Nextcloud. Nextcloud — это самостоятельный облачный сервис с открытым исходным кодом, который позволяет хранить, синхронизировать и совместно использовать файлы, а также расширять функциональность за счёт встроенных приложений: календарей, видеозвонков, заметок, редакторов документов и т.д. Поэтому когда вы слышите, что Nextcloud замена коммерческим облачным хранилищам, посмотрите на этого человека снисходительно, мол, молодой ты ищо, ничего не понимаешь, салага. Некстклауд давно перешел тут границу нормальности, когда это было просто облачное хранилище. Сейчас это конкурент таким решениями как Google Workspace и аналоги.
Теперь поговорим об особенностях сегодняшней установки. Официальных сборок Некстклада всего две. Это то, что мы установим сегодня и Nextcloud AIO (там по моему вообще один человек все это собирает). Все остальное это коммюнити. В роликах про установку полноценного Nextcloud вы обычно видите, как люди ставят все в ВМ, устанавливают туда потом certbot, устанавливают nginx или ngrok, выпускают ssl сертификат. Все это мы делать не будем. Почему? У нас есть свой обратный прокси и пользоваться мы будем именно им. Устанавливать мы все будем в LXC контейнер. Сейчас суровые админы должны закричать на меня, мол, что ты делаешь, так нельзя. Нельзя, в продакшене нельзя, а дома можно. Почему LXC? Потому что мы туда можем прокинуть встроенное в процессор видеоядро, и при этом еще можно будет это же видеоядро использовать и в других контейнерах. Как прокидывается видеоядро смотрите предыдущий ролик у меня на канале.
У меня уже создан lxc контейнер, и обратный прокси настроен на выпуск сертификата на айпи по которому находится наш контейнер и порт 80. Я предполагаю, что вы знаете как настраивать конкретно ваш обратный прокси. Все, вступление закончилось.
Поехали.
Шаг 1: Обновляем систему.
- Обновляем пакеты и настраиваем кодировку:
sudo suapt update && apt upgrade -ydpkg-reconfigure localesШаг 2: Устанавливаем Apache2 и PHP Modules.
- Устанавливаем Apache2:
apt install apache2 -y- Устанавливаем зависимости:
apt install php php-common libapache2-mod-php php-bz2 php-gd php-mysql php-curl php-mbstring php-imagick php-zip php-common php-curl php-xml php-json php-bcmath php-xml php-intl php-gmp zip unzip wget smbclient libmagickcore-6.q16-7-extra ffmpeg intel-media-va-driver-non-free ffmpeg va-driver-all ocl-icd-libopencl1 intel-opencl-icd vainfo intel-gpu-tools -y- Активируем необходимые модули Apache:
a2enmod env rewrite dir mime headers setenvif ssl- Перезапускаем, включаем и проверяем работоспособность Apache.
systemctl restart apache2systemctl enable apache2systemctl status apache2- Проверяем загрузку модулей Apache:
apache2ctl -MШаг 3: Устанавливаем и конфигурируем MariaDB сервер
- Install mariadb-server package:
apt install mariadb-server -y- Заходим в MariaDB:
mysql- Создаем базу данных и пользователя для Nextcloud и задаем необходимые разрешения пользователю:
CREATE USER 'ncloud'@'localhost' IDENTIFIED BY 'admin123';CREATE DATABASE ncloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;GRANT ALL PRIVILEGES ON ncloud.* TO 'ncloud'@'localhost';FLUSH PRIVILEGES;quit;- Перезапускаем и активируем MariaDB:
systemctl restart mariadbsystemctl enable mariadb- Проверяем, что MariaDB запущенна:
systemctl status mariadbШаг 4: Загружаем, разархивируем и задаем разрешения Nextcloud
- Загружаем и разархивируем в папку /var/www/html:
cd /var/www/htmlwget https://download.nextcloud.com/server/releases/latest.zipunzip latest.zip- Удалем ненужный архив:
rm -rf latest.zip- Задаем права на папку:
chown -R www-data:www-data /var/www/html/nextcloud/Шаг 5: Устанавливаем Nextcloud из командной строки
- Запускаем приведенную ниже команду для инсталяции nextcloud (нужно внести свои данные конечно)
cd /var/www/html/nextcloudsudo -u www-data php occ maintenance:install --database \"mysql" --database-name "ncloud" --database-user "ncloud" --database-pass \'admin123' --admin-user "admin" --admin-pass "password"- Nextcloud разрешает доступ только с локального хоста, это может привести к ошибке «Доступ через недоверенный домен». Нам нужно разрешить доступ к Nextcloud, используя IP-адрес или доменное имя
sudo nano /var/www/html/nextcloud/config/config.php
'trusted_domains' => array ( 0 => 'localhost', 1 => 'nextcloud.your_domain.ru', // we Included the Sub Domain ), 'overwritehost' => 'nextcloud.your_domain.ru', 'overwriteprotocol' => 'https', 'overwrite.cli.url' => 'https://nextcloud.your_domain.ru', 'trusted_proxies' => array ( 0 => '192.168.0.0/16', 1 => '172.16.0.0/12', 2 => '10.0.0.0/8', 3 => 'fc00::/7', 4 => 'fe80::/10', 5 => '2001:db8::/32', ), 'default_phone_region' => 'RU', 'allow_local_remote_servers' => true,- Настройте Apache для загрузки Nextcloud из папки /var/www/html/nextcloud:
nano /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/nextcloud
<Directory /var/www/html/nextcloud> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
ServerName nextcloud.yourdomain.ru <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>- Перезапускаем Apache:
systemctl restart apache2- Теперь перейдите в браузер и введите http://[ip или полное доменное имя] сервера. Появится страница входа в Nextcloud, показанная ниже.
Шаг 6: Установка и настройка PHP-FPM с Apache
- Установка PHP-FPM: #проверьте актуальную версию
apt install php8.3-fpm- Проверьте, запущен ли PHP-FPM, его версию и создан ли сокет:
service php8.3-fpm statusphp-fpm8.3 -vls -la /var/run/php/php8.3-fpm.sock- Отключите mod_php и модуль prefork:
a2dismod php8.3a2dismod mpm_prefork- Активируйте PHP-FPM:
a2enmod mpm_event proxy_fcgi setenvifa2enconf php8.3-fpm- Перезапустите Apache, чтобы перезагрузить все модули и конфигурации:
systemctl restart apache2Теперь, чтобы настроить размер загружаемого файла и производительность, нам нужно изменить некоторые параметры php.ini, перечисленные ниже в файле /etc/php/8.3/fpm/php.ini. Вы можете задать собственные значения в зависимости от вашей среды.
upload_max_filesize = 64Mpost_max_size = 96Mmemory_limit = 512Mmax_execution_time = 600max_input_vars = 3000max_input_time = 1000- Проверьте текущее значение:
grep -E "upload_max_filesize|post_max_size|memory_limit|max_execution_time|max_input_vars|max_input_time" /etc/php/8.3/fpm/php.ini- Вместо ручного внесения изменений вы можете выполнить следующую команду для немедленного внесения изменений. Это сэкономит время.
sed -i 's/^upload_max_filesize.*/upload_max_filesize = 64M/; s/^post_max_size.*/post_max_size = 96M/; s/^memory_limit.*/memory_limit = 512M/; s/^max_execution_time.*/max_execution_time = 600/; s/^;max_input_vars.*/max_input_vars = 3000/; s/^max_input_time.*/max_input_time = 1000/' /etc/php/8.3/fpm/php.iniили
sed -i 's/^upload_max_filesize.*/upload_max_filesize = 16G/; s/^post_max_size.*/post_max_size = 16G/; s/^memory_limit.*/memory_limit = 2048M/; s/^max_execution_time.*/max_execution_time = 3600/; s/^;max_input_vars.*/max_input_vars = 3600/; s/^max_input_time.*/max_input_time = 3600/' /etc/php/8.3/fpm/php.iniТеперь нам нужно обновить конфигурации пула PHP-FPM в /etc/php/8.3/fpm/pool.d/ www.conf. Ниже приведены некоторые оптимальные значения, но вам следует задать свои собственные значения.
pm.max_children = 64pm.start_servers = 16pm.min_spare_servers = 16pm.max_spare_servers = 32- Проверим текущии значения:
grep -E "pm.max_children|pm.start_servers|pm.min_spare_servers|pm.max_spare_servers" /etc/php/8.3/fpm/pool.d/www.conf- Измените все значения одновременно с помощью следующей команды:
sed -i 's/^pm.max_children = .*/pm.max_children = 64/; s/^pm.start_servers = .*/pm.start_servers = 16/; s/^pm.min_spare_servers = .*/pm.min_spare_servers = 16/; s/^pm.max_spare_servers = .*/pm.max_spare_servers = 32/' /etc/php/8.3/fpm/pool.d/www.confили
sed -i 's/^pm.max_children = .*/pm.max_children = 70/; s/^pm.start_servers = .*/pm.start_servers = 20/; s/^pm.min_spare_servers = .*/pm.min_spare_servers = 20/; s/^pm.max_spare_servers = .*/pm.max_spare_servers = 60/' /etc/php/8.3/fpm/pool.d/www.conf- Теперь перезапустите PHP-FPM, чтобы применить все изменения:
service php8.3-fpm restartТеперь вставьте приведенный ниже код в файл конфигурации сайта Apache по умолчанию /etc/apache2/sites-enabled/000-default.conf, он укажет Apache передать обработку PHP-файла PHP-FPM.
<FilesMatch ".php$"> SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/" </FilesMatch>- После предоставления кода конфигурация сайта Apache по умолчанию будет выглядеть так, как показано ниже::
nano /etc/apache2/sites-enabled/000-default.conf<VirtualHost *:80> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com
ServerAdmin webmaster@localhost DocumentRoot /var/www/html/nextcloud
<Directory /var/www/html/nextcloud> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
<FilesMatch ".php$"> SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/" </FilesMatch>
ServerName nextcloud.your_domain.ru <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" </IfModule>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf</VirtualHost>- Теперь перезапустите Apache, чтобы изменения вступили в силу:
systemctl restart apache2Шаг 7: Создайте страницу info.php для проверки функций PHP (опционально. После завершения проверки, файл надо удалить)
Создайте страницу info.php, она покажет нам, включены ли PHP-FPM, OPCache, APCu в PHP..
cd /var/www/html/nextcloudnano info.php<?php phpinfo(); ?>Теперь перейдите по адресу [URL]/info.php. Если PHP-FPM включён в PHP, будет показано «Server API FPM/FastCGI».
Шаг 8: Включите OPCache в PHP
- Включите OPCache в PHP: Проверьте, запущен ли он, с помощью файла [URL]/info.php, который мы создали ранее.
JIT-компиляция (Just-In-Time) Opcache — важная функция. JIT-компиляция повышает производительность PHP, компилируя код в машинный язык во время выполнения, а не интерпретируя его при каждом запуске. Это может значительно повысить производительность ресурсоёмких задач. Поэтому её включение будет очень эффективным для повышения производительности Nextcloud.
nano /etc/php/8.3/fpm/conf.d/10-opcache.ini
zend_extension=opcache.soopcache.enable=1opcache.enable_cli=1opcache.interned_strings_buffer=64opcache.max_accelerated_files=12000opcache.memory_consumption=512opcache.save_comments=1opcache.revalidate_freq=60opcache.jit=onopcache.jit = 1255opcache.jit_buffer_size = 256M- Перезапустите PHP-FPM, чтобы изменения вступили в силу:
service php8.3-fpm restartШаг 9: Включите APCu в PHP
- Включить APCu в PHP:
apt install php8.3-apcunano /etc/php/8.3/fpm/conf.d/20-apcu.iniextension=apcu.soapc.enable_cli=1Теперь перезапустите PHP-FPM и Apache.
systemctl restart php8.3-fpmsystemctl restart apache2Теперь проверьте [URL]/info.php еще раз, он покажет «Поддержка APCu включена» (“APCu support Enabled”).
- Настройте Nextcloud на использование APCu для кэширования памяти:
nano /var/www/html/nextcloud/config/config.php'memcache.local' => '\OC\Memcache\APCu',Шаг 10: Установка и настройка Redis Cache
-
Установка и настройка Redis Cache В Nextcloud Redis используется для локального и распределенного кэширования, а также для транзакционной блокировки файлов. Для локального кэширования мы использовали APCu, который быстрее Redis. Redis будет использоваться для блокировки файлов. Механизм транзакционной блокировки файлов Nextcloud блокирует файлы, предотвращая их повреждение во время нормальной работы.
-
Установите Redis Server и расширение Redis php
apt install redis-server php-redis -y- Запустите и включите службу Redis.
systemctl start redis-serversystemctl enable redis-serversystemctl status redis-server- Настройте Redis для использования Unix Socket вместо портов
nano /etc/redis/redis.confport 0unixsocket /var/run/redis/redis.sockunixsocketperm 770- Добавьте пользователя Apache в группу Redis
usermod -a -G redis www-data- Настройте Nextcloud для использования Redis для блокировки файлов
nano /var/www/html/nextcloud/config/config.php'filelocking.enabled' => 'true','memcache.distributed' => '\\OC\\Memcache\\Redis','memcache.locking' => '\\OC\\Memcache\\Redis','redis' => [ 'host' => '/var/run/redis/redis.sock', 'port' => 0, 'dbindex' => 0, 'password' => '', 'timeout' => 1.5,],- Включите блокировку сеанса Redis в PHP
nano /etc/php/8.3/fpm/php.iniredis.session.locking_enabled=1redis.session.lock_retries=-1redis.session.lock_wait_time=10000- Перезапустите Redis, PHP-FPM и Apache
systemctl restart redis-serversystemctl restart php8.3-fpmsystemctl restart apache2- Вы можете проверить, включены ли функции в PHP
nextcloud-ubuntu-24.04-redisRedis is Installed for Nextcloudhttps://help.nextcloud.com/t/installing-redis-for-memcache/162599/6
-
Я предполагаю, что вы используете traefik в качестве обратного прокси-сервера, и вам не нужен certbot. Поэтому мы добавили соответствующие значения в /etc/apache2/sites-enabled/000-default.conf.
-
Включаем Pretty URL’s:
nano /var/www/html/nextcloud/config/config.php'htaccess.RewriteBase' => '/',Эта команда обновит файл .htaccess для переадресации
sudo -u www-data php --define apc.enable_cli=1 /var/www/html/nextcloud/occ maintenance:update:htaccess- Другие необходимые команды
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:repair --include-expensivesudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indicessudo -u www-data php /var/www/html/nextcloud/occ config:system:set maintenance_window_start --type=integer --value=1sudo crontab -u www-data -e*/5 * * * * php -f /var/www/html/nextcloud/cron.phpsudo -u www-data php /var/www/html/nextcloud/occ files:scan --allsudo -u www-data php /var/www/html/nextcloud/occ app:update --allНекоторая информация может быть устаревшей



