Nextcloud: своё облако. Установка на свой сервер

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

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

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

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

  1. Сервер VPS. Хостинг для примера буду брать Vultr. Самый дешёвый вариант стоит $6 в месяц. Вот здесь я рассказываю, как арендовать сервер и получить $100 бесплатно для тестов.
  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 ваш-домен

Включим mod 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

Задайте root-пароль для базы данных. Обязательно запомните или запишите его. Затем запустите команду для настройки безопасности:

mysql_secure_installation

Ответьте на несколько вопросов. Можете отказаться от принудительной проверки сложности пароля и замены root-пароля (первые два вопроса, отвечайте '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:

sudo 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/

Изменим права доступа к директории:

sudo 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, при входе понадобится root-пароль 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».
    • Первая строчка — имя базы данных.
    • Вторая строчка — пароль базы данных (не root-пароль!).
    • Третья строчка — пользователь.
    • Четвёртая строчка — адрес для обращения к базе данных, это должен быть localhost и порт 3306.

Поздравляем, 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, файлообменник, электронную библиотеку и кое-что ещё.