В этом руководстве будет показано, как установить NextCloud в Ubuntu с веб-сервером Nginx.
Что такое NextCloud?
NextCloud - это бесплатное автономное облачное хранилище с открытым исходным кодом. Функционально оно аналогично Яндекс Диску. Проприетарные облачные решения для хранения данных (Dropbox, Google Drive и т.д.) Удобны, но стоят дорого: их можно использовать для сбора личных данных, поскольку ваши файлы хранятся на их компьютерах. Если вы беспокоитесь о конфиденциальности, вы можете переключиться на NextCloud, который вы можете установить на свой частный домашний сервер или на виртуальный частный сервер (VPS). Вы можете загружать свои файлы на свой сервер через NextCloud, а затем синхронизировать эти файлы со своим настольным компьютером, ноутбуком или смартфоном. Таким образом, вы полностью контролируете свои данные.
Возможности NextCloud
- Бесплатно с открытым исходным кодом
- Сквозное шифрование, означающее, что файлы могут быть зашифрованы на клиентских устройствах перед загрузкой на сервер, поэтому, даже если кто-то украдет ваш сервер, он не сможет прочитать ваши файлы.
- Может быть интегрирован с онлайн-офисным пакетом (OnlyOffice), чтобы вы могли создавать и редактировать файлы doc, ppt, xls непосредственно из NextCloud.
- App Store и Google Play содержит сотни приложений для расширения функциональности (например, приложение "Календарь", приложение "Контакты", приложение для создания заметок, приложение для видеоконференций и т.д.).
- Клиент синхронизации доступен в Linux, macOS, Windows, iOS и Android.
Необходимые требования
NextCloud написан на языке программирования PHP. Чтобы следовать этому руководству, сначала вам нужно установить LEMP stack в Ubuntu. Если вы еще этого не сделали, пожалуйста, ознакомьтесь с руководством на моем канале.
Вы можете установить NextCloud на свой домашний сервер или VPS. Вам также понадобится доменное имя, чтобы позже вы могли включить HTTPS для шифрования HTTP-трафика. Я зарегистрировал свое доменное имя на https://2domains.ru/, потому что цена низкая и удобен в использовании. Nextcloud можно установить без доменного имени, но это действительно не имеет смысла, если вы не шифруете HTTP-соединение для предотвращения отслеживания. Я рекомендую купить доменное имя, если вы действительно хотите повозиться с серверным программным обеспечением и использовать его в полной мере.
Теперь давайте установим NextCloud.
Шаг 1: Загрузите NextCloud на Ubuntu.
Войдите на свой сервер Ubuntu. Затем загрузите zip-архив NextCloud на свой сервер. На момент написания этой статьи последней стабильной версией является # Version 30.0.0. Возможно, вам потребуется изменить номер версии. Перейдите на страницу https://nextcloud.com/install и нажмите download for server кнопку, чтобы просмотреть последнюю версию.
Вы можете запустить следующую команду, чтобы загрузить ее на свой сервер.
wget https://download.nextcloud.com/server/releases/nextcloud-30.0.0.zip
Вы всегда можете использовать указанный выше формат URL для загрузки NextCloud. Если выйдет новая версия, просто замените 30.0.0 новым номером версии.
После загрузки извлеките архив с помощью unzip.
sudo apt install unzip
sudo unzip nextcloud-30.0.0.zip -d /usr/share/nginx/
Параметр -d указывает целевой каталог. Веб-файлы NextCloud будут извлечены в /usr/share/nginx/nextcloud/. Затем нам нужно изменить владельца этого каталога на www-data, чтобы веб-сервер (Nginx) мог выполнять запись в этот каталог.
sudo chown www-data: www-data /usr/share/nginx/nextcloud/ -R
Шаг 2: Создайте базу данных и пользователя для Nextcloud на сервере баз данных MariaDB
Войдите на сервер базы данных MariaDB с помощью следующей команды. Поскольку MariaDB теперь использует unix_socket плагин для аутентификации входа пользователя, нет необходимости вводить пароль пользователя MariaDB root. Нам просто нужно префиксить mysql команду с sudo.
sudo mysql
Затем создайте базу данных для Nextcloud. В этом руководстве назовите базу данных nextcloud. Вы можете использовать любое имя, которое вам нравится.
create database nextcloud;
Создайте пользователя базы данных. Опять же, вы можете использовать свое предпочтительное имя для этого пользователя. Замените your-password своим предпочтительным паролем.
create user nextclouduser@localhost identified by 'your-password';
Предоставьте этому пользователю все привилегии в nextcloud базе данных.
grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';
Удалите привилегии и завершите работу.
flush privileges;
exit;
Шаг 3: Создайте конфигурационный файл Nginx для Nextcloud
Создайте nextcloud.conf файл в /etc/nginx/conf.d/ каталоге с помощью текстового редактора командной строки, такого как Nano.
sudo nano /etc/nginx/conf.d/nextcloud.conf
Скопируйте и вставьте следующий текст в файл. Замените nextcloud.example.com на свой предпочтительный поддомен. Не забудьте создать запись DNS A для этого поддомена в редакторе зон DNS.
server {
listen 80;
listen [::]:80;
server_name nextcloud.example.com;
# Add headers to serve security related headers
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
#I found this header is needed on Ubuntu, but not on Arch Linux.
add_header X-Frame-Options "SAMEORIGIN";
# Path to the root of your installation
root /usr/share/nginx/nextcloud/;
access_log /var/log/nginx/nextcloud.access;
error_log /var/log/nginx/nextcloud.error;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
# last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location ~ /.well-known/acme-challenge {
allow all;
}
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location / {
rewrite ^ /index.php;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
try_files $fastcgi_script_name =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}
Сохраните и закройте файл. (Чтобы сохранить файл в текстовом редакторе Nano, нажмите Ctrl+O, затем нажмите Enter для подтверждения. Чтобы выйти, нажмите Ctrl+X.)
Затем протестируйте конфигурацию Nginx.
sudo nginx -t
Если тест прошел успешно, перезагрузите Nginx, чтобы изменения вступили в силу.
sudo systemctl reload nginx
Шаг 4: Установите и включите модули PHP
Выполните следующие команды, чтобы установить модули PHP, необходимые или рекомендованные NextCloud.
sudo apt install imagemagick php-imagick php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp
Шаг 5: включите HTTPS
Теперь вы можете получить доступ к мастеру веб-установки Nextcloud в своем веб-браузере, введя доменное имя для вашей установки Nextcloud.
nextcloud.example.com
Если веб-страница не может загрузиться, вам, вероятно, нужно открыть порт 80 в брандмауэре.
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
И порта 443 также.
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
Перед вводом какой-либо конфиденциальной информации мы должны включить безопасное HTTPS-соединение в Nextcloud. Мы можем получить бесплатный сертификат TLS от Let's Encrypt. Установите клиент Let's Encrypt (certbot) из репозитория Ubuntu.
sudo apt install certbot python3-certbot-nginx
Python3-certbot-nginx это плагин Nginx. Затем выполните следующую команду, чтобы получить бесплатный TLS-сертификат с помощью плагина Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d nextcloud.example.com
Где:
- –nginx: Используйте средство аутентификации и установщик Nginx
- -agree-tos: Согласен с условиями предоставления услуг Let's Encrypt
- –redirect: Принудительно примените HTTPS, добавив 301 перенаправление.
- –hsts: Включите строгую транспортную безопасность HTTP. Это защищает от атаки с удалением SSL / TLS.
- –staple-ocsp: Включите сшивание OCSP.
- –email: Электронная почта, используемая для регистрации и контакта для восстановления.
- -d за флагом следует список доменных имен, разделенных запятой. Вы можете добавить до 100 доменных имен.
Вас спросят, хотите ли вы получать электронные письма от EFF (Electronic Frontier Foundation). После выбора Y или N ваш TLS-сертификат будет автоматически получен и настроен для вас, на что указывает сообщение ниже.
Я обнаружил, что Certbot, возможно, не сможет добавить заголовок HSTS в конфигурационный файл Nginx для Nextcloud. Если вы хотите включить HSTS (HTTP Strict Transport Security), отредактируйте файл.
sudo nano /etc/nginx/conf.d/nextcloud.conf
Затем мы можем добавить следующую строку в блок сервера SSL, чтобы включить заголовок HSTS. (Если он уже есть, значит, с вашей конфигурацией все в порядке.)
add_header Strict-Transport-Security "max-age=31536000" always;
Также вы можете включить протокол HTTP2, добавив опцию http2, которая ускорит загрузку веб-страницы.
listen 443 ssl http2; # managed by Certbot
Как показано ниже.
Сохраните и закройте файл. Затем введите настройки Nginx.
sudo nginx -t
Если тест прошел успешно, перезагрузите Nginx, чтобы изменения вступили в силу.
sudo systemctl reload nginx
Приведенная выше конфигурация получит оценку A+ в тесте SSL.
Шаг 6: Завершите установку в вашем веб-браузере
Теперь вы можете получить доступ к мастеру веб-установки Nextcloud, используя HTTPS-соединение.
https://nextcloud.example.com
Для завершения установки вам необходимо создать учетную запись администратора, ввести путь к папке данных Nextcloud, ввести сведения о базе данных, созданной вами на шаге 2. Вы можете использовать значение по умолчанию localhost в качестве адреса хоста, или вы можете ввести localhost:3306, поскольку MariaDB прослушивает порт 3306.
В папке с данными хранятся файлы пользователей. В целях безопасности лучше размещать каталог с данными за пределами каталога веб-корня Nextcloud. Таким образом, вместо того, чтобы хранить файлы пользователей в /usr/share/nginx/nextcloud/data/, мы можем изменить его на /usr/share/nginx/nextcloud-data. который можно создать с помощью следующей команды:
sudo mkdir /usr/share/nginx/nextcloud-data
Затем убедитесь, что пользователь Nginx (www-data) имеет права на запись в каталог данных.
sudo chown www-data:www-data /usr/share/nginx/nextcloud-data -R
Нажмите кнопку Finish Setup, и вы увидите веб-интерфейс Nextcloud. Поздравляем! Вы можете начать использовать его в качестве личного облачного хранилища.