NextCloud
Установка своего облачного хранилища Nextcloud с web сервером NGINX на Ubuntu 22.04 для хранения данных
Nextcloud это open source программа, с помощью которой можно организовать собственное облачное хранилище. Это почти как Dropbox, Яндекс Диск или iCloud, но с возможностью контролировать место и условия хранения ваших файлов. Также можно в Nextcloud можно интегрировать различные офисные программы такие как callabora или onlyoffice. Есть свой встроенный мессенджер Talk и многое другое.
Для установки Nextcloud потребуется предустановленная операционная система linux
Для начало переводим пользователя в сессию под root-ом
user@nextcloud:~$ sudo -i
Добавим репозитории для PHP и NGINX “на момент написания статьи последняя версия php 8.3”
root@nextcloud:~# add-apt-repository ppa:ondrej/php
И обновим все пакеты
root@nextcloud:~# apt update && apt upgrade -y
Настроим синхронизацию времени соответствующую Вашему часовому поясу
root@nextcloud:~# apt install chrony -y
root@nextcloud:~# timedatectl set-timezone Europe/Moscow
root@nextcloud:~# systemctl enable chrony
Установим сервер базы данных
root@nextcloud:~# apt install mariadb-server -y
Далее запустим его и добавим в автозагрузку
root@nextcloud:~# systemctl start mariadb
root@nextcloud:~# systemctl enable mariadb
Задаем пароль для суперпользователя mysql:
root@nextcloud:~# mysqladmin -u root password
Подключаемся к MariaDB, создаем базу данных и пользователя:
root@nextcloud:~# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud@localhost IDENTIFIED BY 'password';
CREATE DATABASE nextcloud это название Вашей базы данных
IDENTIFIED BY ‘password‘ это Ваш пароль от базы данных, замените его на свой. В дальнейшей установке он Вам понадобится
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
Установка и настройка PHP
Для удобства дальнейшей настройки создадим переменную для PHP
root@nextcloud:~# export PHP_VER=8.3
Установим необходимые модули для PHP
root@nextcloud:~# apt install -y php${PHP_VER}-fpm php${PHP_VER}-common php${PHP_VER}-zip php${PHP_VER}-xml php${PHP_VER}-intl php${PHP_VER}-gd php${PHP_VER}-mysql php${PHP_VER}-mbstring php${PHP_VER}-curl php${PHP_VER}-imagick php${PHP_VER}-gmp php${PHP_VER}-bcmath libmagickcore-6.q16-6-extra
Настраиваем php-fpm
Откроем для редактирования файл www.conf
root@nextcloud:~# nano /etc/php/${PHP_VER}/fpm/pool.d/www.conf
Снимем комментарий со строки (Удалим перед строкой знак ;)
;env[PATH] = /usr/local/bin:/usr/bin:/bin
Настраиваем php.ini
Откроем для редактирования файл php.ini
root@nextcloud:~# nano /etc/php/${PHP_VER}/fpm/php.ini
И отредактируем следующие строчки и также уберем комментарии:
;opcache.enable_cli=1
;opcache.interned_strings_buffer=32
;opcache.revalidate_freq=1
Добавим в автозагрузку и перезапустим php-fpm
root@nextcloud:~# systemctl enable php${PHP_VER}-fpm
root@nextcloud:~# systemctl restart php${PHP_VER}-fpm
Установка и настройка веб-сервера NGINX
Установим сам веб-сервер NGINX:
root@nextcloud:~# apt install nginx -y
Настроим работу NGINX под Ваш домен
Создадим файл nextcloud.conf и отредактируем его
root@nextcloud:~# nano /etc/nginx/sites-enabled/nextcloud.conf
server {
listen 80;
listen 443 ssl;
server_name cloud.my-domain.com; # Ваш домен
if ($scheme = 'http') {
return 301 https://$host$request_uri;
}
ssl_certificate /etc/nginx/ssl/cert.pem; # Путь с сертификату
ssl_certificate_key /etc/nginx/ssl/cert.key; # Путь с сертификату
root /var/www/nextcloud;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location = /.well-known/webfinger { return 301 /index.php/.well-known/webfinger; }
location = /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
location ^~ /.well-known{ return 301 /index.php/$uri; }
try_files $uri $uri/ =404;
}
location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass unix:/run/php/php8.3-fpm.sock; # Версия php
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}
Создаем каталог для хранения сертификатов и переходим в него:
root@nextcloud:~# mkdir /etc/nginx/ssl
root@nextcloud:~# cd /etc/nginx/ssl
Сгенерируем само отписанный сертификат сразу на 4 года
Для упрощения создадим переменную для домена (заменим cloud.my-domain.com на свой домен)
root@nextcloud:~# DOMAIN=$cloud.my-domain.com
root@nextcloud:~# openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=$DOMAIN"
Проверим конфигурацию NGINX и перезапустим его
root@nextcloud:~# nginx -t
root@nextcloud:~# systemctl restart nginx
Если устанавливаете nextcloud на физической машине или на ветруалке которая находится у Вас дома, в офисе или в дата-центре и перед сервером стоит Ваш маршрутизатор, то для безопасности и упрощения в дальнейшем перевыпуски (бесплатного) ssl сертификата Let’s Encrypt рекомендую использовать прокси сервер (nginx proxy manager), чтобы машина не смотрела (🤭 известным местом 🤭) в интернет. Ну и конечно необходимо прокинуть порты 80 и 443 на nginx proxy manager.
Установка Nextcloud
Установим утилиту unzip
root@nextcloud:~# apt install unzip -y
Перейдем в директорию tmp и скачаем последнюю версию nextcloud
root@nextcloud:~# cd /tmp
root@nextcloud:~# wget https://download.nextcloud.com/server/releases/latest.zip
Распакуем и перенесем содержимое архива в директорию /var/www
root@nextcloud:~# unzip latest.zip
root@nextcloud:~# mv nextcloud /var/www
Задаем права доступа к директории /var/www/nextcloud для www-data
root@nextcloud:~# chown -R www-data:www-data /var/www/nextcloud