Nextcloud: своё облако

Nextcloud — open source проект своего персонального “облака”: в нём объединены функции Dropbox, контактов, календаря и списка задач Google, а так же много чего ещё. Другими словами, можно отказаться от Google и синхронизировать свои данные с компьютера и смартфона на свой сервер. Зачем это нужно?

Зачем это нужно?

  • Если у вас паранойя.
  • Если вы не доверяете большим корпорациям.
  • Если вы хотите держать свои данные под личным контролем.
  • Если в вашей стране Google не работает, или может вдруг перестать работать.
  • Если не жалко платить каждый месяц за хостинг, или если уже есть работающий сервер.
  • Если… да мало ли.

Что потребуется?

  1. Сервер VPS
    Хостинг для примера буду брать Digital Ocean. Самый дешёвый вариант стоит $5 в месяц. Вот здесь я рассказываю, как арендовать сервер и получить $10 бесплатно для тестов
  2. Домен
    Не обязательно, но очень желательно. В зоне .RU домен стоит копейки (199 руб. за год), в других зонах тоже не очень дорого. Зарегистрируйте домен и привяжите к нему IP-адрес сервера (запись А).
  3. Софт для SSH
    PuTTY, Puttygen, Pageant для Windows. Если вы пользуетесь Ubuntu или macOS, то либо уже всё знаете, либо вам не нужно.

Что будем делать?

  1. Установим Apache, PHP и MySQL
  2. Добавим бесплатный SSL-сертификат Let’s Encrypt
  3. Установим и настроим NextCloud

Арендуем сервер

Следуйте этой инструкции, выбирайте Ubuntu 17.04. Затем возвращайтесь сюда.

Настроим сервер

Предположим, что вы уже арендовали сервер и смогли подключиться к нему по SSH.

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

Начало

Обновляем список пакетов
sudo apt-get update

Apache

Устанавливаем веб-сервер Apache2
sudo apt-get install apache2
Отредактируем конфигурацию
sudo nano /etc/apache2/apache2.conf
В конце файла дописываем две строчки, подставив свои значения:
ServerName IP-адрес-сервера
ServerName ваш-домен

Включим мод headers, пригодится в дальнейшем
sudo a2enmod headers

LetsEncrypt

Установим сертификат для шифрованного соединения, если у вас есть домен. Очень желательно.

Добавляем репозиторий для LetsEncrypt Certbot
sudo add-apt-repository ppa:certbot/certbot
Обновляем список пакетов
sudo apt-get update
Устанавливаем Certbot
sudo apt-get install python-certbot-apache
Получаем сертификат
sudo certbot --apache -d ваш-домен
ответьте на вопросы: предоставьте ваш e-mail, согласитесь с условиями, при выборе перенаправления выберите вариант "2 - redirect"

Настроим автоматическое обновление сертификатов раз в три месяца
sudo crontab -e
выберите редактирование через nano, допишите следующую строчку и сохраните файл:
15 3 * * * /usr/bin/certbot renew --quiet

MySQL

Установим базу данных MySQL
sudo apt-get install mysql-server
Задайте рут-пароль для базы данных. Обязательно запомните или запишите его.

Затем запустите команду для настройки безопасности
mysql_secure_installation
Ответьте на несколько вопросов. Можете отказаться от принудительной проверки сложности пароля и замены рут-пароля (первые два вопроса, отвечайте ‘N’), на остальные вопросы отвечайте ‘Y’.

PHP

Установим PHP 7 и нужные модули
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
Добавим php-cli
sudo apt-get install php-cli
И модуль для кэширования php-apcu
apt-get install php-apcu
Откроем файл конфигурации и отредактируем его
sudo nano /etc/apache2/mods-enabled/dir.conf
В списке файлов index с разным расширением, перепишите его так, чтобы в начале был index.php.

Перезапустите Apache
sudo systemctl restart apache2

Директория для файлов

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

Создадим директорию в /media/
sudo mkdir /media/nextcloud/
Изменим права доступа к директории
chown -R www-data:www-data /media/nextcloud/
NextCloud

Скачаем последнюю версию NextCloud в формате *.tar.bz2 с официального сайта. Для этого в браузере откройте страницу релизов и найдите новую версию. На момент написания этой статьи свежая версия 12.0.2, поэтому ссылка будет такая:
https://download.nextcloud.com/server/releases/nextcloud-12.0.2.tar.bz2
Скопируйте её в буфер обмена.

