Сегодня расскажем как создать свое облако, и раздавать кому угодно доступ к нему.
Можно поставить сервер на любое одно ядерное железо с любым объемом жеского диска (либо арендовать vps сервер и поставить его там)
Важная особенность данной статьи это у вас должно быть доменное имя (можете уже зарегистрировать). Можно и без него, но это муторно.
В качестве операционной системы выступит Debian или Ubuntu (большого отличия для заданной тематики не будет)
Для начала настроим репозитории следующим набором команд:
echo 'deb http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
echo 'deb-src http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
echo 'deb http://ftp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list
echo 'deb http://ftp.utexas.edu/dotdeb/ jessie all' >> /etc/apt/sources.list
wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg
Обновим наш сервер командами:
apt -y update
apt -y upgrade
Установим необходимые пакеты:
apt-get -y install apache2 mariadb-server libapache2-mod-php7.0 php7.0-redis
Тут нас попросят придумать пароль для рутовой учётки MariaDB.
Вводим пароль (символы не отображаются), жмём Enter и повторно вводим тот-же пароль и жмём Enter.
Доустановим ещё пакетов командами:
apt-get -y install php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring
apt-get -y install php7.0-intl php7.0-mcrypt php7.0-xml php7.0-zip
apt-get -y install libmagickwand-dev imagemagick php-dev redis-server
apt-get -y install python-certbot-apache -t jessie-backports
Запустим и добавим в автозагрузку наши Web-сервер и СУБД:
systemctl start apache2
systemctl enable apache2
systemctl start mysql
systemctl enable mysql
Можно убедиться, что наш Web-сервер работает, перейдя по адресу http://<ip-адрес вашего сервера. Получим такую картинку:
Выполним первичную настройку безопасности СУБД:
mysql_secure_installation
Вводим тот пароль для MariaDB, который мы придумали ранее. Нам зададут ряд вопросов, отвечаем так:
Теперь зайдём в консоль MariaDB командой:
mysql -u root -p
Вводим пароль от MariaDB и попадаем в консоль.
Создадим базу данных (точка с запятой в конце команд обязательны):
CREATE DATABASE nextclouddb;
Создадим учётную запись, с которой на Nextcloud будет обращаться к базе данных. Вместо password придумываем и вставляем в команду новый пароль:
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';
Дадим этой учётной записи права на базу данных
GRANT ALL PRIVILEGES ON nextclouddb.* TO 'nextcloud'@'localhost';
Обновим таблицу привилегий, чтобы изменения применились:
FLUSH PRIVILEGES;
И выходим из консоли:
\q
Теперь пора установить сам Nextcloud. Посмотреть список доступных версий можно на этой странице. Выбираем самую свежую. На дату написания статьи это nextcloud-12.0.2
Скачиваем:
cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-12.0.2.zip
Распаковываем:
unzip nextcloud-12.0.2.zip
И переносим к месту постоянного обитания:
mv nextcloud /usr/share/
Обязательно нужно дать права web-серверу на папку:
chown -R www-data:www-data /usr/share/nextcloud
Теперь любым удобным способом (например с помощью WinSCP) создадим в папке /etc/apache2/sites-available/ файл с именем nextcloud.conf со следующим содержимым:
ServerName nc.mydomen.ml
<VirtualHost *:80>
ServerAdmin admin@mydomen.ml
ServerName nc.mydomen.ml
DocumentRoot /usr/share/nextcloud
</VirtualHost>
<Directory "/usr/share/nextcloud/">
Options MultiViews FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
TransferLog /var/log/apache2/nextcloud_access.log
ErrorLog /var/log/apache2/nextcloud_error.log
По тексту конфига исправляем под себя адрес электронной почты и домен (ServerAdmin, ServerName)
Сохраняем файл и применяем настройки командами:
a2dissite 000-default
a2ensite nextcloud
service apache2 reload
service apache2 restart
Теперь можно перейти по адресу http://nc.mydomen.ml (свой домен) и настроить наш Nextcloud:
Придумываем и вводим логин и пароль администратора, вписываем настройки базы данных, которые мы сделали ранее и нажимаем "Завершить установку".
Сервер уже работает. Осталось настроить безопасность.
Переведём наш сервер на https. Для этого сначала получим сертификаты командой:
certbot --apache certonly
На запросы вводим адрес электронной почты (укажите реальный, на него будут приходить уведомления о действиях с сертификатом), принимаем условия использования сервисом Let's Encrypt (вводим A) и вводим имя домена (или выбираем из предложенного списка), для которого получаем сертификат (например nc.mydomen.ml):
Отлично, сертификаты получены и лежат в папке /etc/letsencrypt/live/nc.mydomen.ml/
Срок действия сертификатов - 90 дней. Об истечении срока придёт письмо на указанную выше почту. Для обновления сертификатов используем команду:
certbot renew
Этот процесс можно автоматизировать с помощью Cron. Пример приведён в статье про ownCloud.
Настроим Apache. Включим ssl модуль командой:
a2enmod ssl
Включим конфиг по умолчанию для ssl:
a2ensite default-ssl.conf
Поскольку нам нужно будет перенаправлять клиентов с 80 порта (http) на 443 (hhtps), то включим модуль перенаправлений:
a2enmod rewrite
Теперь любым удобным способом (например с помощью WinSCP) создадим в папке /etc/apache2/sites-available/ файл с именем nextcloud-ssl.conf со следующим содержимым:
<IfModule mod_ssl.c>
<VirtualHost nc.mydomen.ml:443>
ServerAdmin admin@mydomen.ml
DocumentRoot /usr/share/nextcloud
TransferLog /var/log/apache2/nextcloud_access.log
ErrorLog /var/log/apache2/nextcloud_error.log
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/nc.mydomen.ml/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nc.mydomen.ml/privkey.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
Сохраняем файл и применяем настройки командами:
a2ensite nextcloud-ssl
service apache2 reload
service apache2 restart
Теперь можно перейти по адресу https://nc.mydomen.ml (вы используете своё имя домена) и убедится, что всё работает
Настроим жёсткое перенаправление с http на https. Тогда работа с нашим сайтом будет возможна только по https.
Откройте файл /etc/apache2/sites-available/nextcloud.conf и добавим две строчки с директивой Rewrite:
ServerName nc.mydomen.ml
<VirtualHost *:80>
ServerAdmin admin@mydomen.ml
ServerName nc.mydomen.ml
DocumentRoot /usr/share/nextcloud
RewriteEngine On
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<Directory "/usr/share/nextcloud/">
Options MultiViews FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
TransferLog /var/log/apache2/nextcloud_access.log
ErrorLog /var/log/apache2/nextcloud_error.log
Применим настройки
service apache2 reload
service apache2 restart
Попробуйте войти на сайт по http и убедитесь, что вас перенаправляет на https.
Канал защитили. Теперь оптимизируем производительность сервера за счёт кэширования.
С помощью WinSCP или иным способом откроем файл /etc/sysctl.conf и добавим в конце строчку:
vm.overcommit_memory = 1
Сохраним и закроем файл. Перезагрузим сервер, чтобы настройка применилась
reboot
Запустим и добавим в автозагрузку кэш-сервер Redis:
systemctl start redis-server
systemctl enable redis-server
Проверить, что Redis работает и слушает порт 6379 можно командой:
ps ax | grep redis
В WinSCP или иным способом откроем файл /usr/share/nginx/html/config/config.php. Смотрим на последнюю строчку, она выглядит так:
);
Перед ней добавим строчки
'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
Сохраним и закроем файл. Зайдите в свой Nextcloud, страницы должны корректно отображаться.
Сделаем еще одну настройку безопасности.
Включим модуль headers:
a2enmod headers
В файл /etc/apache2/sites-available/nextcloud-ssl.conf добавим между тегами <VirtualHost и </VirtualHost> в любое место строчку
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Сохраним и закроем файл.
Применим настройки:
service apache2 reload
service apache2 restart
Заходим в Nextcloud и проверяем, что всё работает.
Profit
Рекомендации
1. Не используйте созданную выше учётную запись администратора для постоянной работы. Зайдите в настройки пользователей, создайте группу(ы) для обычных пользователей, создайте пользователей с ограниченными правами, установите квоты.
2. Зайдите в приложения (см. скриншот выше) и добавьте функциональности вашему облачному хранилищу. Особенно обратите внимание на возможность зашифровать ваши данные и включить двухфакторную авторизацию.