Last Updated:

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

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 ваш-домен Включим мод 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