
На дворе 2017 год: правительство шпионит и блокирует сайты, большие корпорации отдают ваши личные данные правительству или продают на сторону. У вас уже есть подписка на VPN, но в России такие сервисы теперь вне закона. Вы арендовали VPS заграницей и ходите в сеть через него, но мощности работают вхолостую.
Установим Nextcloud! Он заменит синхронизацию контактов, календаря, списка задач и файлохранилища/обменника на вашем смартфоне, а на ПК сойдёт за Dropbox. И независимости добавим, и сервер нагрузим.
Дальше длинная, но не сложная инструкция про аренду сервера, установку и настройку Nextcloud на сервере и на ПК/смартфонах, включая синхронизацию контактов и календаря.
Disclaimer
1. Я живу в Китае, тут проблема блокировки стоит острее, чем в России. Не по наслышке знаю, что даже Google и Dropbox могут однажды отключить навсегда, а использовать отечественные сервисы не хочется по разным причинам.
2. На моём сервере в качестве средства обхода блокировок стоит Shadowsocks — для России это сейчас overkill, но в Китае выручает. Сначала ставил Streisand, но это перебор.
3. Я не профессиональный сисадмин. Не используйте эту инструкцию бездумно на сервере с важной информацией. И делайте бэкапы.
Nextcloud — open source проект своего персонального «облака»: в нём объединены функции Dropbox, контактов, календаря и списка задач Google, а так же много чего ещё. Другими словами, можно отказаться от Google и синхронизировать свои данные с компьютера и смартфона на свой сервер.
Зачем это нужно?
- Если у вас паранойя.
- Если вы не доверяете большим корпорациям.
- Если вы хотите держать свои данные под личным контролем.
- Если в вашей стране Google не работает, или может вдруг перестать работать.
- Если не жалко платить каждый месяц за хостинг, или если уже есть работающий сервер.
- Если… да мало ли.
Что потребуется?
- Сервер VPS на Ubuntu 17.04
У меня VPS на DigitalOcean — на соседнем дроплете и крутится мой блог. Если поискать реферальную ссылку (у меня в блоге например, или ещё где-то в интернете), то за регистрацию на счёт кинут немного для тестов, хватит на пару месяцев. Но выбор сервера полностью за вами. - Домен
Не обязательно, но очень желательно. В зоне .RU домен стоит копейки (199 руб. за год), в других зонах тоже не очень дорого. Зарегистрируйте домен и привяжите к нему IP-адрес сервера (запись А). - Софт для SSH
PuTTY, Puttygen, Pageant для Windows. Если вы пользуетесь Ubuntu или macOS, то либо уже всё знаете, либо вам не нужно.
Что будем делать?
На сервере
- Установим Apache, PHP и MySQL
- Добавим бесплатный SSL-сертификат Let's Encrypt
- Установим и настроим NextCloud
На клиентах
- Клиенты на ПК и Android
- Перенос контактов, календаря и задач из Gmail
Сервер
Предположим, что вы уже арендовали сервер и смогли подключиться к нему по SSH через Putty.
Начало
Обновляем список пакетов
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, поэтому ссылка будет такая:
download.nextcloud.com/server/releases/nextcloud-12.0.2.tar.bz2
Скопируйте её в буфер обмена.
Вернёмся в PuTTY. Перейдите во временную директорию
cd /tmp
Скачайте архив с NextCloud, замените ссылку на самую свежую.
curl -LO https://download.nextcloud.com/server/releases/<span style="color: #ff0000;">nextcloud-12.0.2.tar.bz2</span>
Распакуйте архив
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 <span style="color: #ff0000;">ваш_домен</span>
<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
chown -R www-data:www-data /var/www/nextcloud/
И удалите директорию /var/www/nextcloud/assets
Настраиваем NextCloud
В браузере откройте 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.
Админка
Basic settings
Убедитесь, что пройдены все основные проверки безопасности. Это выглядит вот так. Если есть предупреждения — вернитесь к инструкции по настройке и проверьте, что всё сделано правильно.

Sharing
Установите настройки для раздачи файлов, если будете пользоваться облаком не одни. У нас частный небольшой сервер, и тысячи одновременных скачиваний могут создать на него серьёзную нагрузку. Стоит принудительно устанавливать пароль на скачивание к каждой публичной ссылке, а через несколько дней делать её неактивной.

Theming
Здесь можно придать Nextcloud индивидуальности: задать имя, подпись, картинку на фон, и даже поменять цвет оформления. Делается по желанию.