Вернёмся в PuTTY. Перейдите во временную директорию
cd /tmp
Скачайте архив с NextCloud, замените ссылку на самую свежую.
curl -LO https://download.nextcloud.com/server/releases/nextcloud-12.0.2.tar.bz2
Распакуйте архив
sudo tar -C /var/www -xvjf /tmp/nextcloud-12.0.2.tar.bz2
Создайте скрипт для установки
nano /tmp/nextcloud.sh
Вставьте в него следующий код
#!/bin/bash
ocpath='/var/www/nextcloud'
htuser='www-data'
htgroup='www-data'
rootuser='root'
printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets
mkdir -p $ocpath/updater
printf "chmod Files and Directories\n"
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
chmod 755 ${ocpath}
printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/updater/
chmod +x ${ocpath}/occ
printf "chmod/chown .htaccess\n"
if [ -f ${ocpath}/.htaccess ]
then
chmod 0644 ${ocpath}/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
fi
if [ -f ${ocpath}/data/.htaccess ]
then
chmod 0644 ${ocpath}/data/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
fi

Выполните скрипт
sudo bash /tmp/nextcloud.sh
Создайте файл конфигурации NextCloud в Apache
sudo nano /etc/apache2/sites-available/nextcloud.conf
Вставьте следующий текст
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
<VirtualHost *:443>
ServerName ваш_домен
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
</VirtualHost>

Активируйте файл конфигурации
sudo a2ensite nextcloud
Включите дополнительные параметры
sudo a2enmod rewrite
sudo apt-get install php-bz2 php-curl php-gd php-imagick php-intl php-mbstring php-xml php-zip

Перезагрузите Apache
sudo systemctl reload apache2

Создадим базу MySQL

Перейдём в MySQL, при входе понадобится рут-пароль MySQL, который мы создавали ранее.
mysql -u root -p
Создадим новую базу данных под названием nextcloud
CREATE DATABASE nextcloud;
Зададим ей параметры, не забудьте вставить новый пароль
GRANT ALL ON nextcloud.* to 'nextcloud'@'localhost' IDENTIFIED BY 'ваш_новый_пароль_для_базы';
Сбросим параметры и выйдем из MySQL
FLUSH PRIVILEGES
exit

Настраиваем NextCloud

В браузере откройте https://ip_или_домен/nextcloud

Если всё сделано правильно, вы увидите страницу NextCloud и приглашение создать учётную запись администратора:

Первые два поля — имя и пароль для учётной записи администратора

Data folder: укажите директорию, которую вы создали в шаге “Директория для файлов”, в примере это /media/nextcloud

Configure the database
Нужно указать параметры, которые мы использовали в шаге “Создадим базу MySQL”

Первая строчка – имя базы данных

Вторая строчка – пароль базы данных (не рут-пароль!)

Третья строчка – пользователь

Четвёртая строчка – адрес для обращения к базе данных, это должен быть localhost и порт 5342

Поздравляем, NextCloud установлен и работает, вы находитесь в учётке администратора.

Настройка безопасности

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

Редактируем .htaccess
sudo nano /var/www/nextcloud/.htaccess
Сразу после строчки
<IfModule mod_headers.c>
добавьте
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

Удаляем страницу Apache по-умолчанию
sudo rm -rf /var/www/html/

ВНИМАНИЕ: выполните команду только в том случае, если сервер был чистый, а в директории /var/www/html нет ничего ценного.

Включаем memcache

Остановим Apache
sudo systemctl stop apache2
Отредактируем конфигурацию NextCloud
sudo nano /var/www/nextcloud/config/config.php
В конце файла добавим строчку
'memcache.local' => '\OC\Memcache\APCu',
Откроем файл конфигурации Apache PHP
sudo nano /etc/php/7.0/apache2/php.ini
В файле много текста. Листайте, пока не найдёте раздел, посвящённый opcache, затем вставьте туда следующие параметры:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Перезапускаем Apache.
sudo systemctl reload apache2
Все предупреждения о проблемах с безопасностью должны исчезнуть, останется надпись All checks passed.

Что дальше?

В следующей статье я расскажу, что теперь с этим облаком делать: настроим календарь и контакты, синхронизацию SMS, читалку новостей RSS, файлообменник, электронную библиотеку и кое-что ещё.

blog.wtigga.com

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *