Nextcloud
Файлообменный сервер для централизованного хранения персонального контента, в том числе документов и изображений. Весь его функционал реализован с открытым исходным кодом.
Подготовка системы
Выполним предварительную настройку, прежде чем начать развертывание Nextcloud.
Для начала логинимся из под root
su
Обновляем списки пакетов. Актуализируем списки пакетов в репозиториях:
apt update && apt -y upgrade
Устанавливаем утилиту chrony, оболочку Midnight Commander, SUDO для предоставления прав root для пользователя системы, WEB сервер Nginx, сервер баз данных MariaDB, клиента для SMB протокола для подключения к Windows ресурсов и брендмауэр UFW:
apt install -y chrony mc sudo nginx mariadb-server smbclient ufw ca-certificates apt-transport-https software-properties-common wget curl lsb-release
Дадим необходимые права для пользователя
/sbin/usermod -aG sudo username
Где вместо username надо вставить ваше имя пользователя
затем необходимо перелогиниться пользовательской учеткой
su username
Выставляем нужный часовой пояс:
sudo timedatectl set-timezone Europe/Moscow
Разрешаем запуск демона chrony:
sudo systemctl enable chrony
Настройка брандмауэра.
прежде чем запускать UFW неоходимо разрешить подключение по SSH (предполагается, что мы подключены через SSH), а так же все необходимые порты для дальнешего пользования Nextcloud
sudo ufw allow SSH
sudo ufw allow 'NGINX FULL'
sudo ufw allow 'DNS'
Активируем UFW
sudo ufw enable
Эта команда так же добавляет его в автозагрузку
Настройка сервера баз данных
Разрешаем автозапуск и стартуем сервис:
sudo systemctl enable --now mariadb
Задаем пароль для суперпользователя mysql:
sudo mysqladmin -u root password
Создаем базу данных и пользователя:
sudo mysql -e "CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"
sudo mysql -e "GRANT ALL PRIVILEGES ON nextcloud.* TO nextadmin@localhost IDENTIFIED BY 'P@$$W0RD';"
Установка и настройка PHP
Посмотреть, какая версия будет установлена из репозитория системы можно командой:
sudo apt search --names-only '^php[.0-9]{3}$'
Рекомендованная версия для испозования 8.1
Подготовим систему для установки PHP версии 8.1
curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
sudo apt update && sudo apt -y upgrade
sudo apt install -y libmagickcore-6.q16-6-extra redis-server memcached php8.1-{fpm,common,zip,xml,intl,gd,mysql,mbstring,curl,imagick,gmp,bcmath,redis,redis,memcached}
Настройка php-fpm
Установка php завершена и можно перейти к ее настройке.
sudo mcedit /etc/php/8.1/fpm/pool.d/www.conf
Снимаем комментарии со следующей строки:
env[PATH] = /usr/local/bin:/usr/bin:/bin
Настраиваем php.ini:
sudo mcedit /etc/php/8.1/fpm/php.ini
Раскоментируем и поправим следующие строки
memory_limit = 512
opcache.enable_cli=1
opcache.interned_strings_buffer=32
opcache.revalidate_freq=1
Разрешаем автозапуск php-fpm и запускаем его:
sudo systemctl enable --now php8.1-fpm
Установка NGINX
Устанавливаем веб-сервер:
sudo apt install -y nginx
Создаем виртуальный домен cloud.home.net и настраиваем его для работы с облачным сервисом:
sudo mcedit /etc/nginx/sites-enabled/nextcloud
Добавляем следующее содержимое:
server {
listen 80;
listen 443 ssl;
server_name cloud.home.net;
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.1-fpm.sock;
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires modified +30d;
access_log off;
}
}
sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/nextcloud
Создаём папку для SSL ключа и сертификата и переходим в неё
sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
Генерируем ключ и сертификат:
sudo openssl req -new -x509 -days 1461 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=MSK/L=DME/O=Flamandia/OU=IT Department/CN=cloud.home.net/CN=nextcloud"
В этом примере запущен nextcloud с использованием самоподписанного сертификата. Для продуктивной среды рекомендуется использовать нормальный сертификат или бесплатный от Let's Encrypt.
После установки php скорее всего установился и запустился apache, поэтому на всякий случай отключаем его:
sudo systemctl stop apache2
sudo systemctl disable apache2
Проверяем конфигурацию nginx и перезапускаем сервис:
sudo nginx -t
Если все succsess перезапускаем веб сервер
sudo nginx -s reload
Установка Nextcloud
Теперь загрузим последнюю версию.
cd ~
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
Распаковываем скачанный архив:
tar -xjvf latest.tar.bz2 -C /var/www
Задаем права доступа к каталогу с nextcloud:
sudo chown -R www-data:www-data /var/www/nextcloud
Открываем браузер и переходим по адресу https://cloud.home.net
Задаем логин и пароль для администратора. В качестве базы данных выбираем MySQL/MariaDB (если предлагается выбор) и вводим логин, пароля и имя базы nextcloud которые создали ранее.
Настройка Redis и Memcached
Открываем конфигурационный файл для nextcloud:
sudo mcedit /var/www/nextcloud/config/config.php
И добавим (перед поледней скобкой):
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
),
'memcache.local' => '\\OC\\Memcache\\Memcached',
'memcache.distributed' => '\\OC\\Memcache\\Memcached',
'memcached_servers' =>
array (
0 =>
array (
0 => 'localhost',
1 => 11211,
),
),
sudo systemctl enable --now memcached
Перезапускаем php-fpm:
sudo systemctl restart php8.1-fpm
Готово, пользуемся.