Encryption
Не стоит его включать. Оно значительно повышает нагрузку на сервер и на дисковое хранилище, но не сильно влияет на безопасность: ключи шифрования будут храниться на том же сервере, и если доступ к нему получит злоумышленник, то сможет прочитать даже зашифрованные файлы.
Приложения
Приложения — это дополнения, которые расширяют функции облака. Вот что я поставил для себя:
Two Factor TOTP Provider
Позволяет настроить двухфакторную авторизацию в аккаунт с помощью одноразовых кодов через приложение Google Authenticator или FreeOTP.
Обязательно настройте этот способ входа для аккаунта администратора, желательно — для пользователя тоже. Сделать это можно в разделе Personal, в самом низу страницы.

Calendar, Contacts
Их мы будем использовать вместо календаря и контактов Google, об этом дальше.


Deck
Управление проектами в стиле Канбан.

Notes
Текстовые заметки, можно удобно синхронизировать с телефоном.
OPDS catalog
Сервер-библиотека для доступа к книгам. Работает с приложениями типа FBreader.
Passman
Хранилище паролей для сайтов в браузере. Есть плагин для Chrome.
Phone Sync
Односторонняя синхронизация SMS-сообщений с телефона в облако через Nextcloud SMS.

Tasks
Простой список дел с привязкой к календарю.

Пользователи
Сейчас вы находитесь в аккаунте администратора, но использовать его для хранения файлов и синхронизации параметров не нужно. Оставьте его для доступа к настройкам облака. Для повседневного личного использования нужен аккаунт простого пользователя.
- Откройте раздел Users
- В верху введите имя и пароль пользователя
- Нажмите на Groups, добавьте новую группу Users
- Нажмите Create
- Назначьте квоту места, чтобы случайно не переполнить сервер

Теперь у вас есть пользователь с ограниченными правами — то, что нужно для повседневного использования. Именно с обычным пользователем мы и будем дальше работать. Выйдите из учётной записи администратора и зайдите как новый пользователь.
Перенос контактов из Gmail
Это можно сделать через компьютер, но тогда не сохранятся портреты контактов, поэтому всё будем делать на смартфоне. Если на смартфоне нет контактов Google — листайте дальше.
Нам понадобится
- Аккаунт на вашем Nextcloud
- Смартфон на Android
- Приложение DAVdroid и OpenTask для синхронизации контактов и задач
- Приложение ZenUI Dialer (или любое другое для копирования контактов)
По шагам
Установка DAVdroid
- Установите DAVdroid и OpenTask;
Рекомендую устанавливать DAVdroid именно из F-Droid, потому что он там бесплатный. А в Google Play просят 249 руб. - Запустите DAVdroid, создайте аккаунт
Нажмите кнопку "+", выберите «Login with URL and user name»
Введите адрес вашего Nextcloud в формте
https://ip-или-домен.ru/nextcloud/remote.php/dav/
А так же ваш логин и пароль .
- Придумайте имя для аккаунта (например, user@nextcloud)
- Нажмите Create account
- DAVdroid запросит несколько разрешений на доступ к контактам и календарю, разрешите их. (если не запрашивает — опустите шторку сверху и посмотрите, нет ли запроса там)
- Отметьте галочки напротив Contacts сверху и названий ваших Google-календарей снизу (у меня это Contact birthdays и Personal).
- Нажмите значок с круговыми стрелками вверху, чтобы начать первую синхронизацию.
(в первый раз иногда показывает сообщение об ошибке, просто попробуйте ещё раз)
Перенос контактов из Google в DAVdroid
- Установите ZenUI Dialer
- Запустите и перейдите в управление контактами (кнопка «три точки» -> Manage contacts)
- Выберите Copy contacts
- Для Copy contacts from выберите вашу учётку Google
- Для Copy contacts to выберите DAVdroid Address book
- На вопрос Do you want to keep the originals ответьте ОК, иначе контакты будут удалены из Google.
- Дождитесь, пока закончится копирование.
- Откройте DAVdroid и синхронизируйте контакты ещё раз.
Когда синхронизация закончится, все ваши контакты будут доступны и в веб-интерфейсе: https://ваш_домен/nextcloud/index.php/apps/contacts/

Если на смартфоне нет контактов
Если на телефоне у вас по какой-то причине нет контактов из Google, но вы можете открыть их в браузере на ПК, пропустите шаг Перенос контактов из Google в DAVdroid, экспортируйте контакты из Google Contacts (More -> Export) в файл vCard, а затем импортируйте файл через веб-интерфейс Nextcloud.
Календарь
Зайдите в стандартное приложение Календарь на смартфоне и проверьте, что новый календарь Nextcloud отображается в списке ваших календарей. Теперь можно сохранять события туда, они будут автоматически синхронизироваться с вашим собственным сервером Nextcloud. Google больше не нужен.

Веб-версия календаря будет доступна из браузера по адресу ваш_домен/nextcloud/index.php/apps/calendar

Список задач
Запустите приложение OpenTasks (в меню может называться просто Tasks), теперь там есть список Local (только на устройстве) и ваш «облачный» список.

