Verification: a143cc29221c9be0

Openssl php extension have to be enabled

Openssl php extension have to be enabled

Установка и настройка системы и необходимых компонентов

Во время установки Ubuntu Server, отметить для установки SSH Server и LAMP. Выбрать автоустановку обновлений безопасности.

# Войти в режим рута
sudo -i
# Задать статический IP:
nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.7
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-search workgroup

Перезагрузиться.

Зайти в систему по SSH и обновить систему целиком:

sudo -i
apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get autoremove

Установить все необходимые компоненты и, в данном случае, механизм кэширования APCu + Redis и компоненты для автогенерации favicon:

apt-get install php-zip php-xml php-gd php-json php-curl php-mbstring php-bz2 php-intl php-mcrypt php-apcu redis-server php-redis php-imagick libmagickcore-6.q16-2-extra -y

Если нужен SMB client (для подключения внешних накопителей в Nextcloud), LDAP и Midnight Commander:

apt-get install smbclient php-ldap mc -y

Установка Nextcloud

# Скачать последнюю версию
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
# Распаковать архив в корневую папку веб-сервера
tar xjf latest.tar.bz2 --strip=1 -C /var/www/html
# Удалить исходный архив (если нужно)
rm latest.tar.bz2
# Создать папку для пользовательских данных
mkdir /var/nextcloud-data
# Дать права владельца веб-серверу:
chown -R www-data:www-data /var/www/html /var/nextcloud-data
# Перезапустить Apache:
systemctl restart apache2
# Создать базу MySQL с именем "nextcloud":
mysql -u root -p -e "create database nextcloud";

Открыть браузер, зайти на веб-интерфейс (здесь: 192.168.1.7), задать логин и пароль админа, путь к папке с данными пользователей (здесь: /var/nextcloud-data) и имя БД (здесь: nextcloud). Либо настроить из командной строки:
FIXME - уточнить, можно ли тут обойтись без паролей

sudo -u www-data php /var/www/html/occ maintenance:install --database "mysql" --data-dir "/var/nextcloud-data" --database-name "nextcloud" --database-user "root" --database-pass "password" --admin-user "admin" --admin-pass "password"

Настройка

# Убрать закрывающую строку из конфига и заменить строку overwrite.cli.url на нужную.
# В sed экранирование апострофа безумное - '"'"'
sed -i '
/);/d
/overwrite.cli.url/c \'"'"'overwrite.cli.url\'"'"' => \'"'"'https://192.168.1.7\'"'"',' /var/www/html/config/config.php
 
# Настроить конфиг - "pretty URLs", кэширование, часовой пояс для логов и их ротацию (100 МБ)
echo "'htaccess.RewriteBase' => '/',
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
 'redis' => array(
      'host' => 'localhost',
      'port' => 6379,
       ),
'logtimezone' => 'Europe/Moscow',
'log_rotate_size' => 104857600,
);" >> /var/www/html/config/config.php
 
# Настроить максимальный размер файла на закачку в PHP и лимит памяти
# Проверить версию PHP и путь к используемым php.ini (php --ini), например, он может быть
# /etc/php/7.3/fpm/php.ini. Есть ещё
# /etc/php/7.3/cli/php.ini.
sed -i '
/upload_max_filesize =/c upload_max_filesize = 4G
/post_max_size =/c post_max_size = 4G
/memory_limit =/c memory_limit = 512M' /etc/php/7.3/apache2/php.ini
 
# Настроить параметры opcache
sed -i '
/opcache.enable=/c opcache.enable=1
/opcache.enable_cli=/c opcache.enable_cli=1
/opcache.memory_consumption=/c opcache.memory_consumption=128
/opcache.interned_strings_buffer=/c opcache.interned_strings_buffer=8
/opcache.max_accelerated_files=/c opcache.max_accelerated_files=10000
/opcache.revalidate_freq=/c opcache.revalidate_freq=1
/opcache.save_comments=/c opcache.save_comments=1' /etc/php/7.3/apache2/php.ini

