Установка полноценного 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: Обновляем систему.
- Обновляем пакеты и настраиваем кодировку:
1sudo su1apt update && apt upgrade -y1dpkg-reconfigure localesШаг 2: Устанавливаем Apache2 и PHP Modules.
- Устанавливаем Apache2:
1apt install apache2 -y- Устанавливаем зависимости:
1apt 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:
1a2enmod env rewrite dir mime headers setenvif ssl- Перезапускаем, включаем и проверяем работоспособность Apache.
1systemctl restart apache22systemctl enable apache23systemctl status apache2- Проверяем загрузку модулей Apache:
1apache2ctl -MШаг 3: Устанавливаем и конфигурируем MariaDB сервер
- Install mariadb-server package:
1apt install mariadb-server -y- Заходим в MariaDB:
1mysql- Создаем базу данных и пользователя для Nextcloud и задаем необходимые разрешения пользователю:
1CREATE USER 'ncloud'@'localhost' IDENTIFIED BY 'admin123';2CREATE DATABASE ncloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;3GRANT ALL PRIVILEGES ON ncloud.* TO 'ncloud'@'localhost';4FLUSH PRIVILEGES;5quit;- Перезапускаем и активируем MariaDB:
1systemctl restart mariadb2systemctl enable mariadb- Проверяем, что MariaDB запущенна:
1systemctl status mariadbШаг 4: Загружаем, разархивируем и задаем разрешения Nextcloud
- Загружаем и разархивируем в папку /var/www/html:
1cd /var/www/html2wget https://download.nextcloud.com/server/releases/latest.zip3unzip latest.zip- Удалем ненужный архив:
1rm -rf latest.zip- Задаем права на папку:
1chown -R www-data:www-data /var/www/html/nextcloud/Шаг 5: Устанавливаем Nextcloud из командной строки
- Запускаем приведенную ниже команду для инсталяции nextcloud (нужно внести свои данные конечно)
1cd /var/www/html/nextcloud1sudo -u www-data php occ maintenance:install --database \2"mysql" --database-name "ncloud" --database-user "ncloud" --database-pass \3'admin123' --admin-user "admin" --admin-pass "password"- Nextcloud разрешает доступ только с локального хоста, это может привести к ошибке «Доступ через недоверенный домен». Нам нужно разрешить доступ к Nextcloud, используя IP-адрес или доменное имя
1sudo nano /var/www/html/nextcloud/config/config.php2
3 'trusted_domains' =>4 array (5 0 => 'localhost',6 1 => 'nextcloud.your_domain.ru', // we Included the Sub Domain7 ),8 'overwritehost' => 'nextcloud.your_domain.ru',9 'overwriteprotocol' => 'https',10 'overwrite.cli.url' => 'https://nextcloud.your_domain.ru',11 'trusted_proxies' =>12 array (13 0 => '192.168.0.0/16',14 1 => '172.16.0.0/12',15 2 => '10.0.0.0/8',16 3 => 'fc00::/7',17 4 => 'fe80::/10',18 5 => '2001:db8::/32',19 ),20 'default_phone_region' => 'RU',21 'allow_local_remote_servers' => true,- Настройте Apache для загрузки Nextcloud из папки /var/www/html/nextcloud:
1nano /etc/apache2/sites-enabled/000-default.conf2
3<VirtualHost *:80>4 ServerAdmin webmaster@localhost5 DocumentRoot /var/www/html/nextcloud6
7 <Directory /var/www/html/nextcloud>8 Options Indexes FollowSymLinks9 AllowOverride All10 Require all granted11 </Directory>12
13 ServerName nextcloud.yourdomain.ru14 <IfModule mod_headers.c>15 Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"16 </IfModule>17
18 ErrorLog ${APACHE_LOG_DIR}/error.log19 CustomLog ${APACHE_LOG_DIR}/access.log combined20</VirtualHost>- Перезапускаем Apache:
1systemctl restart apache2- Теперь перейдите в браузер и введите http://[ip или полное доменное имя] сервера. Появится страница входа в Nextcloud, показанная ниже.
Шаг 6: Установка и настройка PHP-FPM с Apache
- Установка PHP-FPM: #проверьте актуальную версию
1apt install php8.3-fpm- Проверьте, запущен ли PHP-FPM, его версию и создан ли сокет:
1service php8.3-fpm status2php-fpm8.3 -v3ls -la /var/run/php/php8.3-fpm.sock- Отключите mod_php и модуль prefork:
1a2dismod php8.32a2dismod mpm_prefork- Активируйте PHP-FPM:
1a2enmod mpm_event proxy_fcgi setenvif2a2enconf php8.3-fpm- Перезапустите Apache, чтобы перезагрузить все модули и конфигурации:
1systemctl restart apache2Теперь, чтобы настроить размер загружаемого файла и производительность, нам нужно изменить некоторые параметры php.ini, перечисленные ниже в файле /etc/php/8.3/fpm/php.ini. Вы можете задать собственные значения в зависимости от вашей среды.
1upload_max_filesize = 64M2post_max_size = 96M3memory_limit = 512M4max_execution_time = 6005max_input_vars = 30006max_input_time = 1000- Проверьте текущее значение:
1grep -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- Вместо ручного внесения изменений вы можете выполнить следующую команду для немедленного внесения изменений. Это сэкономит время.
1sed -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или
1sed -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. Ниже приведены некоторые оптимальные значения, но вам следует задать свои собственные значения.
1pm.max_children = 642pm.start_servers = 163pm.min_spare_servers = 164pm.max_spare_servers = 32- Проверим текущии значения:
1grep -E "pm.max_children|pm.start_servers|pm.min_spare_servers|pm.max_spare_servers" /etc/php/8.3/fpm/pool.d/www.conf- Измените все значения одновременно с помощью следующей команды:
1sed -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или
1sed -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, чтобы применить все изменения:
1service php8.3-fpm restartТеперь вставьте приведенный ниже код в файл конфигурации сайта Apache по умолчанию /etc/apache2/sites-enabled/000-default.conf, он укажет Apache передать обработку PHP-файла PHP-FPM.
1 <FilesMatch ".php$">2 SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"3 </FilesMatch>- После предоставления кода конфигурация сайта Apache по умолчанию будет выглядеть так, как показано ниже::
1nano /etc/apache2/sites-enabled/000-default.conf1<VirtualHost *:80>2 # The ServerName directive sets the request scheme, hostname and port that3 # the server uses to identify itself. This is used when creating4 # redirection URLs. In the context of virtual hosts, the ServerName5 # specifies what hostname must appear in the request's Host: header to6 # match this virtual host. For the default virtual host (this file) this7 # value is not decisive as it is used as a last resort host regardless.8 # However, you must set it for any further virtual host explicitly.9 #ServerName www.example.com10
11 ServerAdmin webmaster@localhost12 DocumentRoot /var/www/html/nextcloud13
14 <Directory /var/www/html/nextcloud>15 Options Indexes FollowSymLinks16 AllowOverride All17 Require all granted18 </Directory>19
20 <FilesMatch ".php$">21 SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"22 </FilesMatch>23
24 ServerName nextcloud.your_domain.ru25 <IfModule mod_headers.c>26 Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"27 </IfModule>28
29 # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,30 # error, crit, alert, emerg.31 # It is also possible to configure the loglevel for particular32 # modules, e.g.33 #LogLevel info ssl:warn34
35 ErrorLog ${APACHE_LOG_DIR}/error.log36 CustomLog ${APACHE_LOG_DIR}/access.log combined37
38 # For most configuration files from conf-available/, which are39 # enabled or disabled at a global level, it is possible to40 # include a line for only one particular virtual host. For example the41 # following line enables the CGI configuration for this host only42 # after it has been globally disabled with "a2disconf".43 #Include conf-available/serve-cgi-bin.conf44</VirtualHost>- Теперь перезапустите Apache, чтобы изменения вступили в силу:
1systemctl restart apache2Шаг 7: Создайте страницу info.php для проверки функций PHP (опционально. После завершения проверки, файл надо удалить)
Создайте страницу info.php, она покажет нам, включены ли PHP-FPM, OPCache, APCu в PHP..
1cd /var/www/html/nextcloud1nano info.php1<?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.
1nano /etc/php/8.3/fpm/conf.d/10-opcache.ini2
3zend_extension=opcache.so4opcache.enable=15opcache.enable_cli=16opcache.interned_strings_buffer=647opcache.max_accelerated_files=120008opcache.memory_consumption=5129opcache.save_comments=110opcache.revalidate_freq=6011opcache.jit=on12opcache.jit = 125513opcache.jit_buffer_size = 256M- Перезапустите PHP-FPM, чтобы изменения вступили в силу:
1service php8.3-fpm restartШаг 9: Включите APCu в PHP
- Включить APCu в PHP:
1apt install php8.3-apcu1nano /etc/php/8.3/fpm/conf.d/20-apcu.ini1extension=apcu.so2apc.enable_cli=1Теперь перезапустите PHP-FPM и Apache.
1systemctl restart php8.3-fpm2systemctl restart apache2Теперь проверьте [URL]/info.php еще раз, он покажет «Поддержка APCu включена» (“APCu support Enabled”).
- Настройте Nextcloud на использование APCu для кэширования памяти:
1nano /var/www/html/nextcloud/config/config.php1'memcache.local' => '\OC\Memcache\APCu',Шаг 10: Установка и настройка Redis Cache
-
Установка и настройка Redis Cache В Nextcloud Redis используется для локального и распределенного кэширования, а также для транзакционной блокировки файлов. Для локального кэширования мы использовали APCu, который быстрее Redis. Redis будет использоваться для блокировки файлов. Механизм транзакционной блокировки файлов Nextcloud блокирует файлы, предотвращая их повреждение во время нормальной работы.
-
Установите Redis Server и расширение Redis php
1apt install redis-server php-redis -y- Запустите и включите службу Redis.
1systemctl start redis-server2systemctl enable redis-server3systemctl status redis-server- Настройте Redis для использования Unix Socket вместо портов
1nano /etc/redis/redis.conf1port 02unixsocket /var/run/redis/redis.sock3unixsocketperm 770- Добавьте пользователя Apache в группу Redis
1usermod -a -G redis www-data- Настройте Nextcloud для использования Redis для блокировки файлов
1nano /var/www/html/nextcloud/config/config.php1'filelocking.enabled' => 'true',2'memcache.distributed' => '\\OC\\Memcache\\Redis',3'memcache.locking' => '\\OC\\Memcache\\Redis',4'redis' => [5 'host' => '/var/run/redis/redis.sock',6 'port' => 0,7 'dbindex' => 0,8 'password' => '',9 'timeout' => 1.5,10],- Включите блокировку сеанса Redis в PHP
1nano /etc/php/8.3/fpm/php.ini1redis.session.locking_enabled=12redis.session.lock_retries=-13redis.session.lock_wait_time=10000- Перезапустите Redis, PHP-FPM и Apache
1systemctl restart redis-server2systemctl restart php8.3-fpm3systemctl restart apache2- Вы можете проверить, включены ли функции в PHP
1nextcloud-ubuntu-24.04-redis2Redis 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:
1nano /var/www/html/nextcloud/config/config.php1'htaccess.RewriteBase' => '/',Эта команда обновит файл .htaccess для переадресации
1sudo -u www-data php --define apc.enable_cli=1 /var/www/html/nextcloud/occ maintenance:update:htaccess- Другие необходимые команды
1sudo -u www-data php /var/www/html/nextcloud/occ maintenance:repair --include-expensive1sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indices1sudo -u www-data php /var/www/html/nextcloud/occ config:system:set maintenance_window_start --type=integer --value=11sudo crontab -u www-data -e1*/5 * * * * php -f /var/www/html/nextcloud/cron.php1sudo -u www-data php /var/www/html/nextcloud/occ files:scan --all1sudo -u www-data php /var/www/html/nextcloud/occ app:update --allSome information may be outdated