Неполные знания крайне опасны.
японская пословица

Меню навигации для мобильных

Облачный сервер дома - это реально!

Автор Shaman, 20 Авг., 2020, 17:27

« предыдущая - следующая »

Shaman

Столкнулся с необходимостью получать и передавать данные людям не используя при этом открытые облачные сервисы типа Яндекс диск.
Для личного пользования давно был реализован SSH доступ до сервера на linux которы перекрывал все потребности, но поскольку из соображений безопасности доступ был реализован только по ключу, что резко ограничивает круг использования. Поскольку пришлось бы всем желающим раздавать файлы ключей, что не есть хорошо.

Мой выбор пал на ownCloud поскольку он бесплатный, имеет клиентские приложения под все популярные мобильные платформы, и десктопные решения под все популярные ОС.

Выделение_024.png   WhatsApp Image 2020-08-20 at 15.35.41.jpg

А также, что не маловажно для новичков в роде меня, подробную инструкцию по установке и настройке и хорошую документацию. Здесь более подробные инструкции по установке и настройке Apache и брандмауэра UFW

Ниже прокомментированы моменты, которые оказались не явными для меня и возможно будут таковыми для других новичков.
  • Шаг-4 в инструкции по url="https://www.digitalocean.com/community/tutorials/apache-ubuntu-14-04-lts-ru"]Apache[/url]
      вместо example.com в тех местах, где указывается путь не обязательно подставлять имя вашего домена можно, что вам удобно на латинице.
      Просто по имени домена будет легче искать файлы конфигурации.
  • Шаг 4 Руководства по Let's Encrypt для Apache
    Если ваш домен не имеет персфикса WWW, в команде для получения SSL сертификата
    sudo certbot --apache -d example.com -d www.example.com

    -d www.example.com вводить ненужно.
    Может быть использован любой DynDNS сервер если у вас нет постоянного IP адреса
  • Шаг-3 инструкции по установке и настройке
     
    ЦитатаЗатем создайте отдельную учетную запись пользователя MySQL для управления созданной базой данных. Создание баз данных и учетных записей с одной функцией является хорошей идеей с точки зрения управления и безопасности. Выберите предпочитаемое имя пользователя. Для целей этого обучающего модуля мы решили использовать имя owncloud.

    GRANT ALL ON owncloud.* to 'owncloud'@'localhost' IDENTIFIED BY 'owncloud_database_password';

    красным выделено место куда нужно вписать имя пользователя, а зелёным имя базы данных. Не верный шаг в инструкции для начинающих делать одинаковые имена для разных параметров в местах где их нужно вводить одновременно.
  • Перед выполнением Шага 4 инструкции по установке и настройке
    Решите, где будут располагаться каталоги пользователей облака. По умолчанию они лежат  "/var/www/owncloud/data"
    ВАЖНО!!!
    Ни в коем случае не переносите эту директорию при уже настроенном, и работающем сервере он упадёт.
    Её можно перенести вручную по инструкции. Но это не тривиальная задача для новичка и забегая вперёд скажу у меня не вышло и пришлось поднимать сервер заново. Также её можно задать во время первичной конфигурации на веб интерфейсе, но у меня это опять же не сработало, выходила ошибка.
    Поэтому моим решением было смонтировать директорию по умолчанию другую директорию, в нужном мне месте, средствами самой системы.
    инструкция по монтированию
    В файле fstab при помощи команды
    sudo nano /etc/fstab
    нужно прописать следующие строки без кавычек:
    "/путь_к_директории_которую_надо_смонтировать /путь_куда_надо_смонтировапть none bind"
    Путь должен содержать только латинские символы и в нём должны отсутствовать пробелы
    Код: пример
    /var/www/owncloud/data /home/ubuntu/Downloads none bind
    
    Сохранить изменения и перемонтировать все диски и директории командой
    sudo moun -a
    [свернуть]
  • Если вы хотите добавить или удалить фалы в каталогах пользователей не через приложение или вэб-интерфейс то после создания/удаления оных необходимо выполнить в терминале следующие команды иначе файлы не появятся/останутся у пользователей:
    cd /var/www/owncloud
    sudo -u www-data ./occ files:scan --all 

    Где /var/www/owncloud директория в которой расположен (по мнению программы) каталог data
[свернуть]



Shaman

Далее я буду приписывать дальнейшую настройку сервера.
После того как сервер запустился в его админке будут появляться сообщения, что он ещё хочет для стабильной работы.


Включить поддержку .htaccess
Откройте файл конфигурации сервера Apache /etc/apache2/httpd.conf
sudo nano -w /etc/apache2/httpd.conf
или (зависит от версии) /etc/apache2/apache2.conf
sudo nano -w /etc/apache2/apache2.conf
Добавьте в файл /etc/apache2/httpd.conf или apache2.conf следующие строки
AccessFileName .htaccess
<Directory "/var/www/*">
AllowOverride All
</Directory>
Перезагрузите Apache
sudo service apache2 reload
[свернуть]

В ответ на предупреждение:
Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000» секунд


Нужно:
внести исправления в описание хоста:
<VirtualHost *:443>
  ServerName "ваш домен"
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
 </VirtualHost>
Перезагрузите Apache
sudo service apache2 reload
[свернуть]

Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация доступна в документации.

Решение
Установить:
sudo apt install memcached php-memcached php-memcache php-apcu
Откройте файл конфигурации сервера owncloud /var/www/owncloud/config/config.php
sudo nano /var/www/owncloud/config/config.php
И добавте в него следующие строки
'memcache.local' => '\OC\Memcache\APCu',
'memcached_servers' => [ [ 'localhost', 11211 ], ],
[свернуть]

Shaman

#2
Добавление внутренних каталогов как внешних хранилищ.
1. Расщариваем каталог по SMB, включая возможность не авторизованным пользователям читать и записывать файлы
2. В веб интерфейсе переходим на вкладку настройки/хранилище и и проверяем нет ли сообщения
"Примечание: "smbclient" не установлен. Монтирование SMB / CIFS, SMB / CIFS с ипользованием логина OC невозможно. Пожалуйста, обратитесь к системному администратору.".
Если есть устанавливаем. Для убунту команда на установку:
sudo apt install smbclient
и перезапускаем веб сервер в моём случае это apache2
sudo systemctl restart apache2
Cтавим галочку подключить внешнее хранилище.
3. В списке "Добавить хранилище" выбираем SMB/CIFS. Имя каталога пишем любое удобное, это имя будет отображаться в списке каталогов.
4. Если вы хотите иметь возможность создавать общедоступные ссылки, то в "Авторизации" нужно выбрать "Имя пользователя и пароль" в противном случае оставить как есть.
5. В "Конфигурации" в поле "Сервер" прописываем ip локальной петли 127.0.0.1. В поле "Общий доступ" имя общего ресурса который был расшарен ранее по SMB. В полях "Имя пользователя" и "Пароль" (появляются только при выборе авторизации по паролю) пользователя которому разрешен доступ к каталогам. Поля "Удалённый каталог" и "Домен" в нашем случае не нужны.
6. В "Доступно для" добавляем пользователей облака которые могут видеть добеленное хранилище. Если оставить пустым будет видно всем.
7. Нажимаем на шестерёнку и проставляем нужные настройки. Если хотите создавать общедоступные ссылки обязательно нужно включить общий доступ (не работает без настроек из пунктов 4-5). Пункт "Включить предпросмотр" влияет на появление превьюшек на файлах (если сервер и канал слабый лучше выключить).


Скрин с примером
Выделение_016.png
[свернуть]

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

Да значительно проще добавить каталог напрямую через облако, но в этом случае, если ваш сервер, так же как и у меня, используется как десктоп, доступ в папку и изменение файлов будет затруднён (с.м. первый пост под спойлером п.5).