Список часовых поясов для PHP

SSL, mod_env и mod_rewrite для pretty URLs

a2enmod ssl headers env rewrite && a2ensite default-ssl

Включить Strict transport security, Referrer Policy и Forward secrecy:

echo "
 Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
 Header always set Referrer-Policy "no-referrer-when-downgrade"

 
# Set Forward Secrecy
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
" >> /etc/apache2/sites-available/default-ssl.conf

Перенаправить HTTP на HTTPS

nano /etc/apache2/sites-available/000-default.conf

VirtualHost *:80>
ServerName www.yourdomain.com
Redirect / https://www.yourdomain.com/
VirtualHost>
systemctl restart apache2

Настроить Pretty URLs

nano /etc/apache2/apache2.conf
 
# В разделе  изменить параметр AllowOverride None на AllowOverride All
# Выйти из редактора.
 
# Обновить файл .htaccess:
sudo -u www-data php /var/www/html/occ maintenance:update:htaccess
 
# Перезапустить Apache:
systemctl restart apache2

Переключить фоновые задачи на выполнение кроном

Выключить ненужные ссылки

config/config.php:

# Выключить ссылку на сброс пароля
'lost_password_link' => 'disabled',
# Remove link “Get your own free account”
'simpleSignUpLink.shown' => false,

Настроить аутентификацию через LDAP

Обновление

# Автоматически:
sudo -u www-data php /var/www/html/updater/updater.phar
 
# Вручную:
# Скачать последний релиз
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
# Распаковать скачанный архив в папку установки
tar xjf latest.tar.bz2 --strip=1 -C /var/www/html
# Дать права владельца веб-серверу:
chown -R www-data:www-data /var/www/html
# Включить режим обслуживания
sudo -u www-data php /var/www/html/occ maintenance:mode --on
# Запустить процесс обновления
sudo -u www-data php /var/www/html/occ upgrade
# Выключить режим обслуживания
sudo -u www-data php /var/www/html/occ maintenance:mode --off

https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html

Экспресс-обновление со сменой шлюза

ip route change default via 192.168.1.254 dev eth0
apt update && apt upgrade -y && apt autoremove -y
sudo -u www-data php /var/www/html/updater/updater.phar --no-interaction
ip route change default via 192.168.1.1 dev eth0

Обновление на след. мажорный релиз

# Нужно переключиться на бета-канал обновлений, обновляться, а затем переключиться обратно.
sed -i 's/stable/beta/' /var/www/html/config/config.php
sudo -u www-data php /var/www/html/updater/updater.phar --no-interaction
sed -i 's/beta/stable/' /var/www/html/config/config.php
sudo -u www-data php /var/www/html/updater/updater.phar --no-interaction

Настройка кэширования через сервер Redis

Как-то раз произошла ситуация - невозможно было стереть файл с сервера или обновить его, файл был заблокирован:

file is locked
Error transferring bva.dyndns.info/cloud/remote.php/dav/files/user/123.txt - server replied: Locked («123.txt» is locked)

В соответствующем howto советуют обнулить таблицу блокировок в базе mysql, а чтобы ситуация не повторялась, рекомендуют поставить кэширующий сервис Redis. Так как у меня уже был APCu, было решено поставить Redis для блокировок, а APCu оставить для локального кэша.

В Ubuntu это ставится просто, а в Armbian в репозитории отсутствуют соответствующие пакеты, так что пришлось их собирать из исходников.

Установить Redis

Информация устарела, в репозиториях для процессоров ARM появились собранные пакеты.
Теперь достаточно выполнить команду
apt-get install redis-server php-redis

Сборка из исходников

Настройка Nextcloud и разблокировка файлов

Конфиг Nextcloud в части кэширования нужно привести к следующему виду:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
 'redis' => array(
      'host' => 'localhost',
      'port' => 6379,
       ),
