Установка Nextcloud на Ubuntu 18.04
1. Скачиваем Nextcloud
2. Создаём базу данных для Nextcloud
3. Создаём конфигурационный файл nginx для Nextcloud.
4. Включение HTTPS
5. Установка php-модулей.
6. Финиш. Заключительные штрихи
ВНИМАНИЕ!!! Прежде чем ставить Nextcloud по этой инструкции, вначале установите LEMP-стек.
1. Скачиваем Nextcloud
Зайдите на сервер и загрузите на него архив Nextcloud. Последняя стабильная версия 15.0.4 на момент публикации перевода. Скачать её можно на https://nextcloud.com/install и выбрав кнопку «Download for server».
Можно wget’ом скачать его на сервер сразу же. Так и сделаем. Скачаем последнюю версию.
$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
Распакуем
$ sudo tar -xjf latest.tar.bz2 -C /usr/share/nginx/
Опция -C указывает путь, куда распакуется Nextcloud. Для его работы понадобится изменить владельца файлов.
$ sudo chown www-data. /usr/share/nginx/nextcloud/ -R
2. Создаём базу данных для Nextcloud
Логинимся на сервер MariaDB нижеследующей командой. С тех пор как MariaDB стала использовать плагин unix_socket для аутентификации, необходимость вводить root пароль отпала. Просто запустим оболочку под sudo.
$ sudo mariadb
Запуститься оболочка MySQL сервера MariaDB. Начнём процесс установки.
Создадим базу данных для Nextcloud
create database nextcloud;
Создадим пользователя, у которого будут права на эту базу и который будет ей управлять. Имя можно выбрать любое, главное запомнить его. Вместо your-password подставьте свой придуманный пароль.
create user nextclouduser@localhost identified by 'your-password';
Выдайте новому пользователю права на новую базу данных
grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'your-password';
Примените изменения
flush privileges;
exit;
3. Создаём конфигурационный файл nginx для Nextcloud.
Создайте файл nexcloud.conf в директории /etc/nginx/conf.d/
$ sudo nano /etc/nginx/conf.d/nextcloud.conf
Вставьте нижеследующий текст в новый файл. Жирным начертанием выделены строки на замену
---------------------------------------------------------------
server
{
#listen 80; #Включение http, закомментируйте строку ниже
listen 443 ssl http2;
server_name nextcloud.your-domain.com;
ssl_certificate /etc/nginx/cert/server.crt;
ssl_certificate_key /etc/nginx/cert/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH";
# 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;
#This header is already set in PHP, so it is commented out here.
#add_header X-Frame-Options "SAMEORIGIN";
# Path to the root of your installation
root /usr/share/nginx/nextcloud/;
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$uri;
}
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)(/.*)$;
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.2-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;
# 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;
}
}
---------------------------------------------------------------
4. Включение HTTPS
[…]Здесь в оригинале были шаги по включению https, но я считаю это темой отдельной статьи, так как там используется получение сертификатов через LetsEncrypt. Можете глянуть в оригинале. […]
Но если кратко, то рекомендую создать в папке nginx самоподписные сертификаты
$ sudo mkdir /etc/nginx/cert
$ cd /etc/nginx/cert
$ sudo openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -nodes -days 3650 -subj '/CN=localhost'
Не забудьте перезапустить nginx
$ sudo systemctl reload nginx
В конфиге выше, строчки для включения http закомментированы. Если кому-нибудь нужен обычный доступ к облаку по http, то закомментируйте строчку с 443 и с путями к сертификатам.
5. Установка php-модулей.
Выполните нижеприведённую команду, чтобы установить требуемые или рекомендованные модули php для Nextcloud.
$ sudo apt install php-imagick php7.2-common php7.2-gd php7.2-json php7.2-curl php7.2-zip php7.2-xml php7.2-mbstring php7.2-bz2 php7.2-intl
6. Финиш. Заключительные штрихи
Для большей безопасности поменяем папку с данными и не будем хранить их в корне веб-сервера.
Расположим их, например, в /usr/share/nginx/nextcloud-data, используя следующую команду
$ sudo mkdir /usr/share/nginx/nextcloud-data
Сделаем владельцем этого каталога пользователя www-data
$ sudo chown www-data. /usr/share/nginx/nextcloud-data -R
ВНИМАНИЕ!!! Если вы следовали советам статьи по установке LEMP, то удалите файл default.conf. Если его не удалить, то будет показываться окно приветственной страницы nginx.
$ sudo rm /etc/nginx/conf.d/default.conf
Можно ещё удалить файл default в /etc/nginx/sites-enabled/, если вы хотите заходить на nextcloud по http и сделали необходимые изменения в файле конфига.
$ sudo rm /etc/nginx/sites-enabled/default.conf
Теперь заходим на https://nextcloud_IP/ и видим окно установки. (Или заходим на http://nextcloud_ip/, если отключили в конфиге nginx https)
Вводим имя администратора, придумываем пароль. Ниже указываем путь до каталога данных Nextcloud, вписываем имя пользователя базы данных («nextclouduser»), пароль пользователя к базе данных (в данном случае это «your-password»), имя базы данных («nextcloud»).
В новых версиях Nextcloud снимаем галочку на «Установить рекомендуемые приложения». Их можно поставить позже, в том числе и OnlyOffice. Жмём кнопку «Завершить установку»