Найти в Дзене
ARstudio

Установка NextCloud на Ubuntu c Nginx (LEMP Stack)

В этом руководстве будет показано, как установить NextCloud в Ubuntu с веб-сервером Nginx. NextCloud - это бесплатное автономное облачное хранилище с открытым исходным кодом. Функционально оно аналогично Яндекс Диску. Проприетарные облачные решения для хранения данных (Dropbox, Google Drive и т.д.) Удобны, но стоят дорого: их можно использовать для сбора личных данных, поскольку ваши файлы хранятся на их компьютерах. Если вы беспокоитесь о конфиденциальности, вы можете переключиться на NextCloud, который вы можете установить на свой частный домашний сервер или на виртуальный частный сервер (VPS). Вы можете загружать свои файлы на свой сервер через NextCloud, а затем синхронизировать эти файлы со своим настольным компьютером, ноутбуком или смартфоном. Таким образом, вы полностью контролируете свои данные. NextCloud написан на языке программирования PHP. Чтобы следовать этому руководству, сначала вам нужно установить LEMP stack в Ubuntu. Если вы еще этого не сделали, пожалуйста, ознакомь
Оглавление

В этом руководстве будет показано, как установить 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 кнопку, чтобы просмотреть последнюю версию.

https://nextcloud.com/install
https://nextcloud.com/install

Вы можете запустить следующую команду, чтобы загрузить ее на свой сервер.

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;

mysql
mysql

Шаг 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

Как показано ниже.

-5

Сохраните и закройте файл. Затем введите настройки Nginx.

sudo nginx -t

Если тест прошел успешно, перезагрузите Nginx, чтобы изменения вступили в силу.

sudo systemctl reload nginx

Приведенная выше конфигурация получит оценку A+ в тесте SSL.

-6

Шаг 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

-7

Нажмите кнопку Finish Setup, и вы увидите веб-интерфейс Nextcloud. Поздравляем! Вы можете начать использовать его в качестве личного облачного хранилища.

-8