# Перевести Nextcloud в режим обслуживания:
sudo -u www-data php /var/www/html/occ maintenance:mode --on
# Зайти в базу "cloud" и очистить блокировки:
mysql -u root -p cloud
DELETE FROM oc_file_locks WHERE 1;
quit
# Вывести Nextcloud из режима обслуживания:
sudo -u www-data php /var/www/html/occ maintenance:mode --off
# Перезапустить Apache:
systemctl restart apache2

Дополнительные материалы

Сертификаты

#Сделать папочку для сертификатов
mkdir /etc/ssl/certs/nextcloud
# самоподписанный сертификат на 10 лет без запроса пароля
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/certs/nextcloud/nextcloud.key -out /etc/ssl/certs/nextcloud/nextcloud.crt
nano /etc/apache2/sites-available/default-ssl.conf
SSLCertificateKeyFile /etc/ssl/certs/nextcloud/nextcloud.key
SSLCertificateFile /etc/ssl/certs/nextcloud/nextcloud.crt
#SSLCACertificateFile /etc/ssl/certs/nextcloud/nextcloud-int.crt

FIXME

sed -i '
/SSLCertificateKeyFile/c SSLCertificateKeyFile /etc/ssl/certs/nextcloud/nextcloud.key
/SSLCertificateFile/c SSLCertificateFile /etc/ssl/certs/nextcloud/nextcloud.crt' /etc/apache2/sites-available/default-ssl.conf

Импорт контактов из файла vcf

Проблема: выгруженный файл vcf с мобильника на Android 4.4 не загружается в приложение «Контакты» в Nextcloud.

Решение:

  1. Открыть файл в программе tcode (в Windows), чтобы строки с кодировкой Quoted Printable перекодировались в нормальный русский текст. Это можно сделать и из командной строки:

    tcode input.vcf /auto output.vcf
  2. Убрать из всего файла строки ;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE

  3. Строки VERSION:2.1 заменить на VERSION:3.0

  4. Сохранить файл в кодировке UTF-8.

Ссылка на выгруженные контакты мобильным приложением

https://path-to-nextcloud-site.com/apps/files/?dir=/.Contacts-Backup

Полезные плагины

Плагин для Outlook

https://download.nextcloud.com/outlook/ Ставить нужно плагин той же разрядности, что и у Офиса (не системы в целом).

Cкачать свежую версию:

# ((Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
# ? {$_.Displayname -match 'Microsoft Office' -and $_.InstallLocation -match "\w"} |
# select -expand installlocation -First 1) -split '\\')[1] -match 'x86'
 
$offx64 = gci "$env:ProgramFiles\Microsoft Office\outlook.exe" -Recurse
$offx86 = gci "${env:ProgramFiles(x86)}\Microsoft Office\outlook.exe" -Recurse
$u = "https://download.nextcloud.com/outlook/"
$f = (curl $u).links |? href -like "20*" | select -Last 1 -expand href
$uf = $u + $f
if ($offx64) {
$plugx64 = (curl $uf).links |? href -like "*64*.msi" | select -expand href
$url64 = $uf + $plugx64
curl $url64 -OutFile "$env:userprofile\Downloads\$plugx64"
}
if ($offx86) {
$plugx86 = (curl $uf).links |? href -like "*86*.msi" | select -expand href
$url86 = $uf + $plugx86
curl $url86 -OutFile "$env:userprofile\Downloads\$plugx86"
}
# Путь к файлам перевода:
${env:ProgramFiles(x86)}\Nextcloud Outlook\Resources\Translations

Перевод на русский:

Автоудаление файлов

Снежок

Полезные команды

Включить превью офисных форматов:

nano /var/www/html/config/config.php
'preview_libreoffice_path' => '/usr/bin/libreoffice',

Удалить пользователя username вместе с его каталогом:

u=username
sudo -u www-data php /var/www/html/occ user:delete $u && rm -rf /var/nextcloud-data/$u

