Чую скоро мне придётся частенько заниматься установкой NextCloud на свои сервера. Нашёл хорошую инструкцию для упрощения процесса, сохраняю себе как заметку, но может кому-нибудь тож пригодится.
Не смотря на то, что многие хостеры, включая timeweb, сейчас предлагают автоматическую установку Nextcloud, я всё же рекомендую всё делать самостоятельно, т.к. при автоматических установках приходится гулять по серверу и всё перенастраивать.
Для понимания инструкции требуются базовые знания по настройке веб-серверов на Linux.
Предвещаю вопрос: "а можно ли поставить Nextcloud на хостинг, или на панель управления сервером, чтобы не париться с терминалом?" Ответ - можно, если Nextcloud вам нужен только как личное облако + чаты и видеоконференции. При такой установке возникают проблемы с интеграцией офисных пакетов типа Collabora или Onlyoffice. Тестировал такую установку на панели Fastpanel - там ничего сложного, загоняете архив с nextcloud и устанавливаете через веб-установщик.
Видеоинструкция с настройкой:
Ссылка на оригинал - тык
Оригинал был слегка видоизменён, vim в командах заменён на Nano, а хост на avangardcloud.shadani.ru (поддомен будет удалён после публикации статьи, т.к. создавался ради теста)
Настройка Ubuntu Server
1. "Установить UbuntuServer"
2. "При установке разметить диски" (не обязательно)
/dev/sda
2G ext4 /boot
/dev/sdb
root-vg (lvm)
ext4 / root-lv (lvm)
3. "После установки извлечь установочный диск и перезагрузить"
4. "Обновить и очистить пакеты"
sudo apt update
sudo apt upgrade
sudo apt autoremove
5. "Настроить hostname" (не обязательно, если у вас VDS на хостинге)
sudo nano /etc/hostname
cloud
sudo nano /etc/hosts
127.0.1.1 cloud
6. "Настроить timezone" (не обязательно, если у вас VDS на хостинге)
sudo timedatectl set-timezone Europe/Moscow
7. "# make sure that “network: {config: disabled}” entry is there. If the entry is missing, we have to create it."
sudo cat /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
network: {config: disabled}
8. "Настроить сетевые интерфейсы" (не обязательно, если у вас VDS на хостинге)
sudo cat /etc/netplan/00-installer-config.yaml
sudo cp -a /etc/netplan/00-installer-config.yaml{,.orig} # back up the file /etc/netplan/00-installer-config.yaml
ip a
sudo nano /etc/netplan/00-installer-config.yaml
Меняем/Дописываем содержимое:
network:
version: 2
renderer: networkd
ethernets:
ens18:
addresses:
- 192.168.1.11/24
nameservers:
addresses: [192.168.1.1, 8.8.8.8]
ens19:
addresses:
- 8.8.4.4/29
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
routes:
- to: default
via: 8.8.8.1
sudo netplan try
9. "Добавляем пользователя"
adduser vol
usermod -aG sudo vol
10. "Настроить SSH по ключу" (Не обязательно, но полезно для безопасности)
# Если у вас комп на linux:
sudo apt install openssh
# Если комп на windows:
winget install openssh
# перейти в папку .ssh на локальной машине
cd ~/.ssh
# Сгенерировать ключ на локальной машине
ssh-keygen -t rsa -b 4096
# посмотреть созданные ключи
ls
# создание папки ssh на удаленном сервере
#ssh [remote_username]@[server_ip_address] mkdir -p .ssh
ssh vol@avangardcloud.shadani.ru mkdir -p .ssh
# скопировать публичный ключ на удаленный сервер
# scp .\[key.pub] [remote_username]@[server_ip_address]:/home/vol/.ssh/[key.pub]
scp C:\Users\admin\.ssh\key.pub vol@avangardcloud.shadani.ru:/home/vol/.ssh/key.pub (если генерили на винде)
# подключится к удаленному серверу по ssh
# экспорт публичного ключа в uthorized_keys
cat ~/.ssh/key.pub >> ~/.ssh/authorized_keys
# отредактировать sshd_config
sudo nano /etc/ssh/sshd_config
Меняем/Дописываем содержимое
Port 2822 # поменять порт SSH
UsePAM yes
PasswordAuthentication no
PermitRootLogin no
# перезагрузить sshd сервис
sudo systemctl restart sshd
# Включить ssh агент
Start-Service ssh-agent
Get-Service ssh-agent
Get-Service ssh-agent | Select StartType
Get-Service -Name ssh-agent | Set-Service -StartupType Manual
# Добавить ключ в SSH агент
# ssh-add <path to new private key file>
ssh-add c:/Users/admin/.ssh/key (если винда)
Установка и настройка NextCloud (установка сервера, базы данных; монтирование директории data)
1. "Установка и настройка базы данных"
sudo apt install mariadb-server
systemctl status mariadb
2. "Настройки безопасности MariaDB"
sudo mysql_secure_installation
Enter current password for root (enter for none): none
Switch to unix_socket authentication [Y/n] : n
Change the root password? [Y/n]: y
Remove anonymous users? [Y/n]: y
Disallow root login remotely? [Y/n]: y
Remove test database and access to it? [Y/n]: y
Reload privilege tables now? [Y/n]: y
3. "Создание базы nextcloud"
sudo mariadb
CREATE DATABASE nextcloud;
SHOW DATABASES;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'mypassword';
FLUSH PRIVILEGES;
exit
# сменить пароль юзера maiadb (если забыл)
# ALTER USER 'user'@'localhost' IDENTIFIED BY 'new_password';
# FLUSH PRIVILEGES;
# exit
4. "Установка WEB сервера"
sudo apt install php php-apcu php-bcmath php-cli php-common php-curl php-gd php-gmp php-imagick php-intl php-mbstring php-mysql php-zip php-xml
systemctl status apache2 # apache2 должен установится как зависимость вместе с предыдущей командой
5."Enable PHP extensions"
sudo phpenmod bcmath gmp imagick intl
6. "Скачать дистрибутив Nextcloud"
wget https://download.nextcloud.com/server/releases/latest.zip
7. "Распаковать и установить Nextcloud"
sudo apt install unzip
unzip latest.zip
sudo mv nextcloud /var/www/
rm latest.zip
8. "Сменить владельца /var/www/nextcloud/"
sudo chown -R www-data:www-data /var/www/nextcloud/
9. "apache2 отключаем сайт по-умолчанию"
sudo a2dissite 000-default.conf
10. "Настроить сайт nextcloud"
sudo nano/etc/apache2/sites-available/nextcloud.conf
Содержание файла:
<VirtualHost *:80>
DocumentRoot "/var/www/nextcloud"
ServerName cloud
<Directory "/var/www/nextcloud/">
Options MultiViews FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
TransferLog /var/log/apache2/nextcloud.log
ErrorLog /var/log/apache2/nextcloud.log
</VirtualHost>
11. "apache2 enable nextcloud site"
sudo a2ensite nextcloud.conf
12. "Конфигурирование appache сервера"
# sudo nano /etc/php/8.1/apache2/php.ini
# провести проверку текущих настроек через cat
cat /etc/php/8.1/apache2/php.ini | grep 'memory_limit = '
cat /etc/php/8.1/apache2/php.ini | grep 'upload_max_filesize ='
cat /etc/php/8.1/apache2/php.ini | grep 'max_execution_time ='
cat /etc/php/8.1/apache2/php.ini | grep 'post_max_size ='
cat /etc/php/8.1/apache2/php.ini | grep 'date.timezone ='
cat /etc/php/8.1/apache2/php.ini | grep 'opcache.enable='
cat /etc/php/8.1/apache2/php.ini | grep 'opcache.interned_strings_buffer='
cat /etc/php/8.1/apache2/php.ini | grep 'opcache.max_accelerated_files='
cat /etc/php/8.1/apache2/php.ini | grep 'opcache.memory_consumption='
cat /etc/php/8.1/apache2/php.ini | grep 'opcache.save_comments='
cat /etc/php/8.1/apache2/php.ini | grep 'opcache.revalidate_freq='
# заменить требуемые строки настроек
sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 200M/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/max_execution_time = 30/max_execution_time = 360/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/post_max_size = 8M/post_max_size = 200M/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;date.timezone =/date.timezone = Europe\/Moscow/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;opcache.enable=1/opcache.enable=1/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;opcache.interned_strings_buffer=8/opcache.interned_strings_buffer=8/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;opcache.max_accelerated_files=10000/opcache.max_accelerated_files=10000/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;opcache.memory_consumption=128/opcache.memory_consumption=128/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;opcache.save_comments=1/opcache.save_comments=1/g' /etc/php/8.1/apache2/php.ini
sudo sed -i 's/;opcache.revalidate_freq=2/opcache.revalidate_freq=1/g' /etc/php/8.1/apache2/php.ini
# провести проверку через cat снова, результат ниже:
memory_limit = 512M
upload_max_filesize = 200M
max_execution_time = 360
post_max_size = 200M
date.timezone = Europe/Moscow
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
13. "Перепроверить модификаторы appache и перезагрузить appache"
sudo a2enmod dir env headers mime rewrite ssl
sudo systemctl restart apache2
14. "Перейти на сайт и завершить установку nextcloud"
Дополнительные настройки и сервисы
1. "Дополнительный софт"
sudo apt install libapache2-mod-php imagemagick ffmpeg php-bz2 php-redis redis-server unzip redis-server php-redis cron ncdu lnav net-tools iotop htop
2. "Добавить в 'trusted_domains' все адреса, к которым будет осуществляться подключение"
sudo nano /var/www/nextcloud/config/config.php
Добавляем/меняем содержимое:
'trusted_domains' =>
array (
0 => 'avangardcloud.shadani.ru',
),
3. "Дополнительные настройки в nextcloud/config/config.php"
sudo nano /var/www/nextcloud/config/config.php
Меняем содержимое:
'memcache.local' => '\\OC\\Memcache\\APCu',
'default_phone_region' => 'RU',
'simpleSignUpLink.shown' => false,
'config_is_read_only' => true,
'maintenance' => false,
4. "Убрать ошибку Image Magick error"
sudo apt install libmagickcore-6.q16-6-extra
5. "Настроить certbot"
https://certbot.eff.org/instructions
6. "Enabling Strict Transport Security"
sudo nano /etc/apache2/sites-available/nextcloud-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" # ВАЖНО! добавить эту строку
</VirtualHost>
</IfModule>
7. Делаем редирект на SSL/Reditect to 443
sudo nano /etc/apache2/sites-available/nc-redir.conf
Меняем/Добавляем содержимое:
<VirtualHost *:80>
ServerName nc.domain.org
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
sudo systemctl restart apache2
8. "Настроить cron"
# Configuration settings > Basic settings > Enable Cron
sudo apt install cron
sudo systemctl enable cron
sudo crontab -e
*/5 * * * * php -f /var/www/nextcloud/cron.php # вставить в конце, не забыть про перенос на новую строку в конце
sudo crontab -l
9. "Настройка redis"
ps ax | grep redis
sudo apt install redis-server php-redis
ps ax | grep redis
sudo usermod -a -G redis www-data
sudo systemctl restart apache2
sudo nano /etc/redis/redis.conf
Добавляем/Меняем содержимое:
unixsocket /var/run/redis/redis-server.sock unixsocketperm 770 port 0
sudo systemctl restart redis
sudo nano /var/www/nextcloud/config/config.php
# удалить строку
'memcache.local' => '\\OC\\Memcache\\APCu',
# и добавить строки
'filelocking.enabled' => true,
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
),
sudo -u www-data php /var/www/nextcloud/occ background:cron
10. "Настроить fail2ban" (Не обязательно, но желательно)
sudo apt install fail2ban
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Добавляем/Меняем содержимое:
ignoreip = 127.0.0.1/8 ::1
# Create a file in /etc/fail2ban/filter.d named nextcloud.conf with the following contents:
sudo nano /etc/fail2ban/filter.d/nextcloud.conf
Добавляем/Меняем содержимое:
[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
# Create a file in /etc/fail2ban/jail.d named nextcloud.local with the following contents:
sudo nano /etc/fail2ban/jail.d/nextcloud.local
Добавляем/Меняем содержимое:
[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 3600
logpath = /var/log/nextcloud.log
# config sshd
sudo nano /etc/fail2ban/jail.d/sshd.local
Добавляем/Меняем содержимое:
[sshd]
backend = systemd
enabled = true
port = ssh
protocol = tcp
filter = sshd
maxretry = 1
bantime = 1d
findtime = 60m
logpath = %(sshd_log)s
# создать файл логов
sudo touch /var/log/nextcloud.log
sudo chown www-data:www-data /var/log/nextcloud.log
sudo chmod 660 /var/log/nextcloud.log
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
11. Настройка ufw (не обязательно, но желательно)
sudo apt-get install ufw
sudo nano /etc/default/ufw
Добавляем/Меняем содержимое:
IPV6=yes
sudo ufw default deny
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
12. "Логи"
sudo nano /var/www/nextcloud/config/config.php
Добавляем/Меняем содержимое:
# в конец
'log_type' => "file",
'logfile' => '/var/log/nextcloud.log',
'loglevel' => 1,
'logdateformat' => "F d, Y H:i:s",
sudo touch /var/log/nextcloud.log
sudo chown -R root:www-data /var/log/nextcloud.log
sudo systemctl restart apache2
# lnav - просмотр логов
sudo tail -n 100 /var/log/nextcloud.log
sudo tail -n 100 /var/log/apache2/nextcloud.log
13. "Удалить index.php из URL"
sudo nano /var/www/nextcloud/config/config.php
Вносим изменения:
'htaccess.RewriteBase' => '/',
sudo php /var/www/nextcloud/occ maintenance:update:htaccess
14. "Настраиваем права доступа к nextcloud/config/config.php"
sudo chmod 660 /var/www/nextcloud/config/config.php
sudo chown root:www-data /var/www/nextcloud/config/config.php
Установка Collabora
0. Создать DNS запись
В этом примере мы поместим Collabora на поддомен. Поддомен может отличаться от адреса сервера с Nextcloud.
Cоздать A запись collabora.avangardcloud.shadani.ru = IP вашего nextcloud
1. Установка
В web интерфейсе установить приложение "Nextcloud Office"
2. Импорт ключа официального репозитория
sudo apt install gnupg
cd /usr/share/keyrings
sudo wget https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg
3. Добавить репозиторий
sudo nano /etc/apt/sources.list.d/collaboraonline.sources
Дописываем содержимое:
Types: deb
URIs: https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu2204
Suites: ./
Signed-By: /usr/share/keyrings/collaboraonline-release-keyring.gpg
4. Установить необходимые пакеты
sudo apt update && sudo apt install coolwsd code-brand hunspell collaboraoffice*
5. Настройка Apache для Collabora
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/collabora.conf
sudo nano /etc/apache2/sites-available/collabora.conf
- настроить ServerName (collabora.avangardcloud.shadani.ru)
- удалить ServerAdmin и DocumentRoot
sudo a2ensite collabora && sudo systemctl reload apache2
6. Получить SSL сертификат с помощью certbot
sudo certbot --apache
7. Включить модули apache для Collabora
sudo a2enmod proxy proxy_wstunnel proxy_http proxy_connect
8. Настроить SSL конфиг Collabora на локальную работу
sudo nano /etc/apache2/sites-enabled/collabora-le-ssl.conf
Вносим изменения:
Options -Indexes
AllowEncodedSlashes NoDecode
ProxyPreserveHost On
# static html, js, images, etc. served from coolwsd
# browser is the client part of Collabora Online
ProxyPass /browser http://127.0.0.1:9980/browser retry=0
ProxyPassReverse /browser http://127.0.0.1:9980/browser
# WOPI discovery URL
ProxyPass /hosting/discovery http://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse /hosting/discovery http://127.0.0.1:9980/hosting/discovery
# Capabilities
ProxyPass /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities retry=0
ProxyPassReverse /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities
# Main websocket
ProxyPassMatch "/cool/(.*)/ws$" ws://127.0.0.1:9980/cool/$1/ws nocanon
# Admin Console websocket
ProxyPass /cool/adminws ws://127.0.0.1:9980/cool/adminws
# Download as, Fullscreen presentation and Image upload operations
ProxyPass /cool http://127.0.0.1:9980/cool
ProxyPassReverse /cool http://127.0.0.1:9980/cool
# Compatibility with integrations that use the /lool/convert-to endpoint
ProxyPass /lool http://127.0.0.1:9980/cool
ProxyPassReverse /lool http://127.0.0.1:9980/cool
ErrorLog /var/log/apache2/collabora-error.log
CustomLog /var/log/apache2/collabora-access.log combined
9. Настройка файлов логов
sudo touch /var/log/apache2/collabora-error.log
sudo touch /var/log/apache2/collabora-access.log
sudo chown root:cool /var/log/apache2/collabora-error.log
sudo chown root:cool /var/log/apache2/collabora-access.log
10. Перезапустить apache
sudo systemctl restart apache2
11. Настроить конфиг Collabora
sudo nano /etc/coolwsd/coolwsd.xml
Меняем содержимое:
de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru
>
ru en_US
sudo coolconfig set ssl.enable false
sudo coolconfig set ssl.termination true
12. Перезапустить Collabora
sudo systemctl restart coolwsd
sudo systemctl status coolwsd
13. Включить Collabora в Nextcloud
В WEB интерфейсе в настройках найти опцию Office и подключится к настроенному серверу https://collabora.avangardcloud.shadani.ru
Заполнить опцию Allow list for WOPI requests , IP адресом collabora сервера
Troubleshoot
# https://sdk.collaboraonline.com/docs/installation/Collabora_Online_Troubleshooting_Guide.html
journalctl -e -u coolwsd | lnav
journalctl -r -u coolwsd | lnav