Можно подключить и по SFTP, но в таком случае в настройках ssh сервера нужно открывать парольный доступ либо генерировать RCA ключи и естественно закрытый ключ будет храниться здесь же на сервере, что не допустимо.

Shaman

#3
Перенос сервера и базы данных на другую систему.
Дабы избежать проблем версии owncloud должны быть одинаковыми. Как обновиться смотри пост ниже. А также желательно отключить все сторонние приложения (не от разработчиков owncloud).
В первую очереди необходимо сделать бэкап базы данных mysql для этого необходимо.
1. Остановить ваш веб сервера дабы никто не смог изменить базу данных. Для апача это команда
sudo systemctl stop apache2

2. Сделать бэкап. Способ зависит от версии используемой базы данных я напишу команды, которые сработали у меня.
sudo mysqldump --opt название_базы_данных > название_файла_бэкапа.sql

3. Скопировать каталог data. По умолчанию расположен /var/www/owncloud А так же фал config.php, расположен /var/www/owncloud/config Т

4. Установить пользователя для каталога owncloud www-data командой (только для ubuntu/debian):
sudo chown -R www-data:www-data var/www/owncloud

Для других дистрибутивов пользователь и команда могут быть другими.

5. Развернуть базу данных. Аналогично пункту 2 напишу, что сработало у меня.
mysql -u пользователь_БД -p имя_БД < файл_дампа_БД


6. Проверяем, что база развёрнута.
вместо sklad пишем своего пользователя базы данных, вместо owncloud свою базу
mysql -u sklad -p owncloud
USE owncloud;
SELECT * FROM oc_accounts;
Вывод
Выделение_020.png
[свернуть]

Если все ваши пользователи есть в таблице база развернулась успешно.

На всякий случай удаляем блокировку файлов.

DELETE FROM oc_file_locks;

7. Запускаем апачи  :)

sudo systemctl start apache2

Shaman

#4
Обновление owncloud

1. Заходим в настройки
Выделение_021.png
[свернуть]

2. Выбираем пункт основные
Выделение_022.png
[свернуть]

3. Выбираем открыть окно обновления.
Выделение_023.png
[свернуть]

4. Нажимаем start.
Выделение_026.jpg
[свернуть]

4.1 если выпала ошибка как на скрине ниже...
Выделение_027.jpg
...значит у вас каталог ownwloud, с подкаталогами, не доступен для пользователя под которым работает owncloud и веб-сервер. Для Debian/Ubuntu это пользователь и группа www-data. Переназначаем пользователя командой
sudo chown -R www-data:www-data /var/www/owncloud
и делаем новую попытку обновления.
[свернуть]

Важно!!!
После обновления необходимо установить разрешение на исполнение для файла occ (установщик их почему-то сбрасывает), иначе вы не сможете выполнять сервисные функции.
Код: Команда
sudo chmod 744 /var/www/owncloud/occ

Shaman

Предупреждение в админке

Мы рекомендуем включить системный cron, так как любой другой планировщик может иметь недоработки в производительности и надёжности.

Для включения cron...
выполняем следующие шаги:

1. Открываем файл cron.
sudo crontab -u www-data -e

2. Добавляем строку.

*/15 * * * * /usr/bin/php -f /var/www/owncloud/occ system:cron

3. В настройках в браузере выбираем планировщик cron.
Выделение_024.png

[свернуть]


Shaman

#6
Предупреждение в админке

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

Если у вас домашний или малонагруженный сервер и вы не используете ZFS, просто не обращайте внимание на это.
Иначе, или вы замечаете, что при использовании внешних SMB хранилищ у вас не появляются или не пропадают файлы добавленные/удалённые в эти хранилища не через owncloud...
...рекомендую установить и настроить Redis
Далее я привожу краткое изложение статьи по установке и настройке. Оригинал здесь.
1. Устанавливаем Redis.