Решение проблем

Failed to connect to www.nextcloud.com

В логах куча сообщений:
GuzzleHttp\Exception\ConnectException: cURL error 7: Failed to connect to www.nextcloud.com port 80: Connection timed out

Сайт nexcloud.com реально бывает недоступен. Workaround - отключить проверку на наличие интернета:

echo "'has_internet_connection' => false," >> /var/www/html/config/config.php

Или не обращать внимания.

Some files have not passed the integrity check

После обновления - ошибка подписи файлов:
Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the documentation. (List of invalid files… / Rescan…)

Помимо выполнения рекомендаций, убедиться, что core/signature.json актуальный.

Поломались "красивые" ссылки (без index.php)

Specified key was too long; max key length is 767 bytes

При обновлении Nexcloud ошибка:
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB ROW_FORMAT = compressed': SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Решение:

mysql -u root -p cloud
 
MariaDB [cloud]> set global innodb_large_prefix=on;
MariaDB [cloud]> set global innodb_file_format=Barracuda;
quit
 
sudo -u www-data php /var/www/html/occ maintenance:repair
sudo -u www-data php /var/www/html/occ upgrade

The database is missing some indexes

Проверка в админке пишет: The database is missing some indexes

Решение:

sudo -u www-data php /var/www/html/occ db:add-missing-indices
# В докере:
docker exec -u www-data nc php occ db:add-missing-indices

Обновление прошло неуспешно, PHP грузит систему на 100%, сайт в неотключаемом maintenance mode

Отключить регулярную задачу в crontab.

# Проверить, включен ли apc cli:
php -i | grep apc.enable
  apc.enable_cli => Off => Off
  apc.enabled => On => On
# Если нет, то включить
echo "apc.enable_cli=1" >> /etc/php/7.4/cli/php.ini
# Перейти в каталог NC (обязательно!) и запустить апгрейд заново
cd /var/www/html/cloud
sudo -u www-data php occ upgrade

Включить регулярную задачу в crontab.

https://help.nextcloud.com/t/nextcloud-21-update-needed/108714/25

Your installation has no default phone region set

sudo -u www-data php /var/www/html/occ config:system:set default_phone_region --value="RU"
# Докер
docker exec -u www-data nc php occ config:system:set default_phone_region --value="RU"

Last background job execution ran 15 hours ago. Something seems wrong

Запустить принудительно

sudo -u www-data php -f /var/www/html/cloud/cron.php

PHP Fatal error: Out of memory (allocated 3533701120) (tried to allocate 36864 bytes) in /var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php on line 133

Плагины

Нагрузка HTTP для ISP 5

KernelCare

Что это такое

Устанавливается, как и все другие модули (Интеграция → Модули → KernelCare).

Нужен аккаунт в firstvds или ispsystem

В первом случае лицензия 160 рублей/месяц, во втором случае €3 (на январь 2018 это ~200 рублей). В Firstvds также можно сразу купить лицензию на год за 1920 рублей. А вот в Ispsystem только ежемесячная подписка.

HowTo - Как сделать xyz?

Включить TLS 1.3

В файл /usr/local/mgr5/etc/templates/default/nginx-vhosts-ssl.template вместо ssl_protocols [% $SSL_SECURE_PROTOCOLS %]; добавить

ssl_protocols TLSv1.2 TLSv1.3;

после надо пересохранить все вирт хосты через панель, что выглядит достаточно бредово.

для 1.3 nginx должен быть собран с новым openssl 1.1.1+, а в centos7 к примеру

built with OpenSSL 1.0.2k-fips  26 Jan 2017

Как открыть архив из part файлов

copy 'file1.js' + 'file2.js' + 'file3.js' /b 'file.full.js'

via

SFTP бэкап по ключу

Как запустить бэкап через консоль

Команда для запуска

cd /usr/local/mgr5 && ./sbin/backup2 &