Ещё один клиент для списка задач — SimpleTask Nextcloud. Меньше функций, но работает чуть надёжнее.
В браузере задачи будут доступны по адресу ваш_домен/nextcloud/index.php/apps/tasks

Синхронизация с ПК
Windows и macOS
- Установите и запустите клиент с официального сайта
- Введите адрес вашего сервера как ваш_домен/nextcloud
- Введите логин и пароль от учётной записи пользователя
- Выберите локальную папку для синхронизации (например, D:\Nextcloud)
Готово.
Работает как Dropbox: кинули файл в папку — он улетает на серрвер. И наоборот.
Как изменить язык Nextcloud (Windows)
Почему-то разработчики не предусмотрели смены языка через настройки приложения, по-умолчанию оно использует системный. У меня Windows на китайском (и ничего с этим не поделать), но приложения всё-таки удобнее держать на более привычном языке. Вот решение проблемы:
- Выключите клиент Nextcloud
- Откройте папку, куда вы установили Nextcloud (по-умолчанию c:\Program Files (x86)\Nextcloud\)
- Найдите файлы client_ru.qm, qt_ru.qm и qtbase_ru.qm
- Удалите все остальные языковые файлы:
client_ca.qm client_cs.qm client_de.qm client_el.qm client_es.qm client_es_AR.qm client_et.qm client_eu.qm client_fa.qm client_fi.qm client_fr.qm client_gl.qm client_hu.qm client_it.qm client_ja.qm client_nb_NO.qm client_nl.qm client_pl.qm client_pt.qm client_pt_BR.qm client_en.qm client_sk.qm client_sl.qm client_sr.qm client_sv.qm client_th.qm client_tr.qm client_TW.qm client_uk.qm client_zh_CN.qm client_zh_TW.qm qt_ar.qm qt_ca.qm qt_cs.qm qt_da.qm qt_de.qm qt_es.qm qt_fa.qm qt_fi.qm qt_fr.qm qt_gl.qm qt_he.qm qt_hu.qm qt_it.qm qt_ja.qm qt_ko.qm qt_lt.qm qt_pl.qm qt_pt.qm qt_en.qm qt_sk.qm qt_sl.qm qt_sv.qm qt_uk.qm qt_zh_CN.qm qt_zh_TW.qm qtbase_ca.qm qtbase_cs.qm qtbase_de.qm qtbase_fi.qm qtbase_fr.qm qtbase_he.qm qtbase_hu.qm qtbase_it.qm qtbase_ja.qm qtbase_ko.qm qtbase_lv.qm qtbase_pl.qm qtbase_en.qm qtbase_sk.qm qtbase_uk.qm
- Запустите Nextcloud
Готово.
Android и iOS
Клиент для iPhone есть в официальном AppStore, для Android — в Google Play и на F-Droid. Установка простая и одинаковая на обоих платформах:
- Установите и запустите клиент
- Введите адрес вашего сервера как ваш_домен/nextcloud
- Введите логин и пароль от учётной записи пользователя
Готово.
Можете попробовать закинуть несколько файлов и посмотреть, как они улетят на облако.
Бэкап фотографий
Как и на Dropbox / Google Drive, в Nextcloud можно включить автоматическую загрузку всех новых фотографий и видео в облако. Но не забывайте об объёме жёсткого диска: в самом дешёвом сервере это всего 20 гигабайт. Большие объёмы фотографий я синхронизирую на ноутбук и домашний медиа-сервер с помощью Syncthing, бесплатно и очень быстро.
На iOS можно дополнительно включить опцию CryptoCloud, тогда все файлы будут храниться на сервере в зашифрованном виде. Полезно, например, если вы пользуетесь чужим сервером Nextcloud. Но файлы можно будет просматривать только с iOS-устройств.
Личные впечатления
Жаль, что я узнал о Nextcloud только теперь: сколько времени я убил на установку сервисов Google на своих предыдущих телефонах, и всё ради синхронизации контакт-листа и календаря. Работает всё стабильно, насколько это позволяет Китай. Пинги до сервера большие, но подключение есть всегда
Пожалуйста, расскажите в комментариях
- Как плохо я настроил сервер и как сделать лучше
- Почему я параноик и не нужно бояться Google
- Что ещё полезного можно делать со своим VPS.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Автор поста…
14.49% параноик61
16.86% рукожоп-эникей71
80.29% молодец338
3.09% свой вариант в комментариях13
Проголосовал 421 пользователь. Воздержались 152 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Что ещё установить на свой сервер?
22.07% XMPP для чатов83
68.35% OpenVPN257
54.52% Свою почту205
6.91% свой вариант26
Проголосовали 376 пользователей. Воздержались 142 пользователя.