sudo apt install redis-server

2.
Конфигурируем его.

sudo nano /etc/redis/redis.conf

2.1 Для всех дистрибутивов использующих systemd ищем строку supervised и вместо no прописываем systemd

/etc/redis/redis.conf
. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#  supervised no      - no supervision interaction
#  supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#  supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#  supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#      They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .
[свернуть]

2.2 Проверяем не закомментирована ли строка привязки к localhost (удалите символ #, если он существует).
bind 127.0.0.1 ::1

2.3 устанавливаем пароль доступа.

Следуя предупреждению...
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
[свернуть]

... создаём сложный пароль при помощи openssl.
openssl rand 60 | openssl base64 -A

Вывод команды вставляем вместо foobared в строке requirepass
/etc/redis/redis.conf
. . .

requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

. . .
[свернуть]

2.4 Можно отключить или переименовать опасные команды как в How To
ИМХО
Но это актуально только если вы используете распределённую систему с большой нагрузкой, где злоумышленник может получить доступ до базы из вне. А если owncloud и redis работают на одном сервере и до него получили доступ это последнее о чём вам стоит задумываться. Поскольку следуя этой инструкции Redis будет настроен для работы только через localhost или unix socket
[свернуть]
Для этого в конфиг нужно добавить стоки типа
rename-command FLUSHDB "" отключает выбранную команду вообще
rename-command FLUSHDB "новое имя команды" задаёт новое имя
/etc/redis/redis.conf
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .
[свернуть]
Важно!!!
Не переименовывайте команду DEL, из списка, её использует owncloud.

2.5 сохраняем конфиг и перезапускаем службу командой.

sudo systemctl restart redis

Потом, если вы будете менять ещё какие-то настройки, используйте команду

sudo systemctl restart redis.service

3.
Проверяем работу Redis
redis-cli
127.0.0.1:6379> auth ваш пароль
Ответ:
OK
127.0.0.1:6379> ping
Ответ:
PONG
127.0.0.1:6379> set test "It's working!"
Ответ:
OK
127.0.0.1:6379> get test
Ответ:
"It's working!"
127.0.0.1:6379> exit

Проверим, может ли Redis сохранять данные даже после остановки или перезапуска.
sudo systemctl restart redis
redis-cli
127.0.0.1:6379> auth ваш пароль
Ответ:
OK
127.0.0.1:6379> get test
Значение вашего ключа должно оставаться доступным:
Ответ:
"It's working!"
127.0.0.1:6379> exit
[свернуть]

4 Настраиваем owncloud для работы с Redis. Взято из официального мануала

4.1 Открываем файл config.php

sudo nano /var/www/owncloud/config/config.php

4.2 Вставляем строки:
'filelocking.enabled' => true,
  'memcache.locking' => 'OCMemcacheRedis',
  'redis' => 
  array (
    'host' => 'localhost',
    'port' => 6379,
    'timeout' => 0,
    'password' => 'RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE',
  ),
Сохраняем, заходим в веб-интерфейс и пробуем добавить и удалить файлы.

Возможно так же настроить redis и owncloud для работы через unix socket (так работает значительно быстрее)
Для этого нам понадобится:
↓ спойлер ↓
1. сменить для пользователя redis группу на www-data и добавить пользователя www-data в группу redis
sudo usermod -g redis www-data
sudo usermod -a -G www-data redis 

2. Создать папку где будет лежать сокет
sudo mkdir -p /var/run/redis/

3. В конфигурацию Redis добавить строчки:
unixsocket /var/run/redis/redis.sock
unixsocketperm 770

4. п 4.2  будет выглядеть так:
'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => 
  array (
    'host' => '/var/run/redis/redis.sock',
    'port' => 0,
    'timeout' => 0,
    'password' => 'RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE',
  ),

5. Перезагрузить Redis и проверить, что файл /var/run/redis/redis.sock создан.
sudo systemctl restart redis.service
И перезапустить веб-сервер (в моём случае это апач)
sudo systemctl restart apache2
[свернуть]
[свернуть]

Очистка кеша Redis

Кэш Redis можно очистить из командной строки с помощью инструмента redis-cli , как в следующем примере:

sudo redis-cli
auth ваш пароль
SELECT <dbIndex>
FLUSHDB

Или, если вы используете redis только для блокировки транзакций:

sudo redis-cli
auth ваш пароль
FLUSHALL

Естественно если команды были переименованы нужно вводить их новые имена.

<dbIndex>- номер базы данных Redis, в которой хранится кеш. По умолчанию в ownCloud он равен нулю. Чтобы проверить, что у вас сейчас установлено, отметьте dbindexзначение в config/config.php.
По умолчанию каждый экземпляр Redis поддерживает 16 баз данных, поэтому <dbIndex> необходимо установить значение от 0 до 15.
[свернуть]

Shaman

К сожалению заметил несколько ошибок, а исправить пост уже не могу.  :(
Ниже исправленная версия
Цитата: Shaman от 15 Сен., 2020, 17:58Далее я буду приписывать дальнейшую настройку сервера.
После того как сервер запустился в его админке будут появляться сообщения, что он ещё хочет для стабильной работы.


Включить поддержку .htaccess
Откройте файл конфигурации сервера Apache /etc/apache2/httpd.conf
sudo nano -w /etc/apache2/httpd.conf
или (зависит от версии) /etc/apache2/apache2.conf
sudo nano -w /etc/apache2/apache2.conf
Добавьте в файл /etc/apache2/httpd.conf или apache2.conf следующие строки
AccessFileName .htaccess
<Directory "/var/www/*">
AllowOverride All
</Directory>
Перезагрузите Apache
sudo service apache2 reload
[свернуть]

В ответ на предупреждение:
Заголовок HTTP «Strict-Transport-Security» должен быть настроен как минимум на «15552000» секунд


Нужно:
внести исправления в описание хоста:
<VirtualHost *:443>
  ServerName "ваш домен"
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
 </VirtualHost>
Включите соответствующий модуль apache командой:
sudo a2enmod headers
Перезагрузите Apache
sudo service apache2 reload
[свернуть]

Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация доступна в документации.

Решение
Установить:
sudo apt install memcached php-memcached php-memcache php-apcu
Откройте файл конфигурации сервера owncloud /var/www/owncloud/config/config.php
sudo nano /var/www/owncloud/config/config.php
И добавьте в него следующие строки
'memcache.local' => '\OC\Memcache\APCu',
'memcached_servers' => [ [ 'localhost', 11211 ], ],
[свернуть]


Shaman

После очередного обновления до версии 10.10.0. сервер стал проверять целостность файлов в каталогах, почему-то не смог удалить неиспользуемые файлы и выдал предупреждение:
Некоторые файлы не прошли проверку целостности.

Список файлов можно посмотреть рядом по ссылке.
Проблема решается просто удалением этих самых файлов, только нужно предварительно сделать их бекап и в момент удаления остановить сервер. Как остановить и запустить апач написано здесь

Shaman

В после обновления до версии 10.10 обнаружил, что на папки подключенные по SMB появилась квота на скачивание в размере 512Mб как её убрать не нашел, поэтому откатился назад на версию 10.7.0.4 Да здравствует ZTF с её снапшотами :D  потому как откат версии из программы невозможен, мануале
о чем сказано в мануале.
  • Downgrading is not supported as it risks corrupting your data. If you want to revert to an older ownCloud version, make a new, fresh installation and then restore your data from backup. Before attempting this, file a support ticket (if you have paid support) or ask for help in the ownCloud forums to resolve your issue without downgrading.
[свернуть]
Возможно это происходит из-за большой разницы в версиях и на чистой установке проблемы не будет, не проверял.