Пример лога

May 25 23:57:57 [4061:1] main INFO Size control started
May 25 23:57:57 [4064:1] main INFO Global size control. Size limit: 9223372036854775807, limit full: 4, limit daily: 3
May 25 23:57:57 [4064:1] main INFO Add node '', size limit: 9223372036854775807, 0x23abe78
May 25 23:57:57 [4064:1] proc EXTINFO Run '/usr/local/mgr5/sbin/backup2_cp --client' pid 4065
May 25 23:57:57 [4064:1] main EXTINFO Backup size: 0, limit: 9223372036854775807
May 25 23:57:57 [4065:1] main INFO Open control socket 'tmp/backup2_cp.sock'
May 25 23:57:57 [4065:1] main INFO Client. Backup token = 'path=/home/backup;type=local'
May 25 23:57:57 [4061:1] main INFO Size control server is ready. Date: 2018-05-25
---
May 26 00:05:10 [4064:1] proc EXTINFO Process 4065 finished with status 0
May 26 00:05:10 [4064:1] log INFO Finished

Как отключить двухфакторную авторизацию для root пользователя

Нужен root к ssh. Далее выполнить запрос к sqlite базе

# sqlite3 /usr/local/mgr5/etc/ispmgr.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from totp;
1|root|sh.iddqd.net(root)|
sqlite> delete from totp where user='root'; 
sqlite> .q

Работа с mgrctl или API с продуктами компании ISPsystem

Закрыть порт 1500

http://forum.ispsystem.ru/showthread.php?32781-Закрытие-порта-1500

iptables -A INPUT -p tcp --dport 1500 ! -s IP_сервера -j DROP

добавить в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf опцию Option FirewallCheckAccess, это позволит редактировать правила iptables так, чтобы панель не проверяла их

ISPmanager PHP7 для скриптов запускаемых через крон

Пересборка pdo_mysql php 7.1

https://sabotage.name/compile-php-extensions-pdo-mysql/

cd /usr/local/src
mkdir php_source7.1.22
cd php_source7.1.22
wget http://be2.php.net/distributions/php-7.1.22.tar.gz
gunzip php-7.1.22.tar.gz
tar xvf php-7.1.22.tar
cd /usr/local/src/php_source7.1.22/php-7.1.22/ext/pdo_mysql
/opt/php71/bin/phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
./configure --with-php-config=/opt/php71/bin/php-config
make

Сборка PHP расширения

via https://it-notepad.ru/сборка-php-расширения-на-сервере-с-ispmanager-5.html

# apt-get install autoconf gcc make -y
# git clone https://github.com/phpredis/phpredis.git
# cd phpredis/
# /opt/php71/bin/phpize
# ./configure --with-php-config=/opt/php71/bin/php-config
# make && make install && make clean
# echo "extension=/opt/php71/lib/php/modules/redis.so" > /opt/php71/etc/mods-available/redis.ini

Переконфигурирование web-сервера

Как же устроен бэкап в ispmgr?

Параметры резервного копирования isptar

Логика работы модуля резервного копирования такова, что каждое воскресенье делается полная резервная копия, в остальные дни - диффиренциальная. То есть вы можете исправить в кроне время запуска резервного копирования, оставив только ночь с субботы на воскресенье - тогда будет только полная резервная копия создаваться.

Либо отрегулировать количество резервных копий параметром файла конфигурации BackupCountLimit. Подробнее в документации.

Поменялся IP сервера. Где прописать новый?

# killall -9 ihttpd

Вносим новый IP в /usr/local/mgr5/etc/ihttpd.conf

/usr/local/mgr5/sbin/ihttpd 192.168.1.77 1500

Как включить старую систему бэкапа вместо DAR?

В файл /usr/local/mgr5/etc/ispmgr.conf добавить

Option EnableOldBackup

Не работает ЧПУ (rewrite правила) в Wordpress+nginx+fpm