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 updateApache
Устанавливаем веб-сервер Apache2sudo apt-get install apache2 Отредактируем конфигурацию sudo nano /etc/apache2/apache2.conf В конце файла дописываем две строчки, подставив свои значения: ServerName IP-адрес-сервера ServerName ваш-домен Включим мод headers, пригодится в дальнейшем sudo a2enmod headersLetsEncrypt
Установим сертификат для шифрованного соединения, если у вас есть домен. Очень желательно. Добавляем репозиторий для LetsEncrypt Certbotsudo 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 --quietMySQL
Установим базу данных MySQLsudo 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 установлен и работает, вы находитесь в учётке администратора.Настройка безопасности
При первом входе в админку вы увидите сообщение, что требуется дополнительная настройка, чтобы обезопасить ваш сервер. Сейчас расскажу, что нужно сделать. Редактируем .htaccesssudo 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.