Nextcloud: своё облако. Установка на свой сервер
Nextcloud — open-source проект своего персонального «облака»: в нём объединены функции Dropbox, контактов, календаря и списка задач Google, а также много чего ещё. Другими словами, можно отказаться от Google и синхронизировать свои данные с компьютера и смартфона на свой сервер. Зачем это нужно?
Зачем это нужно?
- Если у вас паранойя.
- Если вы не доверяете большим корпорациям.
- Если вы хотите держать свои данные под личным контролем.
- Если в вашей стране Google не работает или может вдруг перестать работать.
- Если не жалко платить каждый месяц за хостинг или если уже есть работающий сервер.
- Если... да мало ли.
Что потребуется?
- Сервер VPS. Хостинг для примера буду брать Vultr. Самый дешёвый вариант стоит $6 в месяц. Вот здесь я рассказываю, как арендовать сервер и получить $100 бесплатно для тестов.
- Домен. Не обязательно, но очень желательно. В зоне .RU домен стоит копейки (199 руб. за год), в других зонах тоже не очень дорого. Зарегистрируйте домен и привяжите к нему IP-адрес сервера (запись А).
- Софт для SSH. PuTTY, Puttygen, Pageant для Windows. Если вы пользуетесь Ubuntu или macOS, то либо уже всё знаете, либо вам это не нужно.
Что будем делать?
- Установим Apache, PHP и MySQL.
- Добавим бесплатный SSL-сертификат Let's Encrypt.
- Установим и настроим 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, файлообменник, электронную библиотеку и кое-что ещё.











